オープンソース統合監視ツール Zabbix を使ってみよう(入門編)

第 2 回 Zabbix のさまざまな監視機能を試してみよう

  1. はじめに
  2. Zabbix の監視機能について
  3. Zabbix エージェント監視の種類
  4. ログ監視について
  5. メディアタイプとメディアの設定
  6. トリガーの設定
  7. アクションの設定
  8. 障害検知の確認
  9. グラフの作成
  10. スクリーンの作成
  11. まとめ

1. はじめに

前回は、Zabbix のインストール、基本的な設定、監視対象と基本的な監視項目の設定方法までを行いました。

今回は、その他の監視機能の説明や、指定した条件による障害検知とアラートメールの送信、 グラフ表示機能などを紹介します。

2. Zabbix の監視機能について

Zabbix では多種多様な用途、目的に対応するために、さまざまな監視方法に対応しています。 以下は Zabbix が対応している各機能の概要です。

監視タイプ 概要 監視項目の例
Zabbix エージェント Zabbixエージェントによる監視
(サーバからエージェントに対してデータを要求)
CPU使用率、メモリ使用率、ディスク使用率、ファイル監視、Web 監視
Zabbix エージェント
(アクティブ)
Zabbix エージェントによる監視
(エージェントからサーバに定期的にデータを送信)
ログ監視
SNMP エージェント SNMP エージェントによる監視 CPU 使用率、メモリ使用率、ディスク使用率、ディスクI/O、ネットワークI/O
SNMP トラップ SNMP トラップによる監視
IPMI チェック IPMI によるハードウェア監視
シンプルチェック エージェントを使用しない監視 ICMP ping、TCP 疎通、TCP 応答時間
内部チェック Zabbix サーバ自身の監視 稼働時間、アイテム数、プロセスの CPU 使用率
SSH チェック SSH 経由による監視
Telnet チェック Telnet 経由による監視
外部チェック スクリプトやコマンドによる監視
トラッパーアイテム 外部からデータを受け取る zabbix_sender コマンドによるデータ送信
JMX 監視 JMX による Java アプリケーション監視

3. Zabbix エージェント監視の種類

ここでは、最も使用頻度が高いと思われる Zabbix エージェントの監視項目のうち、代表的なものを紹介します。

その他のキーや監視タイプについては、Zabbix マニュアルの以下の項目を参照してください。

Zabbixマニュアル 設定 - アイテム アイテムタイプ
Zabbixマニュアル 設定 - アイテム アイテムタイプ Zabbixエージェント

Zabbix エージェントの代表的なキー一覧
監視項目 キー 戻り値 設定例
CPU 使用率 system.cpu.util[<cpu>,<type>,<mode>]
system.cpu.load[<cpu>,<mode>]
使用率 (%)
浮動小数
system.cpu.util[,user,avg5]
system.cpu.load[,avg5]
メモリ使用率 vm.memory.size[<mode>] バイト数 / % vm.memory.size[free]
ディスク使用率 vfs.fs.size[fs,<mode>] バイト数 / % vfs.fs.size[/,pfree]
ネットワーク使用率 net.if.in[if,<mode>]
net.if.out[if,<mode>]
整数 net.if.in[eth0,bytes]
net.if.out[eth0,bytes]
プロセス起動数 proc.num[<name>,<user>,<state>,<cmdline>] プロセス数 proc.num[httpd,apache]
ポート net.tcp.port[<ip>,port]
net.tcp.service[service,<ip>,<port>]
0(down) / 1(up) net.tcp.port[,80] net.tcp.service[http]
ファイルのチェックサム vfs.file.cksum[file] チェックサム vfs.file.cksum[/etc/passwd]
Zabbix エージェント(アクティブ)の代表的なキー一覧
監視項目 キー 設定例
ログ監視 log[file,<regexp>,<encoding>,<maxlines>,<mode>]
logrt[file_format,<regexp>,<encoding>,<maxlines>,<mode>]
log[/var/log/messages,,,100]
logrt["/var/log/messages-[0-9]{8}$",,,100]

4. ログ監視について

ログの監視を行うには、Zabbix エージェント(アクティブ)を使用する必要があります。 通常の Zabbix エージェントは、サーバから定期的にデータを要求しに行きますが、 Zabbix エージェント(アクティブ)は、エージェント自身が能動的に監視を行い、 データをサーバに送信します。

log[file,<regexp>,<encoding>,<maxlines>,<mode>] は、 1 つのログファイルのみを監視します。 logrt[file_format,<regexp>,<encoding>,<maxlines>,<mode>] は、 ローテートされた複数のログファイルを監視します。 ファイル名の候補は正規表現で指定します。 例えば、「/var/log/messages-[0-9]{8}$」であれば「/var/log/messages-20130414」などのファイルが対象になります。

