4.10 添加WEB Monitorings
Web Monitoring是用来监控web程序的,可以监控到web程序的下载速度、返回码及响应时间,还支持把一组连续的web动作作为一个整体来监控。
下面以监控登录zabbix的web程序为例,来展示如何使用web monitoring。
系统配置->web->选择一台WEB服务器,点击右上角的Create Scenario创建一个Senario(注:必须选择主机后才能创建Scenario,zabbix的所有监控项都必须创建在主机上)
监控项分组:选择这个scenario所在的监控项分组
名称:scenario的名字
认证:鉴权
数据更新间隔(秒):监控频率,单位为秒
Agent:选择要使用的浏览器客户端,可能同样的web程序对不同的客户端展示的内容不一样。
状态:默认为Active
变量:变量定义,这里定义的变量可在后续的steps中使用,这里我们定义了用户和密码变量
Steps:web程序的各个步骤,选择add新增一个Login的step,来模拟用户登录,传递用户和密码给index.php页面。
URL:监控的web页面(注:必须是全路径带页面名)
Post:传递给页面的参数,多个参数之间用&连接,此处可引用前面的变量。
Timeout:超时时间
Required:页面中能匹配到字符,匹配不到即认为错误
Status codes:页面返回状态码
添加完step后,在状态统计->web页面即能看到监控的状态和图示
创建完scenario后,zabbix server会自动穿件相关的监控项,所以我们只需为这些监控项添加触发器即可让web scenario出错时产生告警。
系统配置->主机->点击scenario所在的主机条目的触发器,直接创建触发器,在选择监控项的时候就可以看到系统自动创建的监控项(注:自动创建的监控项在主机的监控项列表中直接是看不到的,需要在创建触发器是选择监控项时才能看到)
可以在监控项列表中看到,系统为每个step创建了3个监控项,Download Speed/Response Code/Response Time,为整个scenario创建了一个test.fail的监控项,可以分别为其创建触发器。
下例我们创建一个Login页面返回状态码的触发器,大于等于400即为错误
再创建一个整个scenario所有step运行是否成功的触发器,采集值为0表示整个scenario的所有step都执行成功了,第几步的执行失败就返回数字几,且后续的step都不会继续执行下去。
这样,一个完整的web monitoring就配置完成了。
4.11 添加拓扑图
这里可以添加关于主机的拓扑图:系统配置->拓扑图,在右上角可以创建拓扑图或者导入拓扑图点击保存。
然后编辑保存好的拓扑图
上面加号和减号可以添加主机和链接主机。
4.12 添加自定义监控
Zabbix自带的监控项有时并不能满足实际需求,zabbix在客户端配置文件中提供了用户自定义监控项UserParameter功能。
UserParameter的使用方法如下:
UserParameter=<自定义监控项key>,<用于获取监控项key值的命令表达式> |
以检查磁盘IO为例,在客户端的zabbix.agentd.conf配置文件中添加如下内容:
UserParameter=vfs.partition.read[*],/usr/bin/iostat -d -k $(/bin/df | grep "$1$" | awk '{print $$1}'|awk -F\/ '{print $$3}')|sed -n '4p'|awk '{print $$3}' UserParameter=vfs.partition.write[*],/usr/bin/iostat -d -k $(/bin/df | grep "$1$" | awk '{print $$1}'|awk -F\/ '{print $$3}')|sed-n '4p'|awk '{print $$4}' |
在模板监控项中添加对磁盘IO的监控:
4.13 添加自定义MySQL监控
Zabbix自带有MySQL的监控模板,可以做一些简单的监控。
1、 更改客户端配置
客户端的配置文件上默认就有通过mysqladmin工具取MySQL数据库监控信息的配置,因此只需更改使用MySQL监控模板的Host上的agentd.conf文件,将文件最后所有关于MySQL的UserParameter前的#号去掉,更改登录MySQL的用户名和密码即可
例如:修改后其中一条监控数据库状态如下:
UserParameter=mysql.ping,mysqladmin -uzabbixtest -p123456 ping|grep alive|wc -l |
修改后重启host上的agentd,使其生效
2、 添加监控项
Web端编辑mysql所在的host,使之link到template_APP_MySQL模板,然后在主机的监控项里就能看到刚才定义的这些MySQL的监控项,修改相应的触发器值即可。
zabbix自带的MySQL监控功能比较弱,只是通过mysqladmin工具去查询mysql的一些状态而已。
我根据目前使用情况,自己编写了MySQL监控模板和监控配置文件,对数据库的连接数、运行状态、主从复制进程状态等进行监控。具体配置文件参考附件的zabbix_mysql.conf配置文件。
在客户端主机数据库中添加zabbix监控用的本地数据库用户
mysql -uroot -p123456 -e "grant usage,super,replication slave on *.* to zabbixtest@localhost identified by 'zabbixtest';flush hosts;flush privileges;" |
创建目录,并将数据库监控配置文件拷贝到该目录下
Mkdir /etc/zabbix/zabbix_agentd Cp zabbix_mysql.conf /etc/zabbix/zabbix_agentd |
修改客户端服务器上的zabbix主配置文件,添加如下内容
Include=/etc/zabbix/zabbix_agentd/ |
重新启动客户端服务器上的zabbix应用
/etc/init.d/zabbix_agentd stop /etc/init.d/zabbix_agentd start |
系统配置->模板,选择右上角的Import Template。浏览选择添加自己事先写好的模板,点击import
导入成功后,会提示Imported Successfully.
MySQL监控模板
Configuration->Hosts,选择需要监控MySQL的主机添加该模板,添加完毕后save即可
4.14 添加自定义Nginx监控
修改客户端配置文件zabbix_agentd.conf,添加下面一行
Include=/etc/zabbix/zabbix_agentd/ |
添加对Nginx监控的配置文件zabbix_nginx.conf,文件内容如下:
UserParameter=nginx.accepts,/etc/zabbix/bin/nginx_status.sh accepts UserParameter=nginx.handled,/etc/zabbix/bin/nginx_status.sh handled UserParameter=nginx.requests,/etc/zabbix/bin/nginx_status.sh requests UserParameter=nginx.connections.active,/etc/zabbix/bin/nginx_status.sh active UserParameter=nginx.connections.reading,/etc/zabbix/bin/nginx_status.sh reading UserParameter=nginx.connections.writing,/etc/zabbix/bin/nginx_status.sh writing UserParameter=nginx.connections.waiting,/etc/zabbix/bin/nginx_status.sh waiting |
创建/etc/zabbix/bin目录,并在目录下放置Nginx监控脚本nginx_status.sh
#!/bin/bash BKUP_DATE=`/bin/date +%Y%m%d` LOG="/etc/zabbix/webstatus.log" HOST=`/sbin/ifconfig eth0 | sed -n '/inet /{s/.*addr://;s/ .*//;p}'` PORT="8000" # Functions to return nginx stats function active { /usr/bin/curl "http://$HOST:$PORT/webstatus" 2>/dev/null| grep 'Active' | awk '{print $NF}' } function reading { /usr/bin/curl "http://$HOST:$PORT/webstatus" 2>/dev/null| grep 'Reading' | awk '{print $2}'} function writing { /usr/bin/curl "http://$HOST:$PORT/webstatus" 2>/dev/null| grep 'Writing' | awk '{print $4}' } function waiting { /usr/bin/curl "http://$HOST:$PORT/webstatus" 2>/dev/null| grep 'Waiting' | awk '{print $6}'} function accepts { /usr/bin/curl "http://$HOST:$PORT/webstatus" 2>/dev/null| awk NR==3 | awk '{print $1}'} function handled { /usr/bin/curl "http://$HOST:$PORT/webstatus" 2>/dev/null| awk NR==3 | awk '{print $2}'} function requests { /usr/bin/curl "http://$HOST:$PORT/webstatus" 2>/dev/null| awk NR==3 | awk '{print $3}'} # Run the requested function $1 |
为脚本添加可执行权限,并将/etc/zabbix目录属主属组设置为zabbix
chmod a+x /etc/zabbix/bin/nginx_status.sh chown –R zabbix.zabbix /etc/zabbix |
重新启动zabbix客户端
/etc/init.d/zabbix_agentd stop /etc/init.d/zabbix_agentd start |