2 リモートコマンド

概要

リモート コマンドを使用すると、特定の定義済みコマンドが監視対象ホストで何らかの条件で自動的に実行されるように定義できます。

リモート コマンドはスマート プロアクティブ モニタリングの強力なメカニズムです。

この機能の最も明白な使用法で、次のことを試みることができます。

  • 一部のアプリケーション (Web サーバー、ミドルウェア、CRM) が応答しない場合、自動的に再起動する
  • 要求に応答しない場合、IPMI の'reboot'コマンドを使用してリモート サーバーを再起動する
  • ディスク容量が不足した場合に自動でディスク容量を解放する (古いファイルの削除、/tmp のクリーニング)
  • CPU 負荷に応じて、ある物理ボックスから別の物理ボックスに VM を移行する
  • 不十分な CPU (またはディスク、メモリなど) リソースに新しいノードをクラウド環境に追加する

リモート コマンドのアクションの設定は、メッセージを送信する場合と似ていますが、Zabbix がメッセージを送信する代わりにコマンドを実行する点だけが異なります。

リモート コマンドは、Zabbix サーバー、プロキシ、またはエージェントによって実行できます。 Zabbix エージェントのリモート コマンドは、Zabbix サーバーまたは Zabbix プロキシ経由で直接実行できます。 Zabbix エージェントと Zabbix プロキシの両方で、リモート コマンドはデフォルトで無効になっています。 それらは次の方法で有効にできます。

  • エージェント設定にAllowKey=system.run[*]パラメーターを追加します。
  • プロキシ設定で EnableRemoteCommands パラメータを'1'に設定します。

Zabbix サーバーによって実行されるリモート コマンドは、コマンドの実行 で説明されているように、終了コードのチェックを含めて実行されます。

対象ホストがメンテナンス中であってもリモートコマンドを実行します。

リモートコマンドの制限

すべてのマクロを解決した後のリモートコマンドの制限は、データベースの種類と文字セットに依存します(非ASCII文字は保存に複数バイトを必要とします):

Database 文字数の上限 バイト数の上限
MySQL 65535 65535
PostgreSQL 65535 制限なし
SQLite (Zabbix プロキシのみ) 65535 制限なし

リモートコマンドの実行結果の出力(戻り値)は 16MB に制限されます(末尾の空白も含まれ、切り詰められます)。 IPMI リモートコマンド の制限は、インストールされている IPMI ライブラリに基づきます。 データベースの制限 は、すべてのリモートコマンドに適用されることに注意してください。

設定

Zabbix エージェントで実行するリモートコマンド(カスタムスクリプト)は、最初にエージェント設定で有効にする必要があります。

エージェント設定で、許可する各コマンドに対して AllowKey=system.run[<command>,\*] パラメータが追加されていることを確認してください。これにより、特定のコマンドを nowait モードで実行できます。このパラメータを変更した場合は、エージェントデーモンを再起動してください。

次に、Alerts → Actions → Trigger actions で新しいアクションを設定します。

  1. 適切な条件を定義します。 たとえば、Apache アプリケーションのいずれかで重大度が「致命的」の障害が発生したときにアクションを有効にするよう設定します。

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

  1. 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