読者です 読者をやめる 読者になる 読者になる

Zabbixでメトリクス監視する

突然のトラヒックの上昇や、突然のディスク使用率の上昇を検知できないかなーと思って
Zabbixでそれとなくできたので、手順を載せておきます。



例えば

10分前のディスク使用率 = 40%
5分前のディスク使用率 = 60%
現在のディスク使用率 = 80%

こんなディスク使用率の増加が起こった場合はいい感じでヤバそうですね。
私の場合は、いつ隣りのfujiw*raさんからイスがとんできてもおかしくない状態です。
由々しき自体ですね。。

このような場合に、ディスク使用率の情報に対して、時間軸での観測点を設け、
その観測点間の増加率に対し、閾値を設定し、アラートを発砲させるようにする。

そうです。メトリクスを利用して監視を行うことで
自体が急変した際に迅速に対応が行えるようになります。

夜中にディスク使用率が100%になってデータが書き込めないからどうにかしろという電話がかかってきたり。
朝、元気に出社すると同時にトラヒックが昨日の夜中から3倍になっている。ログはないが原因を調査しろ。

のような、一瞬ファンタジーな物語かと思ってしまうのですが

始末書のことを考えつつ、時間的余裕は一切ない精神的に追い詰められた状態からのゲームスタート

という状態を避けられる可能性が出てきます。
これは素晴らしいことですよね。


それでは、Zabbixの具体的な設定内容を見ていきたいと思います。


ホストのみで設定する場合


[設定] -> 対象のホストの[トリガー]を選択

テンプレート自体に埋め込む場合


[設定] -> [テンプレート] -> 対象のテンプレートの[トリガー]を選択

トリガーの作成

[トリガーの作成]ボタンをクリック

[条件式]に、メトリクス対象と、計算式を入れます。

例えば


[exp.1]
===============================================================
サーバ | Zabbix server
データ | ディスク使用率
アラート条件 | 5分前の使用率より現在の使用率の差が10%以上の場合
===============================================================

という条件である場合


" ( {Zabbix server:vfs.fs.size[/,pused].last(0)} - {Zabbix server:vfs.fs.size[/,pused].last(0,300)} ) > 9 "

という計算式になります。
lastの引数はトリガーのドキュメントを要参照です。

http://www.zabbix.com/documentation/jp/1.8/manual/config/triggers

計算式としてはとても簡単で


" (現在のディスク使用率 - 5分前のディスク使用率) の値が 9 より大きい(10以上) 値の場合 "

というように記述すればZabbix先輩は認識してくれます。

この場合の観測点は2つで、 "現在""5分前" となります。

この観測点は条件式を追加することで増やすことが可能です。
ちょっと長くなるのでサーバ名とアイテムを変えちゃいます。


" ( ( {SERVER_NAME:ITEM.last(0)} - {{SERVER_NAME:ITEM.last(0,300)} ) > 9 )
&
( ( {{SERVER_NAME:ITEM.last(300)} - {{SERVER_NAME:ITEM.last(0,600)} ) > 9 ) "

計算式としては


" ( 現在のディスク使用率 - 5分前のディスク使用率 ) の値が 9 より大きい(10以上) 値であり、かつ
(5分前のディスク使用率 - 10分前のディスク使用率) の値が 9 より大きい(10以上) である場合 "

となります。括弧をくくる場所が間違えやすいので注意してください。


( ( A - B ) > 9 ) & ( ( B - C ) > 9 )

というように、演算子に対応する値をくくれば大丈夫です。


( ( A - B ) > 9 ) & ( ( B - C ) > 9 ) & ( ( C - D ) > 9 )

このように、無尽蔵に条件を追加することが可能になります。
今回の条件式(exp.1)をサンプルに確認してみましょう。


( ( A - B ) > 9 ) & ( ( B - C ) > 9 )

と記述することで、観測点A、B、Cを設けて、それぞれの差分を取得することで
より精度の高い閾値を設定することが可能になります。

よく使う例として、もうひとつみてみたいと思います。

[exp.2]
==========================================================================
サーバ | Zabbix server
データ | ネットワークトラヒック
アラート条件 | 10分前のトラヒック量と現在のトラヒック量の差が20%以上の場合
==========================================================================

上記の場合の条件式はどうなるでしょうか。


" ( {Zabbix server:net.if.in[eth0,bytes].last(0)} / {Zabbix server:net.if.in[eth0,bytes].last(0,600)} ) > 1.1 "

こんな感じでしょうか。

" (現在のトラヒック量 / 10分前のトラヒック量) の値が 1.1 より大きい(1.2以上) 値の場合 "

となりますね。

というように算数が弱い私でも設定が可能なので
みなさん色々とお試し頂ければと思います。

また、ZabbixではWEB UI上で条件式をテストできるようになっています。
トリガーの画面で、" 条件式 (入力方式の切替)" の "入力方式の切替" を選択後、


[テスト]ボタンが現れます。

メトリクスの値にテストパターンを入力することで、
条件式が意図した動きを行なってくれるか確認することができます。


ディスク使用率が下がっている場合には反応しない。
# こんな減り方はこんな減り方でヤバいですけどね。。


これは意図した通りTRUEとなって障害として認識します。


このように、Zabbixでは
突然のディスク使用率の上昇や、トラヒック量の突然の上昇、
プロセス数の突然の上昇、減少など、
色々と実利に沿った内容の設定ができるのではないでしょうか。

少しでも捗るお役に立てれば幸いです。