一、(low level discover)概述
什么是lld ?即低水平自动发现,使用它可以自动创建项目、触发器及被监控主机上的实体图。如zabbix 可以自动监控主机上的文件系统和网络拉口,而不需要为每个监控项创建items 。此处,其也可以实现被监控项目的自动删除 。上面的话不是我的总结,是我从官方文档上翻译过来的话。
二、创建模版
由于创建模板不是本篇的重点,就不提创建模板的过程了 。这里重点提下如何在模板中创建自动发现规则。
1. 创建自动发现规则
步骤为:配置 –> 模版 –> 选中之前创建好的模版(这里我用 app discover) –> 自动发现规则 –> 创建发现规则
2. 选择监控项原型并创建监控项
- 名称:{#DISCOVER} 自定义的宏变量(后续脚本会提到);
- 类型:根据自身主动/被动模式选择;
- 键值:后续监控的自定义Key会提到。
3. 触发器类型
可根据自身情况做定义
三、客户端配置脚本(在配置发现的主机上配置,比如zabbix-server的agentd)
配置发现规则
这里发现规则是找的/app目录下的所有目录名(公司的所有项目都创建在/app目录下)
cat check_app.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#@author: sundsinerj
#@date: 2017/9/28
import os
import json
import getopt
import sys
#list app name
app_list = os.listdir(os.path.expanduser("/app"))
if 'lost+found' in app_list:
del app_list[app_list.index('lost+found')]
elif 'zabbix' in app_list:
del app_list[app_list.index('lost+found')]
elif 'tomcat-6.0.48_wp' in app_list:
del app_list[app_list.index('lost+found')]
opts, arge = getopt.getopt(sys.argv[1:],[])
#print appname for json
pool_list = []
for appname in app_list:
#def json data
pool_list += [{'{#DISCOVER}': appname}]
print json.dumps({'data': pool_list},sort_keys=True,indent=4,separators=(',',':'))
配置监控项规则
cat check_app.sh
#! /bin/bash help() { echo "USAGE:`basename $0` [-n] the name of app" exit -1 } while getopts ":n" opt do case $opt in n) appname=$OPTARG ;; h) help ;; *) unkown=$OPTARG echo "error,plase check for help,USAGE:./`basename $0` -h" exit $STAT_UNKNOWN ;; esac done apppid=`ps aux | grep "$appname" | grep -v grep | wc -c` if [ $apppid -eq 0 ] then echo 0 exit 0 else echo 1 exit 1 fi
- 发现规则必需是json格式的
*{#DISCOVER}
就是zabbix创建的模版的宏变量
- check_app.sh脚本就是定义的监控项
四、自定义key
cat userparameter_app.conf
UserParameter=app.status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/libexec/check_app.sh -n $1 UserParameter=app.discover,python /etc/zabbix/zabbix_agentd.d/libexec/check_app.py
五、验证
在被发现的主机上关联app discover 模版就可以了。过会,就能看到相关的低级发现项目。