Zabbixで作るサーバー監視環境(Zabbix 2.4対応版)

graph03

オープンソースのサーバー監視システムとして代表的なものに、「Zabbix」がある。今回は2014年9月にリリースされたZabbixの最新版「Zabbix 2.4」を使ったサーバー監視環境の構築方法を紹介する。

Zabbixを使えば簡単にサーバーの監視が可能に

サーバーを運用するに当たって、そのサーバーが正しく稼動しているかの監視は非常に重要だ。とはいえ、サーバーの稼動状態をいちいち手作業でチェックするのは実用的ではない。そこで使われるのが、指定しておいたサーバーの稼働状況を自動でチェックし、問題が発生していたら管理者にメールなどでアラートを送信するサーバー監視システムだ。

サーバー監視システムにはさまざまなものがあるが、オープンソースのもので広く使われているのが「Zabbix」だ(図1)。

図1 ZabbixのWebフロントエンド
図1 ZabbixのWebフロントエンド

 Zabbixについては2013年7月にも『統合監視ツール「Zabbix」によるサーバー監視』という記事で紹介しているが、そこから時間が経ち、2014年9月にリリースされたZabbixの新バージョン「Zabbix 2.4」では設定画面の改良など、さまざまな改善や機能強化が加えられている。そこで、今回は前回記事のアップデート版として、最新版であるZabbix 2.4系を使ってインストール方法や基本的な設定方法を解説する。また、前回紹介していなかった監視対象サーバーの自動登録機能や、Zabbix 2.4で新たに追加された簡易グラフ作成機能についても紹介する。

なお、Zabbixの概要やサーバー構成などについて大きな変更はされていないので今回は割愛する。これらについては先の記事をチェックして頂きたい。

Zabbixが提供するapt/yumリポジトリを利用する

Zabbix公式サイトのダウンロードページでは、Red Hat Enterprise Linux(RHEL)およびその互換OSであるCentOSや、Debian、Ubuntu向けの各種バイナリパッケージへのリンクが掲載されている。ここからRPMやDEB形式のバイナリをダウンロードしてインストールしても良いのだが、その場合手動でアップデートなどを行わなければならない。そのため、Zabbixが公開しているyumもしくはaptリポジトリ経由でのインストールをおすすめする。

たとえばRHELやCentOSでZabbixのyumリポジトリを利用する場合、上記のダウンロードページから使用するディストリビューションおよびバージョン、アーキテクチャを選んで「ダウンロード」ボタンをクリックし、一覧表示されるパッケージから「zabbix-release-2.4」パッケージをダウンロードしてインストールすれば良い。

たとえばRHEL 7の場合、「http://repo.zabbix.com/zabbix/2.4/rhel/7/x86_64/zabbix-release-2.4-1.el7.noarch.rpm」がインストールすべきパッケージだ。なお、アップデート等でファイル名は変更される可能性があるので、適宜確認してほしい。

この場合、次のようにrpmコマンドを実行することでyumリポジトリが利用可能になり、yumコマンドでzabbixパッケージなどのインストールを行えるようになる。

# rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/7/x86_64/zabbix-release-2.4-1.el7.noarch.rpm

また、DebianやUbuntuの場合、ダウンロードページからのリンク先ではないディレクトリにzabbix-releaseパッケージが格納されているので注意したい(表1)。

表1 記事執筆時点での「zabbix-release」パッケージ格納場所
ディストリビューション バージョン アーキテクチャ 公開ディレクトリ
Debian 7(Wheezy) i386 http://repo.zabbix.com/zabbix/2.4/debian/pool/main/z/zabbix-release/
amd64 http://repo.zabbix.com/zabbix/2.4/debian/pool/main/z/zabbix-release/
Ubuntu 14.04 LTS(Trusty) i386 http://repo.zabbix.com/zabbix/2.4/ubuntu/pool/main/z/zabbix-release/
amd64 http://repo.zabbix.com/zabbix/2.4/ubuntu/pool/main/z/zabbix-release/

これらディレクトリで公開されているzabbix-releaseパッケージをダウンロードし、dpkgコマンドでインストールすることでZabbixのaptリポジトリが利用可能となる。

Zabbixサーバーのインストール

Zabbixを利用するには、Zabbixサーバーと呼ばれるソフトウェアが必要だ。Zabbixサーバーは指定されたサーバーの監視を行うソフトウェアで、監視対象から取得したデータをデータベースに保存する。また、Webブラウザ経由で利用できるWebフロントエンドも提供される。管理者はこのフロントエンド経由で各種データを確認したり、Zabbixの設定を行える。まずはこのZabbixサーバーの構築方法について紹介しよう。

