スクリプト
概要
[アラート] > [スクリプト] セクションでは、ユーザー定義のグローバルスクリプトを設定および管理できます。
このメニューは、SuperAdmin ユーザータイプのユーザーのみ利用できます。
グローバルスクリプトは、設定されたスコープとユーザー権限に応じて、次の場所から実行できます。
スクリプトは、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サーバーでのグローバルスクリプトの実行はデフォルトで無効になっています。
既存のスクリプトとその詳細の一覧が表示されます。

表示されるデータ:
| 列 | 説明 |
|---|---|
| 名前 | スクリプトの名前。スクリプト名をクリックすると、スクリプト設定フォームが開きます。 |
| スコープ | スクリプトのスコープ(アクションの実行内容、手動ホストアクション、または手動イベントアクション)。この設定により、スクリプトを利用できる場所が決まります。アクションの実行内容のリモートコマンド、ホストメニュー、またはイベントメニューから利用できます。 |
| アクションで使用 | スクリプトが使用されているすべてのアクションが、該当するアクションの総数とともに表示されます。 アクション名をクリックすると、アクション設定フォームが開きます。ユーザーにアクションへの権限がない場合、名前はクリックできません。 |
| タイプ | スクリプトのタイプ(URL、Webhook、スクリプト、SSH、Telnet、または IPMI コマンド)が表示されます。 |
| 実行先 | スクリプトがZabbixエージェント、Zabbixプロキシ、またはサーバー上で実行されるか、Zabbixサーバー上でのみ実行されるかが表示されます。 |
| コマンド | スクリプト内で実行されるすべてのコマンドが表示されます。 webhookの場合、ここには何も表示されません。 |
| ユーザーグループ | スクリプトを利用できるユーザーグループが表示されます(すべてのユーザーグループの場合は すべて)。 |
| ホストグループ | スクリプトを利用できるホストグループが表示されます(すべてのホストグループの場合は すべて)。 |
| ホストアクセス | ホストグループに対する権限レベル(読み取り または 書き込み)が表示されます。必要な権限レベルを持つユーザーのみ、スクリプトを実行できます。 |
新しいスクリプトを設定するには、右上隅にある [スクリプトの作成] ボタンをクリックします。
一括編集オプション
一覧の下にあるボタンでは、1つの一括編集オプションを利用できます。
- 削除 - スクリプトを削除します
このオプションを使用するには、対象のスクリプトの前にあるチェックボックスを選択し、削除 をクリックします。
フィルターの使用
フィルターを使用すると、関心のあるスクリプトだけを表示できます。 検索性能を向上させるため、データはマクロが展開されていない状態で検索されます。
フィルター リンクは、スクリプト一覧の上にあります。 これをクリックするとフィルターが表示され、名前とスコープでスクリプトを絞り込めます。

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

グローバルスクリプトでは、セキュリティを強化するため、通常のマクロではなくマクロ関数を使用することを推奨します。マクロは自動的にエスケープされないためです。
スクリプトの属性:
| パラメータ | 説明 | |
|---|---|---|
| 名前 | スクリプトの一意の名前。 例: Clear /tmp filesystem |
|
| スコープ | スクリプトのスコープ - アクションの実行、手動ホストアクション、または手動イベントアクション。 この設定により、スクリプトを使用できる場所が決まります。つまり、アクションの実行のリモートコマンド、ホストメニュー、またはイベントメニューで使用できます。 スコープを「アクションの実行」に設定すると、Alerts > Actions にアクセスできるすべてのユーザーがスクリプトを使用できます。 スクリプトが実際にアクションで使用されている場合、スコープを「アクションの実行」以外に変更することはできません。 マクロのサポート スコープは、使用できるマクロの範囲に影響します。例えば、スクリプトを起動したユーザーの情報を渡せるように、ユーザー関連のマクロ( {USER.*})がスクリプトでサポートされています。ただし、アクションの実行は自動的に実行されるため、スクリプトのスコープがアクションの実行の場合はサポートされません。{MANUALINPUT} マクロを使用すると、スクリプトの実行時に手動入力を指定できます。これは手動ホストアクションおよび手動イベントアクションのスクリプトでサポートされています。その他にサポートされているマクロについては、サポートされているマクロの表で、「トリガーベースの通知とコマンド/トリガーベースのコマンド」、「手動ホストアクションスクリプト」、「手動イベントアクションスクリプト」を検索してください。マクロがスペースを含む値(ホスト名など)に展開される可能性がある場合は、必要に応じて引用符で囲むことを忘れないでください。 |
|
| メニューパス | スクリプトの目的のメニューパス。例えば、Default または Default/ と指定すると、スクリプトがそれぞれのディレクトリに表示されます。メニューは Main menu/Sub menu1/Sub menu2 のようにネストできます。監視セクションのホスト/イベントメニューからスクリプトにアクセスすると、指定したディレクトリに従って整理されます。スコープで「手動ホストアクション」または「手動イベントアクション」が選択されている場合のみ、このフィールドが表示されます。 |
|
| タイプ | 該当するボタンをクリックして、スクリプトのタイプを選択します: URL、Webhook、スクリプト、SSH、Telnet、または IPMI コマンド。 タイプ URL は、スコープで「手動ホストアクション」または「手動イベントアクション」が選択されている場合のみ使用できます。 |
|
| スクリプトタイプ: URL | ||
| URL | ホストメニューまたはイベントメニューからすばやくアクセスするための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コマンドを入力します。 マクロのサポートはスクリプトのスコープによって異なります(上記のスコープを参照)。カスタムのユーザーマクロがサポートされています。 |
|
| 説明 | スクリプトの説明を入力します。 | |
| ホストグループ | スクリプトを使用できるホストグループを選択します(すべてのホストグループの場合はすべて)。 | |
| ユーザーグループ | スクリプトを使用できるユーザーグループを選択します(すべてのユーザーグループの場合はすべて)。 スコープで「手動ホストアクション」または「手動イベントアクション」が選択されている場合のみ、このフィールドが表示されます。 |
|
| 必要なホスト権限 | ホストグループの権限レベル(読み取りまたは書き込み)を選択します。必要な権限レベルを持つユーザーのみがスクリプトを実行できます。 スコープで「手動ホストアクション」または「手動イベントアクション」が選択されている場合のみ、このフィールドが表示されます。 |
|
| 詳細設定 | 詳細設定ヘッダーをクリックすると、詳細設定のオプションが表示されます。 スコープで「手動ホストアクション」または「手動イベントアクション」が選択されている場合のみ、このフィールドが表示されます。 |
|
高度な設定
高度な設定オプションは、折りたたみ可能な 高度な設定 セクションで使用できます。

