ksaitoの日記

日々試したことの覚え書き

apacheの監視

Apacheに、どれくらいのアクセスがあるか監視してみました。
アクセスログで調べても良いのですがmod_statusとzabbixを使うことにしました。
監視するのは、apachectl statusで表示される統計情報を使って一秒当たりのリクエスト数、一秒当たりの転送サイズ、リクエスト当たりの転送サイズです。

mod_statusを有効にする

mod_statusを有効にする必要がありますが、aptパッケージはデフォルトで有効になっています。
無効になっている場合は、多分以下のようにすると有効になります。

$ a2enmod status
$ sudo /etc/init.d/apache2 restart

また、拡張ステータスをOnにしないと必要な情報が取れません。

$ grep Exten /etc/apache2/mods-enabled/status.conf 
ExtendedStatus On
$ 

情報収集用のシェルを準備

bashで以下のようなシェルを作り確認します。

$ cat /usr/local/bin/apachestatus.sh
#! /bin/sh

if [ "$1" = "rps" ]
then
    apachectl status 2> /dev/null | grep "requests/sec" | awk '{print $1}'
elif [ "$1" = "kbps" ]
then
    apachectl status 2> /dev/null | grep "requests/sec" | awk '{print $4}'
elif [ "$1" = "bpr" ]
then
    apachectl status 2> /dev/null | grep "requests/sec" | awk '{print $7}'
else
    echo "not support"
fi
$ ./apachestatus.sh rps
2.42
$ ./apachestatus.sh kbps
7.7
$ ./apachestatus.sh bpr
3269
$ 

zabbix agentの設定

Zabbixには、以下のようにapache.traffic(最後の一行)を組み込んでエージェントを再起動します。

$ tail -f /etc/zabbix/zabbix_agentd.conf 
#UserParameter=mysql.uptime,mysqladmin -uroot status|cut -f2 -d":"|cut -f1 -d"T"
#UserParameter=mysql.threads,mysqladmin -uroot status|cut -f3 -d":"|cut -f1 -d"Q"
#UserParameter=mysql.questions,mysqladmin -uroot status|cut -f4 -d":"|cut -f1 -d"S"
#UserParameter=mysql.slowqueries,mysqladmin -uroot status|cut -f5 -d":"|cut -f1 -d"O"
#UserParameter=mysql.qps,mysqladmin -uroot status|cut -f9 -d":"
#UserParameter=mysql.version,mysql -V

# Apache
UserParameter=apache.status[*],/usr/local/bin/server-status.rb $1
UserParameter=apache.traffic[*],/usr/local/bin/apachestatus.sh $1
$ sudo /etc/init.d/zabbix-agent restart

正しく設定されていれば、zabbixサーバから以下のように値を確認できます。

$ zabbix_get -s ubuntu.sa.local -p 10050 -k "apache.traffic[rps]"
3.12
$ zabbix_get -s ubuntu.sa.local -p 10050 -k "apache.traffic[kbps]"
10.2
$ zabbix_get -s ubuntu.sa.local -p 10050 -k "apache.traffic[bpr]"
3273
$ 

zabbixサーバの設定

zabbixサーバは、こんな感じに設定します。

これで負荷の状況を把握できます。