なお、今回はCentOS 7上でZabbixサーバーを稼働させる例を紹介する。Zabbixサーバーを利用するには別途データベースやWebサーバーが必要となるが、今回はCentOS 7で標準的に利用されているMariaDB(MySQL互換データベース)およびApache HTTP Server(httpd)を利用する。これらは以下のようにしてインストールが可能だ。

# yum install mariadb-server 
# yum install httpd

これらをインストールしたら、次のようにしてサーバーの起動時に自動的にサービスが実行されるよう設定しておこう。

# systemctl enable mariadb  ←mariadbサービスを有効化
# systemctl start mariadb  ←mariadbサービスを起動
# systemctl enable httpd  ←httpdサービスを有効化
# systemctl start httpd  ←httpdサービスを起動

Zabbixサーバーはコンポーネントごとに複数のパッケージに分離されて提供されている。MariaDB(もしくはMySQL)をデータベースとして利用する場合、「zabbix-server-mysql」および「zabbix-web-mysql」パッケージをインストールすれば良い。また、日本語環境で利用するためのフォント設定を行う「zabbix-web-japanese」パッケージも提供されているので、こちらも併せてインストールしておこう。

# yum install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese

Zabbixサーバーの初期設定

続いて、Zabbixサーバーの初期設定を行っていく。これには次の3つのステップが必要となる。

  • データベースの設定
  • httpdの設定
  • Webフロントエンドからの設定

まず、mysqlコマンドを使ってデータベースにZabbixが使用するユーザーおよびデータベースを作成する。デフォルトのZabbix設定ファイルではユーザー名および使用するデータベースとして「zabbix」が想定されているので、今回はこれらに準じてユーザーおよびデータベースを作成した。作業の流れは以下のようになる。また、パスワードについては適切なものを各自設定する。

# mysql -u root -p
Enter password:
  
  
MariaDB [(none)]> CREATE USER zabbix;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> CREATE DATABASE zabbix CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES on zabbix.* TO zabbix@localhost IDENTIFIED BY '<パスワード>';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]>

続いて、Zabbixが使用するテーブルの作成や初期設定データの入力といった作業を行う。「/usr/share/doc/zabbix-server-mysql-2.4.3/create/」ディレクトリ以下にこれらを行うためのSQLファイルが用意されているので、次のようにこれらを順次実行していけば良い。

$ cd /usr/share/doc/zabbix-server-mysql-2.4.3/create/
$ mysql -u zabbix -p zabbix < schema.sql
$ mysql -u zabbix -p zabbix < images.sql
$ mysql -u zabbix -p zabbix < data.sql

なお、ファイルパスの「zabbix-server-mysql-2.4.3」の部分はインストールしたZabbixのバージョンによって変わるので、適宜確認してほしい。

また、「/etc/zabbix」ディレクトリ内に格納されているZabbixサーバーの設定ファイル(「zabbix_server.conf」)をエディタで編集し、以下の「<パスワード>」の個所にデータベースへの接続に使用するパスワードを指定しておく。

### Option: DBPassword
#       Database password. Ignored for SQLite.
#       Comment this line if no password is used.
#
# Mandatory: no
# Default:
# DBPassword=
DBPassword=<パスワード>

以上の設定が完了したら、systemctlコマンドなどを実行してzabbix-serverサービスを有効にするとともに、サービスを起動しておこう。

# systemctl enable zabbix-server
# systemctl start zabbix-server

Webフロントエンドの設定

次に必要なのは、Webフロントエンドの設定だ。zabbix-web-mysqlパッケージと同時に自動的にインストールされるzabbix-webパッケージにはhttpd用の設定ファイルが含まれており、自動的に「/etc/httpd/conf.d」ディレクトリ以下に設定ファイル(「zabbix.conf」)がインストールされる。この設定ファイルにはパスの設定やPHPの設定などが含まれており、このうちタイムゾーンの設定のみ変更が必要だ。

具体的には「php_value date.timezone Europe/Riga」という行がコメントアウトされているので、その下に「php_value date.timezone Asia/Tokyo」という行を追加しよう。また東京以外のタイムゾーンを使用したい場合、「Asia/Tokyo」の部分を適切なタイムゾーンに置き換えてほしい。

