• zabbix实现自定义监控


    实现自定义监控项实例

    1.创建主机组
    2.创建主机
    3.创建监控项
      1.到需要监控的主机的agent中添加自定义的监控项目
        cd /etc/zabbix/zabbix_agentd.d
        vi userparameter_mysql.conf
        UserParameter=监控项目名称,shell命名
        UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
        systemctl restart zabbix-agent
      2.到zabbix server的主机上进行调试
        zabbix_get -s 192.168.11.134 -k mysql.ping
        [root@node3 ~]# zabbix_get -s 192.168.11.134 -k mysql.ping
        sh: mysqladmin: 未找到命令
        0
        由此可以看出可以正常执行命令 同时返回的结果是一个字符串
        这个命令执行的结果类型在创建触发器的时候十分有用
    命令配置步骤

     仪表盘配置步骤:

       1.创建自定义监控项

    信息类型的选择 需要根据shell命令执行的具体结果来确定 不能随便填写

       2.根据自定义监控项创建触发器

          表达式就是对获取对应监控项的值进行一些处理 根据处理后的值来判断是否进行告警操作

         

    zabbix内置监控模板

    zabbix实现脚本发送告警邮件

       zabbix-server 服务器系统配置

    [root@Zabbix ~]# yum -y install mail         #如有mail命令则不用安装
    [root@Zabbix ~]# vim /etc/mail.rc
    # Display the recipients of messages sent by the user himself in
    # header summaries.
    set showto
    # Automatically check for new messages at each prompt, but avoid polling
    # of IMAP servers or maildir folders.
    set newmail=nopoll
    # If threaded mode is activated, automatically collapse thread.
    set autocollapse
    # Hide some header fields which are uninteresting for most human readers.
    ignore received in-reply-to message-id references
    ignore mime-version content-transfer-encoding
    # Only include selected header fields when forwarding messages.
    fwdretain subject date from to
    # For Linux and BSD, this should be set.
    set from=richardcnhm@sina.com                     #发送的邮件地址
    set smtp=smtp.sina.com                                   #外部smtp服务器的地址
    set smtp-auth-user=richardcnhm@sina.com    #外部smtp服务器认证的用户名
    set smtp-auth-password=123456                     #外部smtp服务器认证的用户密码(如用163或qq邮箱则为授权码)
    set smtp-auth=login                                          #邮件认证的方式
    [root@Zabbix ~]# echo "邮件正文"|mail -s "邮件主题" 收件人地址           #发送邮件测试命令
    
    [root@node3 ~]# echo "hello world aaaaa" |mail -s "aaaaa" 2228@163.com
    [root@node3 ~]# echo "hello world aaaaa" |mail -s "aaaaa" 1272@qq.com
    
    发送邮件的标题为test 被服务器垃圾邮件屏蔽
    View Code

      发送邮件脚本的实现

    [root@Zabbix ~]# yum -y install dos2unix
    [root@Zabbix ~]# vim /usr/lib/zabbix/alertscripts/mail.sh
    #!/bin/bash
    # use mailx to send mail
    # 20141127 carl 1st
    # PATH
    file=/tmp/zabbix_mail.txt
    echo "$3" > $file
    dos2unix -k $file
    /bin/mail -s "$2" $1 < $file
    # echo "$3" | mail -s "$2" $1
    #注:使用dos2unix工具是为解决zabbix发送邮件出现乱码和收到的邮件是*.bin的情况
    #$3 是前端定义的邮件内容,$2是前端定义的主题,$1是前端定义的收件人
    [root@Zabbix alertscripts]# chmod 777 mail.sh
    [root@Zabbix alertscripts]# chown zabbix.zabbix mail.sh
    
    mail.sh必须存放在/usr/lib/zabbix/alertscripts/目录下
    shell版本
    [root@zabbix alertscripts]# pwd
    
    /usr/lib/zabbix/alertscripts
    
    [root@zabbix alertscripts]# cat mail_qq.py
    
    #!/usr/bin/python
    
    #coding:utf-8
    
    import smtplib
    
    from email.mime.text import MIMEText
    
    import sys
    
    mail_user = '111111111@qq.com'
    
    mail_pass = 'xxxxxxxxxxx'
    
     
    
    def send_mail(to_list,subject,content):
    
    me = "zabbix 监控告警平台"+"<"+mail_user+">"
    
    msg = MIMEText(content, 'plain', 'utf-8')
    
    msg['Subject'] = subject
    
    msg['From'] = me
    
    msg['to'] = to_list
    
    try:
    
    s = smtplib.SMTP_SSL("smtp.qq.com", 465)
    
    s.login(mail_user,mail_pass)
    
    s.sendmail(me,to_list,msg.as_string())
    
    s.close()
    
    return True
    
    except Exception,e:
    
    print str(e)
    
    return False
    
    if __name__ == "__main__":
    
    send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
    
    mail_user为邮箱地址,mail_pass为邮箱服务商提供的客户端授权码,获得授权码的方式也可以参考百度,要说明的是目前网易邮箱客户端授权码支持自定义,qq邮箱客户端授权码不支持自定义,需要生成、这里也附上使用163邮箱的脚本
    
    [root@zabbix alertscripts]# cat mail_163.py
    
    #!/usr/bin/python
    
    #coding:utf-8
    
    import smtplib
    
    from email.mime.text import MIMEText
    
    import sys
    
    mail_user = '1232323232@163.com'
    
    mail_pass = 'xxxxxxxxxx'
    
     
    
    def send_mail(to_list,subject,content):
    
    me = "zabbix 监控告警平台"+"<"+mail_user+">"
    
    msg = MIMEText(content, 'plain', 'utf-8')
    
    msg['Subject'] = subject
    
    msg['From'] = me
    
    msg['to'] = to_list
    
    try:
    
    s = smtplib.SMTP("smtp.163.com", 25)
    
    s.login(mail_user,mail_pass)
    
    s.sendmail(me,to_list,msg.as_string())
    
    s.close()
    
    return True
    
    except Exception,e:
    
    print str(e)
    
    return False
    
    if __name__ == "__main__":
    
    send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
    
    脚本编写完成之后需要为脚本添加执行权限
    
    [root@zabbix alertscripts]# chmod +x mail_qq.py
    
    3、测试
    
    命令行测试脚本能否成功执行
    
    [root@zabbix alertscripts]# ./mail_qq.py xxx@163.com "测试" 'test'
    
    测试参数为三个,分别为收件人邮箱地址,邮件标题,邮件内容
    
    测试的时候如果出现错误提示缺少smtplib,解决方法为使用pip进行安装:pip install smtplib
    python脚本

    zabbix web控制台配置

      1.添加报警媒介类型

      

    #!/bin/bash
    #echo "this is zabbix msg" |mail -s "bbbbbbbbb" 127@qq.com
    
    echo $1 > /tmp/user
    echo $2 > /tmp/zhuti
    echo $3 > /tmp/neirong
    
    file=/tmp/zabbix_mail.txt
    echo "$3" > $file
    dos2unix -k $file
    /bin/mail -s "$2" $1 < $file
    sendmail

     向sendmail脚本传递三个宏变量参数

         1.{ALERT.SENDTO}        表示接收邮件的账号

         2.{ALERT.SUBJECT}      表示发送邮件的标题

         3.{ALERT.MESSAGE}     表示发送邮件的内容     

       2.添加动作

          1.添加一个动作的触发条件

           

         2.添加操作的详细步骤

         

          zabbix内置的宏变量:

             默认标题: 主机 {HOSTNAME} 在 {EVENT.DATE} {EVENT.TIME} 发生故障 {TRIGGER.NAME} {ITEM.VALUE}

             告警主机:{HOSTNAME}

             告警时间:{EVENT.DATE} {EVENT.TIME}

             告警等级:{TRIGGER.SEVERITY}

             告警信息: {TRIGGER.NAME}

             告警项目:{TRIGGER.KEY}

             问题详情:{ITEM.NAME}:{ITEM.VALUE}

             当前状态:{TRIGGER.STATUS}:{ITEM.VALUE}

             事件ID:{EVENT.ID}

        

         3.设置用户Admin的邮箱 用来接收报警信息邮件

          

       4.修改触发器表达式触发报警发送邮件

        

     

    zabbix实现钉钉告警

      1.首先创建一个钉钉群 然后再在群里创建一个群机器人 获取一个web hook地址

      

    2.编写发送钉钉发送消息脚本

        [root@node3 alertscripts]# pwd
        /usr/lib/zabbix/alertscripts

       [root@node3 alertscripts]# chown -R zabbix:zabbix dingding.py

       [root@node3 alertscripts]# chmod +x dinding.py

    #!/usr/bin/python
    
    import sys
    import json
    import requests
    
    api_url="https://oapi.dingtalk.com/robot/send?access_token=d4a29054"
    headers={"Content-Type":"application/json;charset=utf-8"}
    
    def msg(text):
        json_text = {
            "msgtype":"text",
            "text": {
                "content":text
            },
            "at":{
                "atMobiles":[
                  # "13999999",
                ],
                "isAtAll":False
            }
        }
        print(requests.post(api_url,json.dumps(json_text),headers=headers).content)
    
    if __name__ == "__main__":
        text=sys.argv[1]
        msg(text)
    
    
    #调试
    [root@node3 alertscripts]# python dingding.py 
    [root@node3 alertscripts]# ./dingding.py 
    ./dingding.py:行1: import: 未找到命令
    ./dingding.py:行2: import: 未找到命令
    ./dingding.py:行3: import: 未找到命令
     import sys
     import json
     import requests
    
    
    #!/usr/bin/python
    import sys
    import json
    import requests
    dingding.py

    3.添加告警媒介类型

      4.添加动作

       

      5.添加用户报警媒介

       

  • 相关阅读:
    oracle 日期和时间转换
    layui 分页 java后端封装
    excel 时间格式
    excel的编程VBA
    excel条件格式
    python列表变成字符串
    Django的ORM源码学习
    robot 源码解读6【元类和描述符类】
    @staticmethod
    python 类定义后调用名称也执行内部代码
  • 原文地址:https://www.cnblogs.com/yxh168/p/9929452.html
Copyright © 2020-2023  润新知