第5回 応用編 (2/3)

技術特集

1_zabbix5_tit

tit_zabbix
2)Zabbixプロキシの利用

監視の規模が大きくなってくると、値取得の処理が処理しきれなくなり、遅延なく監視することができなくなってしまう場合があります。


アイテムの値を取得する際には、各役割用に起動されている各プロセスが分担して処理しますが、処理しなければならないアイテムが多いと、各プロセスが値の取得処理に追われて、最悪の場合、値を取得し終える前に、次の値を取得しなければならない状態に陥ってしまうのです。

そのような状態になっているかどうかは、キューに溜まってきてしまうことと、Zabbixサーバの各プロセスのbusy率が高くなってくることで、ある程度把握することができます。
このような場合、busy率の高い役割のプロセスを追加して、処理をより多くのプロセスに分散させることで改善することができます。


とはいえ、プロセス数を増やすにしても、サーバの処理性能やメモリサイズ、ファイルディスクリプタなどの制限によって1台のサーバ上で起動できるプロセス数にも限界があります。

そこで、値を取得してくる処理を、Zabbixプロキシと呼ばれる役割のサーバで処理させることで、主に値取得処理の負荷を複数のサーバに分散させることができます。

簡単に図示すると以下のような階層を持たせて、処理の負荷を分散させるイメージです。


zbx_proxy_image1


他にも、監視する環境が単純な同一セグメントのネットワーク上のサーバやネットワーク機器だけを監視するのではなく、より複雑なネットワーク構成となっている環境も監視することが求められると思います。


例えば、NAT を利用しているような環境であったり、複数のネットワークセグメントによって構成されているようなネットワークであったりすると、Zabbixサーバから直接各ネットワークに接続されているサーバやネットワーク機器と直接通信することができません。
通信できるようにできたとしても、ネットワーク機器にポートフォワーディングなどの設定を追加しなければならなくなってしまうことでしょう。


そこで、このような場合もZabbixプロキシを利用することで、各セグメント単位などで監視対象のサーバやネットワーク機器をグルーピングし、各グループごとに特定のZabbixプロキシを経由して監視するように構成することができます。

Zabbixプロキシで集約することで、NAT などのネットワークの設定もZabbixサーバとZabbixプロキシ間のみに集約した設計ができるようになり、監視対象の増減に対応することも柔軟に対応することができるようになります。


こちらも簡単に図示してみると以下のようなネットワーク構成が考えられますが、このような環境でも、ZabbixサーバとZabbixプロキシが通信できる状態であれば各監視対象を監視することができます。


zbx_proxy_image2

つまり、Zabbixサーバと直接通信できないセグメント上の監視対象に関しては、Zabbixプロキシを中継させて監視を行うわけです。


ただし、Zabbixプロキシを利用しても、最終的に各アイテムのデータが集約されるのは、Zabbixサーバに接続したデータベースになりますので、そのデータベースの部分の状態把握とチューニングには十分に注意してください。

環境の構築方法は、以下のようになります。


  1. Zabbixサーバのインストール
  2. Zabbixプロキシのインストール
  3. ZabbixサーバへのZabbixプロキシの登録
  4. 監視対象へのZabbixエージェントのインストール
  5. Zabbixプロキシを経由した監視対象の登録

1.のZabbixサーバのインストールに関しては、これまで説明してきたとおりです。


2.のZabbixプロキシのインストールは、Zabbixサーバと同様に、Zabbixのリポジトリを登録して簡単にインストールできます。
また、Zabbixプロキシ自体は長期間データを保持するわけではありませんが、自分の配下のホストに対するアイテムの情報と、それらの値を取得した結果を一時的にキャッシュするため、データベースが必要です。


Zabbixサーバと同様に、利用するデータベースに合ったZabbixプロキシをインストールします。
ここでは、MySQLを利用したZabbixプロキシをインストールすることとします。


Zabbixプロキシ用のサーバを別途用意してOS(今回は、CentOS 6)をインストールして、SELinuxを無効化します。
iptablesの設定としては、Zabbixサーバからの接続用と監視対象からの接続用として、ポート番号の10050と10051への接続許可を行っておきます。


