监控原理跟之前写的监控nginx差不多,都是利用web服务器自身提供的状态信息页获取运行状态信息。apache的监控状态信息如下:
Total Accesses: 252523
Total kBytes: 2154830
CPULoad: 2.72004
Uptime: 16624
ReqPerSec: 15.1903
BytesPerSec: 132733
BytesPerReq: 8738
BusyWorkers: 1
IdleWorkers: 9
Scoreboard:
我们一般只需要这四个数据:ReqPerSec、BytesPerSec、BusyWorkers、IdleWorkers
创建状态页配置文件/etc/httpd/conf.d/status.conf
Listen 89
<VirtualHost *:89>
CustomLog /dev/null common
ErrorLog /dev/null
<Location "/server-status">
SetHandler server-status
Require ip 192.168.7.227
</Location>
</VirtualHost>
CustomLog 和 ErrorLog在这里的作用是将日志写入/dev/null,即关闭咋apache状态页面日志记录。但是CustomLog和ErrorLog指令不能放到Location里,所以就新建一个VirtualHost。
访问http://192.168.7.227:89/server-status?auto即可得到上面的状态信息。我这里测试用的就是zabbix-server安装时自带的apache,所以限定可以访问的IP和apache服务器的IP是同一个。
/etc/zabbix/zabbix_agentd.d/apache_status.sh
#!/bin/bash
function ReqPerSec(){
/usr/bin/curl -s $URL |grep ReqPerSec|awk '{print $2}'
}
function BytesPerSec(){
/usr/bin/curl -s $URL |grep BytesPerSec|awk '{print $2}'
}
function BusyWorkers(){
/usr/bin/curl -s $URL |grep BusyWorkers|awk '{print $2}'
}
function IdleWorkers(){
/usr/bin/curl -s $URL |grep IdleWorkers|awk '{print $2}'
}
function ping(){
/usr/sbin/pidof httpd|wc -l
}
#根据脚本参数执行对应函数
$1
/etc/zabbix/zabbix_agentd.d/apache_status.conf
Bash
UserParameter=apache.status[*],/etc/zabbix/zabbix_agentd.d/apache_status.sh $1
重启zabbix-agent后就可以创建apache监控模板了。
items配置都和nginx监控大同小异,特别看下这个带单位的:单位我这里写的Bps,Bytes每秒的意思,但在zabbix中,它会自动帮你换算成KBps:
并不是说zabbix很聪明知道你这个单位什么意思,它只是简单的除以1000然后加上一个大写“K”在前面而已,加入你的单位是”obe”,那么就显示成了Kobe,哈哈^_^
再添加3个Graphs,模板就算做完了:
最后附上版本文件,适用于zabbix-3.2.7-1:https://github.com/dmli30/shell/blob/master/zabbix/apache_status_templates.xml