【連載Zabbix】パーセンタイル関数で異常値検知 【Zabbix Advent Calendar 2016】

記事タイトルとURLをコピーする

Zabbix Advent Calendar 2016の12/3の記事です。
カスタマーサポート課の伊藤です。
サーバーワークスZabbixスペシャリスト 九龍としてZabbix 3.0、3.2の新機能を活用した監視手法をご紹介していきます。
これまで、3つの機能の具体的な設定方法、利用方法をご紹介をしてきました。
予測機能による対応期間ベースのディスク監視 
Zabbixコンポーネントの暗号化
マクロコンテキスト機能でディスク別閾値を設定
今回は閾値監視ではなく、パーセンタイル関数による異常値検知についてご紹介します。

パーセンタイル値とは

Zabbixのpercentile関数はパーセンタイル値を返す関数です。
パーセンタイル値とは、発育医療や統計学の領域で使われる考え方であり、データの個数に着目し、パーセント順位の値を表す数値となります。

たとえば50パーセンタイル値は評価対象を小さい順に並び替えた際に50%番目の値を意味します。
別の言葉で言えば、中央値となります。

平均値や最大値を元にした評価では特異な外れ値が出た場合に大きく偏った数値になってしまう場合がありますが、パーセンタイル値を利用することで外れ値に左右されない、測定値全体の傾向に沿った評価が可能になります。

Zabbxiとパーセンタイル値

Zabbixではこれまでもパーセンタイル値を見ることは可能でした。
その方法はグラフです。
Zabbix 2.0 以降であれば、これまでもグラフ設定の画面でパーセンタイルラインとして、パーセンタイル値をグラフに表示することは可能でした。 

Zabbix 3.0 からはこのパーセンタイルを関数として扱う事が出来るようになったため、
グラフ表示だけではなく、パーセンタイル値を元にしたトリガー作成や閾値設定が可能となりました。
2016-12-01_16h04_41chart2

パーセンタイル値の判定

 パーセンタイル関数を使った簡単なトリガーはパーセンタイル値に対して閾値を設定する方法です。
この方法はこれまで平均値に対して行っていたトリガーと同じように設定ができます。2016-12-01_16h16_28

{Windows2012:net.if.in[AWS PV Network Device #0].percentile(3600,,50)}>300K

 パーセンタイル関数を使うことで、平均値だけではなく、中央値や第一四分位数、第三四分位数に対する評価が出来るようになることを意味します。

パーセンタイル値を閾値にする

パーセンタイル値そのものを評価するのではなく、パーセンタイル値を閾値にすることで、これまでグラフに表示するだけだったパーセンタイルラインをそのまま閾値とすることができます。
これにより、図のような特異値の発生をアラート検知することが可能になります。chart2-1
この場合は、トリガーの閾値にパーセンタイル関数を設定します。
条件式ビルダーでは作れませんので、次のように条件式欄に手動で入力します。
{Windows2012:net.if.in[AWS PV Network Device #0].last()}>{Windows2012:net.if.in[AWS PV Network Device #0].percentile(3600,,95)}

この条件式の例では、過去1時間のデータをもとに95パーセンタイル値を算出し、この値を超える値になった場合にアラートが発生します。
特異値判定のためには、過去何時間分のデータをもとにパーセンタイルを判定するか、チューニングが重要です。

まとめ

Zabbix 3.0 では予測関数やパーセンタイル関数が加わったことにより、単純に一定の値を超えたという閾値判定だけではなく、外れ値判定や障害対応時間をもとにした障害通知などが可能になりました。
今回紹介したパーセンタイル関数を閾値に利用することにより、これまでエンジニアの経験と勘をもとにざっくりと決めていた閾値を傾向をもとに動的な判定を行う監視にすることができます。

次回もZabbix Advent Calendar 2016連動企画として、Zabbix3.0 3.2 の初期構築手順についてご案内します。
お楽しみに!