サーバーを監視するためのツールにはさまざまなものがあるが、その1つに「Zabbix」がある。Zabbixはオープンソースで開発されている多機能な監視ツールで、設定を容易に行えるテンプレート機能やWebブラウザ上で操作できるGUIが特徴だ。本記事ではZabbixの概要と、ZabbixによるLinuxサーバーの監視方法について紹介する。
テンプレート機能や豊富な監視設定が特徴のZabbix
サーバー運用において重要なのが、サーバーやそこで動作しているアプリケーションが正常に動作しているかを監視することだ。監視方法としてはさまざまなものがあるが、多くの場合専用の監視用ツールを利用するのが一般的である。監視用ツールとしては「Nagios」や「MRTG」などが有名であるが、今回は豊富な監視機能を持つ「Zabbix」という統合監視ツールを使ってLinuxサーバーを監視する方法について紹介しよう。
Zabbixは、ラトビアのZabbix SIAが開発するオープンソースの統合監視ツールである(ライセンスはGPL)。「Zabbixエージェント」と呼ばれるソフトウェアを監視対象にインストールすることで詳細な監視が行えるほか、SNMPを使った監視や監視対象サーバーの各種ポートにアクセスして監視を行うポーリング監視機能も備えている。
ZabbixではさまざまなOSや機器向けの設定項目がまとめられた「テンプレート」が多数用意されており、監視したいサーバーを登録してテンプレートを選択するだけですぐに一通りの監視が行える。監視や設定はWebブラウザを使ったGUIで行えるため、OSやデバイスを問わずに監視や設定作業が可能だ。
Zabbixの構成
Zabbixは「Zabbix Server(サーバー)」および「Zabbix Agent(エージェント)」、そしてWebフロントエンドというコンポーネントから構成されている。Zabbixサーバーは監視および監視データの収集、設定などの管理を行うコンポーネントだ。後述のZabbixエージェントからの情報収集などはこのZabbixサーバーが実行する。
Zabbixエージェントは監視対象とするサーバーにインストールするソフトウェアで、ZabbixサーバーはZabbixエージェントを通じて監視対象サーバーの状態を取得する。WebフロントエンドはPHPで実装されたWebアプリケーションで、Zabbixサーバーが収集したデータを表示したり、各種設定を行う機能を持つ。
今回は監視を行う構成として、図1のような環境を想定している。ここではZabbixサーバーとWebフロントエンドを同じサーバー上で動作させているが、これらを別のサーバーで動作させることも可能だ。

