Zabbix 6.0 の紹介

本記事では、2022/2/15 にリリースされた Zabbix 6.0.0 で追加された機能や変更点について解説します。

Zabbix 6.0 の主な機能追加・変更点を以下に挙げます。

Zabbix Server の HA クラスタのネイティブサポート

Zabbix server の HA クラスタをサードパーティの HA クラスタソフトウェアを利用せずに構築できるようになりました。これにより Zabbix server の HA 構成を取る際に、Zabbix のネイティブな HA クラスタ機能を利用するか、従来のサードパーティの HA ソリューションを用いた構成を利用するか選択できます。

Zabbix の HA クラスターは複数の zabbix_server ノードで構成されます。一度にアクティブ(動作中)にできるノードは 1 つだけで、他のノードはアクティブなノードが停止または障害が発生した場合に備えてスタンバイ状態になっています。また、各ノードは 1 つの DB を共有します。

「レポート」→「システム情報」ページよりクラスタ内の各ノードのステータスを確認することができます。

詳細は High availability cluster をご参照ください。

サービス監視機能

「サービスセクション」の独立

「サービス」セクションが独立し、1 セクション内で設定と監視が完結するようになりました。

サービスと障害の紐づけをトリガーからタグに変更

サービスのステータスが任意のトリガーではなくタグに紐づくようになりました。サービスの状態は障害タグとして設定されたタグを持つホストやトリガーの状態によって計算されます。

ステータス計算ルールの更新と高度な設定の追加

子サービスのステータスから親サービスのステータスを計算するためのルールが一新されました。新しいステータス計算ルールは以下のようになります。

ステータス計算ルール 説明
子サービスで最も重要 1 つでも子サービスが障害であった場合に障害となり、その障害のうち最も高い深刻度をステータスとする
すべての子が障害であったときに最も重要 すべての子サービスが障害であった場合に障害となり、その障害のうち最も高い深刻度をステータスとする
ステータスを正常に設定 ステータスは計算せず常に正常

また、追加ルールやステータス伝搬ルール、重みなどの追加設定により、より柔軟で複雑なステータスの伝搬も可能となります。

根本原因の表示

Zabbix 6.0 では障害タグを指定するため 1 つのサービスに対し、複数のトリガーが影響するようになります。新しく追加された「根本原因」列には、そのサービスの状態に影響を及ぼしているトリガーの一覧が表示されるようになります。

サービスに関する権限付与

ユーザーロール単位でサービスへの Read-Write 権限の付与が可能になりました。これにより、サービスのマルチテナント化も可能です。

権限の付与は「管理」→「ユーザーの役割」ページより設定を行います。付与の対象は個々のサービス、またはサービスタグによる指定が可能です。

サービスアクション実装

Zabbix 6.0 よりトリガーアクションなどと同様にサービスの状態変化によるアクション実行が可能になりました。

「サービス」→「サービスアクション」ページより設定を行います。実行条件は「サービス」、「サービス名」、「サービスのタグ名」、「サービスのタグの値」から選択できます。

サービス監視関連のメッセージテンプレート追加

各メディアタイプのメッセージテンプレートに「サービス」、「サービスの復旧」、「サービスの更新」タイプが追加されました。

ご利用のメディアタイプにこれらのテンプレートを設定しておくことで、複数のサービスアクションで同様のメッセージを送信させることができます。

サービスの複製

設定フォームの「複製」をクリックすることでサービス設定の複製が可能になりました。ただし、親サービスは継承されますが、子となるサービスは継承されません。

フロントエンド

新規ウィジェットの追加

「上位ホスト」ウィジェット

「上位ホスト」ウィジェットは非推奨となった「データの概要」ウィジェットの代替として、ユーザーがカスタマイズ可能なデータ概要テーブルを提供します。特定のアイテムの上位 N ホストやキャパシティプランニングに有用なプログレスバーの表示などが可能です。

「アイテムの値」ウィジェット

ダッシュボードに単一のアイテムの値を目立つように表示させることができます。「高度な設定」にチェックを入れることで様々な表示スタイルが可能です。

「地理マップ」ウィジェット

ホストを地理的なマップ上に表示させることができます。発生している障害の深刻度によってピンが色付けされて表示されます。

地理マップにホストを表示させるには事前に以下を行う必要があります。

  • ホストのインベントリの緯度・経度の設定
  • 「管理」→「一般設定」→「地理マップ」で利用するマップの選択

「監視データ」→「最新データ」ページの更新

「最新のチェック時刻」の表示変更

