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

测试效果:

  1. [root@zabbixclient_web1 ~]# zabbix_get -s 127.0.0.1 -k 'nginx.status[accepts]'
  2. 2218 

 

2.Zabbix配置监控项(在监控服务器上的web界面配置)

登陆Zabbix监控Web,创建监控项目item,点击Configuration(配置)-->Hosts(主机),点击主机后面的items(项目),点击Create item(创建项目)。

确认2个地方,一个是设置哪台主机(配置了key,也就是需要被监控的主机),一个是Item(需要创建一个Item监控项)

点击items

zabbix 服务器CPU状态 查看zabbix服务状态_zabbix 服务器CPU状态

进去后点右上角创建监控项

zabbix 服务器CPU状态 查看zabbix服务状态_nginx_02

配置三个监控项。为什么是三个?因为我们这里监控的就是三项(我们在脚本里写了三项数据的获取方式)

填写监控项名,方式和key,key一定要符合格式,也就是用zabbix_get -s 127.0.0.1 -k 'nginx.status[accepts]'能够测试出结果

zabbix 服务器CPU状态 查看zabbix服务状态_连接数_03

zabbix 服务器CPU状态 查看zabbix服务状态_Zabbix 监控Nginx服务状态_04

zabbix 服务器CPU状态 查看zabbix服务状态_自定义_05

点添加(需要创建三次)

查看最近数据图表,筛选图表,主机组,主机,监控项名,点击后面的Graph

zabbix 服务器CPU状态 查看zabbix服务状态_自定义_06

zabbix 服务器CPU状态 查看zabbix服务状态_连接数_07

本实验只是演示了一部分nginx的监控方式,但是看了此篇文章,应该能举一反三的提取出其他的nginx监控方法