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("\n")[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("\n")[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

posted @ 2019-05-17 19:47  北漂-boy  阅读(1204)  评论(0编辑  收藏  举报