<Directory "/usr/share/zabbix">
    Options FollowSymLinks
    AllowOverride None
    Require all granted

    php_value max_execution_time 300
    php_value memory_limit 128M
    php_value post_max_size 16M
    php_value upload_max_filesize 2M
    php_value max_input_time 300
    # php_value date.timezone Europe/Riga
    php_value date.timezone Asia/Tokyo
</Directory>

以上の設定が完了したら、httpdサービスの有効化および起動を行う。

# systemctl enable httpd
# systemctl restart httpd

httpdの起動後、Webブラウザで「http://<ホスト名>/zabbix/」というURLにアクセスするとZabbixの初期設定画面が表示されるはずだ(図2)。

図2 Zabbixの初期設定画面
図2 Zabbixの初期設定画面

 あとは「Next」ボタンをクリックし、指示に従って設定作業を進めていけば良い。ここまでで述べてきた手順でインストールを行った場合、基本的にはデフォルトの設定で問題なく設定作業が進められるはずだ(図3~7)。

図3 PHPの設定確認画面。必要な設定やモジュールが含まれていない場合、ここでエラーが表示される
図3 PHPの設定確認画面。必要な設定やモジュールが含まれていない場合、ここでエラーが表示される
図4 データベースの接続設定画面。データベース名や接続に使用するユーザー名、パスワードなどを指定する
図4 データベースの接続設定画面。データベース名や接続に使用するユーザー名、パスワードなどを指定する
図5 Zabbixサーバーのホスト名/ポート番号の設定画面。通常はデフォルトのままで構わない
図5 Zabbixサーバーのホスト名/ポート番号の設定画面。通常はデフォルトのままで構わない
図6 設定確認画面
図6 設定確認画面
図7 初期設定作業が完了すると「OK」が表示されるので、「Finish」をクリックする
図7 初期設定作業が完了すると「OK」が表示されるので、「Finish」をクリックする

 初期設定が完了すると、Webフロントエンドへのログイン画面が表示される。初期状態ではユーザー名「Admin」、パスワード「zabbix」というアカウントでログインが可能になっている(図8)。

図8 Webフロントエンドのログイン画面
図8 Webフロントエンドのログイン画面

 ログイン後、画面右上の「profile」リンクをクリックするとユーザープロファイル画面が表示される。ここで「Language」として「Japanese(ja_JP)」を選択して「Update」をクリックすることで、ユーザーインターフェイスが日本語化される(図9)。

図9 Zabbixのユーザー設定(User profile)画面
図9 Zabbixのユーザー設定(User profile)画面

 また、同じくユーザープロファイル画面で「パスワード変更」(英語では「Change password」)をクリックすると、パスワードの変更を行える(図10)。ここでログインしている「Admin」ユーザーは管理用ユーザーとなっているので、パスワードを適切なものに変更しておこう。

図10 パスワードの設定画面
図10 パスワードの設定画面

Zabbixエージェントのインストール

Zabbixでは、サーバーを監視するためのツールとしてZabbixエージェントと呼ばれるソフトウェアが用意されている。これを開始対象のサーバーにインストールすることで、サーバーのリソース利用状況やサービスの稼働状況を監視できるようになる。ZabbixエージェントはLinuxのほか、WindowsやMac OS X、FreeBSDなどさまざまなOS向けのものが用意されている。

Zabbixエージェントのバイナリはダウンロードページで公開されているほか、RHELやCentOS、Debian、Ubuntuなどでは先に紹介したyum/aptリポジトリからのインストールも可能だ。たとえばCentOS 7でZabbixのyumリポジトリが利用可能な環境であれば、以下のようにしてZabbixエージェントをインストールできる。

# yum instsall zabbix-agent

また、サービスの有効化や起動は以下のようにして行える。

# systemctl enable zabbix-agent
# systemctl start zabbix-agent

ファイアウォールの設定

最後にファイアウォールの設定を行い、Zabbixが使用するポートを開放しておこう。Zabbixサーバーは10051番ポートで、Zabbixエージェントは10050番ポートで待ち受けを行うので、これらポートが利用できるよう適切に設定を行っておく。

Zabbixでサーバーや各種機器を監視する

Zabbixサーバーで監視するサーバーや機器を登録する手順については、以前の記事から大きな変更はないため、そちらを参照して欲しい。また、Zabbixエージェントを使って自動的にサーバーを登録することも可能だ。これは、Zabbixエージェントがインストールされたサーバーを自動的に監視対象に追加する機能で、多数のサーバーを管理している場合などに便利だ。こちらは以前の記事では紹介していなかったが、以下のような手順で実行できる。

