【連載Zabbix】ゼロから始めるZabbix基礎【Zabbix Advent Calendar 2016】

AWS運用自動化サービス「Cloud Automator」
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。

Zabbix Advent Calendar 2016の24日目の記事です。
カスタマーサポート課の伊藤です。
サーバーワークスZabbixスペシャリスト 九龍として、今回は 初心にかえってZabbixの基礎をお伝えします。
「どこから設定すれば良いのか分からない」と言った疑問の解決の助けになれば幸いです。

用語集

まずはじめに、Zabbixの中で出てくる用語について解説します。

用語 解説
ホスト 監視対象
アイテム ホストから収集する監視項目、独自エージェントのほか、SNMP,IPMI,SSL,TELNET,ODBC,JMX,WMIによるデータ収集,ポート接続,ICMP応答,の収集が可能、収集済みアイテムに対する四則演算・アイテム同士の演算も可能
アイテムタイプ アイテムの取得方式の種類
ヒストリ アイテムの収集間隔ごとに収集される実データ
トレンド ヒストリデータを1時間ごとに集計し、最大値、最小値、平均値を保存したサマリデータ
ヒストリデータではプロットできない長期グラフを生成する際に使用される。トレンドデータを直接参照することはできない。
トリガー 障害判定条件、アイテムに対して、閾値判定、文字列一致判定が可能、複数のアイテムによる複合判定やトリガー同士の優先度設定(依存関係)設定が可能
イベント トリガー判定結果の履歴
アクション イベント、Agent新規接続、ディスカバリ、内部イベントに起因して動作する処理、通知やコマンド実行、自動登録等が可能
LLD ローレベルディスカバリ、独自エージェントからの収集データを元に、自動的にホスト・アイテム・トリガー・グラフ・スクリーンを作成、削除する機能
ディスカバリ 指定されたネットワーク範囲を指定されたプロトコルで走査し、応答の有無、増減を検知する機能 ディスカバリの結果をもとに監視追加、監視停止、監視削除などを実行することができる
テンプレート アイテム、トリガー、グラフ、スクリーン、WEB監視設定、LLD設定をひとまとめにした設定ひな形、ホストに対してリンクさせることにより同一の設定を適用することが可能
マクロ Zabbixの各種設定やアクションで使用できる置換設定文字列、テンプレート設定や通知設定をマクロにより記述することにより、動作時に対象に合わせた値が代入され動作する
アプリケーション アイテムをグループ化する単位、最新データ表示の際に、同一アプリケーション毎にグループ化して表示される。
アクションの際に特定のアプリケーションだけを対象とすることも可能

 

Zabbixのシステム構成

 Zabbixのシステム構成イメージは次の図を参考にしてください。zabbix%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0%e6%a7%8b%e6%88%90

  1. ZabbixのWEBFrontend、Database,Serverプロセスは、相互にIP的に接続されます。
    このことは、各コンポーネントを別々のサーバインスタンスに分離して構築できることを意味します。
    もちろん、単一のサーバインスタンスに構築することも可能です。
  2.  Zabbix-ServerはZabbix-DBの設定に基づき、各監視対象やZabbix-Proxyに対して値の収集を行います。
  3. JVMを監視する場合には、別途JAVA-Gatewayを設定する必要があります。
  4. ユーザーはWEBフロントエンドを通じて、Zabbixサーバを操作、設定することができます。
    WEBフロントエンドはAPIの処理も受け持ちます。コンポーネントを分離して構成した場合は、APIの投げ先に注意してください。
  5. WEBフロントエンドから設定情報をXMLとしてエクスポートすることができます。
  6. 障害を検知した場合には、ユーザに対してZabbixサーバからメール・スクリプトにより通知を行う事ができます。
  7. 通知先を監視対象機器や、他のシステムにすることにより、システム連携や、トリガー駆動の自動化を行うことができます。
  8. Zabbix-ProxyはZabbix-Serverから監視対象への通信を代理します。
    監視通信のオフロードのほか、IP重複や、FW越しの監視の際に利用できます。
  9. 外部スクリプトや、ローダブルモジュールによりZabbixの機能を拡張する事が可能です。 

Zabbixの設定構成

Zabbixの設定項目同士の関係を見ていきます。image2014-6-4-16-58-45image2014-6-5-16-49-36

  1. Zabbixにはホスト、アイテム、トリガー、アクション、グラフ(カスタムグラフ)、ユーザー、メディア、メディアタイプといった要素があります。
  2. Zabbixの設定要素はそれぞれに独立です。
  3. ホストやユーザーはホストグループやユーザグループとしてグルーピングを行いグループ単位でアクセス権を制御します。それぞれ単独または複数のグループに所属することができます。
    ただし、グループ属さないユーザやホストは作れません。
  4. ユーザーは個別に言語設定や通知先設定、通知受信時間、画面構成の設定を行う事ができます。

