Zabbix 4.0の新機能の紹介

Zabbix 4.0の新機能

そろそろZabbixの最新バージョンであるZabbix 4.0がリリースされそうということで、新しいバージョンで追加されたり改善されたりする機能をご紹介したいと思います。
Zabbix 4.0は、Zabbix 3.0の次のLTSと呼ばれる長期サポートが提供されるバージョンです。これまで、3.2や3.4といったポイントリリースというサポート期間が短いバージョンで実装されてきた機能が気になっていても、サポート期間が短いため導入を断念していた方々でも、LTSということでバージョンアップを検討されている方もいらっしゃることでしょう。

そんな方のために、新機能をご紹介します。

最初にお断りしておきますが、Zabbix 4.0は、この記事を記述した時点(2018/05/22)では、まだリリースされていません。
正式リリース時には、詳細が変更されている可能性があります。
日本語翻訳に関しても、まだ改善される場合がありますのでご注意ください。

はじめに

この記事では、Zabbixとは何かという説明は行いません。
Zabbixの概要を知りたい場合は、以下のURLの記事を確認してください。

Zabbix”大解説”
https://www.scsk.jp/product/oss/tec_guide/index.html

3.2や3.4の新機能や改善点に関しては、以下のURLにある資料をご参照ください。

「Zabbix 3.4の新機能」など
https://www.scsk.jp/product/oss/report.html?id=syouyou

それでは、Zabbix 4.0の主な新機能を挙げてみましょう。

私が主な新機能や改善点だと思うのは以下の機能です。

  • アイテムの「今すぐチェック」ボタン追加
  • 新しいHTTPアイテムの追加
  • サーバーとプロキシ間の接続をよりセキュアに
  • サーバーとプロキシ間の通信を圧縮
  • 単位変換の柔軟化
  • メディアのEmailの1つの設定で複数宛先指定可
  • イベント、値、トレンドのリアルタイムエクスポート
  • logrt[]でcopytruncateモードでのログファイルローテーションに対応

それぞれの機能

最初は、アイテムの「今すぐチェック」ボタンの追加です。

Zabbixを使われたことがある方は経験されたことがあると思うのですが、アイテム(監視項目)を登録した後で、値が取得できるかどうかは、Zabbixサーバーの処理を待っているしかありませんでした。
Zabbix 4.0では、アイテムを登録して保存をすると、そのアイテムの設定画面の一番下に「今すぐチェック」というボタンが用意されました。

このボタンをクリックすると、数秒程度のタイムラグはありますが、すぐにアイテムの値を取得してくれます。
アイテム一覧の画面で、アイテムの左側のチェックボックスにチェックを入れて、一番下にある「今すぐチェック」ボタンをクリックという操作方法もあります。
これによって、アイテムの登録後、値が取れるかどうかを確認し終えるまでの時間と手間を削減することができるようになりました。
注意点としては、アイテムの設定を一度保存しないと「今すぐチェック」は使用できません。

新しいHTTPアイテム

アイテムの種別として「HTTPエージェント」が追加されました。
URLやパラメータを指定して、Webサーバーにアクセスしてリクエストを投げ、その応答をアイテムの値とすることができます。

例えば、RESTのAPIを呼び出して、その結果を取得して監視することができます。
具体例をあげるとより実感して頂けると思うので、OpenWeatherMapの気象情報を取得してみましょう。

OpenWeatherMap
https://openweathermap.org/

OpenWeatherMapで公開されているAPI では、結果はJSONもしくはXMLで返却されるのですが、ここで、Zabbix 3.4で追加された保存前処理の機能と組み合わせることで、返却されたJSONから特定の値のみを取得することを容易に実現できます。

OpenWeatherMapのAPIを使用するために、Freeユーザーとして登録し、APIキーを取得します。取得したAPIキーを使用することで、例えば、curlコマンドを使用して以下のような呼び出しを行うと、東京の現在の天気を取得できます。

