3 スクリプト

概要

アラート > スクリプト セクションでは、ユーザー定義のグローバルスクリプトを設定および管理できます。

グローバルスクリプトは、設定されたスコープおよびユーザー権限に応じて、次の場所から実行できます。

  • 各種Webインターフェース上の ホストメニュー から(ダッシュボード障害最新データマップ など)
  • イベントメニュー から
  • アクションの実行内容として実行可能

スクリプトは、Zabbixエージェント、Zabbixサーバー(プロキシ)、または Zabbixサーバーのみで実行されます。
あわせて コマンド実行 も参照してください。

Zabbixエージェントおよび Zabbixプロキシの両方で、リモートスクリプトはデフォルトで無効になっています。
有効にするには、次のようにします。

  • Zabbixエージェント上で実行されるリモートコマンドの場合:
    • 許可する各コマンドについて、エージェント設定に AllowKey=system.run[<command>,*] パラメータを追加します。* は wait モードおよび nowait モードを表します。
  • Zabbixプロキシ上で実行されるリモートコマンドの場合:
    • 警告: リモートコマンドが Zabbixプロキシによって監視されている Zabbixエージェント上で実行される場合、Zabbixプロキシでリモートコマンドを有効にする必要はありません。 ただし、Zabbixプロキシ上でリモートコマンドを実行する必要がある場合は、プロキシ設定で EnableRemoteCommands パラメータを '1' に設定してください。

Zabbixサーバー上でのグローバルスクリプト実行は、サーバー設定EnableGlobalScripts=0 を設定することで無効にできます。
新規インストールでは、Zabbix 7.0 以降、Zabbixサーバー上でのグローバルスクリプト実行はデフォルトで無効になっています。

既存のスクリプトの一覧とその詳細が表示されます。

表示されるデータ:

Column Description
Name スクリプトの名前。スクリプト名をクリックすると、スクリプトの設定フォームが開きます。
Scope スクリプトのスコープ - アクションの実行内容、手動ホストアクション、または手動イベントアクション。この設定により、スクリプトを利用できる場所が決まります。
Used in actions スクリプトが使用されているすべてのアクションが、該当アクションの総数とともに表示されます。
アクション名をクリックすると、アクション設定フォームが開きます。ユーザーにそのアクションへの権限がない場合、名前はクリックできません。
Type スクリプトのタイプが表示されます - URLWebhookScriptSSHTelnet、または IPMI コマンド。
Execute on スクリプトが Zabbixエージェント、Zabbixプロキシ、サーバー、または Zabbixサーバーのみのいずれで実行されるかが表示されます。
Commands スクリプト内で実行されるすべてのコマンドが表示されます。
webhook の場合、ここには何も表示されません。
User group スクリプトを利用できるユーザーグループが表示されます(すべてのユーザーグループが対象の場合は All)。
Host group スクリプトを利用できるホストグループが表示されます(すべてのホストグループが対象の場合は All)。
Host access ホストグループに対する権限レベルが表示されます - Read または Write。必要な権限レベルを持つユーザーのみがスクリプトを実行できます。

新しいスクリプトを設定するには、右上隅にある Create script ボタンをクリックします。

一括編集オプション

リストの下のボタンで一括編集オプションを1つ利用できます。

  • 削除 - スクリプトの削除

このオプションを使用するには、該当するスクリプトの前のチェックボックスをオンにして、削除をクリックします。

フィルターの使用

フィルターを使用して、関心のあるスクリプトのみを表示できます。
検索パフォーマンスを向上させるため、データはマクロを未展開のまま検索されます。

スクリプトの一覧の上に、フィルターリンクがあります。
これをクリックすると、名前とスコープでスクリプトを絞り込めるフィルターが表示されます。

グローバルスクリプトの設定

セキュリティを強化するため、グローバルスクリプトではプレーンなマクロの代わりに マクロ関数 を使用することを推奨します。マクロは自動的にエスケープされないためです。

スクリプト属性:

