Zabbix自定义监控项 & 企业微信报警

一、zabbix自定义监控

zabbix-agent 获取数据,然后定义,交给zabbix-server端

1.指定监控的内容

#监控服务器登录用户的数量
[root@web01 ~]# w | awk 'NR==1 {print $(NF-6)}'
1

2.客户端配置监控项

1)客户端配置文件

[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.conf

2)定义监控项语法

#语法:
Format: 
UserParameter=<key>,<shell command>

#官方示例
[root@web01 ~]# tail -n 2 /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V

3)设置自定义监控项

[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/login_user.conf
UserParameter=login_usernumber,w | awk 'NR==1 {print $(NF-6)}'

4)重启客户端

[root@web01 ~]# systemctl restart zabbix-agent.service

3.客户端验证

[root@web01 ~]# zabbix_agentd -t login_usernumber		# 针对客户端文件中的key来验证
login_usernumber                              [t|4]

[root@web01 ~]# zabbix_agentd -p | grep login_usernumber
login_usernumber                              [t|4]

#得到的结果,前面的字母含义
d   	#带小数部分的数字
m   	#不支持,只有在这种模式下,查询日志才可能是活动的(如日志监视项或需要多个收集值的项)引起的。权限问题或不正确的用户参数可能
s   	#文本。最大长度不受限制。
t   	#文本。最大长度不受限制。
u   	#无符号整数

4.服务端获取值

[root@zabbix ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-get-4.0.1-1.el7.x86_64.rpm

#zabbix_get语法
zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address] -k item-key

-s		#主机名或者IP地址
-p		#端口
-I		#IP地址
-k		#监控项的key名称

# 在服务端检测客户端的key结果
[root@zabbix ~]# zabbix_get -s 172.16.1.7 -p 10050 -k login_usernumber
4

5.web页面添加监控项

  • 针对主机配置监控项

  • 点击创建监控项

  • 这里的键值一定要写为自定义监控文件中的key(也就是agent文件中的key名)

二、zabbix自定义阈值(触发器)

  • 根据监控项配置触发器

  • 点击创建触发器

  • 选择添加表达式,和监控项进行绑定

  • 选择之前创建的监控

  • 继续选择功能,这里实验针对登录用户数量,针对登录用户超过4个进行触发

  • 也可以选择点击表达式构造器进行测试

  • 点击测试

  • 设置值为6,也就超过了之前设置的阈值4,超过为触发成功,也就为true

  • 最终触发器界面,最后点击添加

  • 到此为止,已经在服务端进行对客户端的自定义监控,并且已经进行了触发器配置,但触发结果仅在web页面显示,并未配置邮件或微信等媒介报警

三、自定义告警

1.邮件方式

#### 这里为大概的流程,距离操作参考下方图片

1.配置---动作---启用里面的动作

2.点击动作---操作
·自定义报警内容参考博客:https://www.zabbix.com/documentation/4.0/zh/manual/appendix/macros/supported_by_location
#默认标题:
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
#消息内容:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

3.点击动作---恢复操作
#默认标题:
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
#消息内容:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

4.更新

5.管理---报警媒介类型---mail
	smtp.qq.com
	465
	qq.com
	1240206455@qq.com
	SSL/TLS
	勾选
	用户名和密码
	1240206455@qq.com
	QQ邮箱授权码
	
6.更新

7.配置收件人
	头像---报警媒介---添加
	填写收件人
	根据职位设置接收告警的级别

1) 配置邮件告警之前,需要将此动作开启并且对此进行动作配置

2)设置动作,当触发动作时的操作(也就是报警信息),这里的标题和消息内容为此文章上方书写文件,当然也可以自行百度,网上大把的模板参考。然后点击新的,设置发送人员

3)设置报警收到报警人员,然后点击添加

4)当警告解除时,同样发送邮件,这里为配置警告解除,发送邮件模板(同样这里的标题,和消息内容可从上文中复制,或直接从网上拷贝)

5)这里的更新操作默认不需要修改,直接点击更新即可

6)选择报警媒介类型,并且进行创建

7)这里的密码需要在qq邮箱的POP3/SMTP中进行获取,然后点击更新即可