まず、自動登録機能を利用するにはZabbixサーバー側で自動登録に関する設定を行っておく必要がある。この設定は、「設定」-「アクション」メニューをクリックして表示される「アクションの設定」で行う(図11)。

図11 「アクションの設定」画面
図11 「アクションの設定」画面

 ここで「イベントソース」として「自動登録」を選択し、「アクションの作成」をクリックする。すると「アクションの設定」画面が表示されるので、まず「アクション」タブで適当な名前を指定する(図12)。

図12 「アクションの設定」画面の「アクション」タブ
図12 「アクションの設定」画面の「アクション」タブ

 次に、「アクションの実行内容」タブをクリックし、「新規」をクリックして実行するアクションを追加する(図13)。

図13 「アクションの実行内容」タブ
図13 「アクションの実行内容」タブ

 ここでは「実行内容のタイプ」に「ホストを追加」を選択し、「追加」をクリックする(図14)。

図14 「実行内容のタイプ」に「ホストを追加」を選択し、「追加」をクリックする
図14 「実行内容のタイプ」に「ホストを追加」を選択し、「追加」をクリックする

 次に、「実行内容のタイプ」として「ホストグループに追加」を選択し、追加するホストグループを選択する(図15)。

図15 同様に「実行内容のタイプ」として「ホストグループに追加」を選択し、追加するホストグループを選択する
図15 同様に「実行内容のタイプ」として「ホストグループに追加」を選択し、追加するホストグループを選択する

 また、「テンプレートとのリンクを作成」では登録するサーバーで試用する設定テンプレートを指定できる(図16)。

図16 登録したホストに対し、「Template OS Linux」という設定テンプレートを使用するよう設定した例
図16 登録したホストに対し、「Template OS Linux」という設定テンプレートを使用するよう設定した例

 「アクションの実行条件」タブでは、Zabbixが新しいZabbixエージェントを検知したときに、そのホストを自動的に登録する際の条件を指定できる。たとえば、「ホストメタデータ」という条件では、Zabbixエージェントが持つホストメタデータに特定の文字列が含まれる場合にのみ自動登録を行う、といったことが可能だ(図16)。

図17 「アクションの実行条件」では自動登録を行う条件を指定できる。この例の場合、ホストメタデータに「LinuxServer」という文字列が含まれる場合にこのアクションが実行される
図17 「アクションの実行条件」では自動登録を行う条件を指定できる。この例の場合、ホストメタデータに「LinuxServer」という文字列が含まれる場合にこのアクションが実行される

 たとえばアクションの実行条件および追加するホストグループやテンプレートが異なる複数の自動登録アクションを用意しておけば、ホストメタデータに応じて異なる処理を実行できるようになる。

最後に「追加」をクリックすれば、設定したアクションが保存される(図18)。

図18 追加されたアクションは「アクション」画面に表示される
図18 追加されたアクションは「アクション」画面に表示される

 また、Zabbixエージェント側では自動登録を行うための設定が必要だ。Zabvbixエージェントの設定ファイルである「/etc/zabbix/zabbix_agentd.conf」を、以下のように修正していく。

まず、「HostnameItem」の値を「system.hostname」に設定する。

### Option: HostnameItem
#       Item used for generating Hostname if it is undefined. Ignored if Hostnam
e is defined.
#       Does not support UserParameters or aliases.
#
# Mandatory: no
# Default:
# HostnameItem=system.hostname
HostnameItem=system.hostname

これにより、システムのホスト名がZabbix側でもそのままそのホストのホスト名として使われるようになる。

また、「HostMetadata」ではホストのメタデータを設定する。これは、Zabbixサーバーの「アクションの実行条件」で使われる。たとえば「LinuxServer」という文字列を指定するには、次のようになる。

### Option: HostMetadata
#       Optional parameter that defines host metadata.
#       Host metadata is used at host auto-registration process.
#       An agent will issue an error and not start if the value is over limit of 255 characters.
#       If not defined, value will be acquired from HostMetadataItem.
#
# Mandatory: no
# Range: 0-255 characters
# Default:
# HostMetadata=
HostMetadata=LinuxServer

ZabbixサーバーのIPアドレス(もしくはホスト名)は、「ServerActive」および「Server」項目で指定する。

