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的自定义监控模板

完成后查看图形

原文地址:https://www.cnblogs.com/xulan0922/p/9504873.html