一:需要监控Nginx服务的各种状态、系统TCP的各种连接状态,以及redis和memcache的状态,通过agent脚本获取数据并传递给zabbix server端图形展现出来。
整个过程如下:
1.在nginx配置文件开启Nginx状态显示 2.编写脚本对nginx状态数据进行采集 3.在zabbix agent设置用户的自定义参数 4.重启zabbix-agent服务使配置生效 5.在zabbix服务端添加item 6.创建监控图形 7.创建事件触发器 8.创建模板以方便后期配置其他主机
1.1:开启nginx的状态显示:
location /nginx_status {
stub_status on; access_log off; #allow 192.168.0.0/24; #允许访问的范围 #deny all; }
1.2:准备脚本:
#!/bin/bash
tcp_status_fun(){ #获取tcp的11中状态 TCP_STAT=$1 #函数的第一个参数是脚本的第二个参数 #netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,state[key]}' > /tmp/netstat.tmp ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/netstat.tmp #将获取到的值保存在一个文件 TCP_STAT_VALUE=$(grep "$TCP_STAT" /tmp/netstat.tmp | cut -d ' ' -f2) #赋值 if [ -z $TCP_STAT_VALUE ];then #如果为空 TCP_STAT_VALUE=0 #则为0 fi echo $TCP_STAT_VALUE #输出内容 } nginx_status_fun(){ #函数内容 NGINX_PORT=$1 #端口,函数的第一个参数是脚本的第二个参数,即脚本的第二个参数是段端口号 NGINX_COMMAND=$2 #命令,函数的第二个参数是脚本的第三个参数,即脚本的第三个参数是命令 nginx_active(){ #获取nginx_active数量,以下相同,这是开启了nginx状态但是只能从本机看到 /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}' } nginx_reading(){ #获取nginx_reading状态的数量 /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}' } nginx_writing(){ /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}' } nginx_waiting(){ /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}' } nginx_accepts(){ /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}' } nginx_handled(){ /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3