3 スクリプト
概要
Alerts > Scripts セクションでは、ユーザー定義のグローバルスクリプトを設定および管理できます。
このメニューは、SuperAdmin ユーザータイプのユーザーのみが利用できます。
グローバルスクリプトは、設定されたスコープとユーザー権限に応じて、次の場所から実行できます。
- 各種 Webインターフェースの場所(Dashboard、Problems、Latest data、Maps など)にある ホストメニュー から。
- イベントメニュー から。
- アクションの operation として実行できます。
スクリプトは Zabbix エージェント、Zabbix サーバー(プロキシ)または Zabbix サーバーのみで実行されます。
あわせて Command execution も参照してください。
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 | スクリプトのスコープです - action operation、manual host action、または manual event action。 この設定により、スクリプトがどこで利用可能になるかが決まります。つまり、それぞれアクション operations のリモートコマンド、ホストメニュー、イベントメニュー から利用できます。 |
| Used in actions | スクリプトが使用されているすべてのアクションが、該当アクション数の合計を先頭に付けて表示されます。 アクション名をクリックすると、アクションの設定フォームが開きます。ユーザーにそのアクションへの権限がない場合、名前はクリックできません。 |
| Type | スクリプトの種類が表示されます - URL、Webhook、Script、SSH、Telnet、または IPMI command。 |
| Execute on | スクリプトが Zabbix エージェント、Zabbix プロキシまたはサーバー、あるいは Zabbix サーバーのみで実行されるかが表示されます。 |
| Commands | スクリプト内で実行されるすべてのコマンドが表示されます。 webhook ではここには何も表示されません。 |
| User group | スクリプトを利用できるユーザーグループが表示されます(すべてのユーザーグループの場合は All)。 |
| Host group | スクリプトが利用可能なホストグループが表示されます(すべてのホストグループの場合は All)。 |
| Host access | ホストグループの権限レベルが表示されます - Read または Write。必要な権限レベルを持つユーザーのみがスクリプトを実行できます。 |
新しいスクリプトを設定するには、右上隅の Create script ボタンをクリックします。
一括編集オプション
一覧の下にあるボタンでは、次の一括編集オプションを使用できます。
- 削除 - スクリプトを削除します
このオプションを使用するには、対象のスクリプトの前にあるチェックボックスを選択し、削除 をクリックします。
フィルターの使用
フィルターを使用して、関心のあるスクリプトのみを表示できます。 検索性能を向上させるため、データはマクロが展開されていない状態で検索されます。
フィルター リンクは、スクリプト一覧の上にあります。 これをクリックするとフィルターが表示され、名前とスコープでスクリプトを絞り込めます。

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

