3 スクリプト
概要
アラート → スクリプト セクションでは、ユーザー定義のグローバルスクリプトを設定および管理できます。
グローバルスクリプトは、設定されたスコープおよびユーザー権限に応じて、以下の場所から実行できます。
スクリプトは、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 |
|
| スコープ | スクリプトのスコープ - アクションオペレーション、手動ホストアクション、または手動イベントアクション。この設定により、スクリプトを使用できる場所が決まります。アクションオペレーションのリモートコマンド、ホストメニュー、またはイベントメニューからそれぞれ実行できます。 スコープを「アクションオペレーション」に設定すると、アラート → アクションへのアクセス権を持つすべてのユーザーがスクリプトを利用できます。 スクリプトが実際にアクションで使用されている場合、スコープを「アクションオペレーション」以外に変更することはできません。 マクロサポート スコープによって利用可能なマクロの範囲が異なります。たとえば、スクリプトを起動したユーザーに関する情報を渡すために、ユーザー関連のマクロ({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 | ||
| 認証方式 | 認証方式を選択します - パスワードまたは公開鍵。 | |
| ユーザー名 | ユーザー名を入力します。 | |
| パスワード | パスワードを入力します。 認証方式で「パスワード」を選択した場合にこのフィールドが表示されます。 |
|
| 公開鍵ファイル | 公開鍵ファイルへのパスを入力します。 認証方式で「公開鍵」を選択した場合にこのフィールドが表示されます。 |
|
| 秘密鍵ファイル | 秘密鍵ファイルへのパスを入力します。 認証方式で「公開鍵」を選択した場合にこのフィールドが表示されます。 |
|
| パスフレーズ | パスフレーズを入力します。 認証方式で「公開鍵」を選択した場合にこのフィールドが表示されます。 |
|
| ポート | ポートを入力します。 | |
| コマンド | コマンドを入力します。 マクロサポートはスクリプトのスコープによって異なります(上記スコープ参照)。カスタムユーザーマクロがサポートされています。 |
|
| スクリプトタイプ: Telnet | ||
| ユーザー名 | ユーザー名を入力します。 | |
| パスワード | パスワードを入力します。 | |
| ポート | ポートを入力します。 | |
| コマンド | コマンドを入力します。 マクロサポートはスクリプトのスコープによって異なります(上記スコープ参照)。カスタムユーザーマクロがサポートされています。 |
|
| スクリプトタイプ: IPMI | ||
| コマンド | IPMIコマンドを入力します。 マクロサポートはスクリプトのスコープによって異なります(上記スコープ参照)。カスタムユーザーマクロがサポートされています。 |
|
| 説明 | スクリプトの説明を入力します。 | |
| ホストグループ | スクリプトを利用可能にするホストグループを選択します(またはすべてを選択するとすべてのホストグループで利用可能)。 | |
| ユーザーグループ | スクリプトを利用可能にするユーザーグループを選択します(またはすべてを選択するとすべてのユーザーグループで利用可能)。 このフィールドは、「手動ホストアクション」または「手動イベントアクション」がスコープとして選択されている場合のみ表示されます。 |
|
| 必要なホスト権限 | ホストグループの権限レベル(読み取りまたは書き込み)を選択します。必要な権限レベルを持つユーザーのみがスクリプトの実行にアクセスできます。 このフィールドは、「手動ホストアクション」または「手動イベントアクション」がスコープとして選択されている場合のみ表示されます。 |
|
| 詳細設定 | 詳細設定ラベルをクリックすると、詳細設定オプションが表示されます。 このフィールドは、「手動ホストアクション」または「手動イベントアクション」がスコープとして選択されている場合のみ表示されます。 |
|
詳細設定
詳細設定オプションは、折りたたみ可能な詳細設定セクションで利用できます。

| パラメータ | 説明 |
|---|---|
| ユーザー入力を有効にする | スクリプトの実行前に手動でユーザー入力を有効にするには、チェックボックスをオンにします。 手動ユーザー入力は、スクリプト内の{MANUALINPUT}マクロ値を置き換えます。 詳細は、手動ユーザー入力を参照してください。 |
| 入力プロンプト | カスタムユーザー入力を促すカスタムテキストを入力します。このテキストは、手動入力ポップアップの入力フィールドの上に表示されます。 手動入力ポップアップのプレビューを表示するには、ユーザー入力のテストをクリックします。プレビューでは、入力文字列が入力検証ルール(下記パラメータ参照)に準拠しているかどうかもテストできます。 マクロおよびユーザーマクロのサポートは、スクリプトのスコープによって異なります(一般スクリプト設定パラメータのスコープを参照)。 |
| 入力タイプ | 手動入力タイプを選択します: 文字列 - 単一の文字列; ドロップダウン - 複数のドロップダウンオプションから値を選択。 |
| ドロップダウンオプション | ユーザー入力ドロップダウンの一意の値をカンマ区切りリストで入力します。 ドロップダウンに空のオプションを含めるには、リストの先頭、中間、または末尾にカンマを追加します。 このフィールドは、入力タイプで「ドロップダウン」が選択されている場合のみ表示されます。 |
| デフォルト入力文字列 | ユーザー入力のデフォルト文字列(またはなし)を入力します。 このフィールドは、入力検証ルールフィールドで指定された正規表現に対して検証されます。 ここで入力した値は、手動入力ポップアップでデフォルトで表示されます。 このフィールドは、入力タイプで「文字列」が選択されている場合のみ表示されます。 |
| 入力検証ルール | ユーザー入力文字列を検証するための正規表現を入力します。 グローバル正規表現がサポートされています。 このフィールドは、入力タイプで「文字列」が選択されている場合のみ表示されます。 |
| 確認を有効にする | スクリプトの実行前に確認メッセージを表示するには、チェックボックスをオンにします。この機能は、(リブートスクリプトのような)危険な操作や長時間かかる可能性のある操作で特に便利です。 |
| 確認テキスト | 上記のチェックボックスで有効にした確認ポップアップ用のカスタム確認テキストを入力します(例:リモートシステムが再起動されます。本当に実行しますか?)。テキストの表示例を確認するには、フィールド横の確認のテストをクリックします。 マクロおよびカスタムユーザーマクロがサポートされています。 注: 確認メッセージのテスト時にはマクロは展開されません。 |
手動ユーザー入力と確認メッセージの両方が設定されている場合、連続したポップアップウィンドウで表示されます。
手動ユーザー入力
手動ユーザー入力を使用すると、スクリプトの実行ごとにカスタムパラメータを指定できます。これにより、パラメータが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エージェントのアクティブモードの場合は、Zabbixエージェントの設定のRefreshActiveChecksパラメータよりも、Zabbixサーバーの設定のTimeoutパラメータを数秒以上長く設定する必要があります。
これにより、サーバーがエージェントからアクティブチェックの結果を受信するのに十分な時間が確保されます。アクティブエージェントでのスクリプト実行は、Zabbixエージェント7.0以降でサポートされています。
Zabbixエージェントの設定でTimeoutパラメータを変更した場合、次のエラーメッセージが表示されます。
Get value from agent failed: ZBX_TCP_READ() timed out.
これは、Zabbixエージェントの設定で変更が行われたことを意味しますが、Zabbixサーバーの設定のTimeoutパラメータも変更する必要があります。
Zabbixサーバー/プロキシ
Zabbixサーバーでスクリプトを実行した例と、下の結果ウィンドウを参照してください:
sleep 11
df -h

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