Zabbixエージェントの拡張

このセクションでは、ユーザーパラメータを使用してZabbixエージェントの機能を拡張する手順を説明します。

以下の例では、MySQLサーバーによって実行されたステートメント数を取得します。 この手順は、ZabbixエージェントとZabbixエージェント2の両方に適用されます。

この例では、ユーザーパラメータの動作を説明します。 本番環境でMySQLを監視する場合は、ユーザーパラメータを必要としない、あらかじめ定義されたMySQLテンプレートの使用を検討してください。

手順 1: MySQL へのアクセスを準備する

エージェントは、オペレーティングシステムの zabbix ユーザーとして実行されます。 MySQL の root アカウントは使用しないでください。ソケットベースの認証が使用される場合があり、エージェントが接続できなくなる可能性があります。 代わりに、専用の MySQL ユーザーを作成します。

CREATE USER 'zbx_monitor'@'localhost' IDENTIFIED BY '<password>';

認証情報は、zabbix ユーザーだけが読み取れるファイルに保存します。たとえば、/etc/zabbix/mysql_monitor.cnf です(パスはオペレーティングシステムと Zabbix のインストール方法によって異なります)。

[client]
user=zbx_monitor
password=<strong password>

ファイルの所有者と権限を設定します。

sudo chown zabbix:zabbix /etc/zabbix/mysql_monitor.cnf
sudo chmod 600 /etc/zabbix/mysql_monitor.cnf

~/.my.cnf に依存せず、--defaults-extra-file を使用してこのファイルを明示的に指定してください。このオプションは、MySQL クライアントに渡す最初のオプションでなければなりません。これは、デーモンの HOME 環境変数が設定されていないか、想定とは異なる値になっている可能性があるためです。 MySQL がデフォルト以外のソケットパスを使用している場合は、同じファイルに socket= 行を追加します。

手順 2: コマンドを記述する

必要なパラメータを取得するカスタムスクリプトまたはコマンドを記述し、エージェントデーモンと同じ条件で動作することを確認します。

次のコマンドは、MySQL サーバーが実行したステートメント数を返します。

/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e "SHOW GLOBAL STATUS LIKE 'Questions'" | /usr/bin/awk '{print $2}'

zabbix ユーザーとしてコマンドをテストできます。単一の数値が出力されるはずです。

sudo -u zabbix sh -c "/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e \"SHOW GLOBAL STATUS LIKE 'Questions'\" | /usr/bin/awk '{print \$2}'"

手順 3: Zabbix エージェントの設定にコマンドを追加する

メインのエージェント設定ファイル(zabbix_agentd.conf または zabbix_agent2.conf)を編集する代わりに、Includeパラメータで指定されたディレクトリに個別のファイルを作成します。 個別のファイルを使用すると管理が容易になり、パッケージのアップグレードによる影響も受けにくくなります。

例えば、次の内容で /etc/zabbix/zabbix_agentd.d/mysql.conf(Zabbix エージェント 2 の場合は /etc/zabbix/zabbix_agent2.d/mysql.conf)を作成します。

UserParameter=mysql.questions,/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e "SHOW GLOBAL STATUS LIKE 'Questions'" | /usr/bin/awk '{print $2}'

mysql.questions は一意のアイテムキーです。 エージェント設定内で一意である必要があります。

-tフラグを付けて Zabbix エージェントを実行すると、パラメータをテストできます。 テストは zabbix ユーザーとして実行し、設定ファイルがデフォルトの場所にない場合は、そのファイルを指定します。

Zabbix エージェントの場合:

sudo -u zabbix zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t mysql.questions

Zabbix エージェント 2 の場合:

sudo -u zabbix zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf -t mysql.questions

期待される出力には、次の例のように数値が含まれます。

mysql.questions                               [t|4567]

ステップ 4: ユーザーパラメータを再読み込みしてテストする

次のコマンドを実行して、設定ファイルからユーザーパラメータを再読み込みします。

Zabbix エージェントの場合:

sudo zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -R userparameter_reload

Zabbix エージェント 2 の場合:

sudo zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf -R userparameter_reload

コマンドは root またはエージェントを実行しているオペレーティングシステムユーザーとして実行します。

または、エージェントを再起動して設定の変更を適用します。

実行中のエージェントに対して、zabbix_get ユーティリティを使用してパラメータをテストできます。たとえば、Zabbix サーバーから次のコマンドを実行します。

zabbix_get -s <IP address> -k mysql.questions

ここで、<IP address> は、zabbix_get が接続するエージェントを実行しているホストの IP アドレスです。 zabbix_get を実行しているホストの IP アドレスは、エージェントの Server パラメータに記載されている必要があります。

このテストを機能させるには、エージェントがパッシブチェックを受け入れる必要があります(Zabbix エージェントの場合、StartAgents を 0 に設定しないでください)。 エージェントがアクティブチェック専用に設定されている場合は、このテストをスキップし、最後のステップの完了後に監視 > 最新データでアイテムを確認します。

手順 5: アイテムを作成する

監視対象のホストに、mysql.questions アイテムキーを使用して新しいアイテムを作成します。

アイテムのタイプとして、Zabbix エージェントまたはZabbix エージェント(アクティブ)のいずれかを選択します。

Zabbix エージェント(パッシブ)の場合、Zabbix サーバーまたはプロキシのアドレスをエージェントの Server パラメータに指定する必要があります。 Zabbix エージェント(アクティブ)の場合、ServerActive パラメータに Zabbix サーバーまたはプロキシを指定し、エージェントの Hostname パラメータが Webインターフェースで設定されたホスト名と完全に一致している必要があります。

アイテムのデータ型を選択します。 エージェントは常に値をテキストとして返します。データ型は、前処理の実行後に Zabbix が値をどのように解釈して保存するかを定義します。

未加工の累積カウンターには、数値(整数)を選択します。 1秒あたりのステートメント数を測定するには、数値(浮動小数)を選択し、1秒あたりの変化量の前処理ステップを追加します。