なお、以下では監視対象サーバーおよびZabbixサーバーのOSにRed Hat Enterprise Linux(RHEL) 6.4互換のLinuxディストリビューション「CentOS 6.4」を使用して環境構築方法を紹介している。
Zabbixのインストール
まずはZabbixのインストール手順について解説していこう。ZabbixはRHELの公式パッケージとしては提供されていないが、Red Hatが支援しているFedoraプロジェクト傘下の「Extra Packages for Enterprise Linux(EPEL)」というプロジェクトでバイナリパッケージが提供されている。EPELはRHELの公式パッケージリポジトリに含まれていないパッケージを提供するプロジェクトで、RHELだけでなくCentOSなどのRHEL互換ディストリビューションでも無償で利用可能だ。今回はこのEPELで提供されているZabbixパッケージを利用してZabbixをインストールしていく。
EPELを利用できるように設定する
EPELを利用するには、まず次のようにしてepel-releaseパッケージをインストールする。
# rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm
これで/etc/yum.repos.dディレクトリ以下にEPELリポジトリの設定ファイルが追加され、EPELリポジトリが利用可能となる。ただし、不用意にEPEL内のパッケージがインストールされることを防ぐため、EPELリポジトリはデフォルトではパッケージの検索対象外に設定されている。EPELリポジトリをyumから利用するには「-enablerepo=epel」オプション付きでyumコマンドを実行するか、もしくは/etc/yum.repos.d/epel.repoファイル内で「enabled=0」となっている部分を「enable=1」に変更すれば良い。
Zabbixサーバーのインストールと設定
続いて、監視を行うサーバーにZabbixサーバーをインストールする。ZabbixサーバーはデータベースとしてMySQLもしくはPostgreSQL、SQLiteを利用するので、こちらの準備も必要だ。今回はMySQLを使用することにする。
まず、EPELリポジトリからZabbixサーバー関連パッケージをインストールする。
# yum -enablerepo=epel install zabbix-server zabbix-server-mysql
なお、MySQL以外のデータベースを使用する場合はzabbix-server-mysqlパッケージではんなく、使用するデータベースに対応するパッケージをインストールする。
次に、MySQLにZabbix用のユーザーおよびデータベースを作成する。ここではユーザー名として「zabbix」を指定している。
$ mysql -u root -p
:
:
mysql> CREATE USER zabbix;
Query OK, 0 rows affected (0.00 sec)mysql> CREATE DATABASE zabbix;
Query OK, 1 row affected (0.00 sec)mysql> GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost IDENTIFIED BY ‘<パスワード>’;
Query OK, 0 rows affected (0.00 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
データベースの準備ができたら、次のようにしてZabbixが使用する初期データをデータベースに投入しておく。
$ mysql -u zabbix -p zabbix < /usr/share/doc/zabbix-server-mysql-1.8.15/create/schema/mysql.sql
$ mysql -u zabbix -p zabbix < /usr/share/doc/zabbix-server-mysql-1.8.15/create/data/data.sql
$ mysql -u zabbix -p zabbix < /usr/share/doc/zabbix-server-mysql-1.8.15/create/data/images_mysql.sql
Zabbixサーバーの設定ファイルは、/etc/zabbix/ディレクトリ以下に用意されている。このディレクトリ内にある「zabbix_server.conf」をエディタで開き、環境に応じて設定を変更しておく。最低限確認と変更が必要なのは以下の3点だ。
- DBName:使用するデータベース名
- DBUser:データベースのユーザー名
- DBPassword:データベースのパスワード
これらには先ほど作成したデータベース名やユーザー名、パスワードを指定しておく。
### Option: DBName
# Database name.
# For SQLite3 path to database file must be provided. DBUser and DBPassword are ignored.
#
# Mandatory: yes
# Default:
# DBName=DBName=zabbix
*g[:」
*g[:」
### Option: DBUser
# Database user. Ignored for SQLite.
#
# Mandatory: no
# Default:
# DBUser=DBUser=zabbix
### Option: DBPassword
# Database password. Ignored for SQLite.
# Comment this line if no password is used.
#
# Mandatory: no
# Default:
# DBPassword=DBPassword=設定したパスワード
以上で設定は完了だ。最後にserviceコマンドでZabbixサーバーを起動しておく。
# service zabbix-server start
# chkconfig zabbix-server on
Webフロントエンドのインストール
Zabbixの設定や監視などを行うためのWebフロントエンドは、Zabbixサーバーとは別のパッケージとして提供されている。先に述べたとおり、ここではZabbixサーバーをインストールしたのと同じサーバーにWebフロントエンドをインストールしていくことにする。
まず、yunコマンドでEPELリポジトリからWebフロントエンドが含まれるパッケージである「zabbix-web-mysql」をインストールする。
# yum --enable-repo=epel install zabbix-web-mysql
これによりWebフロントエンドおよびWebサーバー(Apache HTTP Server)の設定ファイルがインストールされる。また、WebフロントエンドはPHPを使用しており、PHPの設定によっては正しく動作しない場合がある。これについては後述の設定画面で確認できるが、今回はPHP.iniの下記の個所をあらかじめ太字のように変更しておいた。
[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = Asia/Tokyo
; Maximum size of POST data that PHP will accept.
; http://www.php.net/manual/en/ini.core.php#ini.post-max-size
post_max_size = 32M
; Maximum execution time of each script, in seconds
; http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time
max_execution_time = 600
; Maximum amount of time each script may spend parsing request data. It’s a good
; idea to limit this time on productions servers in order to eliminate unexpectedly
; long running scripts.
; Default Value: -1 (Unlimited)
; Development Value: 60 (60 seconds)
; Production Value: 60 (60 seconds)
; http://www.php.net/manual/en/info.configuration.php#ini.max-input-time
max_input_time = 600
; Maximum amount of memory a script may consume (128MB)
; http://www.php.net/manual/en/ini.core.php#ini.memory-limit
memory_limit = 256M
; Maximum allowed size for uploaded files.
; http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize
upload_max_filesize = 16M
最後にWebサーバーを再起動しておく。
# service httpd restart
Webサーバーが起動したら、Webブラウザで「http://<Webフロントエンドが動作しているホストのIPアドレス>/zabbix/」にアクセスする。ZabbixのWebフロントエンドの初期設定画面が表示されるはずだ(図2)。

設定画面が表示されたら、ウィザードに従って設定を進めていこう。途中でPHPの設定を確認する「Check of pre-requisites」画面が表示される。もしPHPの各種設定が必要要件(Required)を満たしていない場合「Fail」と表示され、この先の設定を進められない(図3)。また、必要要件を満たしていても推奨設定になっていない項目は赤字でその項目が「Ok」と表示される。この場合、PHP.iniファイルをチェックして設定を確認・変更しておこう。

「Configure DB connection」画面では、使用するデータベースの情報を入力する。「Type」で使用するデータベースの種別を指定し、データベースが稼働しているホストやポート、データベース名、ユーザー名、パスワードを入力する。入力後に「Test connection」をクリックし、「Ok」と表示されることを確認しておく(図4)。

「Zabbix server details」画面では、Zabbixサーバーが稼働しているホスト名やポート番号、Zabbixサーバー名を指定する。ここで指定するZabbixサーバー名は任意のもので構わない(図5)。

最後に確認画面が表示されるので、指示に従って設定を確認し、ウィザードを進めていく。インストールが完了すると、Webフロントエンドのログイン画面が表示される(図6)。

デフォルトの設定では「Admin」というユーザーが管理用に用意されており、ユーザー名「admin」、パスワード「zabbix」でログインが可能だ。このユーザーでログインを行い、ログインできることを確認しておく(図7)。

adminユーザーでのログインに成功したら、パスワードおよびUIの言語を変更しておこう。メニューを「Administration」、「Users」の順にクリックすると、ユーザー一覧画面が表示される(図8)。Zabbixでは複数のユーザーを定義でき、それぞれに異なる権限を付与できる。デフォルトでは「Admin」および「guest」というユーザーが用意されている。

ここで「Zabbix administrators」行の「Admin」をクリックすると、Adminユーザーの設定が表示される(図9)。

「Change password」ボタンをクリックするとパスワード入力欄が表示されるので、新しいパスワードを入力する。また、「Language」で「Japanese(JP)」を選択しておこう。最後に「Save」をクリックすると設定が保存され、ユーザーインターフェイスが日本語化される(図10)。

Zabbixエージェントのインストール
Zabbixではサーバーを監視する方法が複数提供されているが、今回は最も簡単なものとして、Zabbixエージェントを対象のサーバーにインストールして監視を行う方法を紹介する。
ZabbixエージェントについてもEPELリポジトリからのインストールが可能だ。監視対象とするサーバーでEPELを利用できるように設定したうえで、次のようにyumコマンドを実行する。
# yum -enablerepo=epel install zabbix-agent
続いてZabbixエージェントの設定ファイルである「/etc/zabbix/zabbix_agentd.conf」を環境に応じて編集する。最低限確認や修正が必要なのは以下の項目だ。
- Server:ZabbixサーバーのIPアドレス
- Hostname:監視対象ホスト、つまり自ホストのホスト名
- ListenIP:Zabbixエージェントが待ち受け(Listen)をするIPアドレス。ホストに複数のIPアドレスが振られている場合、Zabbixサーバーと通信できるIPアドレスをここに指定する
たとえばZabbixサーバーが192.168.100.20というIPアドレスを持つホストで稼働しており、Zabbixエージェントをインストールしたホストのホスト名が「sakura-sata」、IPアドレスが「192.168.100.21」の場合、設定は以下のようになる。
### Option: Server
# List of comma delimited IP addresses (or hostnames) of Zabbix servers.
# No spaces allowed. If ServerActive is not specified, the first entry is used
# for receiving list of and sending active checks.
# If IPv6 support is enabled then ’127.0.0.1′, ‘::127.0.0.1′, ‘::ffff:127.0.0.1′ are treated equally.
#
# Mandatory: yes
# Default:
# Server=Server=192.168.100.20
### Option: Hostname
# Unique, case sensitive hostname.
# Required for active checks and must match hostname as configured on the server.
# Value is acquired from HostnameItem if undefined.
#
# Mandatory: no
# Default:
# Hostname=Hostname=sakura-sata
### Option: ListenIP
# List of comma delimited IP addresses that the agent should listen on.
#
# Mandatory: no
# Default:
# ListenIP=0.0.0.0ListenIP=192.168.100.21
また、ZabbixエージェントはZabbixサーバーとの通信に10050番ポートを使用する。このポートにZabbixサーバーからアクセスできるよう、ファイアウォールの設定を行っておこう。
最後に、serviceコマンドでZabbixエージェントを起動する。
# service zabbix-agent start
# chkconfig zabbix-agent on
これでZabbixエージェントのインストールは完了だ。
Zabbixによる監視設定
Zabbixでは、Webフロントエンドを使って各種設定や監視を行う。監視を行うには、まず監視対象ホストの登録が必要だ。
監視対象ホストの登録
Webフロントエンドにログインし、メニュー内の「設定」、「ホスト」を順にクリックする。「ホストの設定」画面が表示されるので、「ホストの作成」ボタンをクリックしよう(図11)。

設定フォームにホスト名やIPアドレス、接続方法などを入力していく。また、「グループ」ではホストをグループに所属させる設定が可能だ。今回はあらかじめ用意されている「Linux servers」というグループを指定している(図12)。

監視する項目は「テンプレート」で指定する。画面右の「リンクしているテンプレート」欄にある「追加」をクリックすると、テンプレート一覧がポップアップする(図13)。あらかじめさまざまな環境に向けたテンプレートが用意されているが、今回はLinuxサーバーが対象なので「Template_Linux」にチェックを入れ、「選択」をクリックする。

これでホスト一覧に設定したホストが追加される(図14)。

監視項目のカスタマイズ
さて、Zabbixでは先に述べたように「テンプレート」で設定項目を登録できる。たとえば「Template_Linux」であれば、Linuxサーバーで一般的なサービスの監視やCPU、メモリ、ネットワークI/Oなどのリソース監視などがテンプレートに含まれている。しかし、ホストの設定によっては不要な監視項目もある。たとえば今回の例では、監視対象のホストでは監視項目に含まれる一部のサービスを稼働させておらず、デフォルトの設定ではそれらが次のように「障害」として検出されてしまう(図15)。

そこで、続いてはホストに応じて監視設定を変更する方法について紹介していこう。メニュー内の「設定」、「ホスト」を順にクリックして「ホストの設定」画面を開き、設定したいサーバーの「アイテム」をクリックする(図16)。

すると「アイテムの設定」画面が開き、設定項目一覧が表示される。ここで問題のある項目を探し、「有効」をクリックすることでその監視項目を無効にできる(図17)。

今回は「Email (SMTP) server is running」や「FTP server is running」、「IMAP server is running」、「News (NNTP) server is running」、「POP3 server is running」といった項目を無効に設定した。
また、一部の監視項目はサーバー上のプロセスやファイルシステムを直接監視して警告を出すものもある。これらについては、ホストの設定」画面で「トリガー」をクリックして表示される「トリガーの設定」画面で確認・設定できる(図18)。

Zabbixでは、監視項目を先ほどの「アイテム」で管理し、その監視項目の出力結果が異常である場合に警告メッセージを表示する。この警告メッセージやその発生条件は「トリガー」として定義されており、たとえば「Zabbix_server is not running on {HOSTNAME}」というトリガーには「{sata:proc.num[zabbix_server].last(0)}<1」という条件式が設定されている。これは、zabbixサーバーのプロセスの数が1以下であれば警告を発する、という意味だ。これを無効に設定することで、「Zabbix_server is not running on」という警告は表示されなくなる。
トリガーを無効に設定するにはアイテムの場合と同様、その項目にある「有効」をクリックすれば良い。なお、デフォルトでは無効なトリガーが非表示になるよう設定されているため、無効に設定するとトリガー一覧からその項目が消えてしまう。無効なトリガーも表示させたい場合、トリガーの設定画面右上の「無効なトリガーを表示」をクリックすれば良い(図19)。

グラフ表示を追加する
Zabbixでは、指定した監視項目による監視結果をグラフで表示する機能がある。Template_Linuxテンプレートのデフォルト設定ではグラフ関連の設定は用意されていないため、グラフ機能を利用するには自分で設定を追加する必要がある。グラフを追加するには「ホストの設定」画面を開き、設定したいサーバーの「グラフ」をクリックする(図20)。

「グラフの設定」画面が表示されるので、ここで「グラフの作成」をクリックする(図21)。

設定フォームが表示されるので、グラフの名前やサイズ、タイプなどを指定する(図22)。

続いて「アイテム」欄の「追加」をクリックすると「グラフに追加するアイテム」画面が表示される(図23)。

ここで「パラメータ」欄の「選択」をクリックすると、グラフとして表示する項目の一覧が表示される(図24)。

項目にはさまざまなものが用意されているが、たとえばCPUの負荷を見たい場合は「Processer load」を選択すれば良い。すると「グラフに追加するアイテム」画面に戻るので、ここで「追加」をクリックするとグラフのプレビューが表示される(図25)。

最後に「保存」をクリックするとグラフ設定が保存される。作成したグラフは、メニュー内の「監視データ」、「グラフ」を順にクリックすると表示できる(図26)。

障害が発生した場合にメールで通知を行う
Zabbixでは障害が発生した場合、Webフロントエンドのダッシュボードでその旨を通知するが、それに加えてメールなどでの通知を行うことも可能だ。
メールで通知を行う場合、まずそのメールアドレスを登録しておく必要がある。たとえば登録されているAdminユーザーにメールを送信する場合、メニュー内の「監視」、「ユーザ」を順にクリックしてユーザー管理画面を開き、ここで「Admin」をクリックしてAdminユーザーの設定画面を表示させる(図27)。

ここで「メディア」欄の「追加」をクリックし、表示される「新規メディア」画面にメールの送信先、有効な時間帯、メールを送信する深刻度条件などを指定して「追加」をクリックする(図28)。「タイプ」は「Email」を選択しておく。

メールアドレスを追加したらユーザー設定画面の「保存」をクリックして設定を保存する。続いて、メニュー内の「管理」、「メディアタイプ」を順にクリックしてメディアタイプの設定を行う(図29)。

Zabbixでは、通知を送信する手段を「メディア」として管理しており、デフォルトではメールやJabberによるインスタントメッセージング、SMSが利用できる。今回はメールを利用するため「Email」をクリックし、表示される設定フォームに使用するSMTPサーバーや送信元メールアドレスを入力して「保存」をクリックする(図30)。

以上でメールで通知を送信する設定は完了だ。続いてメニュー内の「設定」、「アクション」を順にクリックし、「アクションの設定」画面を表示させる(図31)。

Zabbixでは、障害発生時に行う操作を「アクション」と呼んでいる。アクションではメッセージの送信だけでなく、任意のコマンドを実行することもできる。「アクションの設定」画面で「アクションの作成」をクリックすると設定フォームが表示されるので、「名前」をまずは入力しておく(図32)。

実行するアクションは「アクションのオペレーション」欄で指定する。「新規」をクリックすると「オペレーションの編集」フォームが表示されるので、ここで「オペレーションのタイプ」として「メッセージの送信」、「メッセージの送信先」として送信先のユーザー(ここではAdmin)を指定し、「追加」をクリックする(図33)。

最後に「保存」をクリックして設定を保存すれば設定完了だ。たとえば「sakura-sata」というホスト上のWebサーバーが停止した場合、デフォルト設定では次のようなメッセージが送信される。
Subject: PROBLEM: WEB (HTTP) server is down on sakura-sata
Trigger: WEB (HTTP) server is down on sakura-sata
Trigger status: PROBLEM
Trigger severity: Average
Trigger URL:Item values:
1. WEB (HTTP) server is running (sata:net.tcp.service[http]): Down (0)
2. *UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*
3. *UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*
LinuxサーバーだけでなくWindowsサーバーやUNIXサーバーの監視も可能
今回はLinuxサーバーの監視について紹介したが、ZabbixではWindowsサーバーやUNIXサーバー、そして各種ルーターなどに向けた設定テンプレートも用意されている。これらを利用することで、Linuxサーバー以外の機器も容易に監視を行うことが可能だ。もちろん、自分でテンプレートを作成したり、カスタマイズを行うこともできる。監視対象からの情報の取得方法についても、SNMPを利用する方法や定期的にポートにアクセスする(ポーリング)など、さまざまなものが提供されている。このような柔軟な設定が可能ながら容易に利用できるのがZabbixの最大の特徴である。使用している環境に応じて、さまざまな設定を試してみてほしい。
この記事についてコメントする