| パラメータ | 説明 |
|---|---|
| ユーザー入力を有効にする | スクリプトの実行前にユーザーが手動で入力できるようにするには、チェックボックスを選択します。 手動で入力した値は、スクリプト内の {MANUALINPUT} マクロの値を置き換えます。 関連項目: 手動ユーザー入力。 |
| 入力プロンプト | ユーザー入力を促すカスタムテキストを入力します。このテキストは、手動入力 ポップアップの入力フィールドの上に表示されます。 手動入力 ポップアップのプレビューを表示するには、ユーザー入力をテスト をクリックします。プレビューでは、入力文字列が入力検証ルール(以下のパラメータを参照)に準拠しているかどうかもテストできます。 マクロおよびユーザーマクロのサポートは、スクリプトのスコープによって異なります(一般的なスクリプト設定パラメータの スコープ を参照)。 |
| 入力タイプ | 手動入力のタイプを選択します。 文字列 - 1つの文字列; ドロップダウン - 複数のドロップダウンオプションから値を選択します。 |
| ドロップダウンオプション | ユーザー入力のドロップダウンに表示する重複しない値を、カンマ区切りのリストで入力します。 ドロップダウンに空のオプションを含めるには、リストの先頭、途中、または末尾にカンマを追加します。 このフィールドは、入力タイプ で「ドロップダウン」を選択した場合にのみ表示されます。 |
| デフォルトの入力文字列 | ユーザー入力のデフォルト文字列(または何も入力しない)を入力します。 このフィールドは、入力検証ルール フィールドに指定された正規表現に対して検証されます。 ここで入力した値は、手動入力 ポップアップにデフォルトで表示されます。 このフィールドは、入力タイプ で「文字列」を選択した場合にのみ表示されます。 |
| 入力検証ルール | ユーザー入力文字列を検証する正規表現を入力します。 グローバル正規表現がサポートされています。 このフィールドは、入力タイプ で「文字列」を選択した場合にのみ表示されます。 |
| 確認を有効にする | スクリプトの実行前に確認メッセージを表示するには、チェックボックスを選択します。この機能は、危険を伴う可能性のある操作(再起動スクリプトなど)や、完了までに長時間かかる可能性のある操作で特に役立ちます。 |
| 確認テキスト | 上記のチェックボックスで有効にした確認ポップアップに表示するカスタム確認テキストを入力します(例: リモートシステムを再起動します。よろしいですか?)。テキストの表示を確認するには、フィールドの横にある 確認をテスト をクリックします。 マクロおよびカスタムユーザーマクロがサポートされています。 注: 確認メッセージのテスト時には、マクロは展開されません。 |
手動ユーザー入力と確認メッセージの両方が設定されている場合、それらは連続するポップアップウィンドウに表示されます。
手動ユーザー入力
手動ユーザー入力を使用すると、スクリプトを実行するたびにカスタムパラメータを指定できます。 これにより、パラメータが1つだけ異なる類似のユーザースクリプトを複数作成する必要がなくなります。
例えば、スクリプトの実行時に異なる整数値やURLアドレスを指定できます。
手動ユーザー入力を有効にするには、次の手順を実行します。
- 必要な箇所(コマンド、スクリプト、スクリプトパラメータ)でスクリプト内の{MANUALINPUT}マクロを使用します。または、URLスクリプトのURLフィールドで使用します。
- スクリプトの詳細設定で、手動ユーザー入力を有効にし、入力オプションを設定します。
ユーザー入力を有効にすると、スクリプトの実行前に、カスタム値の入力を求める手動入力ポップアップが表示されます。 入力された値は、スクリプト内の{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 パラメータを変更する必要があることを意味します。
アクティブエージェントでのスクリプトタイムアウト
scripts は、アクティブモードで動作しているエージェント上でのみ実行できます。 スクリプトの実行は、アクションのoperationまたは手動でのスクリプト実行によってトリガーされると、そのコマンドはアクティブチェックの設定に含まれ、アクティブエージェントが受信した時点で実行されます。
手動スクリプトは、スクリプト実行用のサーバー/プロキシのタイムアウトとともにアクティブエージェントへ送信されます。デフォルトのserver/proxyのスクリプト実行タイムアウトを増やしてください。 このタイムアウトは、アクティブチェックの更新頻度よりも大きくする必要があります。そうでない場合、アクティブエージェントがスクリプトを受信して結果を返せるようになる前にタイムアウトしてしまいます。
Zabbixサーバー/プロキシでのスクリプトタイムアウト
Zabbixサーバーで実行されるスクリプトと、その結果ウィンドウの例を以下に示します。
sleep 11
df -h

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