ksaitoの日記

日々試したことの覚え書き

zabbixのリモートコマンドで運用を自動化する

障害が発生したら、原因を調べて対応します。
対応が終わったら、再発したときに分かるようにzabbixに監視アイテムを登録します。
可能であれば、対応したことをアクションのリモートコマンドに仕込むと良いでしょう。
Windowsサーバにリモートコマンドを仕込むのには、ちょっと癖があるようです。
Cドライブの空き容量が少なくなったときに一時ファイルを削除するように設定しました。

リモートコマンドを使えるようにする設定

以下の二つのパラメータ設定をしてZabbix Agentを再起動します。

C:\bin\zabbix>find "Remote" zabbix_agentd.conf

---------- ZABBIX_AGENTD.CONF
EnableRemoteCommands=1
LogRemoteCommands=1

C:\bin\zabbix>net stop "Zabbix Agent"
Zabbix Agent サービスは正常に停止されました。

C:\bin\zabbix>net start "Zabbix Agent"
Zabbix Agent サービスは正常に開始されました。

C:\bin\zabbix>

Windows環境でのリモートコマンドの制約

引数に"\"が使えない

Windows環境のzabbix_agentd.exeでは、コマンドのフルパスに"\"を使うことができますが、引数に"\"を使うと、なぜか正しく扱うことができません。
試しに引数に"\"を含むコマンドを実行するように設定します。

zabbix_agentd.exeのログを見てみると"\"が半角のツと中点の文字化けしてしまっています。(実際に正しく動作しませんでした。)

C:\bin\zabbix>type zabbix_agentd.log
  3108:20110507:152103.703 Starting Zabbix Agent. Zabbix 1.8.5 (revision 19047).

   468:20110507:152103.718 agent #0 started [collector]
   892:20110507:152103.718 agent #1 started [listener]
  2472:20110507:152103.718 agent #2 started [listener]
  3648:20110507:152103.718 agent #3 started [listener]
  3492:20110507:152103.718 agent #4 started [active checks]
  3648:20110507:152543.812 Executing command 'dir c:ツ・tmp'

C:\bin\zabbix>

引数にパスを指定する場合、すべてバッチファイルにします。

C:\bin\zabbix>type \bin\zabbix\rcmd\tmpdel.bat
echo off

del /q c:\tmp\*.*
C:\bin\zabbix>

バッチファイルをフルパス指定する場合には、問題なく動作します。

使えるコマンドが少ない

linuxでは普通に使えるawksedが使えません。
例えば、不要ファイルを削除しても空き容量が不足している場合、duコマンドでディスクを消費しているディレクトリの一覧を作成してメールすれば、早く対応できるのですがduコマンドのようなものはありません。
Windows版のduコマンドをSysinternalsあたりから探してきましたが、権限の問題なのかStatusがWait:WrUserRequestとなってしまい、バックグラウンドで処理待ちになってしまいます。

おそらく、zabbix agentがNT AUTHORITY\SYSTEMで動作しているためだと思うのですが...