「最新のチェック時刻」列は最新のチェック時刻ではなく、最新のチェック時刻からの経過時間が表示されるようになりました。また、時間にマウスカーソルを合わせると最新のチェック時刻が表示されます。

「最新の値」の表示変更

「最新の値」列の値にマウスカーソルを合わせると単位や値のマッピングが適用されていない生のデータが表示されるようになりました。

ホストのメンテナンス表示

ホストがメンテナンス中の場合、ホスト名の横にオレンジ色のレンチのアイコンが表示されるようになりました。

サブフィルタの実装

ホスト名やタグによるサブフィルタが追加され、ワンクリックで特定のホストやアイテムの最新値を表示させることが可能になりました。

アイテムに関するコンテキストメニュー追加

「監視データ」→「最新データ」ページ内のアイテム名をクリックするとコンテキストメニューが開き、「グラフ」、「値」、「最新500個の値」から形式を選択し、データを確認したり、アイテムの設定変更を行えるようになりました。

また、「設定」→「ホスト」→「アイテム」設定画面のアイテムリストでアイテム名の左横の 3 点リーダーをクリックすると、コンテキストメニューが開き、最新データの確認やトリガーの設定ができます。

テンプレートのリンク状況の視認性向上

以下のフォームにおいてテンプレートとのリンクを設定するタブが削除され、それぞれの最初のタブで設定するように変更されました。

  • ホスト設定フォーム
  • ホストのプロトタイプ設定フォーム
  • テンプレート設定フォーム
  • ホスト一括更新フォーム
  • テンプレート一括更新フォーム

その他変更点

  • 「監視データ」→ 「ホスト」ページでの新規ホスト作成機能
  • ホスト編集画面のポップアップへの変更
  • 「監視データ」→ 「概要」ページの削除
  • 言語設定におけるイギリス英語 (en_GB) の削除およびデフォルト値をアメリカ英語 (en_US) へ変更
  • メニュー画面における Zabbix Share のリンク先を Zabbix 公式サイトのインテグレーションページへ変更
  • アクション設定におけるカスタム式の最大文字列長を 1024 文字に拡張
  • 「監視データ」→「ホスト」ページにおける「障害」列で障害が発生しているホストは深刻度別に色分けして障害数を、障害が発生していないホストは「Problems」を表示

マクロ

新規マクロの追加

トリガー関数用デバッグマクロ

  • {TRIGGER.EXPRESSION.EXPLAIN}, {TRIGGER.EXPRESSION.RECOVERY.EXPLAIN} : アイテムベースの関数に対するトリガー条件式/復旧条件式を部分的に評価して展開
  • {FUNCTION.VALUE<1-9>}, {FUNCTION.RECOVERY.VALUE<1-9>} : トリガー条件式/復旧条件式の N 番目のアイテムベース関数の実際の値を展開

内部イベントアクション用マクロ

  • {ITEM.STATE.ERROR} : 取得不可になったアイテムのエラーメッセージを展開
  • {LLDRULE.STATE.ERROR} : 「不明」状態になった LLD のエラーメッセージを展開
  • {TRIGGER.STATE.ERROR} : 「不明」状態になったトリガーのエラーメッセージを展開

詳細は Supported macros をご参照ください。

その他変更点

  • シンプルマクロのエクスプレッションマクロへの移行
  • アイテム名に対するポジショナルマクロ($1, $2, …, $9)のサポートの削除
  • ディスカバリルール名を含むアイテム名に対するユーザーマクロのサポートの削除

Prometheus

Prometheus メトリクスの一括処理

Prometheus のメトリクスを取得する際のパフォーマンスを向上させるために、保存前処理キューに依存アイテムの一括処理が導入されました。詳細は Prometheus checks をご参照ください。

Prometheus パターンの結果処理

Prometheus パターンの保存前処理において複数行の結果が返る場合に対して、その結果を集計するために以下のパラメータが追加されました。

  • sum
  • min
  • max
  • avg
  • count

Prometheus パターンの保存前処理への演算子の追加

  • !=:指定した文字列と等しくないラベルを選択
  • !~:指定した正規表現と等しくないラベルを選択

データベース

Zabbix 6.0 のサポートバージョン

一部の古いデータベースバージョンのサポートは廃止されました。
Zabbix 6.0 では次のデータベースバージョンが正式にサポートされています。

DBMS バージョン
MySQL/Percona 8.0.X
MariaDB 10.5.00 ~10.6.X
Oracle 19.c ~21.c
PostgreSQL 13.X
TimescaleDB 2.0.1 ~2.3
SQLite 3.3.5 ~3.34.X

