第5回 応用編 (3/3)

技術特集

1_zabbix5_tit

tit_zabbix
3)外部からの値投入

監視を行う値は、通常はZabbixサーバから接続してZabbixエージェントやSNMP対応機器から取得、もしくはZabbixエージェントからZabbixサーバに送信した値を利用するのが基本ですが、それとは別に他のプログラムや仕組みからZabbixサーバに値を送る方法があります。


そのためには、zabbix_senderというプログラムを利用します。


例えば、このプログラムを利用してバッチ処理などで処理の開始、正常終了、異常終了などをZabbixサーバに通知することができます。
そうすれば、バッチの異常終了を検知してメール通知を行うようなことができるようになるでしょう。

ログファイルのフォーマットや出力内容によっては、ログファイルを監視して正常異常を判断することもできますが、より直接的に状態の変化をZabbixに知らせることもできるわけです。


他にも、業務アプリケーションの指標値を定期的にZabbixサーバに通知することで、それらの情報をグラフ化してその指標値の変化を把握しやすくすることもできます。

具体例を示すとすると、時間単位での販売総額を1時間単位で集計しているようなシステムであった場合、その1時間当たりの販売総額をZabbixサーバに送ることで、時間ごとの販売総額の推移をグラフ化して見ることができるようになるため、何時頃に多く販売できているかという傾向を把握しやすくすることができます。


zabbix_senderは、以下のようなコマンドラインで実行します。

1
$ zabbix_sender -z ZabbixサーバのIP -s ホスト名 -k キーの値 -o アイテムの値

zabbix_senderを利用してZabbixサーバに値を送るためには、Zabbixサーバ側で事前に値を受け取るためのホストとアイテムを用意しておく必要があります。
アイテム作成時の注意点としては、タイプとして「Zabbixトラッパー」を選択しておくことが重要です。


アイテムに関しては、以下の図のようなアイテムとして登録しておくわけです。


zbx_sender_item



Zabbixサーバ側で受け取る準備ができたら、zabbix-senderパッケージをインストールしていなかった場合は、zabbix-senderパッケージをインストールします。


1
# yum install zabbix-sender

zabbix-senderパッケージをインストールして、zabbix_senderコマンドが利用できる状態になったならば、ホストの名前が「webshop1」、アイテムのキーが「sales.sum」、数値(この例では売上集計額と仮定)が300とすると以下のようなコマンドラインで実行することとなります。


実行例:

1
$ zabbix_sender -z 127.0.0.1 -s webshop1 -k sales.sum -o 300

以下の図はグラフの表示例ですが、時間毎に集計した売り上げの変化を表示するようなグラフのサンプルです。


zbx_sender_samplegraph


また、先の説明でも触れましたが、値の取得処理に30秒以上かかってしまうようなものである場合も、このzabbix_senderを利用して、処理を行った実行結果をZabbixサーバに通知することができます。


もちろん、このzabbix_senderで送り込む値に対しても、通常の値の取得と同様にトリガーを設定することができるので、その処理結果の値によって障害かどうかを判定させ、必要に応じてメールを送信したり、スクリプトを実行したりとアクションを実行させることもできます。



さらなる応用例として、zabbix_senderコマンドを利用して過去のデータをまとめて流し込むこともできます。


例えば、他のツールなどを利用していて取得してあった過去の履歴データに対して、それぞれの測定時のタイムスタンプを付与したテキストファイルを作成し、zabbix_senderコマンドを利用してまとめてZabbixサーバに送ることができます。


テキストファイルのフォーマットは、以下のようなフォーマットです。


1
2
3
<hostname> <key> <timestamp> <value>
<hostname> <key> <timestamp> <value>
.....

hostnameは、Zabbix上に登録したホストの名前、keyはアイテムのキー、timestampはunixtimeに変換したそのアイテムを取得した時刻、valueにはアイテムの値を指定します。


例えば、販売総額の推移が以下のような推移だったとします。


1
2
3
4
5
6
2014/11/21 08:00 900円
2014/11/21 09:00 2,900円
2014/11/21 10:00 1,400円
2014/11/21 11:00 1,100円
2014/11/21 12:00 4,500円
.....

ホストの名前は「webshop1」(表示名は「Webショップ」)で、値を保存するためのアイテムのキーは「sales.sum」であったとします。
そうすると、zabbix_senderに引き渡すファイルは、以下のようなファイルの内容となります。


1
2
3
4
5
6
webshop1 sales.sum 1416524400 900
webshop1 sales.sum 1416528000 2900
webshop1 sales.sum 1416531600 1400
webshop1 sales.sum 1416535200 1100
webshop1 sales.sum 1416538800 4500
.....

こういったフォーマットのファイルを生成後、zabbix_senderで送るわけですが、実際にzabbix_senderで送る前に、先ほどと同様に受け取るための設定をZabbixサーバ上に行っておきます。

ホストとして、ホスト名が「webshop1」というホストと、そのホストに関するアイテムとして名前が「時間毎売上集計額」、キーが「sales.sum」、タイプは「Zabbixトラッパー」、型が「数値(整数)」というように、ホストとアイテムを作成しておきます。


zabbix-senderパッケージをインストールして、zabbix_senderコマンドが利用できることを確認して、以下のような引数でzabbix_senderコマンドを実行します。


1
$ zabbix_sender -z ZabbixサーバのIP -i ファイル名 -T

ちゃんと受け取れたか、最新データを確認してみましょう。


「監視データ」->「最新データ」で、ホストとアイテムを絞り込んで、表示されない場合は、直近のデータが無いのだと思われますので、その場合は、フィルタの「ヒストリがないアイテムを表示」にチェックをしてフィルタリングするとアイテムが表示されると思います。


アイテムの右側の「グラフ」をクリックしてグラフを表示させてみてください。

グラフが表示されない場合は、スライドバーの上の日付をzabbix_senderで送ったデータを表示できるだけの期間に設定してみてください。

あとは、右上のプルダウンで「最新500個の値」を選択してみてください。


zbx_sender_samplevalue


実際に試していて気付いたのですが、Zabbixプロキシ経由で監視している場合、ZabbixサーバとZabbixプロキシの時計がずれていると、正しいタイムスタンプでZabbixサーバに送れませんのでご注意ください。