また、ログ監視では Zabbix エージェントを動作させるユーザ(zabbix)が ログファイルにアクセスする権限が必要になりますので注意してください。

5. メディアタイプとメディアの設定

障害を検知した場合にメールを送信するには、事前にメディアタイプとメディアを設定しておく必要があります。 まずメディアタイプでメールの送信に使用するメールサーバを設定します。

  1. 管理 (Administration)メディアタイプ (Media types) を選択します。

  2. 一覧から「Email」をクリックします。

  3. 「SMTPサーバー」(「SMTP server」)、「SMTP helo」、「送信元メールアドレス」(「SMTP email」) を 環境にあわせて適切に編集し、保存 (Save) をクリックします。

次に、各ユーザのメール送信先を設定します。ここでは Admin、user について設定します。

  1. 右上の [プロファイル]([Profile]) をクリックして、[メディア]([Media]) を選択します。

  2. [追加]([Add]) をクリックすると「新規メディア」(「New media」)ウィンドウが表示されますので、 以下の項目を入力し、追加 (Add) をクリックします。

    タイプEmail
    送信先(障害を通知するメールアドレス)
    有効な時間帯1-7,00:00-24:00
    指定した深刻度のときに使用軽度の障害、重度の障害、致命的な障害にチェックを入れる
    ステータス有効
  3. 保存 (Save) をクリックします。

以上で、Zabbix が障害を検知した場合に指定したアドレスにメールが送信されるようになりました。

6. トリガーの設定

Zabbix では、障害と復旧の検知の設定をトリガーと呼びます。 前回は CPU 使用率を監視するアイテムを作成しました。 今回は、それに対して、5 分間の CPU 使用率の平均値が一定の閾値を上回った場合は障害と判定し、 アラートメールを送信するように設定してみましょう。まずトリガーを作成します。

  1. 設定 (Configuration)テンプレート (Templates) を選択します。

  2. テンプレート一覧の「テストテンプレート」の トリガー (0) (「Triggers (0)」)をクリックします。

  3. 右上の トリガーの作成 (Create trigger) をクリックします。

  4. 以下の項目を入力し、保存 (Save) をクリックします。

    名前CPU usage is too high
    条件式{Test template:system.cpu.util[,,].avg(300)}>90
    説明最近 5 分間の CPU 使用率の平均が 90 % を超えています
    深刻度軽度の障害

条件式は直接入力することもできますし、右の 追加 (Add) ボタンをクリックして 「アクションの実行条件」ウィンドウを開き、各項目を以下のように入力して 挿入 (Insert) ボタンをクリックすることでも入力できます。

アイテムTest template:CPU usage
機能期間 T の値の平均値 > N
最新の (T)300 秒
N90

トリガーの作成に成功すると、以下のようにトリガー一覧に表示されます (トリガー作成直後の場合は、まだ値を取得できていないためエラーが表示されることがあります)。

アクションの設定

Zabbixでは、障害発生時や復旧時の動作の設定をアクションと呼びます。 先程設定したトリガーで障害を検知した場合に、指定したユーザにメールを送信するアクションを作成します。

  1. 設定 (Configuration)アクション (Actions) を選択します。

  2. 右上の アクションの作成 (Create action) をクリックします。

  3. 「アクション」(「Action」)タブで以下の項目を入力します。

    名前Report problems to user
    デフォルトのアクション実行ステップの期間3600
    デフォルトの件名・デフォルトのメッセージ(初期状態で入力済みのものを使用)
    リカバリメッセージチェックしない
    有効チェックする
  4. 「アクションの実行条件」(「Conditions」) タブで以下の項目を入力します(初期状態で入力済みです)。

    計算のタイプAND / OR
    アクションの実行条件 (A) メンテナンスの状態 期間外 "メンテナンス"
    (B) トリガーの値 = "障害"
  5. 「アクションの実行内容」(「Operations」)タブで 「 新規 」 をクリックし、 以下の内容を入力して 追加 (Add) をクリックします。

    ステップ開始: 1 終了: 1 ステップの期間: 0
    実行内容のタイプメッセージの送信
    ユーザーに送信Admin, user
    次のメディアのみ使用Email
    デフォルトのメッセージyes
  6. すべての入力が完了したら、保存 (Save) をクリックします。 アクション一覧に作成したアクションが表示されます。

障害検知の確認

それでは、実際に疑似的に障害を発生させ、それが検知されるかを確認してみましょう。

