この記事は、エーピーコミュニケーションズ Advent Calendar 2020 と Zabbix Advent Calendar 2020 の10日目のエントリです。
収集済みデータの分析による障害検知とは
新たに利用できるトリガー関数は、蓄積した長期間の監視データを解析し、通常時とは異なる値を障害として検知することができます。
この「通常時とは異なる値の検知」がポイントだと考えています。単純な閾値ではないため、これまでのような、閾値を多めに見積もって対策がぎりぎりになることがなく、事前に対策が打てるよう閾値を低めに見積もって不要な通知を対応することもなく、検知項目の変化を適切な段階で検知できるのではと思います。
試したこと
Zabbix5.2のこの新機能で追加されたトリガー関数を試してみました。
新規追加のトリガー関数
- Trendavg : 期間のトレンド値の平均 ☆今回試すトリガー
- Trendcount : 期間のトレンド値のカウント
- Trenddelta : 期間の最小/最大トレンド値のデルタ
- Trendmax : 期間のトレンド値の最大値
- Trendmin : 期間のトレンド値の最小値
- Trendsum : 期間のトレンド値の合計
5 What's new in Zabbix 5.2.0 [Zabbix Documentation 5.2]
まずはZabbix5.2の構築から
公式と以下の記事を参考にしました。Firewallの穴あけを追加した程度で、エラーも出ずさくっと構築完了しました。
環境
- Zabbix 5.2
- RHEL 8.2
Zabbixの構築手順、インストールから初期設定まで。AWSのCentOS編(Windowsは非対応) - Site24x7
監視アイテムとトリガーの設定
対象のサーバを登録し、テンプレート「Linux by Zabbix agent」を適用します。
今回トリガーを設定するアイテムは、stressコマンドで瞬間的にCPUへ負荷をかけることが出来る「CPU utilization」としました。
- 監視アイテム「CPU utilization」
- トリガー「Abnormal CPU utilization on {HOST.HOST} 」
現在から1時間のトレンド平均と、1時間前から2時間前のトレンド平均を比較し、CPU utilizationが20%以上増加した場合、アラートを上げます。
トリガーの関数は「Trendavg 」です。
{test server:system.cpu.util.trendavg(1h,now/h)} - {test server:system.cpu.util.trendavg(1h,now/h-1h)} >= 20
なお、指定できる期間の最小単位は1時間です。
CPU utilizationのグラフとアラート検知結果
対象サーバ(test server)のCPUに負荷をかけた結果、アラートを検知しました。
- CPU utilizationのグラフ
- アラート検知
その他
今回はすぐ確認できるよう1時間前のデータと比較しましたが、例えば、トラフィックデータを1年前の同じ月と比較といった長期的な視点の使い方が向いていそうです。
(トラフィック量は月によって変わり、長期休みの間は他の月より増えるため監視の指標が流動的だと効率的に運用できます。ただしコロナ禍前の記憶です。)
例: 現在の時刻を13:00とした場合
- trenddelta(1h、now / h)→現在の時間のデルタ(12:00-13:00)
- trenddelta(1h、now / h-1h)→前の時間のデルタ(11:00-12:00)
- trenddelta(1h、now / h-2h)→2時間前のデルタ(10:00-11:00)
- trenddelta(1M、now / M-1y)→1年前の同じ月のデルタ
別件ですが、Zabbixカンファレンス2020にて、Zabbix5.4でデータの機械学習のテスト版を載せ、Zabbix6.0で定着させたいとのことでした。
データを取得しているのに現在と過去だけ見るなんて勿体ないと思ってましたので、期待しています!