zabbix 自定义LLD

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

线上部分实时job是用storm开发的,为了监控数据的延迟,在storm处理日志的时候会把日志的时间插入到redis中,然后通过zabbix做延迟的监控。由于经常有新的job上线,手动配置监控项就变得比较麻烦,为了解放生产力,还是需要搞成自动化。

之前添加网卡和分区监控的时候用了LLD的功能,并用了其内置的宏变量,新版本的zabbix是支持custom LLD的,实现步骤如下:

1.在模板中设置一个discovery rule ( UserParameter  Key),调用脚本,返回zabbix规定的json数据(返回自定义的宏变量),并正确设置的discovery(比如filter等)

这里通过官方文档并结合线上的agent日志,可以看到zabbix规定的数据格式

1
2
3
4
5
6
7
8
9
10
11
12
143085:20141127:000548.967 Requested [vfs.fs.discovery]
143085:20141127:000548.967 Sending back [{
         "data" :[
                 {
                         "{#FSNAME}" : "\/" ,
                         "{#FSTYPE}" : "rootfs" },
                 {
                         "{#FSNAME}" : "\/proc\/sys\/fs\/binfmt_misc" ,
                         "{#FSTYPE}" : "binfmt_misc" },
                 {
                         "{#FSNAME}" : "\/data" ,
                         "{#FSTYPE}" : "ext4" }]}]

比如线上返回json数据的key:

1
UserParameter = storm.delay.discovery,python2. 6  / apps / sh / zabbix_scripts / storm / storm_delay_discovery.py

并通过

1
zabbix_get  -s 127.0.0.1 -k storm.delay.discovery

验证返回数据的准确性

storm_delay_discovery.py内容如下:

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/python2.6
#for storm job delay monitor auto discovery
#edit by ericni.ni
#2014-11-27
import  sys
import  redis
import  exceptions
import  traceback
 
_hashtables  =  []
_continue  =  True
_alllist  =  []
 
class  RedisException(Exception):
     def  __init__( self , errorlog):
         self .errorlog  =  errorlog
     def  __str__( self ):
             return  "error log is %s"  %  ( self .errorlog)
             