Parameter Description
Name スクリプトの一意な名前。
例: Clear /tmp filesystem
Scope スクリプトのスコープ - アクションの実行、手動ホストアクション、または手動イベントアクション。この設定により、スクリプトをどこで使用できるかが決まります。つまり、それぞれアクション実行のリモートコマンド、ホストメニュー、または イベントメニュー から使用できます。
スコープを「Action operation」に設定すると、Alerts > Actions にアクセスできるすべてのユーザーがこのスクリプトを利用できます。
スクリプトが実際にアクションで使用されている場合、そのスコープを「action operation」以外に変更することはできません。
マクロのサポート
スコープは利用可能なマクロの範囲に影響します。たとえば、ユーザー関連のマクロ ({USER.*}) は、スクリプトを起動したユーザーに関する情報を渡せるようにするため、スクリプトでサポートされています。ただし、アクション実行は自動的に実行されるため、スクリプトのスコープが action operation の場合はサポートされません。
{MANUALINPUT} マクロを使用すると、スクリプト実行時に手動入力を指定できます。これは手動ホストアクションおよび手動イベントアクションのスクリプトでサポートされています。
他にどのマクロがサポートされているかを確認するには、サポートされているマクロ テーブルで「Trigger-based notifications and commands/Trigger-based commands」、「Manual host action scripts」、「Manual event action scripts」を検索してください。マクロがスペースを含む値(たとえばホスト名)に展開される可能性がある場合は、必要に応じて引用符で囲むことを忘れないでください。
Menu path スクリプトのメニューパスを指定します。たとえば Default または Default/ を指定すると、それぞれのディレクトリにスクリプトが表示されます。メニューはネスト可能で、たとえば Main menu/Sub menu1/Sub menu2 のように指定できます。監視セクションのホスト/イベントメニューからスクリプトにアクセスする場合、指定したディレクトリに従って整理されます。
このフィールドは、Scope として「Manual host action」または「Manual event action」が選択されている場合にのみ表示されます。
Type 対応するボタンをクリックしてスクリプトタイプを選択します:
URLWebhookScriptSSHTelnet、または IPMI コマンド。
URL タイプは、Scope として「Manual host action」または「Manual event action」が選択されている場合にのみ使用できます。
Script type: URL
URL ホストメニュー または イベントメニュー からすばやくアクセスするためのURLを指定します。
マクロ およびカスタムの ユーザーマクロ をサポートしています。マクロのサポートはスクリプトのスコープに依存します(上記の Scope を参照)。
このフィールドで {MANUALINPUT} マクロを使用すると、スクリプト実行時に手動入力を指定できます。例:
http://{MANUALINPUT}/zabbix/zabbix.php?action=dashboard.view
マクロ値はURLエンコードしてはいけません。
Open in new window URLを新しいブラウザータブで開くか、同じブラウザータブで開くかを決定します。
Script type: Webhook
Parameters webhook 変数を属性と値のペアとして指定します。
参照: Webhook メディア設定。
パラメータ値では マクロ およびカスタムの ユーザーマクロ をサポートしています。マクロのサポートはスクリプトのスコープに依存します(上記の Scope を参照)。
Script パラメータフィールド内、またはその横にある鉛筆アイコンをクリックすると開くモーダルエディターに JavaScript コードを入力します。
マクロのサポートはスクリプトのスコープに依存します(上記の Scope を参照)。
参照: Webhook メディア設定、追加の Javascript オブジェクト
Timeout JavaScript の実行タイムアウト(1~60秒、デフォルトは30秒)。
30s、1m などの時間サフィックスをサポートしています。
Script type: Script
Execute on 対応するボタンをクリックして、次のいずれかでシェルスクリプトを実行します:
Zabbix エージェント - スクリプトは、ホスト上で Zabbix エージェントにより実行されます(system.run アイテムが 許可 されている場合)
Zabbix プロキシ または サーバー - スクリプトは Zabbix プロキシまたはサーバーにより実行されます。どちらで実行されるかは、そのホストがプロキシまたはサーバーのどちらで監視されているかによって決まります。
EnableRemoteCommands により有効化されている場合は、プロキシ上で実行されます。
グローバルスクリプトがサーバーの EnableGlobalScripts パラメータで有効になっている場合は、サーバー上で実行されます。
Zabbix サーバー - スクリプトは Zabbix サーバーでのみ実行されます。
このオプションは、グローバルスクリプトがサーバーの EnableGlobalScripts パラメータで無効になっている場合は使用できません。
Commands スクリプト内で実行するコマンドのフルパスを入力します。
マクロのサポートはスクリプトのスコープに依存します(上記の Scope を参照)。カスタムの ユーザーマクロ をサポートしています。
Script type: SSH
Authentication method 認証方式を選択します - パスワードまたは公開鍵。
Username ユーザー名を入力します。
Password パスワードを入力します。
このフィールドは、認証方式として「Password」が選択されている場合に使用できます。
Public key file 公開鍵ファイルへのパスを入力します。
このフィールドは、認証方式として「Public key」が選択されている場合に使用できます。
Private key file 秘密鍵ファイルへのパスを入力します。
このフィールドは、認証方式として「Public key」が選択されている場合に使用できます。
Passphrase パスフレーズを入力します。
このフィールドは、認証方式として「Public key」が選択されている場合に使用できます。
Port Zabbix が接続する対象ホスト上のリモート SSH サービスポートを入力します。
Commands コマンドを入力します。
マクロのサポートはスクリプトのスコープに依存します(上記の Scope を参照)。カスタムの ユーザーマクロ をサポートしています。
Script type: Telnet
Username ユーザー名を入力します。
Password パスワードを入力します。
Port Zabbix が接続する対象ホスト上のリモート Telnet サービスポートを入力します。
Commands コマンドを入力します。
マクロのサポートはスクリプトのスコープに依存します(上記の Scope を参照)。カスタムの ユーザーマクロ をサポートしています。
Script type: IPMI
Command IPMI コマンドを入力します。
マクロのサポートはスクリプトのスコープに依存します(上記の Scope を参照)。カスタムの ユーザーマクロ をサポートしています。
Description スクリプトの説明を入力します。
Host group スクリプトを利用可能にするホストグループを選択します(すべてのホストグループに対して利用可能にする場合は All)。
User group スクリプトを利用可能にするユーザーグループを選択します(すべてのユーザーグループに対して利用可能にする場合は All)。
このフィールドは、Scope として「Manual host action」または「Manual event action」が選択されている場合にのみ表示されます。
Required host permissions ホストグループに対する権限レベルを選択します - Read または Write。必要な権限レベルを持つユーザーのみがスクリプトの実行にアクセスできます。
このフィールドは、Scope として「Manual host action」または「Manual event action」が選択されている場合にのみ表示されます。
Advanced configuration Advanced configuration ラベルをクリックすると、高度な設定 オプションが表示されます。
このフィールドは、Scope として「Manual host action」または「Manual event action」が選択されている場合にのみ表示されます。