$ curl -s 'http://api.openweathermap.org/data/2.5/weather?id=1850147&units=metric&APPID=<APIキー>

これによって以下のような結果を受け取ることができます。

{
  "coord": {
    "lon": 139.69, "lat": 35.69
  },
  "weather": [
    {
    “id”: 803, "main": "Clouds", "description": "broken clouds", "icon": "04d"
    }
  ],
  "base": "stations",
  "main": {
    "temp": 24.8, "pressure": 1020, "humidity": 41, "temp_min": 24, "temp_max": 26
  },
  "visibility": 10000,
  "wind": {
    "speed": 4.1, "deg": 150
  },
  "clouds": {
    "all": 75
  },
  "dt": 1526875200,
  "sys": {
    "type": 1, "id": 7612, "message": 0.007, "country": "JP", "sunrise": 1526844732, "sunset": 1526895832
  },
  "id": 1850147,
  "name": "Tokyo",
  "cod": 200
}

この受け取ったJSONから値を取得するのですが、今回は、このJSONから複数の値を取り出したいので、この呼び出しの結果を受け取るためのアイテムを親アイテムとして、タイプが「HTTPエージェント」のアイテムとして作成し、子アイテムとしてタイプが「依存アイテム」のアイテムとして、もともとのJSONの中から気温や気圧を取り出すこととします。

図示すると以下のようなイメージです。

子アイテムは、保存前処理としてJSON Pathを使用して、先ほどのJSONから気温や気圧の部分を取り出して、それぞれのアイテムの値とするわけです。

受け取ったJSONから1つの値だけ切り出せばよいのであれば、上記のように親アイテム子アイテムとせずに、1つのアイテム内で、HTTPエージェントのアイテムとして保存前処理も設定したアイテム設定とするだけで実現できます。

ZabbixサーバーとZabbixプロキシとの間の通信の圧縮

Zabbixプロキシ経由で監視を行う場合、Zabbixプロキシが管理する配下のサーバーやネットワーク機器が大量であると、ZabbixサーバーとZabbixプロキシとの間のトラフィック量が無視できないような量となってしまっていました。

ネットワーク構成によっては、トラフック量が多いと、サービス用のネットワークの帯域を制限してしまったり、監視の処理の遅延につながりかねません。

そこで、ZabbixサーバーとZabbixプロキシとの間の通信を圧縮できるようになりました。

Zabbix 4.0のアルファ版で試してみると、自動的に圧縮されるように設定されていました。
圧縮効率なのですが、先日NLUUGというイベントで発表された方によると、その方の環境では、約1/5にトラフィックを削減できたようです。

単位変換の柔軟化

Zabbixで様々な数値を監視していると、数値によっては、K(キロ)だとかM(メガ)だとかの単位変換を勝手にされたくない場合があると思います。

これまでのZabbixでは、ms、rpm、RPM、%以外の単位でもKMGの変換が行われないようにするためには、ZabbixのPHPのソース(include/func.inc.php)を改変して、特定の単位なら単位変換を行わないようにするという対応が必要でした。

Zabbix 4.0では、ソースを改変せずに、アイテムの単位の前に「!」を付与するだけで対応できるようになりました。

例えば、先ほどの気圧の場合、単位を「!hPa」としておくことで、「1021hPa」を「1.02KhPa」などと変換されてしまうことを防ぐことができます。

そして、メディアのEmailの設定改善です。

Zabbixでは、障害発生時にメール通知やスクリプト実行などを実行することができますが、標準で用意されているEmailというメールを送信する機能の設定が改善されました。

具体的には、これまでユーザーのメディアの設定としてEmailを選択した場合、宛先としては、1つのメールアドレスしか指定できませんでした。

同じメールを同じタイミングで送るのであれば、メールアドレスを列挙したいところですが、1つしかメールアドレスを指定できなかったわけです。

Zabbix 4.0では、ユーザーのメディア設定で、Emailを選択した時には、以下のように複数のメールアドレスを登録することできます。


