3 スクリプト

概要

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

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

  • ホストメニュー から、さまざまな Webインターフェース の場所(ダッシュボード障害最新データマップ など)
  • イベントメニュー から
  • アクションのオペレーションとして実行可能

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

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

表示されるデータ:

Column Description
Name スクリプト名です。スクリプト名をクリックすると、スクリプトの設定フォームが開きます。
Scope スクリプトのスコープです - アクションのオペレーション、手動ホストアクション、または手動イベントアクション。ここでの設定により、スクリプトを利用できる場所が決まります。
Used in actions スクリプトが使用されているすべてのアクションが、その総数を先頭に付けて表示されます。
アクション名をクリックすると、アクション設定フォームが開きます。ユーザーにそのアクションへの権限がない場合、名前はクリックできません。
Type スクリプトの種類が表示されます - URLWebhookScriptSSHTelnet、または IPMI コマンド。
Execute on スクリプトが Zabbix エージェント、Zabbix プロキシ、サーバー、または Zabbix サーバーのみのどこで実行されるかが表示されます。
Commands スクリプト内で実行されるすべてのコマンドが表示されます。
webhook ではここには何も表示されません。
User group スクリプトを利用できるユーザーグループが表示されます(すべてのユーザーグループの場合は All)。
Host group スクリプトを利用できるホストグループが表示されます(すべてのホストグループの場合は All)。
Host access ホストグループの権限レベルが表示されます - Read または Write。必要な権限レベルを持つユーザーのみがスクリプトを実行できます。

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

一括編集オプション

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

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

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

フィルターの使用

フィルターを使用して、関心のあるスクリプトのみを表示できます。 検索性能を向上させるため、データはマクロが展開されていない状態で検索されます。

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

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

グローバルスクリプトでは、セキュリティ向上のため、単純なマクロではなく macro functions を使用することを推奨します。マクロは自動的にエスケープされないためです。

スクリプトの属性:

Parameter Description
Name スクリプトの一意な名前。
例: Clear /tmp filesystem
Scope スクリプトの範囲 - アクションオペレーション、手動ホストアクション、または手動イベントアクション。この設定により、スクリプトをどこで使用できるかが決まります。つまり、それぞれアクションオペレーションのリモートコマンド、ホストメニュー、またはイベントメニューから使用できます。
範囲を「Action operation」に設定すると、Alerts > Actions へのアクセス権を持つすべてのユーザーがこのスクリプトを利用できます。
スクリプトが実際にアクションで使用されている場合、その範囲を「action operation」以外に変更することはできません。
マクロのサポート
範囲によって使用可能なマクロの種類が異なります。たとえば、ユーザー関連のマクロ ({USER.*}) は、スクリプトを起動したユーザーに関する情報を渡せるようにするため、スクリプトでサポートされています。ただし、アクションオペレーションは自動的に実行されるため、スクリプトの範囲がアクションオペレーションの場合はサポートされません。
{MANUALINPUT} マクロを使用すると、スクリプト実行時に手動入力を指定できます。これは手動ホストアクションおよび手動イベントアクションのスクリプトでサポートされています。
他にどのマクロがサポートされているかは、supported macro テーブル内の 'Trigger-based notifications and commands/Trigger-based commands'、'Manual host action scripts'、'Manual event action scripts' を検索してください。なお、マクロがスペースを含む値(たとえばホスト名)に展開される場合は、必要に応じて引用符で囲むことを忘れないでください。
Menu path スクリプトのメニュー階層を指定します。たとえば、Default または Default/ とすると、スクリプトは該当するディレクトリに表示されます。メニューは入れ子にできます。例: Main menu/Sub menu1/Sub menu2。監視セクションのホスト/イベントメニューからスクリプトにアクセスする場合、指定したディレクトリに従って整理されます。
このフィールドは、Scope に「Manual host action」または「Manual event action」を選択した場合にのみ表示されます。
Type 該当するボタンをクリックしてスクリプトタイプを選択します:
URL, Webhook, Script, SSH, Telnet または IPMI コマンド。
タイプ URL は、Scope に「Manual host action」または「Manual event action」を選択した場合にのみ使用できます。
Script type: URL
URL ホストメニュー または イベントメニュー からすばやくアクセスできる URL を指定します。
マクロ とカスタム ユーザーマクロ がサポートされています。マクロのサポートはスクリプトの範囲に依存します(上記の Scope を参照)。
このフィールドで {MANUALINPUT} マクロを使用すると、スクリプト実行時に手動入力を指定できます。例:
http://{MANUALINPUT}/zabbix/zabbix.php?action=dashboard.view
マクロの値は URL エンコードしてはいけません。
Open in new window URL を新しいブラウザタブで開くか、同じタブで開くかを決定します。
Script type: Webhook
Parameters webhook の変数を属性と値のペアで指定します。
あわせて Webhook メディア設定も参照してください。
パラメーター値では マクロ とカスタム ユーザーマクロ がサポートされています。マクロのサポートはスクリプトの範囲に依存します(上記の Scope を参照)。
Script パラメーターフィールドまたはその横の鉛筆アイコンをクリックすると開くモーダルエディターに、JavaScript コードを入力します。
マクロのサポートはスクリプトの範囲に依存します(上記の Scope を参照)。
あわせて Webhook メディア設定、Additional Javascript objects も参照してください。
Timeout JavaScript の実行タイムアウト(1-60秒、デフォルト 30秒)。
30s、1m のような時間サフィックスがサポートされています。
Script type: Script
Execute on 該当するボタンをクリックして、シェルスクリプトを次のいずれかで実行します:
Zabbix エージェント - スクリプトは、対象ホストで system.run アイテムが 許可されている 場合に Zabbix エージェントによって実行されます。
Zabbix プロキシまたはサーバー - スクリプトは、対象ホストがプロキシまたはサーバーのどちらで監視されているかに応じて、Zabbix プロキシまたはサーバーによって実行されます。
EnableRemoteCommands により有効化されている場合は、プロキシ上で実行されます。
EnableGlobalScripts サーバーパラメーターによりグローバルスクリプトが有効な場合は、サーバー上で実行されます。
Zabbix サーバー - スクリプトは Zabbix サーバーでのみ実行されます。
EnableGlobalScripts サーバーパラメーターによりグローバルスクリプトが無効な場合、このオプションは使用できません。
Commands スクリプト内で実行するコマンドの完全なパスを入力します。
マクロのサポートはスクリプトの範囲に依存します(上記の Scope を参照)。カスタム ユーザーマクロ がサポートされています。
Script type: SSH
Authentication method 認証方法を選択します - パスワードまたは公開鍵。
Username ユーザー名を入力します。
Password パスワードを入力します。
このフィールドは、認証方法として「Password」を選択した場合に使用できます。
Public key file 公開鍵ファイルのパスを入力します。
このフィールドは、認証方法として「Public key」を選択した場合に使用できます。
Private key file 秘密鍵ファイルのパスを入力します。
このフィールドは、認証方法として「Public key」を選択した場合に使用できます。
Passphrase パスフレーズを入力します。
このフィールドは、認証方法として「Public key」を選択した場合に使用できます。
Port Zabbix が接続する対象ホスト上のリモート SSH サービスポートを入力します。
Commands コマンドを入力します。
マクロのサポートはスクリプトの範囲に依存します(上記の Scope を参照)。カスタム ユーザーマクロ がサポートされています。
Script type: Telnet
Username ユーザー名を入力します。
Password パスワードを入力します。
Port Zabbix が接続する対象ホスト上のリモート Telnet サービスポートを入力します。
Commands コマンドを入力します。
マクロのサポートはスクリプトの範囲に依存します(上記の Scope を参照)。カスタム ユーザーマクロ がサポートされています。
Script type: IPMI
Command IPMI コマンドを入力します。
マクロのサポートはスクリプトの範囲に依存します(上記の Scope を参照)。カスタム ユーザーマクロ がサポートされています。
Description スクリプトの説明を入力します。
Host group スクリプトを利用可能にするホストグループを選択します(すべてのホストグループに対しては All)。
User group スクリプトを利用可能にするユーザーグループを選択します(すべてのユーザーグループに対しては All)。
このフィールドは、Scope に「Manual host action」または「Manual event action」を選択した場合にのみ表示されます。
Required host permissions ホストグループの権限レベルを選択します - Read または Write。必要な権限レベルを持つユーザーのみがスクリプトを実行できます。
このフィールドは、Scope に「Manual host action」または「Manual event action」を選択した場合にのみ表示されます。
Advanced configuration Advanced configuration の見出しをクリックすると、advanced configuration オプションが表示されます。
このフィールドは、Scope に「Manual host action」または「Manual event action」を選択した場合にのみ表示されます。

詳細設定

折りたたみ可能な 詳細設定 セクションで、詳細設定オプションを利用できます。

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 より大きい値)に調整するのではなく、スクリプト自体を最適化することも推奨されます。