詳細設定

詳細設定オプションは、折りたたみ可能な詳細設定セクションで利用できます。

パラメータ 説明
ユーザー入力を有効にする スクリプトの実行前に手動でユーザー入力を有効にするには、チェックボックスをオンにします。
手動ユーザー入力は、スクリプト内の{MANUALINPUT}マクロ値を置き換えます。
詳細は、手動ユーザー入力を参照してください。
入力プロンプト カスタムユーザー入力を促すカスタムテキストを入力します。このテキストは、手動入力ポップアップの入力フィールドの上に表示されます。
手動入力ポップアップのプレビューを表示するには、ユーザー入力のテストをクリックします。プレビューでは、入力文字列が入力検証ルール(下記パラメータ参照)に準拠しているかどうかもテストできます。
マクロおよびユーザーマクロのサポートは、スクリプトのスコープによって異なります(一般スクリプト設定パラメータのスコープを参照)。
入力タイプ 手動入力タイプを選択します:
文字列 - 単一の文字列;
ドロップダウン - 複数のドロップダウンオプションから値を選択。
ドロップダウンオプション ユーザー入力ドロップダウンの一意の値をカンマ区切りリストで入力します。
ドロップダウンに空のオプションを含めるには、リストの先頭、中間、または末尾にカンマを追加します。
このフィールドは、入力タイプで「ドロップダウン」が選択されている場合のみ表示されます。
デフォルト入力文字列 ユーザー入力のデフォルト文字列(またはなし)を入力します。
このフィールドは、入力検証ルールフィールドで指定された正規表現に対して検証されます。
ここで入力した値は、手動入力ポップアップでデフォルトで表示されます。
このフィールドは、入力タイプで「文字列」が選択されている場合のみ表示されます。
入力検証ルール ユーザー入力文字列を検証するための正規表現を入力します。
グローバル正規表現がサポートされています。
このフィールドは、入力タイプで「文字列」が選択されている場合のみ表示されます。
確認を有効にする スクリプトの実行前に確認メッセージを表示するには、チェックボックスをオンにします。この機能は、(リブートスクリプトのような)危険な操作や長時間かかる可能性のある操作で特に便利です。
確認テキスト 上記のチェックボックスで有効にした確認ポップアップ用のカスタム確認テキストを入力します(例:リモートシステムが再起動されます。本当に実行しますか?)。テキストの表示例を確認するには、フィールド横の確認のテストをクリックします。
マクロおよびカスタムユーザーマクロがサポートされています。
注: 確認メッセージのテスト時にはマクロは展開されません。

