これから始めるZabbix Sender(1) サーバにデータを送るには?

これから始めるZabbix Sender(1) サーバにデータを送るには?

これから始めるZabbix Sender(1) サーバにデータを送るには? はてなブックマーク - これから始めるZabbix Sender(1) サーバにデータを送るには?


Zabbixで監視データを取得するには、Zabbixエージェントを使ってデータを取得する他に、Zabbix Senderというコマンドラインツールを使い、Zabbix サーバにデータを送る方法があります。ここでは簡単な説明と、Load AverageのデータをZabbix Senderを使って取得するための具体的な手順をご紹介します(という俺得記事です。触っていないと忘れるので…)。

■ Zabbix Senderとは?

Zabbix Senderは、コマンドライン・ツールです。ネットワークを通してリモートのZabbixサーバにデータを送信することができます。一般的にZabbixで値を監視するには、監視アイテムの種類を「Zabbix エージェント」にしますが、Zabbix Senderでは「Zabbix トラッパー」 ( Zabbix Trapper ) を指定することで、利用出来ます。値を取得するには、Zabbix エージェント同様にキー ( key ) を指定することができるため、トリガの設定やグラフの表示など、通常のアイテムと同様に利用することができます。

次の図はZabbix エージェントと Zabbix Sender の違いです。Zabbix エージェントは、Zabbix Server がデータをエージェントに問い合わせるに対し、Zabbix Sender はエージェントが無くても Zabbix サーバに対してデータを送れます。

zabbix-sender-and-agent

そのため、Zabbixエージェントを常駐することができない環境や、ファイアウォールやネットワークの構成上、外部からの通信を受け付けることができないサーバのデータをZabbixサーバに対して送るができます。この時、Zabbix サーバではポート 10051/TCP を使ってデータを受け取ります。ファイアウォールや iptables を使っている時は注意が必要です。

■ Zabbix Senderをセットアップするには?

セットアップするには主に2つの方法があります。1つはパッケージを使う方法であり、とても簡単です。CentOSでZabbix公式のYumレポジトリが有効な場合は、【 yum install zabbix-sender 】を実行すると、バイナリファイルが【 /usr/bin/zabbix_sender 】に設置されます。

もう1つは、ソースから構築する方法です。バイナリパッケージが提供されていない環境では、こちらの方法をつかいます。zabbix_sender のセットアップは非常に簡単です。ソースコードを取得したあとは、エージェントをmakeします。この過程でzabbix_sender が作られますので、それをコピーして使います。

$ wget http://downloads.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.4.2/zabbix-2.4.2.tar.gz
$ tar xvfz zabbix-2.4.2.tar.gz$ cd zabbix-2.4.2
# groupadd zabbix
# useradd -g zabbix zabbix
$ ./configure --enable-agent
$ make
# cp ./src/zabbix_sender/zabbix_sender /usr/bin/zabbix_sender

詳細は、インストール用のドキュメントをご覧ください。

■ Zabbix Senderを使ってLoad Averageを登録するには?

以降では、順を追ってZabbix Senderに対応したアイテムを作成し、データを取得する方法を見ていきます。

データを取得するためには、エージェントで監視するときと同様にアイテムを作成します。

1. 【 設定 】→【 ホスト 】→【 アイテムの作成 】をクリックします。
2. アイテムの設定画面では「Zabbix トラッパー」を選びます。その他の項目は以下の通りです。
zabbix-sender-step01

  • 名前: sender load average
  • タイプ: Zabbixトラッパー
  • キー: sender_load1 ※重複しない任意のもの
  • データ型: 数値(浮動小数)
  • 単位: 空白
  • アプリケーションの作成: sender ※任意

最後に【 保存 】ボタンを押します。

 

 

登録が成功すると、次のようにアイテムが作成され、Zabbixサーバー側の準備は整いました。

zabbix-sender-step02

次に、コマンド zabbix_sender を使って Zabbix サーバにデータを送る準備をします。

まず、コマンドラインで Load Average を取得するには、どのようにしたらよいでしょうか。uptime や top コマンドを使う方法もありますが、一番簡単なのは【 cat /proc/loadavg 】コマンドを実行する事です。

$ cat /proc/loadavg
0.90 0.92 0.71 2/200 8589

ここで必要なのは、左から3つの数です。これは、左から、過去1分間、5分間、15分間の実行キューまたはディスクI/O待ちです(詳細は man proc をご参照ください)。この数字を取得するには【 cut 】コマンドを使います。過去1分の Load Average だけを取得するには、次のようにします。

$ cat /proc/loadavg | cut -f1 -d' '
0.90

次に、zabbix_sender を使って Zabbix サーバにデータを送ります。zabbix_sender コマンドの主な引数は次の通りです。

  • -z … Zabbix サーバの IP アドレスまたはホスト名
  • -s … 監視ホスト名称
  • -k … キー名称
  • -o … 値