DB のバージョンチェック機能の追加

Zabbix server/proxy 起動時に DB のバージョンをチェックするようになりました。
対応バージョン外の場合は起動せず、zabbix_server.log に次のようなログが出力されます。

Unable to start Zabbix server due to unsupported PostgreSQL database server version (10.17)

Must be at least (13.0)

Use of supported database version is highly recommended.

Override by setting AllowUnsupportedDBVersions=1 in Zabbix server configuration file at your own risk.

なお、非推奨ですが、起動時の DB のバージョンチェックを無効にすることが可能です。
この場合 zabbix_server.conf 内の AllowUnsupportedDBVersions パラメータに 1 を指定し、起動させます。

### Option: AllowUnsupportedDBVersions
#       Allow server to work with unsupported database versions.
#       0 -do not allow
#       1 -allow
#
# Mandatory: no
# Default:
# AllowUnsupportedDBVersions=0

AllowUnsupportedDBVersions=1

ただし、どのような障害が発生するか分からないためサポートバージョン内の DB を使用することを強く推奨します。

history テーブルを含むすべてのテーブルに主キーを使用

Zabbix 6.0 を新規にインストールする場合、history テーブルを含む全てのテーブルに対して主キーが使用されるようになりました。

旧バージョンからアップグレードする際は各テーブルに対し、自動的に主キーを使用するような更新はされません。手動で主キーを使用するように更新処理を行う場合は Database upgrade to primary keys に MySQL/MariaDB, PostgreSQL, TimescaleDB v1 , v2, Oracle のヒストリテーブルを主キーに手動でアップグレードする手順が掲載されていますのでご参照ください。

MySQL の utf8mb4 サポートの追加

MySQL/MariaDB データベースを使用した Zabbix のインストールにおいて、utf8mb4_bin 照合順序での utf8mb4 エンコーディングがサポートされるようになりました。6.0 にアップグレードする際に utf8mb3 が使用されている場合はそのまま維持され、そのエンコーディングを使用し続けることができます。

ODBC チェック処理の分離

ODBC チェックの処理が、poller プロセスから odbc poller プロセスに分離されました。この変更により、poller プロセスで作成されるデータベースへの接続数を制限することができます。

また、この変更に伴い、Zabbix server/proxy の設定ファイルに新しいパラメータ StartODBCPollers が追加されました。

以下の「Zabbixインターナル」アイテムを使用することで、odbc poller の負荷を監視することができます。

zabbix[process,odbc poller]

関数

トリガーや計算アイテムで利用可能な新規に追加された関数および更新された関数を紹介します。

Prometheus histogram 対応の関数

  • rate() : 指定期間の 1 秒ごとの増加率を計算
  • histogram_quantile() : 指定したヒストグラムのバケットのクォンタイルを計算。PromQL の histogram_quantile に相当
  • bucket_rate_foreach():histogram_quantile のパラメータに利用
  • bucket_percentile():ヒストグラムのバケットからパーセンタイルを計算

単調変化の検知用関数

  • monoinc():任意期間の単調増加を検知
  • monodec():任意期間の単調減少を検知

変化回数の検知用関数

  • changecount():任意期間に隣接する値の間で変化があった回数を返す

値のカウントを簡略化するための関数

  • count():foreach 関数によって返される配列の値を集計
  • item_count():フィルター条件に合うアイテム数を集計。count(exists_foreach(item_filter)) に相当
  • exists_foreach():フィルター条件に合う有効なアイテム数を配列を返す

ベースライン監視用関数

  • baselinedev() : 直近のデータ期間とそれ以前のシーズンの同じデータ期間で比較し、偏差を返す
  • baselinewma() : 加重移動平均アルゴリズムを使用して、複数の同じ期間の同じタイムフレームのデータを平均化することによりベースラインを計算

アノマリー検知用関数

  • trendstl() : ‘decomposition’ (分解)メソッドにより異常発生率を計算

文字列関数

  • concat() : 文字列および数値データ型の 2 つ以上のパラメータを連結

上記関数の詳細は以下をご参照ください。

アイテム

新規追加されたアイテムキー

  • agent.hostmetadata:エージェントのホストメタデータを取得
  • kernel.openfiles:現在開いているファイルディスクリプタ数を取得
  • net.tcp.socket.count[]:パラメータに一致する TCP ソケット数を取得
  • net.udp.socket.count[]:パラメータに一致する UDP ソケット数を取得
  • vfs.dir.get[]:JSON 形式のディレクトリ情報を取得
  • vfs.file.get[]:JSON 形式のファイル情報を取得
  • vfs.file.owner[]:ファイルの所有者情報を取得
  • vfs.file.permissions[]:ファイルのパーミッション(8 進数 4 桁)を取得