8)选择报警媒介,也就是当达到触发值后的告警信息,通过邮件进行告警

2.微信方式

1)注册企业微信

2)配置脚本

#1.查看脚本存放位置
[root@zabbix ~]# grep 'script' /etc/zabbix/zabbix_server.conf 
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts

#2.上传脚本
[root@zabbix ~]# cd /usr/lib/zabbix/alertscripts
[root@zabbix alertscripts]# ll
total 4
-rw-r--r-- 1 root root 1231 Sep  9 16:41 weixin.py

[root@zabbix-server ~]# cat /usr/lib/zabbix/alertscripts/weixin.sh 
#!/bin/bash
CropID='wwe81f9f79dde15536'            #企业ID
Secret='u_SJG43-SAgG3fQKFeY23lVVGzmBMAltfInpUP_AuwU'    #企业号中的应用Secret
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" 
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F" '{print $10}')

PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"

function body() {
local int AppID=1000002                  #企业号中的应用id
local UserID=$1                          #部门成员id,zabbix中定义的微信接收者
local PartyID=2                          #部门id,定义了范围,组内成员都可接收到消息
local Msg=$(echo "$@" | cut -d" " -f3-)  #过滤出zabbix中传递的第三个参数
printf '{
'
printf '	"touser": "'"$User""",
"
printf '	"toparty": "'"$PartyID""",
"
printf '	"msgtype": "text",
'
printf '	"agentid": "'" $AppID """,
"
printf '	"text": {
'
printf '		"content": "'"$Msg"""
"
printf '	},
'
printf '	"safe":"0"
'
printf '}
'
                                                                                                            }
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL

#3.授权
[root@zabbix alertscripts]# chmod +x weixin.py

#4.修改脚本
[root@zabbix alertscripts]# vim weixin.py
#企业ID
corpid='ww69b7626c5e711bdf'
#应用的secret
appsecret='TchtAn_azm8DGT5gpVgPNffzOn8BeuVhT1jHQlbRHzs'
#应用的agentid
agentid=1000002

#5.测试脚本
yum -y install epel-release
yum install python-pip
pip install requests
pip install --upgrade requests
[root@zabbix alertscripts]# ./weixin.py LinHaoDa 2 hello

3)添加报警媒介

{ALERT.SENDTO}                    #发送的⽤户
{ALERT.SUBJECT}                    #发送的主题
{ALERT.MESSAGE}                    #发送的内容
  • web参考流程

    1)配置发件人

2)配置收件人

3)登录企业微信公众号添加账户,登录后在企业号上新建应用

4)上传logo,填写应用名称,应用介绍等

5)查看启动应用(同时会生成应用的Agent以及Secret,这个后面步骤会有用)

6)调用接口测试

注意:这里的corpid为公司的ID

Corpecret就是刚才应用生成的Secrt,确认没有问题填写进去然后进行下一步

如果没有问题会显示200状态码

7)成员添加

8)公众号关注

9 )查看自己的账户

10)修改脚本里的信息

11)发信息进行测试

12)微信号上查看

四、zabbix深入自定义监控项

1.自定义监控项-ssh端口

2.自定义监控项-TCP11种状态

1)了解11种状态

LISTEN - 侦听来自远方TCP端口的连接请求;
SYN_SENT -在发送连接请求后等待匹配的连接请求;
SYN_RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;
ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;
FIN_WAIT_1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
FIN_WAIT_2 - 从远程TCP等待连接中断请求;
CLOSE_WAIT - 等待从本地用户发来的连接中断请求;
CLOSING -等待远程TCP对连接中断的确认;
LAST_ACK - 等待原来发向远程TCP的连接中断请求的确认;
TIME_WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;
CLOSED - 没有任何连接状态;

客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 。

服务端独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。

共有的:(1)CLOSED (2)ESTABLISHED 。

2)配置监控项

注意:以下两种方式都是对TCP的11种状态进行监控,只是使用的方法一的*为匹配所有,$1可以理解成sed的后项引用前项,所以这里定义了一个*号比方式二更为简单。
######################### 方式一:##########################################
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/tcp_state.conf
UserParameter=tcp_state[*],netstat -ant | grep -c $1

