• zabbix配置钉钉告警、和故障自愈


    1.配置钉钉告警

    server 配置

    钉钉告警python脚本

    脚本1

    cd  /lib/zabbix/alertscripts/
     cat  python20 
    #!/usr/bin/python3
    #coding:utf-8
    import requests,json,sys,os,datetime
    # 机器人的Webhook地址
    webhook="钉钉"
    user=sys.argv[1]
    text=sys.argv[3]
    data={
        "msgtype": "text",
        "text": {
            "content": text
        },
        "at": {
            "atMobiles": [
                # 在web端用户绑定媒介中通过指定用户注册是的手机号,可以通知指定人员,否则只发消息,不艾特具体人
               user
            ],
            "isAtAll": False
            # 设置为1,则@所有人
            # "isAtAll": 1
        }
    }
    headers = {'Content-Type': 'application/json'}
    x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
    if os.path.exists("/var/log/zabbix/dingding.log"):
        f=open("/var/log/zabbix/dingding.log","a+")
    else:
        f=open("/var/log/zabbix/dingding.log","w+")
    f.write("\n"+"--"*30)
    if x.json()["errcode"] == 0:
        f.write("\n"+str(datetime.datetime.now())+"    "+str(user)+"    "+"发送成功"+"\n"+str(text))
        f.close()
    else:
        f.write("\n"+str(datetime.datetime.now()) + "    " + str(user) + "    " + "发送失败" + "\n" + str(text))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    脚本2

    cat ding
    #!/usr/bin/env python3
    #zabbix钉钉报警
    import requests,json,sys,os,datetime
    ##刚刚保存的Webhook
    webhook="钉钉Webhook"
    user=sys.argv[1]  ##执行脚本时传递的第一个参数,发送用户
    text=sys.argv[3]  ##执行脚本时传递的第三个参数,发送内容
    data={
      "msgtype": "text",
      "text": {
        "content": text
      },
      "at": {
        "atMobiles": [
          user
        ],
        "isAtAll": False
      }
    }
    headers = {'Content-Type': 'application/json'}
    x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
    if os.path.exists("/usr/lib/zabbix/logs/dingding.log"):
      f=open("/usr/lib/zabbix/logs/dingding.log","a+")
    else:
      f=open("/usr/lib/zabbix/logs/dingding.log","w+")
    f.write("\n"+"--"*30)
    if x.json()["errcode"] == 0:
      f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text))
      f.close()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    web界面创建媒介

    错误1:
    在这里插入图片描述

    
    sh: 1: /usr/lib/zabbix/alertscripts/dingding.py: not found
    单python3 文件名字 测试正常,还以为ubuntu不支持,结果多次测试是因为是在window复制创建的文件,使用./文件名发现有其他字符^M,^M字符表示回车符,它可能是由于使用Windows风格的换行符引起的。在Linux系统上,需要使用Unix风格的换行符。
    你可以尝试使用dos2unix命令来转换文件的换行符格式。打开终端,并运行以下命令:dos2unix python20
    
    root@ubuntu20:/usr/lib/zabbix/alertscripts# ./dingding3.py 
    -bash: ./dingding3.py: /usr/bin/python3^M: bad interpreter: No such file or directory
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    给用户添加媒介

    在这里插入图片描述

    测试告警

    实现故障自愈功能

    zabbix监控到指定的监控项异常时,可以通过指定的操作使故障自动恢复以nginx服务为例,当nginx服务停止时,自动重启服务,实现故障自愈功能

    agent添加配置

    vim /etc/zabbix/zabbix_agentd.conf 
    AllowKey=system.run[*] #允许所有远程命令,zabbix5.0版本以上,代替EnableRemoteCommands,agent2默认没有此命令手工加入
    #EnableRemoteCommands=1 #开启远程执行命令,此指令在zabbix5.0版本以上淘汰
    AllowRoot=1  #开启此项,直接使用root进行远程管理,而无须对zabbix用户授权sudo权限,agent2不支持,使用下面的对zabbix授权
    UnsafeUserParameters=1  #允许远程执行命令的时候使用不安全的参数(特殊字符串,如: \ ' *
    
    • 1
    • 2
    • 3
    • 4
    • 5

    默认zabbix agent是使用zabbix用户启动的,有些特权命令zabbix用户是没有权限执行,会导致定义好
    的自治愈策略因为权限拒绝为执行失败,所以需要事先对zabbix用户进行授权.

    [root@centos8 ~]#vim /etc/sudoers
    zabbix ALL=(ALL) NOPASSWD: ALL
    #检查语法
    [root@centos8 ~]#visudo -c
    重启
    systemctl restart zabbix-agent2.service
    服务端配置

    创建动作
    创建动作,触发器
    在这里插入图片描述

    动作中添加
    在这里插入图片描述

    把nginx停止,会自动执行systemctl start nginx命令,故障恢复

    在这里插入图片描述

    主动模式
    主动模式和被动模式相对agent来说的

    ServerActive=192.168.1.150 #向谁汇报,开启主动模式
    Hostname=192.168.1.220 #agent中Hostname 此项必须和Zabbix Server中设置的主机名称相同,不然采集不了数据,会报错找不到

    监控项改为主动式
    在这里插入图片描述

    主动模式监控项
    在这里插入图片描述

    复制模板,批量更新监控项为主动式
    在这里插入图片描述

    主机并联新的模板
    在这里插入图片描述

    问题1

    2023/09/04 19:34:48.385426 [101] no active checks on server [192.168.1.150:10051]: host [zhujiming-192.168.1.220] not found
    2023/09/04 19:36:49.387602 [101] no active checks on server [192.168.1.150:10051]: host [zhujiming-192.168.1.220] not found
    2023/09/04 19:38:50.397644 [101] no active checks on server [192.168.1.150:10051]: host [zhujiming-192.168.1.220] not found
    2023/09/04 19:40:51.382330 [101] no active checks on server [192.168.1.150:10051]: host [zhujiming-192.168.1.220] not found
    界面查看数据没有更新,查看日志,agent配置文件中hostname和服务端页面的主机名称要一样
    
    • 1
    • 2
    • 3
    • 4
    • 5

    问题2:zbx是灰色,但查看数据正常,是因为这个主机的模版全是主动模式。server 不会向agent发,添加其他被动模式模版即可
    在这里插入图片描述

    监控Java

    Zabbix 不支持直接监控JAVA应用
    如果要监控JAVA程序比如Tomcat等,需要使用 Java gateway 做为代理,才能从JAVA应用中获取数据

    Zabbix 监控JVM流程
    zabbix-server 通知 zabbix-Java-Gateway需要获取监控主机的哪些监控项
    Zabbix-Java-Gateway 通过 JMX 协议请求采集 Java进程数据
    Java程序通过 JMX 协议返回数据给 zabbix-Java-Gateway
    zabbix-Java-Gateway 最终返回数据给 zabbix-server
    zabbix-server 对采集的JAVA 数据进行存储,然后进行 Web 展示

    192.168.1.250安装好java+tomcat环境
    Tomcat 开启 JMX 功能
    192.168.1.250填本机ip
    #vim /usr/local/tomcat/bin/catalina.sh
    CATALINA_OPTS=“$CATALINA__OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.1.250”

    systemctl restart tomcat

    [root@rocky8 ~]# ss -tnl|grep 12345
    LISTEN 0 50 *:12345 :

    zabbix服务端测试
    root@ubuntu20:~# java -jar cmdline-jmxclient-0.10.3.jar - 192.168.1.250:12345  'Catalina:name="http-nio-8080",type=ThreadPool' currentThreadCount
    
    09/04/2023 23:03:05 +0800 org.archive.jmx.Client currentThreadCount: 10
    
    
    java线程数
    java -jar cmdline-jmxclient-0.10.3.jar - 192.168.1.250:12345  'Catalina:name="http-nio-8080",type=ThreadPool' maxThreads
    09/04/2023 23:07:41 +0800 org.archive.jmx.Client maxThreads: 200
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    zabbix server 安装java gateway

    Java gateway 是一个独立于zabbix server和 zabbix agent的组件,默认使用端口10052/tcp, 所以java
    gateway可以是单独的一台服务器,但是也可以和zabbix server或者zabbix agent 共用一台服务器

    apt -y install zabbix-java-gateway

    配置 Zabbix Server 支持 Java gateway

    zabbix修改添加配置
    root@ubuntu20:~# vi /etc/zabbix/zabbix_server.conf
    JavaGateway=192.168.1.150 #指向JAVA gateway主机
    StartJavaPollers=10 #指定开启的进程数

    使用系统内置模板监控 tomcat 主机

    添加主机j

    添加java模版查看数据
    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    radis相关面试题
    JSON序列化和反序列化
    线程池中某个线程执行有异常,该如何处理?
    如何使用 KubeSeal 高效加密和管理 Kubernetes 集群的 Secret
    iOS上架app store详细教材
    Mallab勒索病毒的最新威胁:如何恢复您的数据?
    大学生书店系统
    Android 14 transtion 动画流程
    【c++ 封装、继承、多态】
    【SpringBoot整合 Apache POI 完成复杂表头数据的导出】
  • 原文地址:https://blog.csdn.net/m0_37749659/article/details/132658639