21. 拡張機能

概要

Zabbix は多くの機能を提供していますが、追加機能の余地は常にあります。
拡張機能は、ソースコードを変更することなく、Zabbix の監視機能を変更および強化するための便利な方法です。

組み込みの拡張オプション(トラッパーアイテム、ユーザーパラメータなど)を使用するか、カスタム拡張機能(ロード可能モジュール、プラグインなど)を使用または作成することで、Zabbix の機能を拡張できます。

このセクションでは、Zabbix を拡張するためのすべてのオプションへの参照を含む概要を説明します。

カスタムコマンドによるデータ収集

トラッパーアイテム

トラッパーアイテム は、データを問い合わせて取得するのではなく、受信したデータを受け付けるアイテムです。
トラッパーアイテムは、特定のデータをZabbixサーバーまたはプロキシに送信する場合に便利です。たとえば、長時間実行されるユーザースクリプトにおける定期的な可用性データやパフォーマンスデータの送信に使用できます。
Zabbixサーバーまたはプロキシへのデータ送信は、Zabbix sender ユーティリティまたは Zabbix sender のプロトコルを使用して可能です。
Zabbixサーバーへのデータ送信は、history.push APIメソッドを使用して行うこともできます。

外部チェック

外部チェック は、実行可能ファイルを実行してチェックを行うためのアイテムです。たとえば、シェルスクリプト やバイナリを実行します。

外部チェックは Zabbix サーバーまたはプロキシ(ホストがプロキシによって監視されている場合)によって実行され、監視対象のホスト上で動作するエージェントは必要ありません。

ユーザーパラメータ

ユーザーパラメータ はユーザー定義キーに関連付けられたユーザー定義コマンドで、実行されると、Zabbixエージェントが稼働しているホストから必要なデータを取得できます。 ユーザーパラメータは、Zabbixであらかじめ定義されていないエージェントまたはエージェント 2 のアイテムを設定する際に役立ちます。

system.run[] Zabbix エージェントアイテム

system.run[] Zabbix エージェントアイテム は、ユーザー定義コマンド用のアイテムです(事前定義されたキー system.run[] に関連付けられています。 たとえば system.run[myscript.sh])。このコマンドは、Zabbix エージェントが実行されているホスト上で実行できます。

注: system.run[] アイテムはデフォルトで無効になっており、使用する場合は、 有効化(許可)し、Zabbix エージェントまたは agent 2 の設定ファイル (AllowKey 設定パラメータ)で定義する必要があります。

外部チェック、ユーザーパラメータ、system.run[] Zabbixエージェントアイテムなどのアイテム内のユーザー定義コマンドは、 Zabbixコンポーネントの実行に使用されるOSユーザーによって実行されます。 これらのコマンドを実行するには、このユーザーに必要な権限が付与されている必要があります。

HTTPエージェントアイテム

HTTPエージェントアイテムは、HTTP/HTTPS経由でデータリクエストを実行するためのアイテムです。
HTTPエージェントアイテムは、HTTPエンドポイントにリクエストを送信して、ElasticsearchOpenWeatherMap などのサービスからデータを取得したり、Zabbix API のステータスや Apache または Nginx Webサーバーのステータスを確認したりするのに役立ちます。
HTTPエージェントアイテム(トラップを有効にした場合)は、トラッパーアイテムとして機能することもできます。

スクリプトアイテム

スクリプトアイテム は、HTTP/HTTPS 経由でデータを取得するユーザー定義の JavaScript コードを実行するためのアイテムです。 スクリプトアイテムは、HTTPエージェントアイテムで提供される機能だけでは不十分な場合に役立ちます。 たとえば、複数の手順や複雑なロジックを必要とする高度なデータ収集シナリオでは、 スクリプトアイテムを設定して HTTP 呼び出しを行い、受信したデータを処理し、 その後、変換した値を 2 回目の HTTP 呼び出しに渡すことができます。

HTTPエージェントアイテムおよびスクリプトアイテムは、Zabbixサーバーおよびプロキシでサポートされており、 監視対象のホスト上でエージェントを実行する必要はありません。

高度な拡張機能

ロード可能モジュール

Cで記述されたロード可能モジュールは、UNIXプラットフォーム上のZabbixコンポーネント(サーバー、プロキシ、エージェント)の機能を拡張するための、柔軟性が高く高性能な選択肢です。ロード可能モジュールは基本的に、Zabbixデーモンによって使用され、起動時に読み込まれる共有ライブラリです。 ライブラリには特定の関数が含まれている必要があり、 それによりZabbixプロセスは、そのファイルが実際に読み込み可能で利用できるモジュールであることを判別できます。

ロード可能モジュールには多くの利点があります。たとえば、新しいメトリクスを追加したり、その他の任意のロジックを実装したりできること (例: Zabbixの履歴データのエクスポート)、 高いパフォーマンス、さらにそれらが提供する機能を開発、利用、共有できることです。 これにより、問題のない保守に貢献し、 Zabbixコアコードベースとは独立して、新機能をより容易に提供できるようになります。