def  scan_one(cursor,conn):
     try :
         cursor_v  =   conn.scan(cursor)
         cursor_next  =  cursor_v[ 0 ]
         cursor_value  =  cursor_v[ 1 ]
         for  line  in  cursor_value:
             if  (line.startswith( "com-vip-storm" or  line.startswith( "stormdelay_" )):
                 _hashtables.append(line)
             else :
                 pass
         return  cursor_next
     except  Exception,e:
         raise  RedisException( str (e))
         
def  scan_all(conn):
     try :
         cursor1  =  scan_one( '0' ,conn)
         global  _continue
         while  _continue:
             cursor2  =  scan_one(cursor1,conn)
             if  int (cursor2)  = =  0 :
                 _continue  =  False
             else :
                 cursor1  =  cursor2
                 _continue  =  True
     except  Exception,e:
         raise  RedisException( str (e))
 
def  hget_fields(conn,hashname):
         fields  =  conn.hkeys(hashname)
         re  =  "["
         #print "hashname %s"%(hashname)
         #print fields
         for  field  in  fields:
             aline  =  ""
             aline  + =  """{"{#STORMHASHNAME}": "%s", "{#STORMHASHFIELD}": "%s"}""" % (hashname,field)
             _alllist.append(aline)
 
if  __name__  = =  '__main__' :
     re  =  ""
     try :
         r = redis.StrictRedis(host = 'xxx' , port = xxx, db = 0 )
         scan_all(r)
         for  hashtable  in  _hashtables:
                 hget_fields(r,hashtable)
         re  + =  """{"data": """
         re  + =  str (_alllist).replace( "'",'')
         re += "}"
         print re.replace("'" ,'"')
     except  Exception,e:
         print   - 1


2.设置item/graph/trigger prototypes:

这里以item为例,定义item prototypes (同样需要定义key),key的参数为宏变量

比如Free inodes on {#FSNAME} (percentage)--->vfs.fs.inode[{#FSNAME},pfree] 

本例中,在item中使用上面返回的宏变量即可,

1
storm_delay[hget,{ #STORMHASHNAME},{#STORMHASHFIELD}]

最后,把包含LLD的template链接到host上即可。

最后再配合screen.create/screenitem.update api就可以实现监控添加/screen添加,更新的自动化了。




本文转自菜菜光 51CTO博客,原文链接:http://blog.51cto.com/caiguangguang/1583536,如需转载请自行联系原作者

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
监控
zabbix如何添加自定义监控项
zabbix如何添加自定义监控项
256 0
|
10天前
|
监控 关系型数据库 应用服务中间件
zabbix自定义监控、钉钉、邮箱报警
zabbix自定义监控、钉钉、邮箱报警,实验准备,安装,添加监控对象,添加自定义监控项,监控mariadb,监控NGINX,钉钉报警设置,邮件报警
129 0
|
监控 开发工具
Zabbix自定义KEY报错ZBX_NOTSUPPORTED: Unsupported item key.
[root@zabbix bin]# ./zabbix_get -s 192.217.24.47 -k jump-server ZBX_NOTSUPPORTED: Unsupported item key.
9512 0
|
监控
zabbix利用grafana自定义监控图形展现(十一)
zabbix利用grafana实现监控图形展现 1.修改已有的system load监控图像 下面这张图是现在已经有的系统负载监控图,可以看到只有15分钟的负载并没有1分钟和5分钟的负载,我们现在修改一下图形,让他支持1分钟和5分钟的系统负载
943 0
zabbix利用grafana自定义监控图形展现(十一)
|
监控 应用服务中间件 PHP
zabbix用户自定义参数监控 php-fpm 服务的状态及导出模板和自定义参数
zabbix用户自定义参数监控 php-fpm 服务的状态及导出模板和自定义参数
150 0
zabbix用户自定义参数监控 php-fpm 服务的状态及导出模板和自定义参数
|
监控 Linux
【zabbix教程六】——自定义item和trigger当内存不足10%时触发报警
【zabbix教程六】——自定义item和trigger当内存不足10%时触发报警
142 0
【zabbix教程六】——自定义item和trigger当内存不足10%时触发报警
|
监控 Linux
【zabbix教程四】——zabbix3.0监控磁盘IO与自定义模板
【zabbix教程四】——zabbix3.0监控磁盘IO与自定义模板
327 0
【zabbix教程四】——zabbix3.0监控磁盘IO与自定义模板
|
监控 Java 数据安全/隐私保护
zabbix添加自定义监控项&告警(邮件)
有的时候zabbix提供的监控项目,不能满足我们生产环境下的监控需求,此时我们就要按照zabbix的规范自定义监控项目,来达到监控的目的。
182 0
zabbix添加自定义监控项&告警(邮件)
|
监控 安全 Java
使用 Docker 安装 Zabbix,并配置自定义监控项
Zabbix 可以用来监控各种网络参数,来保证服务器和系统的安全运行。并且 Zabbix 还提供了灵活的通知机制,以此来让系统管理员快速定位/解决存在的各种问题。是一个基于 Web 界面提供的分布式系统监控以及网络监控功能的企业级开源解决方案。
827 0
使用 Docker 安装 Zabbix,并配置自定义监控项
|
监控 网络协议 网络安全
zabbix自定义TCP 11种状态监控模板(十四)
zabbix自定义TCP 11种状态监控模板 如果一直对多个主机同时增加监控项那么会非常麻烦,在实际生产中有很多时候我们都需要对一批机器同时增加多个相同的监控项,如果一个一个手动添加将会非常麻烦,因此就有了模板的诞生,我们只需要创建一个模板,让需要监控的主机链接模板即可
234 0
zabbix自定义TCP 11种状态监控模板(十四)