如何自己做Zabbix数据导出功能(下)

Zabbix是一款开源的监控工具,使用广泛。然而,它竟然不支持将监控数据导出。为此,本文尝试分析一下,应该如何去做Zabbix的数据导出功能。 

1. 首先应该搞清楚,Zabbix的监控数据都是放在哪里

2. 其次要搞清楚,有什么手段可以把这些监控数据拿出来

3. 最后,选择一种比较方便的手段来做

 

一、Zabbix的监控数据放在哪里

答案当然是放在MySQL数据库里,当然,根据用户的配置,也可能是PostgreSQL数据库等。但是表结构应该是一样的。

好吧,开始研究MySQL. 笔者的操作系统是CentOS,首先在上面装个MySQL Workbench吧。费了老大劲了!一直提示python-paramiko和python2-cypto在yum源里找不到。又懒得去找一个其他的yum源。于是最终在RPM Search的网站上找到了rpm包,download下来直接安装,解决问题了。也算一个小小的trouble shooting吧。

数据库里面最重要的几个表是:items, hosts, history, history_uint, history_str, history_text. 

介绍概念:

 

  • hosts - 就是主机
  • item - 是每一个监控项,每一个监控项是属于一个host,比如,监控cpu_utilizaiton, host-1和host-2上的cpu_utilization是两个不同的item,具有不同的itemid
  • 每个监控项所需要监控的数据的类型不同,有些是double型,有些是string型,也有些是int型
好了,如果各位使用 desc 命令去看表结构,又或者直接用select * 把数据从以上这几张表拉出来,就可以看出:
  1. 真正的监控数据是存放在history开头的几个表里的;
  2. history开头的表里有一个字段叫做itemid,它是一个数字;
  3. items表里重要的几项column如下:
    • itemid 
    • type - int,double, string等,表明将来应该去哪个history表里找这个item的历史数据
    • hostid - 表明是属于哪个host的,hostid是一个数字
    • name - 描述性语言,比如:Processor Load (15 min average per core)
    • key_  - 这个是用于将来在API里面搜索用的key值,比如system.cpu.load[percpu,avg15]
  4. hosts表里有hostid,host,和name这三个字段比较重要。其中,host和name比较接近。
 
二、如何取出监控数据?
 
由以上可以看出,我们主要的任务就是根据items表里面的描述,来把数据从history表里拉出来,就是完成任务啦。下面举个栗子,比如,我们要拿node-1这个host上的2天内的平均15分钟的CPU负载信息,应该怎么做呢?
第一步,要找出这个node-1上的cpu load average 15min 这个item的itemid到底是多少:
SELECT i.itemid, i.key_, h.host, h.hostid
FROM itmes as i join hosts as h 
WHERE i.hostid=h.hostid
AND h.host='node-1.domain.tld'
AND i.key_='system.cpu.load[percpu,avg15]';

第二步,既然找到这个itemid了,比如是24021,那么就接着去history表里面找了:
SELECT from_unixtime(clock) as DateTime, value as CPU_load_avg_15min 
FROM history
WHERE itemid=24021
AND from_unixtime(clock) >= '2017-03-15'
AND from_unixtime(clock) < '2017-03-17';
至此,任务完成。
 
三、还有什么方法可以取监控数据?
当然还有办法,最直接的就是用Zabbix API. 比如,最主要的就是关于Histroy和Items的API. 贴几个链接如下:
 
以上就是发curl命令了。有没有更简单的?也有啊。用别人封装好的库。你喜欢什么编程语言就用什么库。看如下:
1.  http://zabbix.org/wiki/Docs/api/libraries - 这是几乎所有语言库的集合
2.  https://github.com/blacked/py-zabbix - 这是其中一个Python库,笔者看了一下,似乎使用还比较方便。
 
最后的API和library的方法,笔者暂时没有时间去试了。将来如果有机会再来试验后补写笔记吧。
 
(完)
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值