Zabbixでapacheのコネクション数の監視
設定したときのメモ
監視対象のサーバのapacheの設定を変更する
# vim httpd.conf
# diff httpd.conf_20160518 httpd.conf
912,917c912,917
< #<Location /server-status>
< # SetHandler server-status
< # Order deny,allow
< # Deny from all
< # Allow from .example.com
< #</Location>
---
> <Location /server-status>
> SetHandler server-status
> Order deny,allow
> Deny from all
> Allow from 127.0.0.1
> </Location>
ローカルホストからだけデータが取得できるように設定してリスタートする。
# service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]
ステータスを確認する
# apachectl status
The 'links' package is required for this functionality.
「elinks」が無いようなのでインストール
# yum install elinks
再度ステータスの確認
# apachectl status
Apache Server Status for localhost
Server Version: Apache
Server Built: Sep 16 2014 11:05:09
--------------------------------------------------------------------------
Current Time: Wednesday, 18-May-2016 17:11:39 JST
Restart Time: Wednesday, 18-May-2016 17:09:30 JST
Parent Server Generation: 0
Server uptime: 2 minutes 8 seconds
1 requests currently being processed, 7 idle workers
_W______........................................................
................................................................
................................................................
................................................................
Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process
1 requests currently being processed, 7 idle workers
↑ここの部分が現在アクティブなリクエスト数をあらわしている
zabbix_agentのユーザパラメータの設定
# pwd
/etc/zabbix
# vim zabbix_agentd.conf
末尾に「UserParameter=apache.con.num,/usr/sbin/apachectl status|grep "requests currently being processed"|awk '{print $1}'」を追加する
# diff zabbix_agentd.conf_20160518 zabbix_agentd.conf
268a269
> UserParameter=apache.con.num,/usr/sbin/apachectl status|grep "requests currently being processed"|awk '{print $1}'
# service zabbix-agent restart
Shutting down zabbix agent: [ OK ]
Starting zabbix agent: [ OK ]
ここまでできたらzabbixの管理画面で設定を行う。
「設定」⇒「ホスト」⇒今回設定を行ったホストの「アイテム」をクリック。
画面右上の「アイテムの作成」でapache.con.numをキーとして設定する。
しかし設定しても値が入ってこない・・・。
ホスト側のログをみてみると以下のようなエラーが!
# less /var/log/zabbix/zabbix_agentd.log
^GERROR at home.c:149: Unable to find or create ELinks config directory. Please check if you have $HOME variable set correctly and if you have write permission to your home directory.
どうも「apachectl」のlinksコマンドがホームディレクトリに書き込め無くて出るエラーらしいので「apachectl」自体をコピーして
オプションを追加し、「zabbix_agentd.conf」ではそっちの「apachectl」を利用すればいいみたいです。
[root@www15172u sbin]# pwd
/usr/sbin
とりあえず「apachectl2」とする
[root@www15172u sbin]# cp apachectl apachectl2
[root@www15172u sbin]# vim apachectl2
[root@www15172u sbin]# diff apachectl apachectl2
51c51
< LYNX="/usr/bin/links -dump" --- > LYNX="/usr/bin/links -dump -no-home"
# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=apache.con.num,/usr/sbin/apachectl2 status|grep "requests currently being processed"|awk '{print $1}'
# service zabbix-agent restart
Shutting down zabbix agent: [ OK ]
Starting zabbix agent: [ OK ]
しばらく待つと・・・。
でた。
■参考ページ
zabbix-agentでapachectlからデータを取得するUserParameterを設定したらコケた
※追記1:バーチャルドメインの場合はhttpd.confに設定をしても有効にならないので、
server-status用にconfを作成する
# pwd
/etc/httpd/conf.d/vhost
# cat localhost.conf
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/html
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
</Location>
</VirtualHost>
※追記2:CentOS7の場合にはまった箇所
■CentOS7のApacheではsutatusではなくfullstatusにする
# apachectl fullstatus
設定に記載するのは↓
UserParameter=apache.con.num,/usr/sbin/apachectl2 fullstatus|grep "requests currently being processed"|awk '{print $1}'
■上記設定をしてzabbix-agentを再起動するもログにこんなエラーが出てしまった。
listener failed: zbx_tcp_listen() fatal error: unable to serve on any address [[-]:10050]
以前のプロセスが残っているようなのでまず止めてみる。
■サービスを止める。でもとまらなかった・・・
# systemctl stop zabbix-agent.service
■zabbix-agentのプロセスを探す
# ps -ef |grep zabbix
■zabbix-agentのプロセスを殺す
# systemctl kill --signal=9 zabbix-agent
■zabbix-agentを起動する
# systemctl start zabbix-agent.service