2 リモートコマンド
概要
リモートコマンドを使用すると、特定の事前定義済みコマンドを、ある条件が発生したときに監視対象のホスト上で自動的に実行するように定義できます。
このように、リモートコマンドはスマートでプロアクティブな監視を実現する強力な仕組みです。
この機能の最も分かりやすい使用例として、次のようなことができます。
- 応答しなくなった場合に、アプリケーション(Webサーバー、ミドルウェア、CRMなど)を自動的に再起動する
- リクエストに応答しないリモートサーバーを、IPMIの「reboot」コマンドを使用して再起動する
- ディスク容量が不足した場合に、古いファイルを削除したり
/tmpをクリーンアップしたりして、ディスク領域を自動的に解放する - CPU負荷に応じて、VMをある物理マシンから別の物理マシンへ移行する
- CPU、ディスク、メモリなどのリソースが不足した場合に、クラウド環境へ新しいノードを追加する
リモートコマンド用のアクションの設定は、メッセージ送信用のアクション設定と似ています。唯一の違いは、Zabbixがメッセージを送信する代わりにコマンドを実行する点です。
リモートコマンドは、Zabbixサーバー、Zabbixプロキシ、またはZabbixエージェントによって実行できます。次の点に注意してください。
- Zabbixエージェント上のリモートコマンドは、Zabbixサーバーから直接、またはZabbixプロキシ経由で実行できます。
- Zabbixサーバーによって実行されるリモートコマンドは、終了コードの確認を含め、コマンドの実行に記載されている方法で実行されます。
- 対象のホストがメンテナンスモードの場合でも、リモートコマンドは実行されます。
リモートコマンドは、ZabbixエージェントとZabbixプロキシの両方でデフォルトでは無効になっています。次のように有効にできます。
- Zabbixエージェントによって実行されるリモートコマンドの場合、エージェント設定に、許可するコマンドごとに
AllowKey=system.run[<command>,*]パラメータを追加します。*は、実行モード(waitまたはnowait)のいずれかに一致します。 - Zabbixプロキシによって実行されるリモートコマンドの場合、プロキシ設定で
EnableRemoteCommandsパラメータを1に設定します。 Zabbixプロキシが監視するホスト上でZabbixエージェントによってリモートコマンドを実行する場合、Zabbixプロキシでリモートコマンドを有効にする必要はありません。
必要な場合を除き、AllowKey=system.run[*]は使用しないでください。これは、ホスト上で任意のコマンドの実行を許可します。
セキュリティ上の理由から、正確なコマンドのみを許可することを推奨します。system.run[*]はデフォルトで拒否されます(DenyKey=system.run[*])。
エージェントチェックの制限も参照してください。
リモートコマンドの制限
すべてのマクロを解決した後のリモートコマンドの制限は、データベースの種類と文字セットに依存します(非ASCII文字は保存に複数バイトを必要とします):
| Database | 文字数の上限 | バイト数の上限 |
|---|---|---|
| MySQL | 65535 | 65535 |
| PostgreSQL | 65535 | 制限なし |
| SQLite (Zabbix プロキシのみ) | 65535 | 制限なし |
リモートコマンドの実行結果の出力(戻り値)は 16MB に制限されます(末尾の空白も含まれ、切り詰められます)。 IPMI リモートコマンド の制限は、インストールされている IPMI ライブラリに基づきます。 データベースの制限 は、すべてのリモートコマンドに適用されることに注意してください。
設定
Zabbix エージェントで実行するリモートコマンド(カスタムスクリプト)は、最初にエージェント設定で有効にする必要があります。
エージェント設定で、許可する各コマンドに対して AllowKey=system.run[<command>,\*] パラメータが追加されていることを確認してください。これにより、特定のコマンドを nowait モードで実行できます。このパラメータを変更した場合は、エージェントデーモンを再起動してください。
次に、Alerts → Actions → Trigger actions で新しいアクションを設定します。
- 適切な条件を定義します。 たとえば、Apache アプリケーションのいずれかで重大度が「致命的」の障害が発生したときにアクションを有効にするよう設定します。

- Operations タブで、Operations、Recovery operations、または Update operations ブロックの Add をクリックします。

- Operation ドロップダウンリストから定義済みスクリプトのいずれかを選択し、スクリプトの Target list を設定します。

事前定義されたスクリプト
アクション操作で利用可能なスクリプト(webhook、スクリプト、SSH、Telnet、IPMI)は、スコープとして Action operation を選択した global scripts で定義されます。
例:
sudo /etc/init.d/apache restart
この場合、Zabbix は Apache プロセスの再起動を試みます。このコマンドを使用する場合は、コマンドが Zabbix エージェント上で実行されるようにしてください(Execute on の横にある Zabbix agent ボタンをクリックします)。
sudo の使用に注意してください。Zabbix ユーザーには、デフォルトではシステムサービスを再起動する権限がありません。sudo の設定方法については、以下のヒントを参照してください。
Zabbix エージェント 7.0 以降では、リモートコマンドをアクティブモードで動作しているエージェント上でも実行できます。 Zabbix エージェントは、アクティブ/パッシブのいずれであってもリモートホスト上で動作し、コマンドをバックグラウンドで実行します。
Zabbix エージェント上のリモートコマンドは、system.run[,nowait] キーによってタイムアウトなしで実行され、実行結果は確認されません。 Zabbix サーバーおよび Zabbix プロキシでは、リモートコマンドは zabbix_server.conf または zabbix_proxy.conf ファイルの TrapperTimeout パラメーターで設定されたタイムアウト付きで実行され、実行結果が 確認 されます。 追加情報については、Script timeout を参照してください。
アクセス権限
'zabbix'ユーザーが設定されたコマンドを実行できる権限を持っていることを確認してください。 特権コマンドへのアクセスを許可するためにsudoを使用することもできます。 アクセスを設定するには、rootで以下を実行します。
visudo
sudoersファイルで使用できる例:
# 'zabbix'ユーザーがすべてのコマンドをパスワードなしで実行できるようにします。
zabbix ALL=NOPASSWD: ALL
# 'zabbix'ユーザーがapacheをパスワードなしで再起動できるようにします。
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を自動的に再起動するには、次のスクリプトを定義します。
| スクリプトパラメータ | 値 |
|---|---|
| スコープ | 'アクションオペレーション' |
| タイプ | 'スクリプト' |
| コマンド | c:\windows\system32\shutdown.exe -r -f |
例2
IPMI制御を使用してホストを再起動します。
| スクリプトパラメータ | 値 |
|---|---|
| スコープ | 'アクションオペレーション' |
| タイプ | 'IPMI' |
| コマンド | reset |
例3
IPMI制御を使用してホストの電源をオフにします。
| スクリプトパラメータ | 値 |
|---|---|
| スコープ | 'アクションオペレーション' |
| タイプ | 'IPMI' |
| コマンド | power off |