Zabbixとテンプレート

image2014-6-5-17-3-45

  1. アイテムはアプリケーションとしてグルーピングするとこができます。一つまたは複数のアプリケーションに属する事が可能です。アプリケーションに属さないアイテムも設定できます。
  2. アイテム、トリガー、グラフ、WEB監視およびLLD設定はテンプレートとして設定パターンを作成することが可能です。
  3. ホストに対して複数のテンプレートを適用することが可能です。

LinuxやWindows等のサーバパフォーマンス、ネットワーク機器のトラフィックなどの基本的な監視であれば、プリセットされているテンプレートを適用するだけで、監視を行う事が可能です。
自分でテンプレートを作成すれば、独自の監視を行うこともできます。

アクション概要

image2014-6-5-18-27-4

  1. アクションでは、通知やコマンドの実行を行う事ができます。
  2. 通知動作は即時動作するのでは無く、zabbix_server.conf内のSenderFrequency=の周期毎にチェックが行われます。

パッシブ通信とアクティブ通信

Zabbixエージェント、パッシブProxyは
ZabbixServer→ZabbixAgent
ZabbixServer→ZabbixProxy
ZabbixProxy→ZabbixAgent の方向で通信を行います。
監視側がアイテム毎に設定された周期毎に接続を行い、値を収集します
受信側の10050番ポートが空いていれば通信が可能です(ステートフルインスペクションのFWの場合、NACLのようなステートレスな通信制御の場合は戻りパケット用のRuleを開けてください。)

Zabbixエージェント(アクティブ)、アクティブProxyは
ZabbixAgent→ZabbixServer
ZabbixProxy→ZabbixServer
ZabbixAgent→ZabbixProxy の方向で通信を行います。
Agent側がRefreshActiveChecks=に設定された周期毎に監視項目一覧を取得しアイテム毎に設定された周期で値を送信します。
受信側の10051番ポートが空いていれば通信が可能です(ステートフルインスペクションのFWの場合、NACLのようなステートレスな通信制御の場合は戻りパケット用のRuleを開けてください。)

アイテム設定概要

Zabbixのアイテム設定に関わる項目を確認します

アイテムタイプ

アイテムタイプ毎に値の収集方法が変わります。

タイプ 内容
Zabbixエージェント Zabbix-server→Zabbix-agent
Zabbixエージェント(アクティブ) Zabbix-agent→Zabbix-server
(ログ監視では必須)
シンプルチェック Ping、ポートチェック
SNMP[v1|v2|v3]エージェント SNMPポーリング
SNMPトラップ SNMPトラップの受信
(SNMPTTの設定が必要)
Zabbixインターナル ZabbixServer,ZabbixProxyの内部状態
Zabbixトラッパー Zabbix-Senderからのデータ受信
Zabbixアグリゲート ホストグループ単位での同一アイテム集計
外部チェック Serverの指定ディレクトリに置かれた任意のスクリプトを実行
データベースモニタ ODBC接続したデータベース上でSQLを実行
IPMIエージェント IPMIのセンサー値を取得
SSHエージェント SSH接続して任意のコマンドを実行
TELNETエージェント TELNET接続して任意のコマンドを実行
JMXエージェント JAVA-VMの監視
(Zabbix-java-gatewayの設定が必要)
計算 取得済みアイテムを利用した任意の集計

アイテムキー

アイテムタイプによりアイテムキーの意味が変わります。

アイテムキーの役割 アイテムタイプ
監視項目そのものを意味する Zabbixエージェント
Zabbixエージェント(アクティブ)
シンプルチェック
Zabbixインターナル
SNMPトラップ
計算式を意味する Zabbixアグリゲート
決められたプリフィックスとパラメータを入力する SSHエージェント
TELNETエージェント
データベースモニタ
JMXエージェント
一意でさえあればよい SNMP[v1|v2|v3]エージェント
Zabbixトラッパー
IPMIエージェント
計算
実行するスクリプト名を記載 外部チェック

個別のアイテムキーについては、公式マニュアルのアイテムキーリストまたは、
アイテム設定画面で[キー]ボックスの[選択]ボタンを押した際に表示される
キーリストで確認してください。
ZabbixのGUI上ではアイテムはアイテムキーにより識別されます(システム内部的にはアイテムIDを持っています)
このためアイテムキーはホスト内部で一意でなければいけません。

ホストインターフェイス

アイテムには、特定のインターフェイスが登録されていなければ設定できない物があります。

