前回上記のような記事を書きましたが、Zabbixでいつもお世話になっている、自宅ラック勉強会の@qryuu さんから、以下の様なアドバイスが。
@kometchtech じゃぁSystem.runで作ったらexportしてお送りしますよ。 自宅ラックZabbixのアカウント払い出しでも良いですけど
— 九龍真乙 (@qryuu) June 21, 2013
system.run とは
system.runってなんだろうと思って調べてみたところ、ホスト上で引数指定されたコマンドを実行する、というものだったんですね。知りませんでした。
今回のように、短いワンライナーで書けるようなコマンドであれば、こちらの方がzabbix_agent.d
配下にファイルを個別に用意しなくてもよい、コマンドのタイムアウトを心配する必要がない、などメリットが大きいと思います。
また、今回の場合は「Zabbixエージェント(アクティブ)」を指定する関係上、何か変化があればエージェント側から通知を出してくるので、いち早く変化に気が付きやすいというメリットも有ると思います。
ただし、上記を使用するには以下のように設定を変更する必要があります。
設定について
1. エージェント側のzabbix_agentd.conf
の以下の部分を変更し、system.run
コマンドが使用できるようにする。
-EnableRemoteCommands=0
+EnableRemoteCommands=1
2. zabbixエージェントサービスの再起動を実施する。
/etc/init.d/zabbix-agent restart
Shutting down Zabbix agent: [ OK ]
Starting Zabbix agent: [ OK ]
3. 以下の様な感じでアイテムを登録していく。
キー:
system.run[ntpq -p|grep * |awk '{print$9}']
こうすれば以前は個別にファイルを呼び出していたのが解消され、手順が大分簡略化されると思います。ただし、これもホスト上でZabbixユーザが実行できることが前提なので、必要に応じてグループなどに追加する必要はあると思います。
なお、copyright by 自宅ラック勉強会(@qryuu)で、更に私が改変許可を頂いたテンプレートを以下に置いておきます。快く承諾してくださった@qryuu さんには感謝いたします。
zbx_export_templates_NTP_20130622202633.xml
テンプレートを適用すると以下の様なグラフが生成できるようになると思います。また今回のテンプレートにはプロセス監視も入っているので、有効活用していただければと思います。
あと以下の様なところにも注意してください(自分は引っかかりましたので)。
@kometchtech コマンドを実行する際にタイムアウトに引っかからないように、Agent(アクティブ)型のアイテムにしてますから、hostnameitem使ってるなら、OSのhostnameとZabbixに登録したホスト名が一致してないとだめですよ?
— 九龍真乙 (@qryuu) June 21, 2013
追記:2013-06-23 12:10
先ほど、くりゅー御大より、さらなるツッコミが。
@kometchtech えぇと、system.runでもコマンドのタイムアウトはuserparameterの場合と変わりませんよ。 タイムアウトを気にしなくて良いというのは、ポーリング型のアイテムに比べてアクティブ型のアイテムの方が気にしなくて良いという意味です。
— 九龍真乙 (@qryuu) June 23, 2013
というわけでタイムアウトに関しては、コマンドを実行する以上気にする必要があるようです。
@kometchtech パッシブ型の場合Serverに聞かれてからコマンドを実行するのでコマンド実行時間+送受信がサーバ側のタイムアウトに収まる必要がありますが。 #Zabbix
— 九龍真乙 (@qryuu) June 23, 2013
@kometchtech アクティブ型の場合は、Agentが指定された周期で実行した結果をServerに送りつけるだけなので、コマンド実行時間がAgentのタイムアウトに収まればよく、Server側のタイムアウトは基本的に関係無いです。 #Zabbix
— 九龍真乙 (@qryuu) June 23, 2013
@kometchtech パッシブ型は送受信+コマンド実行がServerのタイムアウトに、コマンド実行はAgentのタイムアウトにそれぞれ収まらないといけないので、両方のタイムアウト設定に影響されます。 #Zabbix
— 九龍真乙 (@qryuu) June 23, 2013