本日も乙

ただの自己満足な備忘録。

Zabbixサーバによる統合監視(3) 〜Zabbixエージェント(2.2)をソースからインストールする〜

前回の記事で、Zabbixサーバが使えるようになりました。
Zabbixサーバのみではサーバを監視することができないので、今回はZabbixエージェントをインストールしてサーバを監視できるようにしてみます。

  1. Vagrantでローカル環境にサーバをたてる
  2. Zabbixサーバをインストールする
  3. Zabbixサーバを設定してモニタリングできる環境を構築する
  4. Zabbixエージェントをインストールして、サーバを監視する
  5. Zabbixプロキシをインストールして複雑な監視環境を構築する
  6. ZabbixSenderを使って特殊なパラメータを監視する
  7. ZabbixAPIを使ってZabbixを操作する

今回は4を取り上げます。

サーバ環境

サーバ構成

以下のようなサーバを構築します。

  • Zabbixサーバ
    • 統合監視するサーバで、Zabbixエージェントから送信されるデータ(パフォーマンス、稼働状況など)を収集することでGUIで監視対象のサーバのデータをモニタリングできます
    • IPアドレス ・・・ 192.168.56.50
  • 監視対象サーバ
    • ZabbixエージェントがZabbixサーバ(もしくはZabbixプロキシ)にデータを送信することによって監視体制下に入ります
    • IPアドレス ・・・ 192.168.56.51
    • 今回のメインです
  • Zabbixプロキシサーバ
    • Zabbixサーバの代わりZabbixエージェントから送信されるデータを収集し、Zabbixサーバに送信します
    • IPアドレス ・・・ 192.168.56.55
    • 今回の記事では使いません

VMマシンの起動、ログイン

vagrant upVMマシンを起動します。

$ vagrant up zabbix_agent
$ vagrant ssh zabbix_agent

[vagrant@zabbix-agent ~]$

ソースのダウンロード、インストール

ソースのダウンロードは、Zabbixサーバのインストールの時と同じです。
コンパイル時のconfigureのオプションは、--enable-agentのみとなります。

$ cd /usr/local/src
$ sudo wget http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.2.3/zabbix-2.2.3.tar.gz
$ sudo tar zxvf zabbix-2.2.3.tar.gz
$ cd zabbix-2.2.3
$ sudo ./configure --enable-agent
$ sudo make install

Zabbixエージェント側の設定

Zabbixサーバの時とほぼ同じです。

zabbixユーザとグループを作成

zabbixを実行するユーザとグループを作成します。

$ sudo groupadd zabbix
$ sudo useradd -M -g zabbix -s /sbin/nologin zabbix
$ sudo mkdir /var/run/zabbix
$ sudo mkdir /var/log/zabbix
$ sudo chown -R zabbix:zabbix /var/run/zabbix
$ sudo chown -R zabbix:zabbix /var/log/zabbix

自動起動の設定

起動スクリプトをコピーします

$ sudo cp /usr/local/src/zabbix-2.2.3/misc/init.d/fedora/core5/zabbix_agentd /etc/init.d/zabbix_agentd
$ sudo chmod 755 /etc/init.d/zabbix_agentd

自動起動の設定を行います。

$ sudo chkconfig --add zabbix_agentd
$ sudo chkconfig zabbix_agentd on
$ chkconfig --list zabbix_agentd
zabbix_agentd    0:off   1:off   2:on    3:on    4:on    5:on    6:off

設定ファイルの編集

# /usr/local/etc/zabbix_agentd.conf

# PIDファイルのパス
- # PidFile=/tmp/zabbix_agentd.pid
+ PidFile=/var/run/zabbix/zabbix_agentd.pid

# ログファイルのパス
- LogFile=/tmp/zabbix_agentd.log
+ LogFile=/var/log/zabbix/zabbix_agentd.log

# Zabbixサーバからのリモートコマンドを許容するか
- # EnableRemoteCommands=0
+ EnableRemoteCommands=1