インターフェイス アイテムタイプ
エージェントインターフェイス Zabbixエージェント
SNMPインターフェイス SNMP[v1|v2|v3]エージェント
SNMPトラップ
JMXインターフェイス  JMXエージェント
IPMIインターフェイス  IPMIエージェント
いずれかのインターフェイス シンプルチェック
SSHエージェント
TELNETエージェント
外部チェック
インターフェイス不要 Zabbixエージェント(アクティブ)
Zabbixトラッパー
Zabbixインターナル
Zabbixアグリゲート
データベースモニタ
計算

データ型

取得してきたデータをどういったデータ形式で保存するかを指定します。
アイテムタイプやアイテムキーとは連動しません。

データ型 データ形式
数値(整数) 0~18446744073709551614
64ビット符号なし整数
数値(浮動小数) -999999999999.9999 ~ 999999999999.9999
整数部16桁、小数部4桁
 文字列  255byteまでの文字列
ログ  ログファイル
値の取得時刻のほか、ログの出力時刻、イベントIDなどを管理可能
テキスト  制限なし文字列 

データの形式

データ型で数値(整数)を選択した場合、さらに数値形式を変換することができます。
障害判定処理を簡略化したり、10進数以外の値を出力する機器のデータを10進数のグラフで表すことができます。

データの形式 動作
ブール型 取得した文字列データを(0|1)の2値に変換して処理します
true, t, yes, y, on, up, running, enabled, available→ 1
false, f, no, n, off, down, unused, disabled, unavailable→0
8進数 取得した値を8進数として10進数に変換して処理します
10→8
20→16
10進数 デフォルト
取得した値をそのまま10進数として処理します
16進数 取得した値を16進数として10進数に変換して処理します。
A→10
10→16

単位

アイテムに単位文字列を設定すると取得した値に単位を付けて表示することができます。(表示が変わるだけで、DBに格納されるデータは変化しません)
単位にはUnicode文字列が使用できます。単位設定をした場合、SI接頭辞を付けて表示します。

単位文字 動作
任意の文字列 1000毎にSI接頭辞を付与
B,Bps 1024毎にSI接頭辞を付与
unixtime 整数型の値をUNIXタイムとして扱い
「yyyy.MM.dd hh:mm:ss」として表示します。
uptime 値を経過秒数として扱います。
 「hh:mm:ss」または 「N days, hh:mm:ss」として表示します
s 値を経過秒数として扱います。
「yyy mmm ddd hhh mmm sss ms」として上位3要素までを表示します。
0.001未満の値を取得した場合は「< 1 ms」と表示します
ms SI接頭辞を付与しません。
RPM
rpm
%

乗数

取得値があらかじめKByteなどのSI接頭辞で表されている場合、単位を正確に付与することができません。
そのようなデータ取り扱うために取得したデータに乗数を掛けることができます。
乗数には 1e+7のような指数表記を使用することもできます。

保存時の計算

収集したデータをDBに格納する際に計算することができます。

設定 動作
なし 収集したデータをそのまま保存します
差分/時間 前回値と最新値の差をデータ取得時間の差で割ります
増分毎秒というデータが得られます。
通信バイト数をbpsとして保存したい場合などに使用します。
差分 前回値と最新値の差

トリガー設定概要

トリガー設定では、収集したアイテムにを利用して閾値や文字列、データの変化を検知する条件式を設定します。
複数のアイテムのデータを組み合わせてトリガーに利用したり、トリガー自体の状態を判定条件にすることもできます。
Zabbix 3.2 からは障害条件だけでなく、障害からの回復条件を定義することが出来るようになりました。
基本的には正常→障害、障害→正常などの状態変化したときのみアラートが発生するように設定されますが、
ログ監視のように障害→障害という変化でも通知が必要な場合は[アラートを継続して生成]にチェックを入れます。

アクション設定概要

アクション設定では、トリガーや自動登録、ディスカバリの結果に応じてエージェントやユーザに対してメッセージやコマンドを渡すことができます。
エスカレーション設定により、障害の発生直後だけでなく、回復するまで継続的に動作を実行することができます。
ZabbixServer内にスクリプトを用意することで、twilioやSlack等のWEBサービスと連携することも可能です。
ユーザに通知する場合は、アクション設定ではユーザを指定するだけです。メールアドレスや通知時間などはユーザ設定側で行います。

まとめ

今回はZabbixの各設定項目の概要をご紹介しました。
基本的な監視を行うだけであればテンプレートを使うことで簡単に始めることができます。
テンプレートを設計するときにはアイテムやトリガー、グラフ、マクロの概要を理解しておくことで効率的な設計を行う事が可能になります。

来年からは、Zabbix 3.2 の新機能を用いた設定解説などを予定しています
それでは、happy X’max そして、良いお年を!

AWS運用自動化サービス「Cloud Automator」