グローバルスクリプトでは、セキュリティを強化するため、通常のマクロではなくマクロ関数を使用することを推奨します。マクロは自動的にエスケープされないためです。
スクリプト属性:
| パラメータ | 説明 | |
|---|---|---|
| 名前 | スクリプトの一意の名前。 例: Clear /tmp filesystem |
|
| スコープ | スクリプトのスコープ - アクションの実行、手動ホストアクション、または手動イベントアクション。この設定により、スクリプトを使用できる場所が決まります。つまり、アクションのオペレーションのリモートコマンド、ホストメニュー、またはevent menuから使用できます。 スコープを「アクションの実行」に設定すると、Alerts > Actions にアクセスできるすべてのユーザーがスクリプトを使用できるようになります。 スクリプトが実際にアクションで使用されている場合、そのスコープを「アクションの実行」以外に変更することはできません。 マクロのサポート スコープは、使用できるマクロの範囲に影響します。例えば、スクリプトを起動したユーザーに関する情報を渡せるように、ユーザー関連マクロ( {USER.*})はスクリプトでサポートされています。ただし、アクションのオペレーションは自動的に実行されるため、スクリプトのスコープが「アクションの実行」の場合はサポートされません。{MANUALINPUT} マクロを使用すると、スクリプトの実行時に手動入力を指定できます。このマクロは、手動ホストアクションおよび手動イベントアクションのスクリプトでサポートされています。 その他にサポートされているマクロについては、サポートされているマクロの表で「Trigger-based notifications and commands/Trigger-based commands」、「Manual host action scripts」、「Manual event action scripts」を検索してください。マクロがスペースを含む値(ホスト名など)に展開される可能性がある場合は、必要に応じて引用符で囲むことを忘れないでください。 |
|
| メニューパス | スクリプトの目的のメニューパス。例えば、Default または Default/ と指定すると、スクリプトはそれぞれのディレクトリに表示されます。メニューは、Main menu/Sub menu1/Sub menu2 のようにネストできます。監視セクションのホストメニューまたはイベントメニューからスクリプトにアクセスすると、指定したディレクトリに従って整理されます。このフィールドは、スコープで「手動ホストアクション」または「手動イベントアクション」が選択されている場合にのみ表示されます。 |
|
| タイプ | 該当するボタンをクリックして、スクリプトのタイプを選択します: URL、Webhook、スクリプト、SSH、Telnet、または IPMI コマンド。 タイプ URL は、スコープで「手動ホストアクション」または「手動イベントアクション」が選択されている場合にのみ使用できます。 |
|
| スクリプトタイプ: URL | ||
| URL | ホストメニューまたはevent menuからすばやくアクセスするためのURLを指定します。 マクロおよびカスタムのユーザーマクロがサポートされています。マクロのサポートは、スクリプトのスコープによって異なります(上記のスコープを参照)。 スクリプト実行時に手動入力を指定できるように、このフィールドで {MANUALINPUT} マクロを使用します。例: http://{MANUALINPUT}/zabbix/zabbix.php?action=dashboard.viewマクロの値はURLエンコードしないでください。 |
|
| 新しいウィンドウで開く | URLを新しいブラウザータブで開くか、現在のブラウザータブで開くかを指定します。 | |
| スクリプトタイプ: Webhook | ||
| パラメータ | webhook変数を属性と値のペアとして指定します。 次も参照してください: Webhookメディア設定。 パラメータ値では、マクロおよびカスタムのユーザーマクロがサポートされています。マクロのサポートは、スクリプトのスコープによって異なります(上記のスコープを参照)。 |
|
| スクリプト | パラメータフィールド内またはその横にある鉛筆アイコンをクリックすると開くモーダルエディターに、JavaScriptコードを入力します。 マクロのサポートは、スクリプトのスコープによって異なります(上記のスコープを参照)。 次も参照してください: Webhookメディア設定、追加のJavaScriptオブジェクト。 |
|
| タイムアウト | JavaScriptの実行タイムアウト(1~60秒、デフォルトは30秒)。 時間のサフィックスがサポートされています(例: 30s、1m)。 |
|
| スクリプトタイプ: スクリプト | ||
| 実行場所 | 該当するボタンをクリックして、シェルスクリプトを実行する場所を選択します: Zabbixエージェント - ホスト上で、Zabbixエージェントがスクリプトを実行します(system.run アイテムが許可されている場合)。 Zabbixプロキシまたはサーバー - ホストがプロキシとサーバーのどちらで監視されているかに応じて、Zabbixプロキシまたはサーバーがスクリプトを実行します。 EnableRemoteCommandsによって有効になっている場合、プロキシ上で実行されます。 サーバーパラメータEnableGlobalScriptsによってグローバルスクリプトが有効になっている場合、サーバー上で実行されます。 Zabbixサーバー - Zabbixサーバーのみがスクリプトを実行します。 サーバーパラメータEnableGlobalScriptsによってグローバルスクリプトが無効になっている場合、このオプションは使用できません。 |
|
| コマンド | スクリプト内で実行するコマンドの完全なパスを入力します。 マクロのサポートは、スクリプトのスコープによって異なります(上記のスコープを参照)。カスタムのユーザーマクロがサポートされています。 |
|
| スクリプトタイプ: SSH | ||
| 認証方式 | 認証方式として、パスワードまたは公開鍵を選択します。 | |
| ユーザー名 | ユーザー名を入力します。 | |
| パスワード | パスワードを入力します。 認証方式として「パスワード」が選択されている場合に、このフィールドを使用できます。 |
|
| 公開鍵ファイル | 公開鍵ファイルへのパスを入力します。 認証方式として「公開鍵」が選択されている場合に、このフィールドを使用できます。 |
|
| 秘密鍵ファイル | 秘密鍵ファイルへのパスを入力します。 認証方式として「公開鍵」が選択されている場合に、このフィールドを使用できます。 |
|
| パスフレーズ | パスフレーズを入力します。 認証方式として「公開鍵」が選択されている場合に、このフィールドを使用できます。 |
|
| ポート | Zabbixが接続する対象ホスト上のリモートSSHサービスのポートを入力します。 | |
| コマンド | コマンドを入力します。 マクロのサポートは、スクリプトのスコープによって異なります(上記のスコープを参照)。カスタムのユーザーマクロがサポートされています。 |
|
| スクリプトタイプ: Telnet | ||
| ユーザー名 | ユーザー名を入力します。 | |
| パスワード | パスワードを入力します。 | |
| ポート | Zabbixが接続する対象ホスト上のリモートTelnetサービスのポートを入力します。 | |
| コマンド | コマンドを入力します。 マクロのサポートは、スクリプトのスコープによって異なります(上記のスコープを参照)。カスタムのユーザーマクロがサポートされています。 |
|
| スクリプトタイプ: IPMI | ||
| コマンド | IPMIコマンドを入力します。 マクロのサポートは、スクリプトのスコープによって異なります(上記のスコープを参照)。カスタムのユーザーマクロがサポートされています。 |
|
| 説明 | スクリプトの説明を入力します。 | |
| ホストグループ | スクリプトを使用できるホストグループを選択します(すべてのホストグループの場合はすべて)。 | |
| ユーザーグループ | スクリプトを使用できるユーザーグループを選択します(すべてのユーザーグループの場合はすべて)。 このフィールドは、スコープで「手動ホストアクション」または「手動イベントアクション」が選択されている場合にのみ表示されます。 |
|
| 必要なホスト権限 | ホストグループに対する権限レベルとして、読み取りまたは書き込みを選択します。必要な権限レベルを持つユーザーのみがスクリプトを実行できます。 このフィールドは、スコープで「手動ホストアクション」または「手動イベントアクション」が選択されている場合にのみ表示されます。 |
|
| 高度な設定 | 高度な設定ヘッダーをクリックすると、高度な設定オプションが表示されます。 このフィールドは、スコープで「手動ホストアクション」または「手動イベントアクション」が選択されている場合にのみ表示されます。 |
|
詳細設定
折りたたみ可能な 詳細設定 セクションで、詳細設定オプションを利用できます。