Zabbix エージェントが動作している監視対象のホストにログインし、 以下のコマンドを実行して 5 分以上待ち、Ctrl-C で停止します。

※ CPU 使用率が 100 % になるため、実際にサービスが稼働しているホストでは 実行しないでください。

$ yes > /dev/null
(Ctrl-Cで停止)

障害が検知されると、管理画面のダッシュボードの「システムステータス」、 「ホストステータス」、「最新 20 件の障害」にそれが表示されます。

また、ユーザのメディアで設定したメールアドレスに、以下のような障害通知メールが届きます。

From: <zabbix@zabbix-server.localdomain>
To: <user@example.com>
Subject: PROBLEM: CPU usage is too high
Date: Fri, 12 Apr 2013 17:33:53 +0900

Trigger: CPU usage is too high
Trigger status: PROBLEM
Trigger severity: Average
Trigger URL:

Item values:

1. CPU usage (zabbix-agent:system.cpu.util[,,]): 99.1168
2. *UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*
3. *UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*

監視データ (Monitoring)イベント (Events) を選択すると、 過去に発生した障害もしくは復旧の履歴を参照することができます。

グラフの作成

Zabbix では、特に設定を行わなくても各アイテムの履歴をグラフで表示することができますが、 複数の監視項目のデータを 1 つのグラフにまとめて表示することもできます。 これにより、一目でシステムの状態を把握することができます。

グラフは以下の手順で作成します。 なお、事前に、名前「CPU load」、タイプ「Zabbixエージェント」、キー「system.cpu.load[,]」、 データ型「数値(浮動小数)」、更新間隔(秒)「30」というアイテムを作成し、 テンプレートに追加しておきます。

  1. 設定 (Configuration)テンプレート (Templates) を選択します。

  2. テンプレート一覧の「テストテンプレート」の グラフ (0) (「Graphs (0)」) を クリックします。

  3. 右上の グラフの作成 (Create graph) をクリックします。

    以下の項目を入力します。

    名前CPU load/usage
    900
    高さ200
    グラフのタイプノーマル
    凡例を表示チェックする
    ワーキングタイムの表示チェックする
    トリガーを表示チェックする
    Y軸の最小値計算
    Y軸の最大値計算
  4. アイテムの「追加 (Add)」をクリックし、対象のアイテムにチェックを入れて [選択]([Select]) をクリックします。 追加された項目について以下のように設定します。

    アイテム: 1: テストテンプレート: CPU load 平均C80000
    アイテム: 2: テストテンプレート: CPU usage 平均00C800
  5. 保存 (Save) をクリックします。

    作成したグラフを表示するには、監視データ (Monitoring)グラフ (Graphs) を選択し、 右上の「グループ」(「Group」)、「ホスト」(「Host」)、「グラフ」(「Graph」)から対象のグラフを選択してください。 右軸(赤)がロードアベレージ値(1 分間)、左軸(緑)が CPU 使用率になります。 また、上部のスライダーを調整して、表示開始時刻と期間を指定することができます。

スクリーンの作成

Zabbix のスクリーンは、複数のグラフやイベント履歴、システムの情報といった さまざまな情報を一つの画面に自由に並べて表示する機能です。 実際にスクリーンを作成してみましょう。

  1. [設定]([Configuration]) → [スクリーン]([Screens]) を選択します。

  2. 右上の [スクリーンの作成]([Create screen]) をクリックします。

  3. 以下の項目を入力し、保存 (Save) をクリックします。

    名前My screen
    1
    3
  4. スクリーン一覧から「My screen」をクリックします。

  5. 変更したい箇所の [変更]([Change]) をクリックします。 また、[+][-] をクリックすると、行数、列数を変更することができます。

  6. 「リソース」(「Resource」)で参照したい情報を選択します。 情報の種類に応じて、表示する行数や幅、高さなどを調整します。 ここでは、以下の 3 つのリソースを指定します。

    • システムステータス
    • イベント履歴(表示する行数: 25)
    • グラフ(グラフ名: zabbix-agent: CPU load/usage、幅: 500、高さ: 200)
  7. 保存 (Save) をクリックします。

作成したスクリーンを表示するには、[監視データ]([Monitoring]) → [スクリーン]([Screens])を選択し、 右上の「スクリーン」(「Screens」)プルダウンメニューから「My screen」を選択してください。

11. まとめ

今回は、Zabbix のさまざまな監視機能の紹介や、障害の検知と通知の設定方法、 グラフとスクリーンの作成方法について解説しました。

次回は、Zabbix の管理画面上で行う各種操作を自動化できる、Zabbix API について紹介します。