# ZabbixサーバのIPアドレスまたはホスト名
- Server=127.0.0.1
+ Server=192.168.56.50

# アクティブチェック先。Zabbixサーバを指定すれば間違いない
- ServerActive=127.0.0.1
+ ServerActive=192.168.56.50

# ホスト名。Zabbixサーバ側でホスト名を識別するのに使う
- Hostname=Zabbix server
+ Hostname=foo_server

# Zabbixエージェントをroot権限での実行を許可するか
# リモートコマンド等をroot権限で実行したいときに設定する
- # AllowRoot=0
+ AllowRoot=1

Zabbixエージェント起動

$ sudo service zabbix_agentd start
Starting zabbix_agentd:                                    [  OK  ]

Zabbxiサーバ側の設定

iptablesの編集

セキュリティ向上のため、監視対象のサーバのみZabbixエージェントのポート(10050)を受け付けるようにし、それ以外は弾くようにします。
iptablesについては過去の記事もご参照ください。

# /etc/sysconfig/iptables

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT

# SSH, http, zabbix server, zabbix agent
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10051 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.56.51 --dport 10050 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

iptablesを再起動して設定を反映させます。

$ sudo service iptables restart
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:zabbix-trapper
ACCEPT     tcp  --  192.168.56.51        anywhere            state NEW tcp dpt:zabbix-agent
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

疎通確認

ZabbixサーバとZabbixエージェントが疎通できているかを確認します。
Zabbixサーバ内で以下のコマンドを実行してください。

$ zabbix_get -s 192.168.56.51 -k agent.version
2.2.3

-sオプションは、疎通したいZabbixエージェントが入っているサーバのIPアドレスまたはホスト名、-kオプションは、取得したキーで今回はZabbixエージェントのバージョンを取得しようとしています。
Zabbixエージェントのバージョン(2.2.3)が表示されていれば疎通はできています。もし何も表示されていない場合は設定を見直してください。

ホストを登録する(GUI)

http://zabbix.localhost/ にアクセスします。
[設定]→[ホスト]をクリックします。

host_registration_1

[ホストの作成]をクリックします。

host_registration_2

まず、登録するホストについての情報を入力します。
[ホスト]タブを選択し、下図のように入力します。

  • ホスト名 ・・・ Zabbixエージェントの設定ファイル(zabbix_agentd.conf)のHostnameで設定した名前を指定します
  • 表示名 ・・・ Zabbixサーバで表示用に使われる名称。任意で入力しない場合はホスト名が使われます
  • グループ ・・・ 所属させるホストグループを指定できます。通常はサービスやロール(役割)ごとにホストグループを作成します
  • IPアドレス ・・・ Zabbixエージェントが入っているサーバのIPアドレスを指定します。その際、[接続方法]を[IPアドレス]にしてください

host_registration_3

次に、監視項目のテンプレートを選択します。テンプレートは自作できるので自分が監視したい項目だけを集めることもできます。
[テンプレート]タブを選択し、[新規テンプレートをリンク]で"Template OS Linux"と入力して[追加]をクリックすると、その上の[テンプレートとのリンク]に追加したテンプレートが表示されます。
[保存]をクリックすると、ホストの登録が完了します。

host_registration_4

登録後しばらくして、[エージェントの状態]欄が緑色に表示が変われば、ホストの登録が正常に完了となります。

host_registration_5

収集した情報を確認するには、[監視データ]→[最新データ]から先ほど登録したホストを選択すればグラフで確認できます。

最後に

監視対象サーバにZabbixエージェントをインストールして監視できるようになりました。
実はこれで終わりではなく、本来なら収集した情報を元に、障害(軽度含む)となる閾値を決定し、アラートを仕掛けることが必要です。Zabbixでいうと「トリガー」が閾値の決定で、「アクション」がアラートです。
この辺りは僕も試行錯誤中なのである程度まとまったら記事にしたいと思います。

*1:Vagrantに関してはこちらの記事を参照してください