| Parameter | Description |
|---|---|
| Enable user input | チェックボックスをオンにすると、スクリプト実行前に手動でユーザー入力を有効にできます。 手動ユーザー入力は、スクリプト内の {MANUALINPUT} マクロ値を置き換えます。 参照: Manual user input。 |
| Input prompt | カスタムユーザー入力を促すテキストを入力します。このテキストは、Manual input ポップアップの入力欄の上に表示されます。 Manual input ポップアップのプレビューを表示するには、Test user input をクリックします。プレビューでは、入力文字列が入力検証ルール(下記のパラメータを参照)に適合しているかどうかもテストできます。 マクロおよびユーザーマクロのサポートは、スクリプトのスコープに依存します(一般的なスクリプト設定パラメータの Scope を参照)。 |
| Input type | 手動入力の種類を選択します: String - 単一の文字列; Dropdown - 複数のドロップダウンオプションから値を選択します。 |
| Dropdown options | ユーザー入力用ドロップダウンの一意の値を、カンマ区切りのリストで入力します。 ドロップダウンに空のオプションを含めるには、リストの先頭、中間、または末尾に追加のカンマを入れます。 このフィールドは、Input type で 'Dropdown' が選択されている場合にのみ表示されます。 |
| Default input string | ユーザー入力のデフォルト文字列を入力します(または未指定)。 このフィールドは、Input validation rule フィールドで指定された正規表現に対して検証されます。 ここで入力した値は、Manual input ポップアップにデフォルトで表示されます。 このフィールドは、Input type で 'String' が選択されている場合にのみ表示されます。 |
| Input validation rule | ユーザー入力文字列を検証するための正規表現を入力します。 グローバル正規表現がサポートされています。 このフィールドは、Input type で 'String' が選択されている場合にのみ表示されます。 |
| Enable confirmation | チェックボックスをオンにすると、スクリプト実行前に確認メッセージを表示します。この機能は、再起動スクリプトのような潜在的に危険な操作や、時間がかかる可能性のある操作で特に有用です。 |
| Confirmation text | 上記のチェックボックスで有効にした確認ポップアップに表示するカスタム確認テキストを入力します(例: Remote system will be rebooted. Are you sure?)。テキストの表示を確認するには、フィールドの横にある Test confirmation をクリックします。 Macros およびカスタム user macros がサポートされています。 Note: 確認メッセージのテスト時には、マクロは展開されません。 |
手動ユーザー入力と確認メッセージの両方が設定されている場合、それらは連続したポップアップウィンドウで表示されます。
手動ユーザー入力
手動ユーザー入力では、スクリプトの実行ごとにカスタムパラメータを指定できます。
これにより、1つのパラメータだけが異なる複数の類似したユーザースクリプトを作成する必要がなくなります。
例えば、実行時に異なる整数値や異なるURLアドレスをスクリプトに渡したい場合があります。
手動ユーザー入力を有効にするには、次のいずれかを行います。
- 必要な箇所で、スクリプト(コマンド、スクリプト、スクリプトパラメータ)内、またはURLスクリプトのURLフィールドで {MANUALINPUT} マクロを使用します。
- 高度なスクリプト設定で、手動ユーザー入力を有効にし、入力オプションを設定します。
ユーザー入力を有効にすると、スクリプトの実行前に、ユーザーにカスタム値の入力を求める 手動入力 ポップアップが表示されます。
入力された値は、スクリプト内の {MANUALINPUT} に置き換えられます。
設定に応じて、ユーザーは文字列値の入力を求められます。

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

手動ユーザー入力は、スコープが「手動ホストアクション」または「手動イベントアクション」であるスクリプトでのみ使用できます。
スクリプトの実行と結果
Zabbix サーバーによって実行されるスクリプトは、コマンド実行ページ に記載されている順序で実行されます。
スクリプトの結果は、スクリプトの実行後に表示されるポップアップウィンドウに表示されます。
スクリプトの戻り値は標準出力です。
- スクリプトが正常に終了した場合(終了コード
0)、戻り値は 16MB に制限されます(末尾の空白も含まれ、超過分は切り捨てられます)。 - スクリプトがエラーで終了した場合(ゼロ以外の終了コード)、戻り値は 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 より大きい値)に調整するのではなく、スクリプト自体を最適化することも推奨されます。