2 リモートコマンド
概要
リモート コマンドを使用すると、特定の定義済みコマンドが監視対象ホストで何らかの条件で自動的に実行されるように定義できます。
リモート コマンドはスマート プロアクティブ モニタリングの強力なメカニズムです。
この機能の最も明白な使用法で、次のことを試みることができます。
- 一部のアプリケーション (Web サーバー、ミドルウェア、CRM) が応答しない場合、自動的に再起動する
- 要求に応答しない場合、IPMI の'reboot'コマンドを使用してリモート サーバーを再起動する
- ディスク容量が不足した場合に自動でディスク容量を解放する (古いファイルの削除、/tmp のクリーニング)
- CPU 負荷に応じて、ある物理ボックスから別の物理ボックスに VM を移行する
- 不十分な CPU (またはディスク、メモリなど) リソースに新しいノードをクラウド環境に追加する
リモート コマンドのアクションの設定は、メッセージを送信する場合と似ていますが、Zabbix がメッセージを送信する代わりにコマンドを実行する点だけが異なります。
リモート コマンドは、Zabbix サーバー、プロキシ、またはエージェントによって実行できます。 Zabbix エージェントのリモート コマンドは、Zabbix サーバーまたは Zabbix プロキシ経由で直接実行できます。 Zabbix エージェントと Zabbix プロキシの両方で、リモート コマンドはデフォルトで無効になっています。 それらは次の方法で有効にできます。
- エージェント設定に
AllowKey=system.run[*]パラメーターを追加します。 - プロキシ設定で EnableRemoteCommands パラメータを'1'に設定します。
Zabbix サーバーによって実行されるリモート コマンドは、コマンドの実行 で説明されているように、終了コードのチェックを含めて実行されます。
対象ホストがメンテナンス中であってもリモートコマンドを実行します。
リモートコマンドの制限
すべてのマクロを解決した後のリモート コマンドの制限は、データベースの種類と文字セットによって異なります (ASCII 以外の文字を格納するには、1 バイト以上が必要です)。
| データベース | 文字数制限 | バイト数制限 |
| MySQL | 65535 | 65535 |
| Oracle Database | 2048 | 4000 |
| PostgreSQL | 65535 | not limited |
| SQLite (only Zabbix proxy) | 65535 | not limited |
次のチュートリアルでは、リモート コマンドを設定する方法について順を追って説明します。
設定
Zabbix エージェント (カスタム スクリプト) で実行されるリモート コマンドは、最初にエージェントの 設定 で有効にする必要があります。
エージェント設定で許可されている各コマンドに AllowKey=system.run[<command>,*] パラメータが追加されていることを確認して、nowait モードで特定のコマンドを許可します。 このパラメータを変更する場合は、エージェント デーモンを再起動します。
リモート コマンドは、アクティブな Zabbix エージェントでは機能しません。
次に設定 → アクション で新しいアクションを設定:
- 適切な条件を定義します。 この例ではいずれかの Apache アプリケーションで障害が発生した場合にアクションがアクティブになるように設定します。:

- 実行内容 タブで、実行内容/復旧時の実行内容/更新時の実行内容 ブロックの [追加] をクリックします。
- [処理内容] ドロップダウン フィールドから、定義済みスクリプトの 1 つを選択します。

- スクリプトのターゲット リストを選択します
定義済みスクリプト
アクション操作に使用できるすべてのスクリプト (Webhook、スクリプト、SSH、Telnet、IPMI) は、グローバル スクリプト で定義されています。
例:
sudo /etc/init.d/apache restart
この場合、Zabbix は Apache プロセスの再起動を試みます。 このコマンドを使用して、コマンドが Zabbix エージェントで実行されることを確認します (Zabbix agent の実行ボタンをクリックします)。
sudo の使用に注意してください。Zabbix ユーザーには、デフォルトでシステム サービスを再起動する権限がありません。 sudo の設定方法に関するヒントについては、以下を参照してください。
Zabbix エージェントはリモート ホストで実行され、着信接続を受け入れる必要があります。 Zabbix エージェントはバックグラウンドでコマンドを実行します。
Zabbix エージェントのリモート コマンドは、system.run[,nowait] キーによってタイムアウトなしで実行され、実行結果はチェックされません。 Zabbix サーバーと Zabbix プロキシでは、リモート コマンドは、zabbix_server.conf または zabbix_proxy.conf ファイルの TrapperTimeout パラメータで設定されたタイムアウトで実行され、実行結果について チェック されます。
アクセス権限
'zabbix'ユーザーが、設定されたコマンドの実行権限を持っていることを確認してください。 sudo を使用して、特権コマンドへのアクセスを許可する必要があるかもしれません。 アクセスを設定するにはroot として以下を実行します。
# visudo
sudoers ファイルで使用できる行の例:
# allows 'zabbix' user to run all commands without password.
zabbix ALL=NOPASSWD: ALL
# allows 'zabbix' user to restart apache without password.
zabbix ALL=NOPASSWD: /etc/init.d/apache restart
一部のシステムでは、sudoers ファイルにより、ローカル以外のユーザーがコマンドを実行できなくなります。 これを変更するには、/etc/sudoers の requiretty オプションをコメントアウトします。
複数のインターフェースによるリモートコマンド
ターゲット システムに選択したタイプ (Zabbix エージェントまたは IPMI) の複数のインターフェースがある場合、リモート コマンドはデフォルトのインターフェースで実行されます。
Zabbix エージェント以外のインターフェイスを使用して、SSH および Telnet 経由でリモート コマンドを実行することができます。 使用可能なインターフェースは、次の順序で選択されます。
* Zabbix エージェントのデフォルトインターフェース
* SNMP デフォルトインターフェース
* JMX デフォルトインターフェース
* IPMI デフォルトインターフェース
IPMI リモートコマンド
IPMI リモート コマンドの場合、次の構文を使用する必要があります。
<command> [<value>]
内容
- <command> - スペースなしの 1 つのIPMI コマンド
- <value> - 'on', 'off'または任意の符号なし整数。 <value> はオプションパラメーターです。
例
アクションの実行内容でリモート コマンドとして使用できるグローバル スクリプトの例。
例 1
特定の条件で Windows を再起動します。
Zabbix によって障害が検出されたときに Windows を自動的に再起動するには、次のスクリプトを定義します。
| スクリプトパラメータ | 値 |
|---|---|
| Scope | 'Action operation' |
| Type | 'Script' |
| Command | c:\windows\system32\shutdown.exe -r -f |
例 2
IPMI コントロールを使用してホストを再起動します。
| スクリプトパラメータ | 値 |
|---|---|
| Scope | 'Action operation' |
| Type | 'IPMI' |
| Command | reset |
例 3
IPMI コントロールを使用して、ホストの電源をオフにします。
| スクリプトパラメータ | 値 |
|---|---|
| Scope | 'Action operation' |
| Type | 'IPMI' |
| Command | power off |