そして、MySQL用Zabbixプロキシのインストールです。
Zabbix SIAのyum リポジトリを登録後、以下のコマンドでインストールを行います。


1
# yum install zabbix-proxy-mysql

データベースサーバもインストールしましょう。


1
# yum install mysql-server

Zabbixサーバと同様にmy.cnfの設定を行ったらデータベースを起動して、データベース、アクセス用ユーザ、テーブルだけを作成します。

データベース名を「zabbix_proxy」にしていることに注意してください。
初期データの投入は不要です。


1
2
3
4
5
6
7
8
# service mysqld start
# chkconfig mysqld on
# mysql -uroot
mysql> create database zabbix_proxy;
mysql> grant all privileges on zabbix_proxy.* to zabbix@localhost identified by 'ぱすわーど' ;
mysql> flush privileges;
mysql> exit
# mysql -uroot zabbix_proxy < /usr/share/doc/zabbix-proxy-mysql-2.2.7/create/schema.sql

データベースができたら、Zabbixプロキシがそのデータベースにアクセスできるよう設定ファイルの設定を行います。

ここでは、データベースに接続する際のパスワード(DBPassword)と、Zabbixサーバを指定するServerの値を変更します。


1
# vi /etc/zabbix/zabbix_proxy.conf

設定ファイルが設定できたら、Zabbixプロキシの起動です。


1
# servrice zabbix-proxy start

起動できたら、3.のZabbixサーバへのZabbixプロキシの登録を行います。


3.ZabbixサーバへのZabbixプロキシの登録に関しては、ZabbixサーバのWebインターフェース上で、以下のようにして登録しておきます。

今回は、プロキシモードとしては「アクティブ」を選択することとします。このモードでは、ZabbixプロキシからZabbixサーバに接続して、Zabbixプロキシが自分の配下の監視対象と監視項目を一覧を取得して監視を開始します。


zbx_proxy_addproxy



4.監視対象へのZabbixエージェントのインストールに関しては、通常のエージェントのインストールと同様です。

違うのは、zabbix_agentd.conf内のServerやServerActiveに設定するのは、ZabbixサーバではなくZabbixプロキシの情報を登録するという点です。


今回は、Zabbixプロキシ自体の状態も把握できるよう、Zabbixプロキシ用サーバ上にZabbixエージェントもインストールしてしまいましょう。


1
# yum install zabbix-agent

先ほども紹介した通り、Zabbixプロキシ用サーバ上のZabbixエージェントの設定ファイルでは、Server、ServerActiveにはZabbixプロキシのIPを指定して、Hostnameには「Zabbix proxy」という名前を指定することとします。


1
# vi /etc/zabbix/zabbix_agentd.conf

設定ができたら、Zabbixエージェントを起動します。


1
2
# service zabbix-agent start
# chkconfig zabbix-agent on

監視対象上のZabbixエージェントの設定と起動も行えたら、次は、5.Zabbixプロキシを経由した監視対象の登録となります。

ホストの登録を行うわけですが、ホストの登録時に、先ほど登録したプロキシを選択して登録するという点だけが異なります。


zbx_proxy_addhost1


テンプレートとしては、Zabbixプロキシの状態を監視するための「Template App Zabbix Proxy」と、OSであるLinuxの状態も監視するために「Template OS Linux」の2つのテンプレートをリンクさせます。


zbx_proxy_addhost2


保存ボタンをクリックしてホストを登録できたら監視開始です。


デフォルトですと、アクティブプロキシの場合は、Zabbixプロキシの設定ファイル(/etc/zabbix/zabbix_proxy.conf)内のConfigFrequencyの値が3600になっているので、ZabbixプロキシからZabbixサーバに新しい設定を受け取りに行くまでに1時間かかってしまいます。
より短時間で反映させるためには、ConfigFrequencyを一時的に300秒などと短く設定してzabbix-proxyを再起動してみてください。


zabbix_proxy.confとzabbix_agentd.confの設定を再度振り返っておきますが、それぞれの設定は以下の図のような関係になることにご注意ください。


zbx_proxy_setting


値が取得できるようになったら、さらに必要なテンプレートを紐づけたり、アイテムやトリガーを登録して監視を行ってください。