zoukankan      html  css  js  c++  java
  • zabbix(10)自动发现规则(low level discovery)

    1、概念

      在配置Iterms的过程中,有时候需要对类似的Iterms进行添加,这些Iterms具有共同的特征,表现为某些特定的参数是变量,而其他设置都是一样的,例如:一个程序有多个端口,而需要对端口配置Iterms。再如,磁盘分区,网卡的名称等等,由于具有不确定性,古配置固定的Items会出现无法通用的问题。

      Low level discovery的Key可以对网卡、文件系统等进行自动发现,当然也支持自定义。

      Low level discovery的使用过程分如下两步:

        (1)自动发现特定变量的名称。

        (2)添加对变量的Items。

      Zabbix中Low level discovery的Key返回值是一个JSON格式。查看Low level discovery Key返回格式如下:

    2、案列

      使用Zabbix监控Hadoop集群的进程。每台机器启动的进程不一样,而这个时候想要监控每一台机器的hadoop进程,就需要自动发现规则了,如果配置通用的模板,把每一个监控项(监控每一个hadoop的进程)都配置上,会发现每一台主机对有些监控项是不支持的。

    zabbix客户端配置如下:

    EnableRemoteCommands=1  开启远程执行命令,默认是0,当监控到hadoop进程掉了以后,自动启动。

    Timeout=30  超时

    StartAgents=8  开启处理线程 

    编写自动发现脚本如下:

    [root@manager1 script_py 19:20:09]#cat hadoopDiscovery.py 
    #!/usr/bin/env python3
    import os
    import json
    
    with open("/data1/zabbix_sh/jps.txt", "r") as f:
        text_lst = [i.split("
    ")[0] for i in f.readlines()]
    
    hadoopProcess = []
    
    for i in text_lst:
        hadoopProcess += [{'{#hadoopProcessName}':i}]
    print(json.dumps({'data':hadoopProcess},sort_keys=True,indent=7,separators=(',',':')))
    [root@manager1 script_py 19:20:12]#cat /data1/zabbix_sh/jps.txt    这里面存储的是当前节点本应该启动的进程
    DataNode
    Master

    执行效果如下:

      (1)自定义Key,如下:

    # cat /etc/zabbix/zabbix_agentd.d/hadoop_process.conf 
    UserParameter=hadoop_process[*],sudo /data1/zabbix_sh/hadoopProcess.py $1
    UserParameter=hadoop_state,sudo  /data1/zabbix_sh/hadoopState.py
    UserParameter=hadoop.process.discovery,sudo /data1/zabbix_sh/hadoopDiscovery.py
    hadoopProcess.py脚本如下:
    # cat hadoopProcess.py 
    #!/usr/bin/env python3
    'this is a system monitor scripts'
    __author__="yjt"
    
    import os
    import sys
    def hadoop_program():
        with open("/data1/zabbix_sh/jps.txt", "r") as f:
            list_jps = [i.split("
    ")[0] for i in f.readlines()]
    
        job_value = []
    #    hadoop_process = ['JournalNode','ResourceManager','HMaster','DataNode','DFSZKFailoverController','QuorumPeerMain','HQuorumPeerMain','JobHistory','Kfaka','NodeManager','Worker','Master','HRegionServer','NameNode','PrestoServer','RunJar']
        job_lst = os.popen('/data1/jdk/bin/jps').readlines()
        for i in job_lst:
            value = i.split()[1]
            if value != 'Jps':
                job_value.append(value)
        if sys.argv[1] in job_value:
            print(1 )
        elif sys.argv[1] in list_jps:
            print(0)
    #    else:
    #        print(2)
    
    if __name__ == "__main__":
        if len(sys.argv) > 1:
            hadoop_program()

    配置完重启zabbix客户端

    测试,是否可以从server端获取到数据:

    (2)web界面的配置:

       1)创建一个模板:配置---> 模板--->创建模板

       2)在改模板上创建自动发现规则:

       3)自动发现规则配置

     

      4)为这个模板创建原型的监控项

     

      5)创建触发器:

      6)创建图形:

    到这里这个模板就创建好了。这个时候在创建主机的时候,关联这个模板看看效果,需要等待一段时间。效果如下:

    第一台机器:

     第二台机器:

     OK

  • 相关阅读:
    java通过ST4使用模板字符串
    使用 docker创建redis实例并且连接
    Docker 认证成功后还是无法push构建好的镜像
    记录一次在openwrt中折腾docker
    全局模式、PAC模式、直连模式的区别
    Vue Router中调用this.$router.push() 时,location使用path无法传入params
    liunx之系统
    liunx之通配符&正则表达式
    liunx之基础
    liunx之find命令
  • 原文地址:https://www.cnblogs.com/yjt1993/p/10883345.html
Copyright © 2011-2022 走看看