3 スクリプト

概要

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

このメニューは、SuperAdmin ユーザータイプのユーザーのみが利用できます。

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

スクリプトは 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 スクリプトが使用されているすべてのアクションが表示されます(Zabbix 7.0.4 以降は、これらのアクションの合計数が前に表示されます)。
アクション名をクリックすると、アクションの設定フォームが開きます。ユーザーにそのアクションへの権限がない場合、名前はクリックできません。
Type スクリプトの種類が表示されます - URL、Webhook、Script、SSH、Telnet、または IPMI コマンド。
Execute on スクリプトが Zabbix エージェント、Zabbix プロキシまたはサーバー、あるいは Zabbix サーバーのみで実行されるかどうかが表示されます。
Commands スクリプト内で実行されるすべてのコマンドが表示されます。
webhook ではここには何も表示されません。
User group スクリプトを利用できるユーザーグループが表示されます(すべてのユーザーグループに対しては All)。
Host group スクリプトを利用できるホストグループが表示されます(すべてのホストグループに対しては All)。
Host access ホストグループの権限レベルが表示されます - Read または Write。必要な権限レベルを持つユーザーのみがスクリプトを実行できます。

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

一括編集オプション

一覧の下にあるボタンでは、次の一括編集オプションを利用できます。

  • Delete - スクリプトを削除します

このオプションを使用するには、対象のスクリプトの前にあるチェックボックスを選択し、Delete をクリックします。

フィルターの使用

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

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

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

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

スクリプト属性:

パラメータ 説明
名前 スクリプトの一意の名前。
例: 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つのパラメータだけが異なる複数の類似したユーザースクリプトを作成する必要がなくなります。

たとえば、実行時に異なる整数値や異なる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.

このような状況を避けるには、Timeout パラメータを Zabbix agent configuration や Zabbix server configuration で調整するのではなく、スクリプト自体を最適化することを推奨します(上の例では "5")。

Zabbix agent configuration で Timeout パラメータが変更されている場合、次のエラーメッセージが表示されます。

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

これは、Zabbix agent configuration での変更は行われているものの、Zabbix server configuration でも Timeout パラメータを変更する必要があることを意味します。

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

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

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

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

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

sleep 11
df -h

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