### Option: ServerActive
#       List of comma delimited IP:port (or hostname:port) pairs of Zabbix servers for active checks.
#       If port is not specified, default port is used.
#       IPv6 addresses must be enclosed in square brackets if port for that host is specified.
#       If port is not specified, square brackets for IPv6 addresses are optional.
#       If this parameter is not specified, active checks are disabled.
#       Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]
#
# Mandatory: no
# Default:
# ServerActive=
ServerActive=172.17.4.237

systemctl restart zabbix-agent

##### Passive checks related

### Option: Server
#       List of comma delimited IP addresses (or hostnames) of Zabbix servers.
#       Incoming connections will be accepted only from the hosts listed here.
#       If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally.
#
# Mandatory: no
# Default:
# Server=
Server=172.17.4.237

以上の設定完了後、Zabbixエージェントを起動する、もしくは再起動すると自動的にそのサーバーが登録される(図19)。

図19 自動登録で追加されたホストの例
図19 自動登録で追加されたホストの例

Zabbixエージェントをインストールしていないサーバーを監視する

Zabbixでは監視対象として、Zabbixエージェントがインストールされていないサーバーを指定することも可能だ。この場合、監視できる項目は限られるが、Zabbixエージェントをインストールできない環境などでは有用だ。

たとえばWebサーバーが稼働していることを一定時間間隔でポーリングして確認するには、以下のような手順でホストを登録すれば良い。

まず、Zabbixエージェントを利用する場合と同様に「設定」-「ホスト」をクリックして「ホストの設定」画面を開き、そこで「ホストの作成」をクリックする。ここでホスト名や表示名などを指定する。また、監視対象のIPアドレスもしくはホスト名(DNS名)は「エージェントのインターフェイス」で指定する(図20)。

図20 「ホストの設定」画面
図20 「ホストの設定」画面

 次に、「テンプレート」タブで使用するテンプレートを選択する。ここで「Template App HTTP Service」を選択することで、エージェントを利用せずにHTTPサービスの可動だけを監視することが可能になる(図21)。

図21 「テンプレート」タブで使用するテンプレートを指定する
図21 「テンプレート」タブで使用するテンプレートを指定する

 最後に「追加」をクリックすると設定が保存され、そのホストに対してはWebサーバーのみの監視が行われるようになる。

Zabbixでは、HTTP以外にもHTTPSやFTP、TMAP、POP、MySQLといったテンプレートが用意されており、これらを利用することで同様に特定のアプリケーションの監視のみが可能になる。テンプレート一覧は「設定」-「テンプレート」をクリックすると確認できる(図22)。

図22 テンプレート一覧画面
図22 テンプレート一覧画面

Zabbix 2.4で追加された簡易グラフ作成機能を使う

Zabbix 2.4では、新機能として簡単にグラフを表示する機能が追加された。旧バージョンではグラフを表示するため、事前に表示するグラフの設定を行っておく必要があったが、Zabbix 2.4ではグラフの設定を行っていない監視項目についても、簡単にグラフを表示できるようになっている。

Zabbixでは、「監視データ」-「最新データ」をクリックすることで監視中の項目を確認できる(図23)。

図23 「最新のデータ」画面
図23 「最新のデータ」画面

 ここで、グラフ表示したい項目の右端に表示されている「グラフ」をクリックすることで、その監視項目に関するグラフを表示できる(図24)。

図24 表示されたプロセッサ負荷グラフ
図24 表示されたプロセッサ負荷グラフ

 ここでは、グラフ上部のスライダを操作することで表示範囲や期間を切り替えることが可能だ。

クラウド環境でも有用なZabbix

今回紹介した自動登録機能と、Chefなどの自動設定機構とを組み合わせれば、より容易に新たに追加したサーバーを監視できるようになる。これは、サーバーの構成変更が多いクラウド環境などで特に便利だろう。

Zabbixでは多くのテンプレートが用意されており、簡単に設定対象を指定できるのも特徴だ。たとえばLinux向けのテンプレートを利用すれば、CPUやファイルシステム、メモリといった一通りのハードウェアリソースの監視と、Webサーバーなどの広く使われているサーバーソフトウェアの監視が行える。ただし、環境によっては一部の監視項目は不要、という場合もある。そのため、慣れてきたらテンプレートで作成した監視項目を元に監視内容や監視頻度などをカスタマイズすると良いだろう。

また、独自にテンプレートを作成することもできるので、必要な監視項目だけを定義したテンプレートを用意しておけば、複数のサーバーに対しそれらの監視設定を簡単に適用できる。これら機能をうまく活用して、サーバー管理に役立てて欲しい。