You are viewing documentation for the development version, it may be incomplete.
Join our translation project and help translate Zabbix documentation into your native language.

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サーバーでのグローバルスクリプトの実行はデフォルトで無効になっています。

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

表示されるデータ:

説明
名前 スクリプトの名前。スクリプト名をクリックすると、スクリプトの設定フォームが開きます。
スコープ スクリプトのスコープ - アクションオペレーション、手動ホストアクション、または手動イベントアクション。この設定により、スクリプトが利用可能な場所が決まります。
アクションでの使用 スクリプトが使用されているすべてのアクションが、これらのアクションの合計数を先頭に付けて表示されます。
アクション名をクリックすると、アクションの設定フォームが開きます。ユーザーにアクションへの権限がない場合、名前はクリックできません。
タイプ スクリプトのタイプが表示されます - URLWebhookスクリプトSSHTelnet、または IPMI コマンド。
実行先 スクリプトがZabbixエージェント、Zabbixプロキシまたはサーバー、またはZabbixサーバーのみで実行されるかどうかが表示されます。
コマンド スクリプト内で実行されるすべてのコマンドが表示されます。
Webhookの場合は何も表示されません。
ユーザーグループ スクリプトが利用可能なユーザーグループが表示されます(すべてのユーザーグループの場合は すべて)。
ホストグループ スクリプトが利用可能なホストグループが表示されます(すべてのホストグループの場合は すべて)。
ホストアクセス ホストグループの権限レベルが表示されます - 読み取り または 書き込み。必要な権限レベルを持つユーザーのみがスクリプトの実行にアクセスできます。

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

一括編集オプション

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

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

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

フィルターの使用

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

フィルター リンクはスクリプトのリストの上にあります。これをクリックすると、名前やスコープでスクリプトをフィルタリングできるフィルターが利用可能になります。

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

スクリプトの属性:

パラメータ 説明
名前 スクリプトの一意の名前。
例: Clear /tmp filesystem
スコープ スクリープトのスコープ - アクション操作、手動ホストアクション、または手動イベントアクション。この設定により、スクリプトが使用できる場所が決まります。アクション操作のリモートコマンド、ホストメニュー、またはイベントメニューからそれぞれ実行できます。
スコープを「アクション操作」に設定すると、アラートアクション へのアクセス権を持つすべてのユーザーがスクリプトを利用できるようになります。
スクリプトが実際にアクションで使用されている場合、スコープを「アクション操作」以外に変更することはできません。
マクロのサポート
スコープは利用可能なマクロの範囲に影響します。たとえば、スクリプトを起動したユーザーに関する情報を渡すために、ユーザー関連のマクロ({USER.*})がサポートされています。ただし、アクション操作のスクリプトでは、アクション操作が自動的に実行されるため、サポートされません。
{MANUALINPUT}マクロを使用すると、スクリプト実行時に手動入力を指定できます。これは手動ホストアクションおよび手動イベントアクションのスクリプトでサポートされています。
他にどのマクロがサポートされているかを確認するには、サポートされているマクロテーブルで「トリガーベースの通知とコマンド/トリガーベースのコマンド」、「手動ホストアクションスクリプト」、「手動イベントアクションスクリプト」を検索してください。マクロがスペースを含む値(例: ホスト名)に解決される可能性がある場合は、必要に応じて引用符で囲むことを忘れないでください。
メニューパス スクリプトの希望するメニューパス。たとえば、Default または Default/ とすると、該当するディレクトリにスクリプトが表示されます。メニューはネスト可能で、例: Main menu/Sub menu1/Sub menu2。監視セクションでホスト/イベントメニューからスクリプトにアクセスする場合、指定されたディレクトリに従って整理されます。
このフィールドは、スコープに「手動ホストアクション」または「手動イベントアクション」が選択されている場合のみ表示されます。
タイプ 該当するボタンをクリックしてスクリプトタイプを選択します:
URLWebhookスクリプトSSHTelnet、または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より大きい値)に調整するのではなく、スクリプト自体を最適化することを推奨します。