zabbix

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

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

コメント

  1. BlueSkyDetector より:

    https://gist.github.com/960364
    以前同様にWindowsでduをしたくて簡単なスクリプトを作成したことがありますので、良ければ使ってみてください。
    「c:\du.js」にコピーすれば、「cscript //Nologo c:\du.js "ディレクトリ名"」で値取得できます。
    ↓こんな感じにUserParameterを設定すると vfs.directory.size[ディレクトリ名] で取得できます。
    UserParameter=vfs.directory.size[*],cscript //Nologo c:\du.js "$1"

    あと、「\」に関しては zabbix_agentd.conf で「UnsafeUserParameters=1」にすれば通るかと思います。
    日本語の文字化けに関しては、ZabbixのDBが送られてきたSJIS文字列をUTF-8として保存してしまうためになりますね。

  2. ksaito11 より:

    BlueSkyDetectorさん

    コメントありがとうございました。
    cscriptでJavaScriptを動かすことができるんですね。(知らなかったです)
    UnsafeUserParameters=1も参考になりました。
    zabbix_agentd.confには、バッチファイルを指定して中身は、cscriptを使うとWindows環境の制約も少なくなりそうです。

タイトルとURLをコピーしました