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 |
| PostgreSQL | 65535 | 制限なし |
| SQLite(Zabbixプロキシのみ) | 65535 | 制限なし |
リモートコマンド実行の出力(戻り値)は16MBに制限されています(切り捨てられる末尾の空白文字を含む)。 IPMIリモートコマンドの制限は、インストールされているIPMIライブラリに基づきます。 なお、データベースの制限はすべてのリモートコマンドに適用されます。
設定
Zabbixエージェント上で実行されるこれらのリモートコマンド(カスタムスクリプト)は、 まずエージェントの設定で有効にする必要があります。
nowaitモードで特定のコマンドを許可するため、許可する各コマンドについて、エージェント設定に AllowKey=system.run[<command>,*] パラメータが追加されていることを確認してください。このパラメータを変更した場合は、エージェントデーモンを再起動してください。
次に、アラート → アクション → トリガーアクション で新しいアクションを設定する際は、以下を行います。
- 適切な条件を定義します。 例えば、Apacheアプリケーションのいずれかで発生したすべての障害レベルの問題に対してアクションが実行されるよう設定します。

- 実行内容タブで、 実行内容、復旧時の実行内容、または更新時の実行内容ブロックの 追加 をクリックします。

- 実行内容 ドロップダウンリストから定義済みスクリプトのいずれかを選択し、そのスクリプトの 対象リスト を設定します。

定義済みスクリプト
アクションの実行操作(webhook、スクリプト、SSH、Telnet、IPMI)で利用可能なスクリプトは、グローバルスクリプトで定義されます。
例:
sudo /etc/init.d/apache restart
この場合、Zabbix は Apache プロセスの再起動を試みます。このコマンドでは、コマンドが Zabbix エージェント上で実行されるようにしてください(実行先 に対して Zabbix agent ボタンをクリックします)。
sudo の使用に注意してください。Zabbix ユーザーには、デフォルトではシステムサービスを再起動する権限がありません。sudo の設定方法のヒントについては、以下を参照してください。
Zabbix agent 7.0 以降では、アクティブモードで動作しているエージェント上でもリモートコマンドを実行できます。 アクティブまたはパッシブを問わず、Zabbix エージェントはリモートホスト上で実行されている必要があり、コマンドはバックグラウンドで実行されます。
Zabbix エージェント上のリモートコマンドは、system.run[,nowait] キーによってタイムアウトなしで実行され、実行結果は確認されません。
Zabbix サーバーおよび Zabbix プロキシ上のリモートコマンドは、zabbix_server.conf または zabbix_proxy.conf ファイルの TrapperTimeout パラメータで設定されたタイムアウト付きで実行され、実行結果が確認されます。
追加情報については、スクリプトのタイムアウトを参照してください。
アクセス権限
'zabbix' ユーザーが、設定されたコマンドに対する実行権限を持っていることを確認してください。特権コマンドへのアクセスを許可するために、sudo の使用を検討するとよいでしょう。アクセスを設定するには、root として次を実行します:
visudo
sudoers ファイルで使用できる設定例:
# 'zabbix' user にパスワードなしですべてのコマンドの実行を許可します。
zabbix ALL=NOPASSWD: ALL
# 'zabbix' user にパスワードなしで apache の再起動を許可します。
zabbix ALL=NOPASSWD: /etc/init.d/apache restart
一部のシステムでは、sudoers ファイルによりローカル以外の ユーザーがコマンドを実行できないようになっています。これを変更するには、 /etc/sudoers の requiretty オプションをコメントアウトしてください。
複数のインターフェースを持つ場合のリモートコマンド
対象システムに選択したタイプ (Zabbix エージェントまたはIPMI)の複数のインターフェースがある場合、 リモートコマンドはデフォルトのインターフェースで実行されます。
SSHおよびTelnet経由のリモートコマンドは、Zabbix エージェントのものとは 別のインターフェースを使用して実行できます。使用可能なインターフェースは、 次の順序で選択されます。
- Zabbix エージェントのデフォルトインターフェース
- SNMPのデフォルトインターフェース
- JMXのデフォルトインターフェース
- IPMIのデフォルトインターフェース
IPMI リモートコマンド
IPMI リモート コマンドの場合、次の構文を使用する必要があります。
<command> [<value>]
内容
- <command> - スペースなしの 1 つのIPMI コマンド
- <value> - 'on', 'off'または任意の符号なし整数。 <value> はオプションパラメーターです。
例
アクションの実行内容でリモートコマンドとして使用できるグローバルスクリプトの例。
例 1
特定の条件での Windows の再起動。
Zabbix によって検出された問題発生時に Windows を自動的に再起動するには、 次のスクリプトを定義します。
| スクリプトパラメータ | 値 |
|---|---|
| スコープ | 'アクションの実行' |
| タイプ | 'スクリプト' |
| コマンド | c:\windows\system32\shutdown.exe -r -f |
例 2
IPMI制御を使用してホストを再起動します。
| スクリプトパラメータ | 値 |
|---|---|
| スコープ | 'アクションの実行' |
| タイプ | 'IPMI' |
| コマンド | reset |
例 3
IPMI制御を使用してホストの電源をオフにします。
| スクリプトパラメータ | 値 |
|---|---|
| スコープ | 'アクションの実行' |
| タイプ | 'IPMI' |
| コマンド | power off |