手動ユーザー入力と確認メッセージの両方が設定されている場合、連続したポップアップウィンドウで表示されます。

手動ユーザー入力

手動ユーザー入力では、スクリプトの実行ごとにカスタムパラメータを指定できます。
これにより、1つのパラメータだけが異なる複数の類似したユーザースクリプトを作成する必要がなくなります。

例えば、実行時に異なる整数値や異なるURLアドレスをスクリプトに渡したい場合があります。

手動ユーザー入力を有効にするには、次のいずれかを行います。

  • 必要な箇所で、スクリプト(コマンド、スクリプト、スクリプトパラメータ)内、またはURLスクリプトのURLフィールドで {MANUALINPUT} マクロを使用します。
  • 高度なスクリプト設定で、手動ユーザー入力を有効にし、入力オプションを設定します。

ユーザー入力を有効にすると、スクリプトの実行前に、ユーザーにカスタム値の入力を求める 手動入力 ポップアップが表示されます。
入力された値は、スクリプト内の {MANUALINPUT} に置き換えられます。

設定に応じて、ユーザーは文字列値の入力を求められます。

または、あらかじめ定義されたオプションのドロップダウンから値を選択します。

手動ユーザー入力は、スコープが「手動ホストアクション」または「手動イベントアクション」であるスクリプトでのみ使用できます。

スクリプトの実行と結果

Zabbixサーバーによって実行されるスクリプトは、コマンド実行ページで説明されている順序で実行されます。

スクリプトの結果は、スクリプトの実行後に表示されるポップアップウィンドウに表示されます。 スクリプトの戻り値は標準出力です。

  • スクリプトが正常に終了した場合(終了コード 0)、戻り値は16MBに制限されます(切り捨てられる末尾の空白文字を含む)。
  • スクリプトがエラーで終了した場合(終了コードが0以外)、戻り値は標準エラーとなり、2KBに制限されます。

Zabbixは、デフォルトでは拡張されたスクリプト出力を保存しません。 出力の詳細全体を保持するには、スクリプト自体にロギングを実装できます(例: 出力をローカルのログファイルにリダイレクトする)。

ZabbixサーバーまたはZabbixプロキシ上で実行されるスクリプトには、データベースの制限も適用されることに注意してください。

以下は、スクリプトと結果ウィンドウの例です。

uname -v
/tmp/non_existing_script.sh
echo "This script was started by {USER.USERNAME}"

スクリプトの結果には、スクリプト自体は表示されません。

Zabbixエージェントでのスクリプトタイムアウト

スクリプトの実行中にタイムアウトが発生する場合があります。

以下は、Zabbixエージェント上で実行されるスクリプトと、その結果ウィンドウの例です。

sleep 5
df -h

この場合のエラーメッセージは次のとおりです。

Timeout while executing a shell script.

このような状況を回避するには、Zabbixエージェント設定 および Zabbixサーバー設定Timeout パラメータを調整するのではなく、スクリプト自体(上記の例では「5」)を最適化することを推奨します。

Zabbixエージェント設定Timeout パラメータが変更されている場合は、次のエラーメッセージが表示されます。

Get value from agent failed: ZBX_TCP_READ() timed out.

これは、Zabbixエージェント設定 で変更が行われているものの、Zabbixサーバー設定 側でも Timeout パラメータを変更する必要があることを意味します。

アクティブなエージェントでのスクリプトタイムアウト

スクリプトは、アクティブモードで動作しているエージェントでのみ実行できます。 アクション実行内容または手動でのスクリプト実行によってスクリプトの実行がトリガーされると、コマンドはアクティブチェック設定に含まれ、アクティブなエージェントがそれを受信すると実行されます。

手動スクリプトは、スクリプト実行用のサーバー/プロキシのタイムアウトとともにアクティブなエージェントに送信されます。スクリプト実行のために、デフォルトのサーバー/プロキシのタイムアウトを増やしてください。 タイムアウトはアクティブチェックの更新頻度より長くする必要があります。そうしないと、アクティブなエージェントがスクリプトを受信して結果を返せるようになる前に、タイムアウトを超過してしまいます。

Zabbixサーバー/プロキシでのスクリプトタイムアウト

以下は、Zabbixサーバー上で実行されるスクリプトと、その結果ウィンドウの例です。

sleep 11
df -h

また、Zabbixサーバー設定 を変更して TrapperTimeout パラメータを対応する値(この場合は 11 より大きい値)に調整するのではなく、スクリプト自体を最適化することも推奨されます。