前回の記事で、Zabbixサーバが使えるようになりました。
Zabbixサーバのみではサーバを監視することができないので、今回はZabbixエージェントをインストールしてサーバを監視できるようにしてみます。
- Vagrantでローカル環境にサーバをたてる
- Zabbixサーバをインストールする
- Zabbixサーバを設定してモニタリングできる環境を構築する
- Zabbixエージェントをインストールして、サーバを監視する
- Zabbixプロキシをインストールして複雑な監視環境を構築する
- ZabbixSenderを使って特殊なパラメータを監視する
- ZabbixAPIを使ってZabbixを操作する
今回は4を取り上げます。
サーバ環境
- ホストOS *1
- Mac OS X 10.9.2
- VirtualBox 4.3.10
- Vagrant 1.5.1
- ゲストOS
- CentOS 6.5
- Zabbix agent 2.2.3
サーバ構成
以下のようなサーバを構築します。
- Zabbixサーバ
- 監視対象サーバ
- ZabbixエージェントがZabbixサーバ(もしくはZabbixプロキシ)にデータを送信することによって監視体制下に入ります
- IPアドレス ・・・ 192.168.56.51
- 今回のメインです
- Zabbixプロキシサーバ
- Zabbixサーバの代わりZabbixエージェントから送信されるデータを収集し、Zabbixサーバに送信します
- IPアドレス ・・・ 192.168.56.55
- 今回の記事では使いません
VMマシンの起動、ログイン
vagrant up
でVMマシンを起動します。
$ 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/ にアクセスします。
[設定]→[ホスト]をクリックします。
[ホストの作成]をクリックします。
まず、登録するホストについての情報を入力します。
[ホスト]タブを選択し、下図のように入力します。
- ホスト名 ・・・ Zabbixエージェントの設定ファイル(zabbix_agentd.conf)の
Hostname
で設定した名前を指定します - 表示名 ・・・ Zabbixサーバで表示用に使われる名称。任意で入力しない場合はホスト名が使われます
- グループ ・・・ 所属させるホストグループを指定できます。通常はサービスやロール(役割)ごとにホストグループを作成します
- IPアドレス ・・・ Zabbixエージェントが入っているサーバのIPアドレスを指定します。その際、[接続方法]を[IPアドレス]にしてください
次に、監視項目のテンプレートを選択します。テンプレートは自作できるので自分が監視したい項目だけを集めることもできます。
[テンプレート]タブを選択し、[新規テンプレートをリンク]で"Template OS Linux"と入力して[追加]をクリックすると、その上の[テンプレートとのリンク]に追加したテンプレートが表示されます。
[保存]をクリックすると、ホストの登録が完了します。
登録後しばらくして、[エージェントの状態]欄が緑色に表示が変われば、ホストの登録が正常に完了となります。
収集した情報を確認するには、[監視データ]→[最新データ]から先ほど登録したホストを選択すればグラフで確認できます。
最後に
監視対象サーバにZabbixエージェントをインストールして監視できるようになりました。
実はこれで終わりではなく、本来なら収集した情報を元に、障害(軽度含む)となる閾値を決定し、アラートを仕掛けることが必要です。Zabbixでいうと「トリガー」が閾値の決定で、「アクション」がアラートです。
この辺りは僕も試行錯誤中なのである程度まとまったら記事にしたいと思います。