• 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次得到的值
    
  • 相关阅读:
    一种新的语法研究方法论——构式语法(construction grammar)理论
    男士健身篇
    !!! TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞
    新手怎样学习Flash及as脚本编程? [复制链接]
    UDP穿越NAT原理
    一周七天英语怎么说
    !! 使用正则表达式匹配嵌套Html标签
    优秀老板的特征李开复微博
    搜狐超越新浪给创业者的两个启示:不断+耐心布局
    成大事必备九种手段(没有手段,你永远吃不到成功的甜果)
  • 原文地址:https://www.cnblogs.com/tcy1/p/13643815.html
Copyright © 2020-2023  润新知