zabbix报警多媒介(企业微信、钉钉)

zabbix报警媒介

1. 邮件报警的配置

得设定一个报警的条件,场景

  1. tcp状态监控 (time_wait 超过xxx数量) (自定义监控项+触发器的玩法)

2.报警的动作,几个条件

  • 发给谁?
  • 标题是什么?
  • 消息正文是什么?

【判断当前机器登录的用户数量,超过3个】就【发邮件通知运维】,【报警信息的正文:登录服务器的root用户太多,有点危险,快速看看。】

使用不通命令解决问题的思路

bash 复制代码
测试网站是否是200 OK的玩法
[root@zabbix-server-71 ~]#curl -s -I www.yuchaoit.cn | awk '/^HTTP/{print $2}'
200

[root@zabbix-server-71 ~]#curl -I -s   -w %{http_code}   -o /dev/null  www.yuchaoit.cn
200

1.1 配置监控登录用户数量的自定义key

bash 复制代码
判断当前机器登录的用户数量,超过3个

1. 想好,你这个需求,如何用命令采集,构造出结果

who|wc -l

2. 写zabbix-agent的配置文件
[root@zabbix-server-71 /etc/zabbix/zabbix_agentd.d]#cat userparameter_login_user.conf 
UserParameter=login.user,who|wc -l


3. 重启agent
systemctl restart zabbix-agent.service 


4.去zabbix-ui界面,创建监控项(所有机器都好使),让这个监控项,和模板绑定,模板再给主机去用
- 给现有的模板添加监控项  template os linux (目前监控的主机,都以及和它关联了,登录用户数量检测的key,就立即可以生效了)  111
	
- 新创建模板,添加监控项(和主机关联这个模板)
	

5. 给某个主机,关联这个模板,使用这个自定义key

6. 通过最新数据,看看监控项拿到数据了吗?通过最新数据,查看web7是否拿到了登录用户数量
(注意坑)
给web7,设置这个 自定义key的配置文件
创建配置文件,重启,看最新数据即可
[root@web-7 /etc/zabbix/zabbix_agentd.d]#cat userparameter_login_user.conf 
UserParameter=login.user,who|wc -l



systemctl restart zabbix-agent.service 


7. web7还在开机中,目前有谁可以用login.user  71可以


8.设置触发器(只要机器登录的用户超过3个,就提示告警级别的信息),web7,server-71 两个机器生效

模板的配置,给多个主机去用

去哪添加触发器?给自定义的模板设置了

1.2 查看触发器的执行结果

你可以关闭问题,对这个问题的某些动作

如果要关闭问题,需要

  1. 服务器故障被修复,自动关闭

  2. 触发器允许手动关闭

  3. 如果默认的模板关闭不了,那是默认的触发器不允许手动关闭。

报警媒介类型设置

你的监控,触发了报警,具体的动作

  1. 手动确认,关闭了这个问题

  2. zabbix自动执行的动作,如给你发个邮件

  • 对zabbix-server 添加一个可以发邮件的账户
  • 要给谁发?发什么格式的信息?

发件人的设置

163

qq邮箱去发都行

87xxxxxx80@qq.com 给zabbix-server使用,当做发邮件的工具

重新开启该功能,生成授权码(等于邮件的密码)

记下来,待会填入zabbix

lmpXXXXXXtbfhj(个人会有对应的编码,这里已做处理)

收件人配置

设置发信息动作

测试报警发邮件动作

超过触发器的条件呗

自定义报警内容

zabbix默认的报警内容,不够友好,自定义一波,更清晰。

修改报警的内容如下

bash 复制代码
默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!


=======发生了如下的报警问题=======
告警主机:{HOSTNAME1} {HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}  
==========================================

自定义恢复内容

bash 复制代码
恢复标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