これで、同じメールを同じタイミングで複数の人に送りたいときに、メディアの設定を複数登録したり、Zabbix上のアカウントを複数登録したりする必要はなくなるわけです。

ユニークな「リアルタイムエクスポート」という機能

この機能を使用すると、Zabbix上で発生したイベントや、各アイテムで取得した値などをファイルにリアルタイムで出力することできます。
フォーマットとしては、JSONで出力されるので、ElasticsearchやHadoopなどと連携して分析することに活用できるようにしたり、別の監視の仕組みに連携させるようなことができるような機能です。

設定としては、zabbix_server.conf内にExportDirという項目に、エクスポートファイルの出力先のディレクトリを指定します。
そうすると、デフォルトの設定だと以下のようなファイルが出力されます。

history-history-syncer-1.ndjson
history-history-syncer-2.ndjson
history-history-syncer-3.ndjson
history-history-syncer-4.ndjson
history-main-process-0.ndjson
problems-history-syncer-1.ndjson
problems-history-syncer-2.ndjson
problems-history-syncer-3.ndjson
problems-history-syncer-4.ndjson
problems-main-process-0.ndjson
problems-task-manager-1.ndjson
problems-timer-1.ndjson
trends-history-syncer-1.ndjson
trends-history-syncer-2.ndjson
trends-history-syncer-3.ndjson
trends-history-syncer-4.ndjson
trends-main-process-0.ndjson

起動する各役割のプロセス数を変更していると、出力されるファイル数が変化するので注意してください。
これらのファイルには、1行1レコードでJSON形式で出力されます。
見やすいように改行も入れると、以下のような内容のレコードになります。

{
    "host":"Zabbix server",
    "groups":["Zabbix servers"],
    "applications":["CPU","Performance"],
    "itemid":23296,
    "name":"Processor load (1 min average per core)",
    "clock":1526895196,
    "ns":23407662,
    "value":0.040000
}

これらのファイルから、FluentdとかLogstashとか使ってElasticsearchとかHDFSに送るわけです。

最後にlogrt[]の改善

logrt[]というのは、Zabbixでログローテーションが行われるログファイルを監視するために使用するアイテムキーですが、標準の機能としては、logrotateなどで標準的に使用されるログローテーションの方法にしか対応していませんでした。

標準的なログローテーションというのは、過去のログのログファイルのファイル名を変更して、新しいログファイルを作成し、ログを出力していたプロセスに通知を行って新しいログファイルに出力するように切り替えさせるという方法です。

しかし、アプリケーションによっては、ログファイルの切り替えのインターフェースを持っていないため、同じファイルに出力し続けることしかできないアプリケーションもあります。
そういったアプリケーションの場合には、過去のログファイルをコピーして、コピーが終わったら、今出力しているログファイルのサイズを0に変更してしまうというログローテーションの方法をとる場合があります。

logrotateを使用する場合は、copytruncateというオプションを指定すると、このローテーションに変更することができます。

ただ、このローテーションの方法には対応できていなかったので、Zabbix 4.0でlogrt[]のオプションを指定することによって、このcopytruncateというローテーション方式にも対応することができるようになりました。

今回紹介できなかった新機能

以下のようなものがあります。

  • DNS名の長さを63から255に拡張
  • タグベースの権限設定追加
  • 閲覧モード(キオスクモード)の追加
  • ポップアップウィンドウをオーバーレイに変更
  • Webインターフェースのキーボードショートカット実装
  • LLDのフィルター条件式に「一致しない」を追加
  • 障害画面に「コンパクト表示」モードを追加
  • ZabbixサーバーとZabbixプロキシとの接続をよりセキュアに

関連記事

  1. 業務ハッカーへの道 (#3 Redmine REST APIによる業務…

  2. Zabbix 4.0の新機能の紹介

    Zabbix 4.0の新機能(追加版)

PAGE TOP