zabbix 功能之监控Nginx

一:需要监控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的状态显示:
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 | awk '{print $2}'
       }
	nginx_requests(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
       }
  	case $NGINX_COMMAND in
		active)
			nginx_active;
			;;
		reading)
			nginx_reading;
			;;
		writing)
			nginx_writing;
			;;
		waiting)
			nginx_waiting;
			;;
		accepts)
			nginx_accepts;
			;;
		handled)
			nginx_handled;
			;;
		requests)
			nginx_requests;
		esac 
}
memcached_status_fun(){ #memcache函数
	M_PORT=$1 #赋值端口
	M_COMMAND=$2 #赋值命令
	echo -e "stats\nquit" | nc 127.0.0.1 "$M_PORT" | grep "STAT $M_COMMAND " | awk '{print $3}' #nc是命令中的瑞士军刀
}
redis_status_fun(){ #redis函数
	R_PORT=$1
	R_COMMAND=$2
	(echo -en "INFO \r\n";sleep 1;) | nc 127.0.0.1 "$R_PORT" > /tmp/redis_"$R_PORT".tmp #获取redis服务器状态并写入在文件
	REDIS_STAT_VALUE=$(grep ""$R_COMMAND":" /tmp/redis_"$R_PORT".tmp | cut -d ':' -f2) #从文件获取数据
 	echo $REDIS_STAT_VALUE	 #输出属性
}
main(){ #主函数内容
	case $1 in #分支结构,用于判断用户的输入而进行响应的操作
		tcp_status) #假如用户输入的是tcp_status,
			tcp_status_fun $2; #就调用tcp_status_fun函数并将脚本参数的第二个参数传递
			;;
		nginx_status) #当输入nginx_status就调用nginx_status_fun,并传递第二和第三个参数
			nginx_status_fun $2 $3;
			;;
		memcached_status) #假如输入的是memcached_status就执行函数memcached_status_fun并传递$2和$3
			memcached_status_fun $2 $3;
			;;
		redis_status) #假如输入的是redis_status就调用redis_status_fun并传递$2和$3
			redis_status_fun $2 $3;
			;;
		*) #其他的输入打印帮助信息
			echo $"Usage: $0 {tcp_status key|memcached_status key|redis_status key|nginx_status key}"
	esac #分支结束符
}
main $1 $2 $3 #执行主函数,分别传递三个参数

1.3:配置zabbix agent自定义参数:

vim /etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/*.conf #改为只导入conf文件
重启客户端,然后上传zabbix_linux_plugin.sh 脚本到

/etc/zabbix/zabbix_agentd.d/并授权执行脚本
测试,确认可以从本地获取nginx状态数据:

#./zabbix_linux_plugin.sh nginx_status 80 active
40130
1.4:创建配置文件:

vim /etc/zabbix/zabbix_agentd.d/nginx_status.conf #为一个服务创建配置文件,在其中定义命令和配置
UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/zabbix_linux_plugin.sh “$1” “$2” “$3” #定义key和获取值的方式
1.5:在zabbix-server测试获取数据:

[tianqi@Zabbix ~]$ zabbix_get  -s 192.168.137.143 -k linux_status[nginx_status,80,active]

37074 #获取到值表示正常,如果没有值检查自定义的配置文件和脚本是否正确

1.6 监控数据

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现监控Nginx并发送邮件报警,需要进行以下步骤: 1. 在Nginx服务器上安装zabbix-agent; 2. 在zabbix服务器上配置Nginx监控项; 3. 在zabbix服务器上设置触发器,并将触发器关联到操作; 4. 在zabbix服务器上配置邮件报警操作。 具体步骤如下: 1. 在Nginx服务器上安装zabbix-agent 在Nginx服务器上执行以下命令安装zabbix-agent: ``` sudo apt-get update sudo apt-get install zabbix-agent ``` 然后编辑zabbix-agent的配置文件`/etc/zabbix/zabbix_agentd.conf`,修改以下参数: ``` Server=<zabbix_server_ip> ServerActive=<zabbix_server_ip> Hostname=<nginx_server_hostname> ``` 其中,`<zabbix_server_ip>`为zabbix服务器的IP地址,`<nginx_server_hostname>`为Nginx服务器的主机名。 修改完成后,重启zabbix-agent服务: ``` sudo systemctl restart zabbix-agent ``` 2. 在zabbix服务器上配置Nginx监控项 在zabbix服务器上进入Web界面,在“配置”->“主机”中添加Nginx服务器,并在“模板”中选择“Template Nginx”。 然后在“配置”->“模板”中找到“Template Nginx”,进入模板详情页,在“应用”中添加一个新的应用,名称为“Nginx”。 在“Nginx”应用中添加一个新的监控项,名称为“Nginx status”,键值为“nginx.status[active]”。 保存配置后,等待一段时间,zabbix服务器会自动发现Nginx服务器,并开始监控Nginx状态。 3. 在zabbix服务器上设置触发器,并将触发器关联到操作 在“配置”->“触发器”中添加一个新的触发器,使用以下表达式: ``` {<nginx_server_hostname>:nginx.status[active].last()}=0 ``` 其中,`<nginx_server_hostname>`为Nginx服务器的主机名。 保存触发器后,进入触发器详情页,在“操作”中添加一个新的操作,选择“发送邮件”为动作。 4. 在zabbix服务器上配置邮件报警操作 在“管理”->“报警媒介类型”中添加一个新的媒介类型,类型为“Email”,并填写SMTP服务器、端口、用户名、密码等信息。 然后在“配置”->“动作”中编辑之前创建的触发器操作,选择“默认收件人”为收件人,并在“消息”中填写邮件内容。 保存配置后,当Nginx状态异常时,zabbix服务器会自动发送邮件报警。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值