=================恢复信息=============
告警主机:{HOSTNAME1} {HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
=======================================

自定义报警结果

自定义的恢复结果

2、钉钉告警的配置

bash 复制代码
1.钉钉报警
2.自定义监控模板(tcp11种状态),关联 web7 web8,或者db组机器
3.zabbix监控核心服务,nginx_status,php_status,这是监控公司网站的主要手段,更多的如数据库,和应用服务器,后面学了再补充

zabbix作为监控系统,核心在于,保障,提前预警,服务器硬件出现各种问题;
监控各种软件系统服务

网站来说 
LNMP 

linux服务器本身的健康状况,template os linux 50多个监控项,覆盖了绝大多数硬件资源的监控

nginx  apache
	web server, 提供被动式的web服务,接受http请求,相应http请求
		
	nginx接受,处理的所有的请求状态,监控它的http连接数有多少,链接状况如何
		基于nginx的status状态页功能区采集数据,构造监控项,添加触发器
		
	nginx进程本身,master进程,worker进程的运行状态
		自定义监控项的配置文件+采集进程的命令脚本 === zabbix-UI中
		ps
		netstat
		
	nginx所有功能,你都可以给它监控上
	属于web检测了
	1. 检测nginx的某虚拟主机是否正常,通过什么命令可以监控?
		curl 命令可以实现
	2. 监控nginx设置的location 七层转发是否正常?

		

mysql 先放着
	mysql服务状态本身
	mysql的性能数据采集
	


php  python
	nginx(127.0.0.1:80) + 独立的php-fpm进程(127.0.0.1:9000)
	以apache模块的形式,去解析php代码,没有独立的进程
	
	php接受用户请求与相应
	本质上web相关的通信,都是
	一堆client 客户端,手机,ipad,电脑 发出 N个 http请求
	↓
	发给http服务端,发给php进程
	
	本质上,监控php,1.服务本身运行状态   2、监控连接数



4.web监控
	1. 如果上述的1,2,3题目都是基于命令行去监控,采集进程的信息,提取数据等玩法
	
	2.  老大发话了,确保zabbix的登录页面,也要监控上,确保登录正常
	通过脚本实现自动化
	,找到,人为操作,背后的数据,到底发生了什么

4大知识点,1.zabbix回顾, 2.zabbix和业务结合的思考

和微信报警类似,发送指定的数据到钉钉官方提供的API接口

API有点蒙

和微信报警的请求发送流程

API的使用,访问流程

  1. curl 发出http请求,携带一堆参数,发送的json类型的数据,发给 微信的API

(nginx先接受请求,然后基于后面的路径,转发给location设置的后端服务器,处理响应,返回nginx,返回给用户,只不过,这里返回的是json数据)

http://wxapi.weixin.com/api/

  1. 微信的API url接受到请求之后,处理请求,构造结果,返回一个json数据

  2. 请看这个操作

钉钉会将报警信息,发送到指定的钉钉群聊,提醒所有的群成员查看,实现告警通知。

2.1 什么是API,以及什么叫给API发请求

2.2 API会返回什么给你

url会相应什么结果给你呢?

API 会返回什么给你,请看

  • 可能返回一个html给你,zabbix是返回的字符串,html`
  • 可能返回一个json数据(字符串)给你,微信,钉钉API就是这么玩的。

都是后端代码中写好的,你作为客户端,只管发请求就好。

先看微信API,返回的json数据

bash 复制代码
# 吧报警数据,发到微信,发到你的微信小组
#就是这一段代码
curl -s -H "Content-Type: application/json" -X POST "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${token}" -d' {
   "toparty" : "'"${group}"'",
   "msgtype" : "text",
   "agentid" : "'"${agentid}"'",
   "text" : {
       "content" : "'"${title}\n\n${message}"'"
   },
   "safe":0
}'



发出get类型的请求,看看是什么结果
2个方式
给这个API,发出get类型的请求
curl 访问 ,方式1
用浏览器直接访问,方式,get类型


https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${token}

再看zabbix的API,返回的结果

纠正,form-data和json数据提交,是两种数据构造类型

bash 复制代码
给大家讲解什么是API


看一下浏览器抓包的图解,理解即可



1. zabbix的登录页面,登录请求,发出http请求,看响应结果
携带着数据提交的get请求,form-data类型


2. 微信的API,发出http请求,看响应结果
携带着数据提交的get请求
(微信这个,的确是,请求传入的数据,就是json类型的字符串,响应的数据,也是json类型的数据)
json是一个网络中传输数据的,数据结构类型

form-data zabbix用的是这个类型,表单数据提交,账户密码,也依然是key:value类型

form-data类型的数据提交,如图

zabbix的登录页面

纯json的数据构造提交

去理解,如何通过浏览器的抓包工具,分析请求的具体协议类型。

具体,来看钉钉报警了

bash 复制代码
具体操作流程

1.创建钉钉群聊
2.创建自定义机器人
创建报警关键词    zabbix
生成webhook认证信息  
自动生成一个API,以及身份令牌,token
https://oapi.dingtalk.com/robot/send?access_token=d747bcf366308f7148ef714fa7e2673a5063607dd661d5706671833ac4283c72

只能通过POST类型,访问

测试该钉钉API,是否能发消息到钉钉组里
# 提交json类的数据,发给钉钉的API

# 拼接多行字符串, \   

# 至此,API的玩法,你应该基本懂了
# 测试钉钉的API,是能发出去消息的
# 写脚本,按照该API规定的key,构造数据即可


curl  -H 'Content-Type: application/json' \
-d '{"msgtype": "text",  "text": {"content": "关键字:zabbix  来自于linux0224的钉钉消息,看懂了吗老六同志。"}}' \
'https://oapi.dingtalk.com/robot/send?access_token=d747bcf366308f7148ef714fa7e2673a5063607dd661d5706671833ac4283c72' 



开发报警脚本


填写zabbix-UI界面的配置


测试钉钉报警通知

钉钉脚本,python版

注意,该脚本是python3,你的目标机器,是否支持python3

bash 复制代码
yum install python3 python3-devel  python3-pip -y

pip3 install requests

python语法比较优雅,你拿到代码,只需要修改什么就行?修改你的webhook,web钩子,钉钉机器人的API地址,该成你自己的即可


#!/usr/bin/python3
# coding: utf-8
# about zabbix python script
# Author: www.yuchaoit.cn

import requests,json,sys,os,datetime

# 钉钉机器人API
webhook_url='https://oapi.dingtalk.com/robot/send?access_token=d747bcf366308f7148ef714fa7e2673a5063607dd661d5706671833ac4283c72' 

# 给脚本参数手机号参数1
user_phone=sys.argv[1]

# 参数2,消息正文
text=sys.argv[2] + "\n\n" + sys.argv[3]

# 构造json数据体
data={
    "msgtype":"text",
    "text":{
        "content":text
    },
    "at":{
        "atMobiles":[user_phone],
        "isAtAll":False
    }
}

# 请求头,表明请求类型是json
headers={"Content-Type":"application/json"}

# 发HTTP请求,POST方式,传入数据与请求头
response=requests.post(url=webhook_url,data=json.dumps(data),headers=headers)
print(response.content)

# 日志目录生成
if os.path.exists("/tmp/dingding.log"):
    with open("/tmp/dingding.log","a+") as f:
        print("该文件以存在,追加写入中")
        if response.json().get("errcode")==0:
            f.write("\n" + str(datetime.datetime.now()) + "    " + str(user_phone) + "    " + "发送成功" + "\n" + str(text) )
        else:
            f.write("\n" + str(datetime.datetime.now()) + "    " + str(user_phone) + "    " + "发送失败" + "\n" + str(text) )
else:
    with open("/tmp/dingding.log","w+") as f:
        print("该日志文件不存在,创建且写入中")
        if response.json().get("errcode")==0:
            f.write("\n" + str(datetime.datetime.now()) + "    " + str(user_phone) + "    " + "发送成功" + "\n" + str(text) )
        else:
            f.write("\n" + str(datetime.datetime.now()) + "    " + str(user_phone) + "    " + "发送失败" + "\n" + str(text) )

测脚本,需要给脚本传入几个参数

bash 复制代码
python3 dingding.py  15210858004 "来自于linux0224的钉钉消息"  "keyword:zabbix 老六门,看懂了吗"

钉钉脚本 bash版本

bash 复制代码
#!/bin/bash
# about zabbix bash script
# Author: www.yuchaoit.cn


#webhook 地址 webhook=''
#接受者的手机号,由 zabbix 传入 
user=$1
#报警邮件标题,由 zabbix 传入 
title=$2
#报警邮件内容,由 zabbix 传入
message=$3

# 构造语句执行发送动作
# bash就是用curl 构造json数据发出去而已,注意引号的细节就好
# 通过API返回的数据,来确认是否发送正确

curl -s -H "Content-Type: application/json" -X POST "https://oapi.dingtalk.com/robot/send?access_token=d747bcf366308f7148ef714fa7e2673a5063607dd661d5706671833ac4283c72" -d '{"msgtype":"text","text":{"content":"'"${title}\n\n${message}\n\nzabbix报警啦!!!火烧屁股啦!!!老六们!!!"'"},"at":{"atMobiles":["'"${user}"'"],"isAtAll":false}}' 


#将报警信息写入日志文件
echo -e "\n 报警时间:$(date +%F-%H:%M)\n 报警标题:${title}\n 报警内容:${message}" >> /tmp/ding_bash.log

zabbix-ui界面配置钉钉报警

目前,以及确认,你的机器,和钉钉通信,发消息,是没问题

结合这个功能,实现zabbix触发器执行报警动作,触发钉钉报警,切发送报警的信息。

bash 复制代码
zabbix配置要熟练,几大名词问你能立即说出来干啥的

模板
监控项
触发器是什么
图形,
报警媒介

完成项目,基于微信,邮件,钉钉,实现zabbix检测xxx服务,实现报警通知
基于bash和python的多种报警脚本开发


注意,该脚本,放入服务端的一个alter脚本目录中即可,
zabbix-server可以去调用它
AlertScriptsPath=/usr/lib/zabbix/alertscripts

确保脚本如下即可

[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#ll
total 8
-rwxr-xr-x 1 zabbix zabbix 1739 Jul 11 11:57 dingding.py
-rwxr-xr-x 1 zabbix zabbix 2328 Jul  8 16:24 weixin.sh

至此,你的zabbix又多支持了一个钉钉报警

你还得配置你的用户,采用这个方式

最后一步,测试钉钉是否报警

web7机器来测,触发报警(得看这个机器,有什么监控项!!!!!!!!)

3.自定义监控模板(tcp11种状态),关联 web7 web8,或者db组机器

bash 复制代码
以练习过,
自定义模板,监控项、触发器、关联主机、自定义key配置文件、最新数据、图形、聚合图形,导入、导出模板

参考博客动手练练,做笔记即可。

http://ebook-p4.apecome.com/%E7%9B%91%E6%8E%A7%E7%B3%BB%E7%BB%9F/05-%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9B%91%E6%8E%A7%E6%A8%A1%E6%9D%BF.html

4、zabbix监控核心服务

nginx_status,php_status,这是监控公司网站的主要手段

更多的如数据库,和应用服务器(php-fpm,python后端,tomcat),后面学了再补充。

4.1 nginx-status监控流程

nginx的服务器

web组

slb组4、

bash 复制代码
1. 先开发一个web服务器的nginx,status页面的功能(nginx配置,你还是否记得)
创建nginx子配置文件
cat > /etc/nginx/conf.d/status.conf <<'EOF'
server{

    listen 80;
    server_name localhost;
    
    # 访问改url,即可定位到状态页功能, 10.0.0.7:80/nginx_status
    location /nginx_status {
    	# 开启status状态页面功能的参数
        stub_status on;
        # 关闭访问日志的记录
        access_log off;
    }
}
EOF

2. 重启nginx,查看是否可访问
nginx -t 
nginx



2. 写脚本,采集status页面的数据



3. 加入zabbix-ui进行图形展示,触发器等

4.2.写脚本,采集status页面的数据

创建agent的自定义key配置文件

bash 复制代码
[root@web-7 /etc/zabbix/zabbix_agentd.d]#cat nginx_status.conf 
UserParameter=nginx_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/nginx_status.sh $1


务必要重启
[root@web-7 /etc/zabbix/zabbix_agentd.d]#systemctl restart zabbix-agent.service 
bash 复制代码
# 自定义监控内容,也就是自定义key的操作
# 脚本核心思路就是,提取status页面的数值,交给zabbix

# 1.开发监控nginx脚本

#!/bin/bash
# Author: www.yuchaoit.cn
# 接受脚本的第一个参数
# 由于nginx的status状态太多,写为一个接受参数的key
#  status_nginx[*]  

NGINX_COMMAND=$1
CACHEFILE="/tmp/nginx_status.log"

CMD="/usr/bin/curl http://127.0.0.1/nginx_status"

# 判断是否有status日志文件
if [ ! -f $CACHEFILE ];then
    $CMD >$CACHEFILE 2>/dev/null
fi


# 检查status日志有效期,限定状态文件在60秒内
# 记录最后一次status日志的生成时间(秒)
STATUS_TIME=$(stat -c %Y $CACHEFILE)

# 以unix时间计算,seconds since 1970-01-01 00:00:00 UTC
# 当前系统时间减去日志时间,推算,是否超过60秒,超过就立即重新生成
TIMENOW=$(date +%s)

if [  $[ $TIMENOW - $STATUS_TIME ]  -gt 60 ];then
    rm -f $CACHEFILE
fi

if [ ! -f $CACHEFILE ];then
    $CMD > $CACHEFILE 2>/dev/null 
fi


nginx_active(){
    grep 'Active' $CACHEFILE |awk '{print $NF}'
    exit 0;
}

nginx_reading(){
    grep 'Reading' $CACHEFILE |awk '{print $2}'
    exit 0;
}

nginx_writing(){
    grep 'Writing' $CACHEFILE |awk '{print $4}'
    exit 0;
}

nginx_waiting(){
    grep 'Waiting' $CACHEFILE |awk '{print $6}'
    exit 0;
}

nginx_accepts(){
    awk NR==3 $CACHEFILE|awk '{print $2}'
    exit 0;
}

nginx_handled(){
    awk NR==3 $CACHEFILE|awk '{print $2}'
    exit 0;
}

nginx_requests(){
    awk NR==3 $CACHEFILE|awk '{print $3}'
    exit 0;
}


# 对脚本传入参数判断,需要获取什么值
# 如下参数,都是nginx的链接状态,
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;;
    *)
        echo "Invalid arguments" 
        exit 2
        ;;
esac

模板的导出,导入

手动测试,自定义key+脚本,是否采集nginx的各种状态

bash 复制代码
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#zabbix_get -s 10.0.0.7 -k nginx_status[active]
3
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#zabbix_get -s 10.0.0.7 -k nginx_status[reading]
0
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#zabbix_get -s 10.0.0.7 -k nginx_status[readxxxx]
Invalid arguments
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#zabbix_get -s 10.0.0.7 -k nginx_status[writing]
1
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#zabbix_get -s 10.0.0.7 -k nginx_status[waiting]
2
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#zabbix_get -s 10.0.0.7 -k nginx_status[accepts]
5067
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#zabbix_get -s 10.0.0.7 -k nginx_status[handled]
5067
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#zabbix_get -s 10.0.0.7 -k nginx_status[requests]
5038

手动通过server去采集agent的nginx状态数据,都没问题,添加zabbix-ui页面

创建nginx_status的模板,便于给web组所有机器用

和你的web7机器关联让它用

看看图形,拿到数据了吗,最新数据

nginx,web7机器的触发器,图形创建

图形,展示web7机器上的nginx,七个链接状态的数据

触发器,当nginx的requests请求数,超过30000万,就报警,钉钉报警

ab压测,看钉钉是否报警就完事。

4.3 php-status监控流程

1.开启php的状态页功能

bash 复制代码
#基于php-fpm进程做的实验

yum install php-fpm -y

修改配置文件,开启php,status功能即可,打开如下参数即可
要求你访问php状态页面的入口就是/status_php

[root@web-7 ~]#grep 'status_'  /etc/php-fpm.d/www.conf 
pm.status_path = /status_php

php-fpm,nginx转发过去的


修改nginx的配置
bash 复制代码
重启nginx,和php-fpm俩进程

[root@web-7 ~]#systemctl restart php-fpm.service nginx.service 

测试访问,php的状态页

http://10.0.0.7/status_php

如果zabbix去执行某些命令无权限,可能要注意添加如sudo,特殊权限等

bash 复制代码
[root@web-7 /tmp]#chmod +s /usr/sbin/ss
[root@web-7 /tmp]#
[root@web-7 /tmp]#ll /usr/sbin/ss
-rwsr-sr-x. 1 root root 131544 Apr 11  2018 /usr/sbin/ss
bash 复制代码
自定义监控项的套路都是

1. 写配置文件,你准备怎么提取数据,用什么自定义key
# 通过shell的case语句,先定关键字
# 自定义的key  php_status[采集的关键字]
UserParameter=php_status[*],/etc/zabbix/zabbix_agentd.d/php_status.sh  $1


2. 写脚本
#!/bin/bash
# 这是一个简单的监控php-fpm状态值的脚本

comm_para=$1
PHP_URL=$2
cmd="/usr/bin/curl $url"
cachefile=/tmp/php_status.txt
port=80

file_time=`stat -c %Y $cachefile`
now_time=`date +%s`
rm_file=$(($now_time-$file_time))
if [ -z $2 ];then
    url=http://127.0.0.1:$port/status_php
else
    url=$PHP_URL
fi
cmd="/usr/bin/curl $url"

if [ ! -e $cachefile ];then
    $cmd > $cachefile 2>/dev/null
fi

if [ $rm_file -gt 60 ];then
    rm -rf $cachefile
fi

if [ ! -f $cachefile ];then
    $cmd > $cachefile 2>/dev/null
fi

start_since() {
    #运行时长
    cat $cachefile | awk '/since/{print $3}'
    exit 0;
}

accepted_conn() {
    cat $cachefile | awk '/accepted/{print $3}'
    exit 0;
}

listen_queue(){ 
        cat $cachefile | awk '{if(NR==6){print $3}}'
    exit 0;
}

max_listen_queue(){
    cat $cachefile | awk '{if(NR==7){print $4}}'
    exit 0;
}

listen_queue_len() {
    cat $cachefile | awk '{if(NR==8){print $4}}'
    exit 0;
}

idle_processes() {
    cat $cachefile | awk '/idle/{print $3}'
    exit 0;
}

active_processes() {
    cat $cachefile | awk '{if(NR==10){print $3}}'
    exit 0;
}

total_processes() {
    cat $cachefile | awk '{if(NR==11){print $3}}'
        exit 0;
}

max_active_processes() {
    cat $cachefile | awk '{if(NR==12){print $4}}'
        exit 0;
}

max_children_reached() {
    cat $cachefile | awk '{if(NR==13){print $4}}'
        exit 0;
}

slow_requests() {
    cat $cachefile | awk '{if(NR==14){print $3}}'
        exit 0;
}

check() {
        php_pro_count=`ss -tunlp|grep php-fpm|wc -l`
        echo $php_pro_count
}

case "$comm_para" in 
start_since)
    start_since 
    ;;
accepted_conn)
    accepted_conn
    ;;
listen_queue)
    listen_queue
    ;;
max_listen_queue)
    max_listen_queue
    ;;
listen_queue_len)
    listen_queue_len
    ;;
idle_processes)
    idle_processes
    ;;
active_processes)
    active_processes
    ;;
total_processes)
    total_processes
    ;;
max_active_processes)
    max_active_processes
    ;;
max_children_reached)
    max_children_reached
    ;;
slow_requests)
    slow_requests
    ;;
check)
    check
    ;;
*)    
    echo "invalid status"
    exit 2;
esac

# author: www.yuchaoit.cn



3. 重启agent
[root@web-7 /etc/zabbix/zabbix_agentd.d]#systemctl restart zabbix-agent.service 


4.手动zabbix_get测数据
[root@zabbix-server-71 ~]#zabbix_get -s 10.0.0.7 -k php_status[total_processes]
5



5 添加zabbix-ui,给模板加,php状态页的模板
添加监控项,
关联web7机器
添加图形数据,给模板加
查看web7的图形数据即可

添加触发器,判断php如果挂了, 立即钉钉报警

判断php-fpm进程挂了

恢复启动zabbix-agent

相关推荐
一水鉴天2 小时前
整体设计的自动化部署完整方案设计与程序实现 (完善版)20260311 之2 (豆包助手)
运维·人工智能·自动化
returnthem2 小时前
Linux 测试环境完整部署手册(CentOS 7 + Ubuntu 20.04 双版本)
linux·运维·服务器
kiku18182 小时前
linux系统安全及应用
linux·运维·系统安全
2501_941982052 小时前
企微自动回复 API:从关键词匹配到 AI 智能对话的深度实践
人工智能·企业微信
进击切图仔2 小时前
linux 上编译 c++ 项目结构
linux·运维·c++
艾莉丝努力练剑2 小时前
C语言中&的多重用途解析
运维·服务器·c语言·c++·人工智能
尤老师FPGA2 小时前
Petalinux的工程创建以及生成启动文件
运维·服务器
成都极云科技2 小时前
「服务器托管平台」-打造高效稳定的云服务基石
运维·服务器·github
dashizhi20152 小时前
服务器共享文件安全管理之如何禁止打印共享文件、禁止复制共享文件
运维·服务器·安全