######################### 方式二:##########################################
[root@web01 /etc/zabbix/zabbix_agentd.d]# cat zbx_tcp.conf
UserParameter=ESTABLISHED,netstat -ant|grep  -c 'ESTABLISHED'
UserParameter=SYN_SENT,netstat -ant|grep  -c 'SYN_SENT'
UserParameter=SYN_RECV,netstat -ant|grep  -c 'SYN_RECV'
UserParameter=FIN_WAIT1,netstat -ant|grep  -c 'FIN_WAIT1'
UserParameter=FIN_WAIT2,netstat -ant|grep  -c 'FIN_WAIT2'
UserParameter=TIME_WAIT,netstat -ant|grep  -c 'TIME_WAIT'
UserParameter=CLOSE,netstat -ant|grep  -c 'CLOSE'
UserParameter=CLOSE_WAIT,netstat -ant|grep  -c 'CLOSE_WAIT'
UserParameter=LAST_ACK,netstat -ant|grep  -c 'LAST_ACK'
UserParameter=LISTEN,netstat -ant|grep  -c 'LISTEN'
UserParameter=CLOSING,netstat -ant|grep  -c 'CLOSING

# 重启zabbix-agent
[root@web01 ~]# systemctl restart zabbix-agent.service

3)验证

# zabbix-agent检测自定义监控是否正常
[root@web01 ~]# zabbix_agentd -t tcp_state[TIME_WAIT]
tcp_state[TIME_WAIT]                          [t|47]
[root@web01 ~]# netstat -ant | grep -c TIME_WAIT
47

# zabbix-server检测服务端配置是否正常
[root@zabbix alertscripts]# yum install zabbix-get.x86_64 -y
[root@zabbix alertscripts]# zabbix_get -s 10.0.1.7 -k tcp_state[TIME_WAIT]

4)web配置

1.继续针对主机创建监控项

2.创建

3.这里仅针对time_wite进行演示,注意:这里的键值也必须是,对应文件中的key名称

4.查看数据

5.同样和其他流程一样,配置触发器

6.验证,查收到报警

五、自定义监控项(合并监控项)

1.配置内存自定义监控项

#监控内存命令
[root@web01 ~]# free -m|awk '/^Mem/{print $NF/$2}'
0.664609
[root@web01 ~]# free -m|awk '/^Mem/{print $NF/$2*100}'
66.358

#定义监控项
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/mem_free.conf
UserParameter=mem_pfree,free -m|awk '/^Mem/{print $NF/$2*100}'

2.测试监控项

#客户端测试
[root@web01 ~]# zabbix_agentd -t mem_pfree
mem_free                                      [t|66.2551]
[root@web01 ~]# systemctl restart zabbix-agent.service

#服务端测试
[root@zabbix ~]# zabbix_get -s 172.16.1.7 -k mem_pfree
66.358

3.配置监控项

4.配置触发器

5.测试告警

[root@web01 ~]# dd if=/dev/zero of=/dev/null bs=2000M count=1000

2.配置swap空间自定义监控项

#获取值
[root@web01 ~]# free -m|awk '/^Swap/{print $3/$2*100}'
15.0538

#自定义监控项
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/swap_used.conf
UserParameter=swap_pused,free -m|awk '/^Swap/{print $3/$2*100}'

7.测试监控项

#客户端
[root@web01 ~]# systemctl restart zabbix-agent.service 
[root@web01 ~]# zabbix_agentd -t swap_pused
swap_used                                     [t|14.6628]

#服务端
[root@zabbix ~]# zabbix_get -s 172.16.1.7 -k swap_pused
14.6628

8.配置监控项

9.配置触发器

10.触发器常用表达式

and             #并且
or              #或者

last()          #比对最新的值
avg()           #平均值
diff()          #比对上一次文件的内容
nodata()        #收不不到数据进行报警nodata(5m)
(5m)            #表示最近5分钟得到值
(#5)            #表示最近5次得到的值
原文地址:https://www.cnblogs.com/tcy1/p/13643815.html