设为首页 收藏本站
查看: 2055|回复: 1

[经验分享] zabbix------以自动添加tomcat端口的一条数据为例,了解low level discovery

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-25 09:34:57 | 显示全部楼层 |阅读模式
1 zabbix的low level discovery的作用(官网):
Low-level discovery provides a way to automatically create items, triggers, and graphs for different entities on a computer. For instance, Zabbix can automatically start monitoring file systems or network interfaces on your machine, without the need to create items for each file system or network interface manually. Additionally it is possible to configure Zabbix to remove unneeded entities automatically based on actual results of periodically performed discovery.
我不知道怎么翻译这个low level discovery,不过这个和configuration下面的discovery rules肯定不一样,那个是主机层次的,这个low level我就暂且理解为基于主机的细节层次的自动发现,不是发现主机,而是发现主机的特殊元素了,然后server根据从agent获得的数据,自动添加这些items。目前zabbix已经友好地为我们添加了大概如下的自动LLD,网络接口,CPU核心,SNMP OID和盘的容量,官网写的如下:
  • discovery of file systems;(vfs.fs.discovery)
  • discovery of network interfaces;(net.if.discovery)
  • discovery of CPUs and CPU cores;(system.cpu.discovery)
  • discovery of SNMP OIDs.


2 简单介绍下个人理解的原理
原理有点像key,首先zabbix客户端和服务端平常交互都是通过JSON式的格式传输数据,而且服务端可以认识这些夹杂着变量的数据。以tomcat为例,我们的目的是想让zabbix的web主动添加那些监听端口而不是我们在模板指定的端口,这个端口是根据agent的特殊情况而决定的。所以我们zabbix的agent通过key的方式发送JSON格式的数据,包含LLD需要的这些变量及其数据,server会根据web的discovery的设置对应到discovery的item,并和其他item一样类似地监控。下面来看看我的步骤,再自己理解下吧。

3 第一步,想办法输出你要捕获的东西,比如tomcat的端口
# 这一步就是我取出的listener的port的

cat $server_xml|grep "\<Connector port"|awk -F"\"" '{print $2}'

4 第二步,把这些内容输出为JSON格式,这里说下,脚本可能会写错或有问题,所以建议有问题的时候sh -x SCRIPT来检测错误,整体的脚本为
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
38
# tomcat.sh
#!/bin/sh
# lld about tomcat7.0.53 ports by liuliancao at 2015/12/23 Wed.

# where is your tomcat server.conf
server_xml="/opt/tomcat/conf/server.xml"


# print json style output for server
tomcat_discovery(){

# try to catch the port
cat $server_xml|grep "\<Connector port"|awk -F"\"" '{print $2}' > /tmp/tomcat_discovery.out

if [ -s /tmp/tomcat_discovery.out ];then
    item=($(cat /tmp/tomcat_discovery.out))
    printf "{\n"
    printf "\t\"data\":[\n"
    for((i=0;i<${#item[@]};i++))
    {
        num=$(echo $((${#item[@]}-1)))
        if [ "$i" != ${num} ];then
            printf "\t\t{\n"
            printf "\t\t\t\"{#TOMCATPORT}\":\"${item[$i]}\"},\n"
        else
            printf "\t\t{\n"
            printf "\t\t\t\"{#TOMCATPORT}\":\"${item[$num]}\"}\n\t]\n}\n"
        fi
   }
else
   echo "check port listened in your server.xml!"
fi
}

case "$1" in
discovery)
        tomcat_discovery;;
esac




5  把刚刚的脚本做成一个key,然后你懂的
[iyunv@Zabbix-Server ~]# cat /etc/zabbix/zabbix_agentd.conf.d/tomcat.conf
UserParameter=tomcat.discovery,/bin/sh /etc/zabbix/scripts/tomcat.sh discovery
[iyunv@Zabbix-Server ~]# service zabbix_agentd restart
# 必须满足下面的类似输出结果才行,保证key可用

[iyunv@Zabbix-Server ~]# zabbix_get -s localhost -k tomcat.discovery
{
        "data":[
                {
                        "{#TOMCATPORT}":"18080"},
                {
                        "{#TOMCATPORT}":"8443"},
                {
                        "{#TOMCATPORT}":"8009"}
        ]
}

6 上面的内容做出来下面就是web的添加了,和item差不多,不过我们要选择模板的discovery
wKiom1Z6u1iicjUQAAAXU46WdaA612.jpg
然后
wKiom1Z6vDuR6edcAAAmL2m83ZY971.jpg
wKioL1Z6vE_gqyESAACHu3egQP4691.jpg
这个时候也就是我们做到了把客户端的JSON数据拿到了,下面就是添加item了,但这个怎么自动呢,在哪儿添加呢?

7 添加万itemtype,我们看到,是一排
wKioL1Z6vO2iTBS0AABHdPK827E956.jpg
按照自己想要的添加就行了,就像平常一样,这里我举个例子
添加的itemtypes

wKiom1Z6vTazY38DAAAvfg1eSXg615.jpg

最终绑定host后出现了下面的

wKioL1Z6vUnh8_zFAAA7yRhIXus001.jpg
如果你的item对应的key是对的,那么就会出现数据。
我的18080和8443都没监听,而且8009模板中已经有了,所以就没有这个添加的item,不过通过这个例子,相信大家已经知道怎么做了吧。

8 总结下:把想要自定义的数据做成key,key返回JSON格式数据,在web上的模板中添加discovery,在discovery中的itemtypes等添加自己的item(带你的自定义的参数的),最终去host看是否有这个item,看latest data是否有数据。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-156010-1-1.html 上篇帖子: zabbix server安装lamp 下篇帖子: saltstack pillar配置 discovery

尚未签到

发表于 2015-12-30 13:46:17 | 显示全部楼层

您好,我想问下,这个好像不太适合多个tomcat实例吧

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表