例えば、Zabbix サーバ「127.0.0.1」の、ホスト「zabbix_sender」の、キー「sender_load1」に対する値を「1.00」としたい場合は、コマンドライン上で次のように実行します。

$ zabbix_sender -z 127.0.0.1 -s zabbix_sender -k sender_load1 -o $load
info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.000067"
sent: 1; skipped: 0; total: 1

このように「processed: 1」と表示されれば、1つのプロセスが正常に送信されたことがわかります。もしここで、対象のホストやキーが存在しない場合は「failed: 1」と表示されます。このときのデバッグは、「-vv」オプションをつけて実行するか、Zabbix サーバ上の zabbix_server.log を参照する方法が手軽です。

正常にデータが送られたかどうかを確認するには、「監視データ」→【最新データ】を選びます。正常に送信されていれば、次のように値が反映されています。

zabbix-sender-step03

さて、実際には Load Average は都度変動しますので、次のようにして「/proc/loadavg」の値を整形したものをパイプし、その標準出力を zabbix_sender の【 -i – 】オプションを使い、データを渡します。【 -i – 】を使う時、標準出力は【- キー名 値】の書式になっている必要があります。

echo "- sender_load1 "`cut -f1 -d ' ' < /proc/loadavg` | zabbix_sender -z 127.0.0.1 -s "zabbix_sender" -vv -i -

あとは、これを cron で定期的にスクリプトとして実行させるようにします。

# touch /usr/local/bin/zabbix_sender_load.sh
# chmod 755 /usr/local/bin/zabbix_sender_load.sh
# vi /usr/local/bin/zabbix_sender_load.sh

ファイルの中身は、次のようにします。

#!/bin/sh
echo "- sender_load1 "`cut -f1 -d ' ' < /proc/loadavg` | zabbix_sender -z 127.0.0.1 -s "zabbix_sender" -vv -i -

そして、cron に登録します。「crontab -e」を実行し、次のように登録すると、毎分 Zabbix サーバにデータを送信します。この送信間隔は、任意のタイミングを指定できます。

* * * * * /usr/local/bin/zabbix_sender_load1.sh 1>/dev/null 2>/dev/null

あとは、cron で実行される度に、自動的にデータが送信されます。最新データからグラフを選択すると、毎分、データが更新されていることがわかります。

zabbix-sender-step04

これで1分間の Load Average は取得できました。あとは、「cut」の引数を変えることで、5分、15分の Load Average を zabbix_sender を使って送れるようになります。

#!/bin/sh
echo "- sender_load1 "`cut -f1 -d ' ' < /proc/loadavg` | zabbix_sender -z 127.0.0.1 -s "zabbix_sender" -vv -i -
echo "- sender_load5 "`cut -f2 -d ' ' < /proc/loadavg` | zabbix_sender -z 127.0.0.1 -s "zabbix_sender" -vv -i -
echo "- sender_load15 "`cut -f3 -d ' ' < /proc/loadavg` | zabbix_sender -z 127.0.0.1 -s "zabbix_sender" -vv -i -

あとは、Zabbix サーバ側でも5分・15分のアイテムを作成することで、毎分 Load Average が取得できるようになります。グラフを定義しておけば、次のようなグラフを zabbix_sender のデータだけで生成することができます。

zabbix-sender-step05

■ 監視継続性の考慮点

Zabbix エージェントは、エージェントが停止したり通信できない状況を把握する為、Zabbix エージェント自身を監視するテンプレートが提供されています。一方、Zabbix Senderの場合は、コマンドを使って能動的に Zabbix サーバへデータを送信するため、正常に送信されたかどうかを把握するためには工夫が必要です。

具体的には【 .nodata() 】を指定したトリガを指定しておくことがお勧めです。次の例は、3分間(3m)データの更新がなければエラーとみなす条件式です。環境やアイテム名によって、置き換えてお使いください。

{zabbix_sender:sender_load1.nodata(3m)}=1

以上のように、zabbix_sender を使ってデータを取得する方法を見てきました。例として Load Average を参照しましたが、ここでは任意のコマンドだったり、スクリプト無いの処理と組みあわせ使う事ができます。私は、この仕組みを使い、自宅ネットワーク内のNasneの容量やステータス監視をしています。実際には同一ネットワーク内のRaspberry Pi上で zabbix_sender を実行し、定期的にリモートの Zabbix サーバに送信しています。この方法を使えば、自宅のネットワークを安全に保つことができますし、Zabbix サーバさえ参照できれば、どこからでも Zabbix の状況が把握できます。このように、使い勝手が便利な Zabbix Sender を、皆さんも使い始めてはいかがでしょうか。

zabbix-sender-nasune-status

■ 参考