ロード可能モジュールは、特に複雑な監視構成で有用です。 組み込みシステムを監視する場合、監視対象パラメータの数が多い場合、 または複雑なロジックや長い起動時間を伴う重いスクリプトを使用する場合、 ユーザーパラメータ、system.run[] Zabbixエージェントのアイテム、外部チェックなどの拡張機能は、 パフォーマンスに影響を与えます。 ロード可能モジュールは、パフォーマンスを犠牲にすることなくZabbixの機能を拡張する方法を提供します。

プラグイン

プラグインは、Zabbix agent 2 の監視機能を拡張します。
Goプログラミング言語で記述されており、ロード可能モジュール(Cで記述)に代わる選択肢を提供します。

プラグインは、構造を定義し、1つまたは複数のプラグインインターフェース(ExporterCollectorConfiguratorRunnerWatcher)を実装するGoパッケージです。
Zabbix agent 2 では、次の2種類のプラグインがサポートされています。

Zabbix が提供するプラグインの一覧を参照してください。

独自のプラグインを作成するための手順やチュートリアルについては、Developer centerを参照してください。

アラートのカスタマイズ

Webhook

webhook はZabbixのメディアタイプの1つであり、 ヘルプデスクシステム、チャット、メッセンジャーなどの外部ソフトウェアへ Zabbixのアラート機能を拡張するための手段を提供します。 スクリプトアイテムと同様に、webhookはカスタムJavaScriptコードを使用してHTTP呼び出しを行うのに便利で、 たとえばMicrosoft Teams、Discord、Jiraなどのさまざまなプラットフォームに通知を送信できます。 また、何らかのデータ(たとえば、作成されたヘルプデスクチケットに関する情報)を返し、 それをZabbix内に表示することも可能です。

既存のwebhookは、 ZabbixのGitリポジトリ で利用できます。 カスタムwebhookの開発については、 Webhook development guidelinesを参照してください。

アラートスクリプト

アラートスクリプト は、Zabbixのメディアタイプ の一種であり、Zabbixアラートを処理するための代替手段(スクリプト)を作成するオプションを提供します。 アラートスクリプトは、Zabbixでアラートを送信するための既存のメディアタイプに満足できない場合に役立ちます。

Webインターフェースのカスタマイズ

カスタムテーマ

カスタムテーマを使用して、Zabbix Webインターフェースの外観を変更できます。独自のテーマの作成と適用については、手順を参照してください。

Webインターフェースモジュール

Webインターフェースモジュール では、サードパーティ製モジュールを追加したり、独自に開発したりすることで、 Zabbix Webインターフェースの機能を拡張できます。 Webインターフェースモジュールを使用すると、新しいメニュー項目や、それに対応するビュー、アクションなどを追加できます。

グローバルスクリプト

グローバルスクリプト は、設定されたスコープとユーザー権限に応じて、監視対象上で(shell (/bin/sh) インタープリターにより)実行できる、ユーザー定義のコマンドセットです。 グローバルスクリプトは、以下のアクション向けに設定できます。

グローバルスクリプトは、多くの場面で役立ちます。 例えば、アクションの実行内容または手動ホストアクション用に設定した場合、グローバルスクリプトを使用して、 アプリケーション(Webサーバー、ミドルウェア、CRM など)の再起動や、 ディスク容量の解放(古いファイルの削除、/tmp のクリーンアップなど)といった リモートコマンド を自動または手動で実行できます。 また別の例として、手動イベントアクション用に設定した場合は、 グローバルスクリプトを使用して外部システム内の障害チケットを管理できます。

グローバルスクリプトは、Zabbixサーバー、プロキシ、またはエージェントによって実行できます。

ユーザー定義コマンドは、Zabbixコンポーネントの実行に使用されるOSユーザーとして実行されます。 これらのコマンドを実行するには、このユーザーに必要な権限が付与されている必要があります。

Zabbix API

Zabbix API は、Zabbix Webインターフェースの一部である HTTP ベースの API です。 Zabbix API を使用すると、次のいずれかの操作を実行できます。

  • Zabbix の設定をプログラムから取得および変更する。
  • Zabbix の設定をインポートおよびエクスポートする。
  • Zabbix の履歴データおよびトレンドデータにアクセスする。
  • アプリケーションが Zabbix と連携して動作するように設定する。
  • Zabbix をサードパーティ製ソフトウェアと統合する。
  • 定型作業を自動化する。

Zabbix API は多数のメソッドで構成されており、それらは名目上、個別の API にグループ化されています。 各メソッドは特定のタスクを実行します。 利用可能なメソッド、および Zabbix API が提供する機能の概要については、Zabbix API のメソッドリファレンスを参照してください。