Zabbix Senderで複数の値を一括登録
Zabbixの非常に役に立つ機能として、
Zabbix Senderというものがあります。
これは、Zabbix Serverから定期的にポーリング監視するのではなく、
監視される側から値をZabbix Serverに対して送りつけることができる機能です。
Zabbix SenderはZabbix Agentをインストールことで合わせてインストールされます。
rpmパッケージでzabbix agentをインストールした場合には、/usr/bin/zabbix_senderというパスでzabbix_senderがインストールされます。
基本的な使い方
基本的な使い方としては以下のようになります。
$ zabbix_sender -z "zabbix serverホスト名orIP" -p "zabbix serverポート番号" -s "ホスト名" -k "キー名" -o "値"
例えば、10.1.1.1の10051ポートで稼働しているZabbix Serverに登録されている「test-server」というホストの「test.item」というキーのアイテムにデータを登録したい場合、以下のようにします。
$ zabbix_sender -z 10.1.1.1 -p 10051 -s test-server -k test.item -o 100
これで100という結果がtest.itemに登録されます。
監視対象機器の内部で何かしら処理させて取得できた結果を送りつけるのに非常に便利に利用できます。
注意点
この時、Zabbix Serverのtest.itemに登録されたデータの「時刻」はzabbix_senderが実行された時の現在時刻が登録されるようになっています。
そのため、例えば、過去の時点での監視結果を登録したい場合などに困ることになります。
具体的な例として、AWSのCloudWatchの結果をZabbixに連携したい場合を考えてみます。
AWSのCloudWatchの結果をAPIで取得してきた場合、以下のような値が取得できます。
詳しくはこちらより(http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)
- Average
- Maximum
- Minimum
- SampleCount
- Sum
- Timestamp
- Unit
これらの値が時間毎に配列として返ってきます。
「最新の値だけをZabbix Senderで送付する」という形でももちろんいいのですが、
実際のCloudWatchでの監視時刻とZabbixに登録された時刻が変わってしまいます。
CloudWatch APIで取得してきた結果の中に「Timestamp」があるので、
その時刻に合わせた形でZabbixにも登録したいと思います。
その時に役立つのが、zabbix_senderの-Tオプションです。
複数の値を正しい時刻で一括登録する
"-T"オプションを使って登録してみます。
"-T"オプションを使う場合には、登録したい内容をあらかじめファイルに記述しておいて読み込むか、標準入力から読み込む必要があります。
まずはファイルから読み込む場合の方法です。
ファイルの記述方法はこんな感じ
hostname key timestamp value hostname key timestamp value ・・・以下、この繰返し
スペース区切りで1行に1データの情報を記述するといった感じです。
具体的にはこんな感じ
/tmp/sender_data.txt
test-server test.item 1340336274 aaa test-server test.item 1340336214 bbb test-server test.item 1340336154 ccc
timestampはunixtimeの形式で記述する必要があります。
そのため、例えば先に紹介したCloudWatchのAPI取得結果を登録したい場合には、
APIから取得できたTimestampをunixtimeに変換するといった処理が必要になります。
(Rubyで処理させる場合はTime.parseとか.to_iとか使えば簡単に変換可能です。)
zabbix_senderコマンドの実行形式は以下のようにします
$ zabbix_sender -z 10.1.1.1 -p 10051 -T -i /tmp/sender_data.txt
すると一回のzabbix_sender実行でsender_data.txtに記載した3件のデータを一括登録できます。
"-T"オプションを付けた場合は、zabbix_senderの引数として-sや-kをつけても無視され、ファイル内に記載したホスト名、キー名に対して登録処理がされます。
ファイル書き出しをしたくない場合は、以下のようにechoとかで標準出力した結果を入力とすることで、
同じ処理を行うことが可能です。
$ echo -n -e "test-server test.item 1340336274 aaa\ntest-server test.item 1340336214 bbb\ntest-server test.item 1340336154 ccc" | zabbix_sender -z 10.1.1.1 -p 10051 -T -i -
この機能をうまく使うことでZabbix Sender処理頻度を少なくでき、
監視負荷を抑えることができます。
ぜひ、活用してみてはいかがでしょうか。