• 第六章:zabbix告警配置并实现告警通知


    我们首先对Trigger配置页面进行详细的讲解

    参数 说明
    Name Trigger的名称,可以支持宏{HOST.HOST}、{HOST.NAME}
    Severity 触发器的事件级别
    Not classified 未知安装等级 灰色
    Information 一般信息 亮绿
    Warning 警告信息 黄色
    Average 一般故障 橙色
    High 高级别故障 红色
    Disaster 致命故障 亮红
    Expression 定义故障、问题的逻辑表达式
    OK event generation Expression ok事件与Expression表达式相同,不符合Expression的预期即为OK
    Recovery expression 当符合Recovery expression表达式的预期,才会将事件变为ok
    None 让触发器不在返回到ok状态
    PROBLEM event generation mode Single 当触发器第一次进入PROBLEM状态时会生成一个事件,对于其后采集到的数据不会再重复告警
    Multiple 当触发器第一次进入PROBLEM状态时会生成一个事件,对于其后采集到的数据每次都会触发告警
    ok event closes OK事件是否关闭
    All problem 该触发器产生的所有故障、问题
    All problem if tag values match 故障、问题标签匹配的值
    Allow manual close 允许手动关闭故障/问题事件
    URL  
    Description 对触发器的描述,用于提供有关此触发器更多信息的文本字段。可能包含修复特定问题的说明、负责人员的联系方式等。
    Enabled

    触发器的开关,如果需要,可以取消选中此复选框来禁用触发器

     Trigger告警依赖

    Trigger表达式示例;

    示例1:对主机www.zabbix.com的CPU负载值进行判断。last()取最近一次获取到的值

    {www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5

    示例2:对主机www.zabbix.com的CPU负载值进行多重条件判断。当负载值大于5或者最近10分钟内负载最小值大于2,将会触发告警。

    {www.zabbix.com:system.cpu.load[all,avg1].last()}>5 or {www.zabbix.com:system.cpu.load[all,avg1].min(10m)}>2

    示例3:对文件/etc/paaswd是否有变化进行监控。使用diff()函数

    {www.zabbix.com:vfs.file.cksum[/etc/passwod].diff()}=1

    示例4:对网卡流量是否超过一定的阈值进行条件判断。

    {www.zabbix.com:net.if.in[eth0,bytes].min(5m)}>100K

    示例5:两台SMTP服务器的集群节点都停止了,注意,在一个表达式中使用两个不同的主机,语句如下:与刚刚上边讲的告警关联有异曲同工之妙。

    {smtp1.zabbix.com:net.tcp.service[smtp].last()}=0 and {smtp2.zabbix.com:net.tcp.service[smtp].last()}=0

    示例6:对zabbix客户端代理版本是否满足特定版本进行判断。使用函数str(),当zabbix代理有版本beta8,即触发告警

    {zabbix.zabbix.com:agent.version.str("beta8")}=1

    示例7:服务器的icmp ping 不可达进度判断,在最近30分钟内超过5次不可达,该表达式为真。

    {zabbix.com:icmpping.cout(30m,0)}>5

    示例8:服务器最近3分钟内没有响应,使用nodata()函数

    {zabbix.com:tick.nodata(3m)}=1

    示例9:对CPU在特定时间的负载进行判断,使用time()函数,触发器只在晚上(00:00-06:00)可用,当5分钟内的负载大于2时,及告警。

    {zabbix:system.cpu.load[all,avg1].min(5m)}>2 and {zabbix:system.cpu.load[all,avg1].time()} > 000000 and {zabbix:system.cpu.load[all,avg1].time()} < 060000

    示例10:检查客户端本地时间是否与zabbix-server服务器时间同步.使用fuzzytime()函数,当数据库本地时间与zabbix server的时间相差10s时触发告警。

    {Mysql_DB:system.localtime.fuzzytime(10)}=0

    示例11:CPU的负载在最近1小时的平均值,与前一天的值进行同比大于2倍。

    {server:system.cpu.load.avg(1h)} / {server:system.cpu.load.avg(1h,1d)}>2

    示例12:存储容量小于总容量的10%

    {Template PfSense:hrStorageFree[{#SNMPVALUE}].last()}<{Template PfSense: hrStorageSize[{#SNMPVALUE}].last()}*0.1 #乘号的优先级比小于号大

     示例13:进程数是总进程数的80%

    ({Template_Oracle:oracle[procnum].last(0)}*100/{Template_Oracle:oracle[maxprocs].last(0)})>80

    示例14:判断告警故障表达式,满足阈值的个数大于或等于2,即告警

    ({Zabbix server:system.cpu.load[percpu,avg1].last()}>5) + ({Zabbix server: system.cpu.load[percpu,avg1].last()}>5) + ({Zabbix server:system.cpu.load [percpu,avg1].last()}>5)>=2

    微信告警

     1 shell# wget https://github.com/zabbix-book/wechat-alert/archive/master.zip
     2 shell# unzip master.zip
     3 shell# cp wechat-alert-master/wechat_linux_amd64/etc/zabbix/alertscripts/ wehchat
     4 shell# chmod 755 /etc/zabbix/alertscripts/wehchat
     5 shell# chown zabbix:zabix /etc/zabbix/alertscripts/wehchat
     6 脚本已经正确配置,现在我们调用程序发送微信消息。
     7 
     8 shell# /etc/zabbix/alertscripts/wechat --corpid=wxee***********81aa --corpsecret= Mm0mHwI8iVsjA*JUGySxOFMIlbosoVEkWIEiw --msg="您好</br>告警测试" --user=oneoaas --agentid=1000003
     9 接下来,我们在Zabbix-Web中配置微信告警,如图6-37所示,所配置的参数如下:
    10 
    11 --corpid=wxee***********81aa 
    12 --corpsecret=Mm0mHwI8iVsjA*JUGySxOFMIlbosoVEkWIEiw
    13 --agentid=1000003
    14 --user={ALERT.SENDTO}
    15 --msg={ALERT.MESSAGE}
    View Code

    邮件告警脚本配置

     1 修改/etc/zabbix/zabbix_server.conf配置文件,语句如下:
     2 
     3 shell# vim/etc/zabbix/zabbix server.conf
     4 AlertScriptsPath=/etc/zabbix/alertscripts/
     5 shell#mkdir  -p  /etc/zabbix/alertscripts/
     6 shell#cat  /etc/zabbix/alertscripts/zabbix_sendmail.py   
     7 #!/usr/bin/python 
     8 #coding:utf-8 
     9 
    10 import smtplib 
    11 from email.mime.text import MIMEText 
    12 import os 
    13 import argparse
    14 import logging
    15 import datetime
    16  
    17 mail_host = 'smtp.163.com' 
    18 mail_user = 'monitor_itnihao' 
    19 mail_pass = 'my_password'
    20 mail_postfix = '163.com' 
    21 
    22 def send_mail(mail_to,subject,content): 
    23     me = mail_user+"<"+mail_user+"@"+mail_postfix+">" 
    24     msg = MIMEText(content) 
    25     msg['Subject'] = subject 
    26     msg['From'] = me 
    27     msg['to'] = mail_to 
    28     global sendstatus
    29     global senderr
    30      
    31     try: 
    32         smtp = smtplib.SMTP() 
    33         smtp.connect(mail_host) 
    34         smtp.login(mail_user,mail_pass) 
    35         smtp.sendmail(me,mail_to,msg.as_string()) 
    36         smtp.close() 
    37         print 'send ok'
    38         sendstatus = True 
    39     except Exception,e: 
    40         senderr=str(e)
    41         print senderr
    42         sendstatus = False 
    43      
    44 def logwrite(sendstatus,mail_to,content):
    45     logpath='/var/log/zabbix/alert'
    46 
    47     if not sendstatus:
    48         content = senderr
    49 
    50     if not os.path.isdir(logpath):
    51         os.makedirs(logpath)
    52 
    53     t=datetime.datetime.now()
    54     daytime=t.strftime('%Y-%m-%d')
    55     daylogfile=logpath+'/'+str(daytime)+'.log'
    56     logging.basicConfig(filename=daylogfile,level=logging.DEBUG)
    57     logging.info('*'*130)
    58     logging.debug(str(t)+' mail send to {0},content is :
     {1}'.format (mail_to,content))
    59 
    60 if __name__ == "__main__": 
    61     parser = argparse.ArgumentParser(description='Send mail to user for zabbix alerting')
    62     parser.add_argument('mail_to',action="store", help='The address of the E-mail that send to user ')
    63     parser.add_argument('subject',action="store", help='The subject of the E-mail')
    64     parser.add_argument('content',action="store", help='The content of the E-mail')
    65     args = parser.parse_args()
    66     mail_to=args.mail_to
    67     subject=args.subject
    68     content=args.content
    69 
    70     send_mail(mail_to,subject,content)
    71     logwrite(sendstatus,mail_to,content)
    72 注意上面这个脚本文件需要Zabbix用户具有执行权限,以确保脚本能正常运行。下面对脚本文件进行权限改变。
    73 
    74 shell# chmod  700  /etc/zabbix/alertscripts/zabbix_sendmail.py
    75 shell#  chown  zabbix.zabbix  /etc/zabbix/alertscripts/zabbix_sendmail.py
    76 使用脚本测试发送邮件。
    77 
    78  shell# python /etc/zabbix/alertscripts/zabbix_sendmail.py     
    79 info@itnihao.com   test   "test to send mail"
    View Code

     如何取消告警发送

    1 如何取消告警发送
    2 当大量告警无法正常发送时,告警会处于队列堆积状态,因此,我们可以手动关闭告警,使其不再发送。在数据库中,alerts表记录了即将发送的告警消息,其状态为1,表示待发送;状态为0,表示已发送,因此可以使用如下语句批量取消告警发送。
    3 shell# mysql -uzabbix -pzabbix zabbix "update alerts set status='1' where status='0'"
    View Code

    如何删除故障信息

     1 何删除故障信息
     2 当Zabbix-Web界面中的故障信息,无法通过手动操作关闭故障的时候,我们还可以通过直接操作数据库进行删除。为了方便,可用笔者编写的脚本进行操作,如下所示:
     3 #!/bin/bash
     4 
     5 MYSQL_BIN=mysql       #MySQL的程序
     6 MYSQL_USER=zabbix     #MySQL的用户名
     7 MYSQL_PWD=zabbix      #MySQL的密码
     8 MYSQL_PORT=3306       #MySQL的端口
     9 MYSQL_HOST=127.0.0.1  #MySQL的IP
    10 DB_NAME=zabbix        #数据库名称
    11 MYSQL_LOGIN="${MYSQL_BIN} -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT} ${DB_NAME}"
    12 triggerids="13614 13684" #此处填写需要被删除的故障的triggerid
    13 for ID in ${triggerids};do
    14     echo "------------------------------------------------------"
    15     echo "update zabbix.triggers set value=0 where triggerid=${ID} and value=1"
    16     ${MYSQL_LOGIN} -e "update zabbix.triggers set value=0 where triggerid=${ID} and value=1" 2>&1 | grep -v "Warning: Using a password"
    17     echo "delete from zabbix.events where objectid=${ID} and object=0"
    18     ${MYSQL_LOGIN} -e "delete from zabbix.events where objectid=${ID} and object=0" 2>&1 | grep -v "Warning: Using a password"
    19 #4.0版本还需要清理problem表的数据记录
    20     ${MYSQL_LOGIN} -e "delete from zabbix.problem where objectid=${ID} and object=0" 2>&1 | grep -v "Warning: Using a password"
    21   echo ""
    22 done[新增加的内容]
    View Code
  • 相关阅读:
    MySQL Generic Binaries包和RPM包的区别?
    实体零售如何构建数据管理体系及未来方向
    python3 数据分析
    power designer 资料库表查询
    PowerDesigner 连接资料库
    电商数据分析的基本指标体系
    初中数学动点最值问题19大模型+例题详解
    初中数学全年级26个专题知识点精编汇总
    Python数据分析学习路径拆解及资源推荐
    十种常用的数据分析方法
  • 原文地址:https://www.cnblogs.com/weidongliu/p/13594341.html
Copyright © 2020-2023  润新知