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

APC 技術ブログ

株式会社エーピーコミュニケーションズ 先進サービス開発部の公式ブログです。

株式会社 エーピーコミュニケーションズシステム基盤エンジニアリング事業部の公式ブログです。

【Zabbix】zabbix_senderコマンドで監視サーバへ指定した値を送信

1. 概要

Zabbixのコマンドラインユーティリティには「zabbix_sender」というコマンドがあります。

パッケージ「zabbix-sender」をインストールすることで利用可能です。(zabbixリポジトリからyum installで可。)

 

このコマンドでは「監視対象」から「監視サーバ」へ指定した値を送信することができます。

監視サーバ側では監視対象機器(ホスト設定)にアイテムのタイプが「Zabbixトラッパー」のアイテムを登録しておきます。

 

利用例としては、

 

スクリプトの行内にzabbix_senderコマンドを入れて、スクリプトの実行結果の成否をトラップ的に送信する、

・zabbix_senderコマンドで送る値の引数にコマンドの実行結果を入れて送信する

 

など、様々な用途で利用可能です。

 

メリット:

・実行後すぐに値を送信するため、異常等の検知が早い。トラッパーは待ち受けるのみなのでポーリングする負荷が掛らない。

・トラッパーのキーを分けることで、値を振り分けられる。

 デメリット:

・スペースを含む文字列や改行は送信できない。暗号化しないのでデータが丸見え。

 

2. 設定/コマンド例

Zabbixトラッパーの設定例

値に文字列を入れる場合はZabbixサーバのトラッパーアイテムの設定で値の形式が「文字列」になっている必要があります(下図参照)。

キーは、監視対象機器がデータを送信する先となります。

アプリケーションはデータ分析等の利便性を考えて任意の設定を行ってください。

f:id:apc-sieg:20140312144545j:plain

 

送信側のコマンドの形式

基本

 # /usr/bin/zabbix_sender -vv -z <zabbixサーバのIP/ホスト名> -s <登録されているホスト名> -k <トラッパーのキー> -o <送信する値>

 

色々なコマンドオプションがありますが、だいたいこれで十分でしょう。

コマンドオプション概要

Options:

  -z --zabbix-server <server>          Hostname or IP address of Zabbix Server

  -v --verbose                         Verbose mode, -vv for more details

  -s --host <hostname>                 Specify host name. Host IP address and DNS name will not work

  -k --key <key>                       Specify item key

  -o --value <key value>               Specify value

 

「-vv」は詳細なコマンド結果を標準出力します。

Zabbixサーバ側でトラッパーの待ち受けポートをデフォルトから変更している場合は「-p」オプションに続けてポート番号を指定します。

 

例えばローカルのZabbixサーバから、自身のトラッパー(キー名:test.trapper)に「test」という文字列を送る場合は、以下のようなコマンドになります。

 # /usr/bin/zabbix_sender -vv -z localhost -s "Zabbix server" -k "test.trapper" -o "test"

 

シェルスクリプトに仕込んで失敗時にfailedの文字列を送る場合

bash

 

~略~

# 直前のコマンドの終了ステータスを取得

if [ $? -ne 0 ]; then

# 成功以外の場合はZabbixへfailedの文字列を送信

    /usr/bin/zabbix_sender -vv -z localhost -s "Zabbix server" -k "test.trapper" -o "failed"

fi

 

exit

 

Zabbixサーバがfailed文字列を受信するだけでは、障害と判定されません。

failed文字列を検出したら障害とするトリガーを設定する必要があります。

下図のような設定(条件式)が参考になるかと思います。

# 下記の条件式では、発生した障害を自動的に「回復」と判断する条件がありません。

# 自動で障害を回復させる場合は、nodata()などの時間ベースの関数を使用し、一定時間の更新がなければ回復と判断する記述が必要となります。

f:id:apc-sieg:20140312144744j:plain

 

トリガーの試験のために上述のzabbix_senderコマンドを監視対象機で手動実行し、テストを行います。

 # /usr/bin/zabbix_sender -vv -z localhost -s "Zabbix server" -k "test.trapper" -o "failed"

 

トリガーがOnとなり、障害が発生していることが確認できます。

f:id:apc-sieg:20140312144805j:plain

 

その他さまざまな利用が可能です。