SKY BLOGBLOG

Zabbixのリモートコマンド

はじめまして。MSP部でサーバの運用・監視の仕事をしている櫟岡といいます。
最近は近所のスパ銭に行くことしか楽しみがありません。水風呂に入れるようになるのが最近の目標です。

今回はZabbixのリモートコマンドという機能についてちょこっと調べたので書きます。

  • 使える場面
    プロセスの再起動とかしたいけど、いちいちサーバーにログインしてやるのめんどいとき、など。

リモートコマンドとは

そもそも、Zabbixには事前に定義しておいたスクリプトを実行する機能があります。
スクリプト実行するときにどのサーバから実行するかも選ぶこともでき、
Zabbixサーバ側から実行するとか、監視エージェントがインストールされているホスト内で
実行するかとか選べたりします。

監視エージェントがインストールされているホスト内で実行するパターンがリモートコマンドです。

スクリプト機能自体は、ホスト名とかクリックするとスクリプトが出てくることあるので、
普段Zabbixいじってる間にも見たことがあると思います。

                        図1:これ

僕はあんまりクリックしたことなかったのですが、押すとこんな感じになります

今回は「Ping」のスクリプトを実行しましたが、Zabbixサーバ側から対象ホストにpingした結果が表示されました。

実際に設定してみる

ドキュメント見つつ適当に設定してみます。
今回は対象サーバのhttpdの再起動をしてみたいと思います。

2 リモートコマンド [Zabbix Documentation 2.2]

「次で実行」は監視対象のサーバ内で実行したいので、Zabbixエージェントにします。
「コマンド」欄には実行したいコマンドを入力します。
他は適当。

作ったので実行してみます。

が、エラー画面が出ます。

 


 

設定が足りないようなので、ドキュメント見つつ必要な設定を追加します。

①対象インスタンスの/etc/zabbix/zabbix_agentd.conf(監視エージェントの設定ファイル)変更
 /etc/zabbix/zabbix_agentd.confは監視エージェントの設定ファイル。
 EnableRemoteCommandsパラメータを1にします
 ※デフォルトだと0になってて、これが1じゃないとダメです。

②Zabbixユーザに強い権限を与える
 基本対象インスタンス内のZabbixユーザには強い権限ないので、sudoできるように設定します。
 visudoでZabbixユーザにsudo権限を与えます。

2点直したので再度実行してします。
結果はさっきみたいにエラーは出なくなりました。 

なんか緑のチェックマークとかでなくて、OK感があまりないですが
対象にログインして確かめたらちゃんと再起動されてたので、これで設定は完了です。

わかったこと

事前にスクリプト作っとけば、インスタンスにログインしなくても色々できるので便利そうでした。
ただし弊社では勝手にお客様のサーバの設定を操作する事はできないため、
活用するにはログインやZabbixユーザに強い権限付けさせてもらう許可が必要になります。

運用対象で広く導入するのは難しそうですが、特にアラートが多い特定の案件だけとかだったら
お客様と調整して導入も可能かなと思いました。    

今回書いてないですが、Zabbixのアクションと組み合わせればアラート発報時にリモートコマンド実行することも可能です。

補足

リモートコマンドは内部的には、system.runというアイテムを使ってコマンドを実行しているようです。
2 リモートコマンド [Zabbix Documentation 2.2]
>system.run[,nowait]キーによって、タイムアウトなしにリモートコマンドがZabbixエージェントで実行されます

ZabbixにはCPU使用率とかメモリ使用率とか取得してきてくれるアイテムがいろんな種類ありますが
system.runは指定したコマンドの実行結果を返してくれるアイテムです

1  Zabbixエージェント [Zabbix Documentation 2.2]

↓みたいな感じで設定すると、lsの結果を取得してくれるアイテムになります
system.run[ls -l /


Zabbixサーバとかから実行して、任意のアイテムキーを取得できるzabbixgetというコマンドもあるので、
これらを利用すると対象ホスト内のZabbixユーザの権限の範囲内であれば、
通常ログイン不可のホストであろうと好き放題コマンドを実行できます。

system.runのアイテムを使うには、confファイルの設定変更とかはいりません。
なので、対象インスタンスにログインして設定変更しなくても、
以下のようなアイテム設定すれば、ログインしなくてもメモリの調査できたりします。

アイテム:system.run[free] を設定したときに取得したデータのスクショ

以上、です。