更新されたアイテムキー

  • vfs.file.cksum[]:第 2 パラメータ <mode> が追加(crc32 (デフォルト), md5, sha256)
  • vfs.file.size[]:第 2 パラメータ <mode> が追加(bytes (デフォルト), lines)
  • vfs.fs.discovery:Windows の場合、ボリューム名を {#FSLABEL} マクロで取得
  • vfs.fs.get:Windows の場合、ボリューム名を {#FSLABEL} マクロで取得

詳細は agent items をご参照ください。

アイテムのデータ型の自動選択

アイテムキーの選択時に対応するデータ型が自動選択されるようになりました。

例:
・agent.ping ⇒ 数値(整数)
・proc.cpu.util ⇒ 数値(浮動小数)
・logrt ⇒ ログ

キーが複数のデータ型を返す可能性がある場合は自動選択されません。

また、誤ったデータ型を選択すると警告が表示されます。

計算アイテムで利用できるデータ型の拡充

計算アイテムにおいてデータ型が数値のアイテムだけではなく、文字列、ログ、テキストのアイテムを利用することができるようになりました。

Zabbix agent の再起動を伴わないユーザーパラメータの読み込み

userparameter_reload ランタイムコントロールオプションにより Zabbix agent を再起動することなく、設定ファイルからユーザーパラメータを再読み込みできるようになりました。
再読み込みさせる場合は、以下のように実行します。

zabbix_agentd -R userparameter_reload

または

zabbix_agentd2 -R userparameter_reload

なお、上記オプションで読み込まれる設定ファイル内のパラメータは UserParameter のみとなります。

ランタイムコントロールオプションの操作性の向上

Zabbix server/proxy のランタイムコマンドを Unix シグナルではなく、ソケット経由で送信するようになり、以下のように操作性が向上しました。

  • コマンドの実行結果のコンソール表示
  • ノード番号の代わりに HA ノード名など、より長い入力パラメータの送信

BSD 系 OS でのランタイムコントロール対応

これまで、Zabbix server/proxy の実行時制御オプションは、BSD ベースのシステムには対応していませんでしたが、ランタイムコマンドの転送方法を変更することで、この制限が撤廃されました。これにより、FreeBSD、NetBSD、OpenBSD、その他 BSD 系の OS でコマンドの大半がサポートされるようになりました。

正確なリストは以下をご参照ください。
Server – runtime-control
Proxy – runtime-control

Zabbix agent 2 プラグイン

プラグイン設定ファイルの分離

プラグインの設定ファイルが /etc/zabbix/zabbix_agentd2.d/plugins.d 以下にプラグイン毎に分離して配置されるようになりました。

# ls /etc/zabbix/zabbix_agent2.d/plugins.d/
ceph.conf  docker.conf  memcached.conf  modbus.conf  mongodb.conf
mqtt.conf  mysql.conf  oracle.conf  postgres.conf  redis.conf  smart.conf

外部プラグインローダの追加

これまでは利用可能なプラグインを変更するたびに、Zabbix agent 2 を再コンパイルする必要がありましたが、外部プラグインローダの追加により各プラグインを個別の外部アドオンとして追加できるようになりました。

SNMP gateway の機能拡張

SNMP gateway で障害状態のトリガーに関する情報を扱えるようになり、トリガーの詳細にホスト情報を含めることが可能になりました。

SNMP gateway から送信される SNMP トラップのレートを制限することが可能になりました。

サポートされる OID のリストが拡張され、トリガーホスト名のカンマ区切りのリスト用の新しい OID .10 が追加されました。

SNMP gateway の設定ファイルに新しいパラメータが追加されました。

  • ProblemBaseOID : 障害トリガーテーブルの OID
  • ProblemMinSeverity : 最小の障害の深刻度、指定した深刻度より深刻度が低いトリガーは含まれない
  • ProblemHideAck : 未確認の障害が発生しているトリガーのみ含む
  • ProblemTagFilter : 指定したタグ名のトリガーのみ含む
  • TrapTimer : トラップが作成される速度をミリ秒単位で制限可能。設定された場合、指定された時間間隔で 1 つのトラップのみが作成され、最も高い深刻度、または深刻度が同値の場合は最新のものを作成

詳細は Zabbix SNMP Gateway をご参照ください。

テンプレート

新規追加されたテンプレート

Kubernetes に関するテンプレート

  • Kubernetes nodes by HTTP
  • Kubernetes cluster state by HTTP
  • Kubernetes API server by HTTP
  • Kubernetes Controller manager by HTTP
  • Kubernetes Scheduler by HTTP
  • Kubernetes kubelet by HTTP

Kubernetes の監視を有効にするには、新しい Zabbix Helm Chart ツールを使用し、Kubernetes クラスタに Zabbix proxy と Zabbix agent をインストールする必要があります。

HTTP テンプレートの設定の詳細は、HTTP template operation をご参照ください。

Mikrotik に関するテンプレート

  • MikroTik <device model> SNMP
  • Mikrotik SNMP

「MikroTik <device model> SNMP」テンプレートは MikroTik イーサネットルータおよびスイッチの様々なモデルに対応し、全 53 種類あります。詳細は一覧をご参照ください。

新しいテンプレートは Zabbix 6.0 を新規にインストールした場合、「設定」→「テンプレート」ページに搭載されています。

以前のバージョンからアップグレードする場合は、これらのテンプレートを Zabbix Git repository からダウンロードし、「設定」→「テンプレート」ページより、Zabbix に手動でインポートしてください。同じ名前のテンプレートが既に存在する場合、インポートする前に「存在しない場合に削除」オプションにチェックを入れると、クリーンなインポートが可能です。

ユーザーのパスワードポリシー設定

最小パスワード長やパスワードに必須な文字種類の設定ができるようになりました。必須項目として選択できる文字種類は以下の通りです。

  • 英字の大文字と小文字
  • 数字
  • 特殊記号

また、よくあるパスワード(password など)やユーザー名が含まれるパスワードなどの推測が容易な文字列の制限もできるようになりました。

監査ログ機能の更新

ディスカバリルールやアクション、スクリプトの実行を含むすべての処理が記録されるようになりました。

ディスカバリルールによるアイテムの追加など、Zabbix server による処理は「System」ユーザーの処理として記録されます。

テンプレートのリンクなど 1 つの操作の結果として複数のログレコードが作成された場合、それらのレコードは同一の「記録ID」を持ちます。また、フィルター項目にも「記録ID」が追加されました。

「管理」→「一般設定」→「監査ログ」ページにて、監査ログの有効/無効、削除処理をログとして記録するか否か、ログの保存期間を指定できるようになりました。

旧バージョンから 6.0 にアップグレードする際、旧バージョンで保存されていた監査ログデータは削除されますのでご注意ください。

その他

エスカレーションがキャンセルされた際のメッセージ送信抑制機能

アクションやトリガーなど実行中のエスカレーションに関連するオブジェクトを無効・削除した際に「NOTE: Escalation cancelled: ~~~」というようなメッセージが送信されていましたが、アクションの設定画面で「キャンセルされたエスカレーションの通知」のチェックを外すことでメッセージ送信を抑制することが可能になりました。

 

Zabbix get、Zabbix sender のタイムアウト指定

zabbix_get、zabbix_sender コマンドでタイムアウト秒数を指定する -t および –timeout パラメータがサポートされました。

zabbix_get, zabbix_sender で指定できるタイムアウト秒数は次の通りです。

  • zabbix_get:1~30 秒 (デフォルト: 30 秒)
  • zabbix_sender:1~300 秒 (デフォルト: 60 秒)

メディアタイプ

Webhook で Github の issue 登録が可能になりました。

Web 監視

圧縮されたコンテンツを扱える機能が追加されました。libcurl でサポートされているすべてのエンコード形式に対応しています。

JavaScript メソッド

保存前処理で PATCH、HEAD、OPTIONS、TRACE、CONNECT メソッドおよび customRequest が利用可能になりました。

PCRE2 サポート

RHEL/CentOS 7 以降、SLES(全バージョン)、Debian 9 以降、Ubuntu 16.04 以降の Zabbix インストールパッケージが PCRE2 を使用するように更新されました。

PCRE は引き続きサポートされていますが、PCRE または PCRE2 のどちらか一方のライブラリでコンパイルする必要があり、両方を同時に使用することはできません。ソースからコンパイルする場合、 ”–with-libpcre” または ”–with-libpcre2” フラグを選択することができます。

旧バージョンからアップグレードする場合、PCRE を PCRE2 に変更すると、いくつかの正規表現の動作が変わる可能性がありますのでご注意ください。