zabbix自定义监控nginx
nginx配置ngx_status
1.编译安装时带上--with-http_stub_status_module参数
2.vi nginx.conf
location ~* ^/ngx_status { stub_status on; access_log off; #allow 127.0.0.1; #deny all; }
3.检测nginx状态配置
#curl 127.0.0.1/ngx_status Active connections: 1 server accepts handled requests request_time 235587 235587 1393175 83746941 Reading: 0 Writing: 1 Waiting: 0
编写zabbix客户端脚本
vi /usr/local/zabbix-agent/shell/nginx_check.sh
#!/bin/bash HOST="127.0.0.1" PORT="80" # 检测nginx进程是否存在 function ping { /sbin/pidof nginx | wc -l } # 检测nginx性能 function active { /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}' } function reading { /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}' } function writing { /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}' } function waiting { /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}' } function accepts { /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}' } function handled { /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}' } function requests { /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}' } # 执行function $1
这里用./nginx_check.sh ping测试
shell脚本报错:bash: ./nginx_check.sh: /bin/bash^M: bad interpreter: No such file or directory
原因是nginx_check.sh是在windows下编辑然后上传到linux系统里执行的。.sh文件的格式为dos格式。而linux只能执行格式为unix格式的脚本。
解决:用dos2unix命令修改
#dos2unix xxx.sh
再用./nginx_check.sh ping测试,通过
配置自定义UserParameter加入zabbix客户端zabbix_agentd.conf
为什么要自定义KEY
有时候我们想让被监控端执行一个zabbix没有预定义的检测,zabbix的用户自定义参数功能提供了这个方法。我们可以在客户端配置文件zabbix_angentd.conf里面配置UserParameter.
语法:UserParameter=key,command
用户自定义参数包含一个key和一个命令,key必须整个系统唯一,配置好之后,重启客户端。
这里我们vi zabbix_agentd.conf,加入:
UserParameter=nginx.status[*],/usr/local/zabbix-agent/shell/nginx_check.sh $1
nginx.status[*]这些key将由zabbix agent执行后面的shell脚本返回,最大可以返回512KB的数据。
然后需要重启zabbix_agentd.
zabbix服务端用zabbix_get测试获取数据
zabbix_get 是 zabbix 服务端的一个命令,用于检测 agent 端的配置是否正确,可以很方便地知道 key 是否能正常获取到数据,在测试自定义监控的时候特别有用
[root@xxxx ~]# zabbix_get -h Zabbix get v2.2.17 (revision 65977) (27 February 2017) usage: zabbix_get [-hV] -s <host name or IP> [-p <port>] [-I <IP address>] -k <key> Options: -s --host <host name or IP> Specify host name or IP address of a host # agent 端的 ip -p --port <port number> Specify port number of agent running on the host. Default is 10050 #agent 监听的端口 默认是10050 -I --source-address <IP address> Specify source IP address # 如果server 端有多个网卡 可以指定通过哪个网卡进行数据获取 -k --key <key of metric> Specify key of item to retrieve value for # 执行的参数,即key -h --help Give this help -V --version Display version number # 例子 Example: zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]"
在服务端测试:
zabbix操作后台导入nginx模板
配置--模板--导入
给该主机添加nginx的自定义监控模板
完成后查看图形