3 スクリプト

概要

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

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

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

スクリプトは、Zabbixエージェント、Zabbixサーバー(プロキシ)、またはZabbixサーバーのみで実行されます。 コマンドの実行も参照してください。

リモートコマンドは、ZabbixエージェントとZabbixプロキシの両方でデフォルトでは無効になっています。 次の方法で有効にできます。

  • Zabbixエージェントで実行するリモートコマンドの場合、エージェント設定に、許可する各コマンドの AllowKey=system.run[<command>,*] パラメータを追加します。ここで、* は実行モード(wait または nowait)のいずれかに一致します。
  • Zabbixプロキシで実行するリモートコマンドの場合、プロキシ設定で EnableRemoteCommands パラメータを 1 に設定します。 プロキシで監視しているホスト上のZabbixエージェントによってリモートコマンドが実行される場合、Zabbixプロキシでリモートコマンドを有効にする必要はありません。

必要な場合を除き、AllowKey=system.run[*] は使用しないでください。ホスト上の任意のコマンドの実行が許可されるためです。 セキュリティ上の理由から、正確なコマンドのみを許可することを推奨します。system.run[*] はデフォルトで拒否されます(DenyKey=system.run[*])。

Zabbixサーバーでのグローバルスクリプトの実行は、サーバー設定で EnableGlobalScripts=0 を設定することで無効にできます。 Zabbix 7.0以降で新規インストールした場合、Zabbixサーバーでのグローバルスクリプトの実行はデフォルトで無効になっています。

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

表示されるデータ:

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

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

一括編集オプション

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

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

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

フィルターの使用

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

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

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

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

スクリプトの属性:

パラメータ 説明
名前 スクリプトの一意の名前。
例: Clear /tmp filesystem
スコープ スクリプトのスコープ - アクションのオペレーション、手動ホストアクション、または手動イベントアクション。ここでの設定により、スクリプトを使用できる場所が決まります。つまり、アクションのリモートコマンドのオペレーション、ホストメニュー、またはイベントメニューで使用できます。
スコープを「アクションのオペレーション」に設定すると、Alerts > Actions にアクセスできるすべてのユーザーがスクリプトを使用できるようになります。
スクリプトが実際にアクションで使用されている場合、そのスコープを「アクションのオペレーション」以外に変更することはできません。
マクロのサポート
スコープは、使用可能なマクロの範囲に影響します。例えば、スクリプトを起動したユーザーの情報を渡せるように、ユーザー関連のマクロ({USER.*})はスクリプトでサポートされています。ただし、アクションのオペレーションは自動的に実行されるため、スクリプトのスコープがアクションのオペレーションの場合はサポートされません。
{MANUALINPUT} マクロを使用すると、スクリプトの実行時に手動入力を指定できます。このマクロは、手動ホストアクションおよび手動イベントアクションのスクリプトでサポートされています。
その他にサポートされているマクロについては、サポートされているマクロの表で、「Trigger-based notifications and commands/Trigger-based commands」、「Manual host action scripts」、「Manual event action scripts」を検索してください。マクロがスペースを含む値(ホスト名など)に展開される可能性がある場合は、必要に応じて引用符で囲むことを忘れないでください。
メニューパス スクリプトの目的のメニューパス。例えば、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 パラメータを変更する必要があることを意味します。

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

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

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

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

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

sleep 11
df -h

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