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 $