0.整体思路
使用zabbix监控nginx服务器的状态,使用nginx的status模块提供监控信息,使用shell脚本抓取nginx的状态信息,配置zabbix的钩子(key)
如下面所示,zabbix并不喜欢这么繁杂的信息,它只需要一个数字就可以完成监控。比如我要获取nginx服务的连接数,我们可以使用 curl localhost | awk '/Active/{print $NF}'
Active connections: 2 server accepts handled requests 2218 2218 1857 Reading: 0 Writing: 1 Waiting: 1
1.准备环境,部署nginx软件(在被监控的nginx服务器上操作)
1)安装nginx软件,开启status模块
1. [root@zabbixclient_web1 nginx-1.12.2]# ./configure \
2. > --with-http_stub_status_module
3. [root@zabbixclient_web1 nginx-1.12.2]# make && make install
4. [root@zabbixclient_web1 ~]# cat /usr/local/nginx/conf/nginx.conf
5. … …
6. location /status {
7. stub_status on;
8. }
9. … …
10. [root@zabbixclient_web1 ~]# curl localhost/status
11. Active connections: 1
12. server accepts handled requests
13. 10 10 3
14. Reading: 0 Writing: 1 Waiting: 0
2)自定义监控key
语法格式(带参数的监控key):
UserParameter=key,command
UserParameter=key[*],<command>
key里的所有参数,都会传递给后面命令的位置变量
如:
UserParameter=echo[*],echo $1
zabbix_get -s 127.0.0.1 -k 'echo[1]', 返回的结果都是1
也就是说,echo[*]只是一个接受参数的容器,而真正执行的操作是,echo $1.
注意:被监控端修改配置文件,注意要允许自定义key并设置Include!
创建自定义key
1. [root@zabbixclient_web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/nginx.status
2. UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1
3. [root@zabbixclient_web1 ~]# killall zabbix_agentd
4. [root@zabbixclient_web1 ~]# zabbix_agentd
UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1
这句话的含义是设置一个接受容器nginx.status[*],执行带参数的脚本/usr/local/bin/nginx_status.sh $1
自定义监控脚本,我们在脚本中设置了获取三种数据的方式,获取连接数(Active connections),等待连接数(accepts ),接受请求数(accepts )
Active connections: 2
server accepts handled requests
2218 2218 1857
Reading: 0 Writing: 1 Waiting: 1
1. [root@zabbixclient_web1 ~]# vim /usr/local/bin/nginx_status.sh
2. #!/bin/bash
3. case $1 in
4. active)
5. curl -s http://192.168.2.100/status |awk '/Active/{print $NF}';;
6. waiting)
7. curl -s http://192.168.2.100/status |awk '/Waiting/{print $NF}';;
8. accepts)
9. curl -s http://192.168.2.100/status |awk 'NR==3{print $2}';;
10. esac
11. [root@zabbixclient_web1 ~]# chmod +x /usr/local/bin/nginx_status.sh
测试效果:
- [root@zabbixclient_web1 ~]# zabbix_get -s 127.0.0.1 -k 'nginx.status[accepts]'
- 2218
2.Zabbix配置监控项(在监控服务器上的web界面配置)
登陆Zabbix监控Web,创建监控项目item,点击Configuration(配置)-->Hosts(主机),点击主机后面的items(项目),点击Create item(创建项目)。
确认2个地方,一个是设置哪台主机(配置了key,也就是需要被监控的主机),一个是Item(需要创建一个Item监控项)
点击items
进去后点右上角创建监控项
配置三个监控项。为什么是三个?因为我们这里监控的就是三项(我们在脚本里写了三项数据的获取方式)
填写监控项名,方式和key,key一定要符合格式,也就是用zabbix_get -s 127.0.0.1 -k 'nginx.status[accepts]'能够测试出结果
点添加(需要创建三次)
查看最近数据图表,筛选图表,主机组,主机,监控项名,点击后面的Graph
本实验只是演示了一部分nginx的监控方式,但是看了此篇文章,应该能举一反三的提取出其他的nginx监控方法