分享提要

在平时的工作中,Zabbix对于运维来说是一个非常重要的工具,在马哥的课程中也有相当的体现。Zabbix的图形界面已经相当漂亮了,今天Derek老师就会带领大家一起来定制属于自己的监控页面哦!

大咖身份

Derek

国内某小型互联网运维工程师,51CTO推荐博客博主、5年linux一线经验,擅长shell脚本、python开发、自动化运维、web应用等,曾就职过国家电网、链家、新浪等知名公司与企业,现在关注自动化运维、虚拟化技术。


分享开始

大家好,我是今天的分享老师Derek,今天给大家带来的分享是zabbix与python之间不得不说的基情,想必在平时的工作中,大家用到的监控软件还是以zabbix为主吧,咱们的课程中马哥对zabbix也是花了很大的时间来介绍它的原理,安装,配置,维护等,但是不知道大家有没有觉得,zabbix的图形界面不是很漂亮,那么我们是不是可以自己来定制专属于我们自己的zabbix的监控界面那,如果你也有这样的想法,那么希望今天我分享的内容对你有一定的帮助。

今天我们首先会对zabbix进行简单的介绍,但是这里不会涉及zabbix的原理,安装,配置与维护,这些内容马哥的视频中已经讲的很清楚了,咱们为了节省时间,就不再做过多的介绍,会对zabbix-python模块进行介绍,包括模块的安装,使用,为了后面出图的方便,我们会对python的time模块进行介绍,最后我们会给大家介绍如何用咱们通过api查到的数据绘制出漂亮的图形

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

首先,我们来看一下zabbix的介绍,zabbix在官网写了这样一句话:The Enterprise-class Monitoring Solution for Everyone(所有人的企业级监控解决方案),zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供柔软的通知机制以让系统管理员快速定位/解决存在的各种问题。zabbix由2部分构成,zabbix server与可选组件zabbix agent。        

zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux, Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X等平台上。

zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。

现在最新的稳定版本是3.4.3,关于它的安装,配置等可以参考咱们的课程中的相关介绍。

介绍一下我本地的环境,我本地准备了一台机器,里面分别安装了zabbix的server和zabbix的agent客户端,后面我们所有的操作都连接这台机器进行操作, 我这里是用到的版本为3.0.8  

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

接下来我们来对zabbix的api进行简单的介绍

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

zabbix API请求和响应都是json,并且还提供了各种语法的lib库,http://zabbix.org/wiki/Docs/api/libraries,包含php、c#、Python、Perl、go等等语言,使用非常方便。

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

我们看到zabbix支持的python的模块有这么多,接下来我们开始来介绍今天的重头戏pyzabbix的使用

d3hfZm10PXBuZw==

d3hfZm10PXBuZw==

我们对pyzabbix的介绍,只挑选几个最基本的介绍,比如安装,获取zabbix的版本号,获取监控的主机组,获取某个主机组中主机,获取用户组,获取某个用户组中的用户,获取某台主机的item,获取某个item的hstory,由于时间关系,我们现在只对zabbix做获取操作,至于新增,更新,删除等操作,朋友们可以看官方文档来完成。

首先是安装,可以通过pip来进行安装,安装命令是:pip install pyzabbix

安装完成以后,第一步我们来获取一下我们的zabbix的版本号,看看和我说的是不是一样

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

我们可以看到我们的版本是3.0.8

d3hfZm10PXBuZw==

我们来看一下我们页面上的版本号,也是3.0.8,那说明我们获取的没有问题

接下来我们来获取我们的主机组,我们可以先打开zabbix的官方文档,https://www.zabbix.com/documentation/3.0/manual/api,找到Host group

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

我们可以看到我们可以对主机组有这么多的操作,我们此次只演示,hostgroup.get的操作

我们可以看到我们在进行get操作的时候可以传递很多的参数,参数的含义咱们这里就不做一一说明了,有兴趣的朋友可以看一下文档的介绍,接下来我们来获取我们系统的主机组aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

我们也可以指输出我们需要的内容,比如只输出groupid和nameaHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

获取到主机组的信息了,那么我们来获取zabbix server组里面的主机,我们也是首先找一下官方文档,看一下我们主机可以进行的操作

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

我们这里还是只做get操作,我们这里来获取一下zabbix server组里面的主机看一下aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

这里为了操作方便,我们只需要获取主机的id和主机的nameaHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

系统的用户组和用户的获取方式与主机和主机组的获取类似,为了节省时间,我们这里就不在进行一一获取,有兴趣的小伙伴可以自己尝试一下。

接下来我们来获取监控项,然后选择一个监控项来获取这个监控项的数据,首先来获取监控项,我们还是先来看一下官方文档的介绍aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

接下来我们来获取我们主机id为10084的监控项

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

我们可以看到我们一台主机的监控项还是有很多的,我们还是挑一个监控项来获取他的监控值,还是老办法,先看一下官方文档对于监控值的说明以及可以做的操作

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

监控值只能用来获取,我们这里随便选择一个item来获取一下他的监控值,我们这里选择获取机器15分钟的load3hfZm10PXBuZw==d值,它的itemsid为23295,我们来获取最后10次的值,然后根据时间来进行一下排序aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

我们可以看到我们获取到的是时间戳,可以将时间戳转换成年月日的类型,可以用到time模块,time模块的具体应用咱们这里就不具体讲了,有需要的朋友可以自己看官方文档

d3hfZm10PXBuZw==接下来我们来介绍使用erchart来绘制我们想要的图形

ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。

ECharts 3 中更是加入了更多丰富的交互功能以及更多的可视化效果,并且对移动端做了深度的优化。

ECharts 提供了常规的折线图,柱状图,散点图,饼图,K线图,用于统计的盒形图,用于地理数据可视化的地图,热力图,线图,用于关系数据可视化的关系图,treemap,多维数据可视化的平行坐标,还有用于 BI 的漏斗图,仪表盘,并且支持图与图之间的混搭。

你可以在下载界面下载包含所有图表的构建文件,如果只是需要其中一两个图表,又嫌包含所有图表的构建文件太大,也可以在在线构建中选择需要的图表类型后自定义构建

echart的官方网站是:http://echarts.baidu.com

接下来我们就用我们上面获取到的数据,来用echarts来绘制一个折线图,

假设我们获取到数据经过处理以后是这样的,接下来我们用django搭建一个简单的应用,至于django的应用,如果大家有兴趣,可以下次给朋友做一个简单的分享

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

我们来看一下前段的配置,主要看一下后端获取的变量是怎么传递到前端的

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

我们来接着看一下我们最后的出图

aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

好的,今天的分享就到这里了,谢谢大家的参与!