详解Zabbix监控系统
什么是zabbix?
Zabbix 由 Alexei Vladishev 创建,目前由其成立的公司—— Zabbix SIA 积极的持续开发更新维护, 并为用户提供技术支持服务。
Zabbix 是一个企业级分布式开源监控解决方案。
Zabbix 软件能够监控众多网络参数和服务器的健康度、完整性。Zabbix 使用灵活的告警机制,允许用户为几乎任何事件配置基于邮件的告警。这样用户可以快速响应服务器问题。Zabbix 基于存储的数据提供出色的报表和数据可视化功能。这些功能使得 Zabbix 成为容量规划的理想选择。Zabbix 支持主动轮询(polling)和被动捕获(trapping)。
Zabbix所有的报表、统计数据和配置参数都可以通过基于 Web 的前端页面进行访问。基于 Web 的前端页面确保您可以在任何地方访问您监控的网络状态和服务器健康状况。适当的配置后,Zabbix 可以在监控 IT 基础设施方面发挥重要作用。无论是对于有少量服务器的小型组织,还是拥有大量服务器的大企业而言,同样适用。
Zabbix 是免费的。Zabbix 是根据 GPL 通用公共许可证的第二版编写和发布的。这意味着产品源代码是免费发布的,可供公共使用。
zabbix的功能
Zabbix 是一个高度成熟完善的网络监控解决方案,一个的软件包中包含了多种功能。
数据采集
•可用性和性能检查;•支持 SNMP(包括主动轮询和被动捕获)、IPMI、JMX、VMware 监控;•自定义检查;•按照自定义的时间间隔采集需要的数据;•通过 Server/Proxy 和 Agents 来执行数据采集。
灵活的阈值定义
•您可以参考后端数据库定义非常灵活的告警阈值,即触发器
高度可配置化的告警
•可以根据递增计划、接收者、媒介类型自定义发送告警通知;•使用宏变量可以使告警通知变得更加高效有用;•自动操作包含远程执行命令。
实时图形
•使用内置图形功能可以将监控项实时绘制成图形。
Web 监控功能
•Zabbix可以追踪模拟鼠标在 Web 网站上的点击操作,来检查 Web 网站的功能和响应时间。
丰富的可视化选项
•可以组合多个监控项到单个视图中,创建自定义图表;•网络拓扑图;•以仪表盘样式展示自定义聚合图形和幻灯片演示;•报表;•监控资源的更高层次展示视图(业务视图)。
历史数据存储
•存储在数据库中的数据;•历史配置;•内置数据管理机制(housekeeping)。
配置简单
•将被监控设备添加为主机;•主机一旦添加到数据库中,就会采集数据用于监控;•将模板用于监控设备。
使用模板
•模板中分组检查;•模板可以关联模板,继承已关联模板的属性。
网络发现
•自动发现网络设备;•Zabbix Agent 发现设备后自动注册;•自动发现文件系统、网络接口和 SNMP OIDs 值。
快捷的 Web 界面
•基于 PHP 的 Web 前端;•可以从任何地方访问;•您可以定制自己的操作方式;•您可以通过审计日志来查看你的操作。
Zabbix API
•Zabbix API 为 Zabbix 提供可编程接口,用于批量操作、第三方软件集成和其他用途。
权限管理系统
•安全的用户身份验证;•指定的用户只能查看指定的权限范围内的视图。
功能强大且易于扩展的 Zabbix Agent
•部署于被监控对象上;•支持 Linux 和 Windows ;
二进制守护进程
•为了更好的性能和更少的内存占用,采用 C 语言编写;•便于移植。
适应更复杂的环境
•使用 Zabbix Proxy 代理,可以轻松实现分布式远程监控。
zabbix的组件
Server
Zabbix server 是 Zabbix软件的核心组件,agent 向其报告可用性、系统完整性信息和统计信息。server也是存储所有配置信息、统计信息和操作信息的核心存储库。
数据库
所有配置信息以及 Zabbix 采集到的数据都被存储在数据库中。zabbix支持的数据库有MySQL, PGSQL(postgreSQL)、Oracle、DB2、SQLite。
Web 界面
为了从任何地方和任何平台轻松访问 Zabbix ,我们提供了基于 web 的界面。该界面是 Zabbix server 的一部分,通常(但不一定)和 Zabbix server 运行在同一台物理机器上。
Proxy
Zabbix proxy 可以代替 Zabbix server采集性能和可用性数据。Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的分担单个Zabbix server的负载。
Agent
Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。
数据流
另外,为了创建一个采集数据的监控项,您就必须先创建主机。其次,在任务的另外一端,必须要有监控项才能创建触发器(trigger),必须要有触发器来创建动作(action)。因此,如果您想要收到类似“X个server上CPU负载过高”这样的告警,您必须首先为 Server X 创建一个主机条目,其次创建一个用于监控其 CPU的监控项,最后创建一个触发器,用来触发 CPU负载过高这个动作,并将其发送到您的邮箱里。虽然这些步骤看起来很繁琐,但是使用模板的话,实际操作非常简单。也正是由于这种设计,使得 Zabbix 的配置变得更加灵活易用。
zabbix优缺点
zabbix功能很强大,如何理解zabbix的功能,我们可以和cacti、nagios的功能对比一下:
cacti是一款数据采集,数据存储,外加web界面展示的工具,它负责阈值范围内的实时变化,但是对超过阈值的告警功能很薄弱
优点:实时监控数据变化,以web页面的方式呈现,更直观。
缺点:告警不及时
nagios是一款告警功能很强大的工具,它不关心阈值范围内的变化,只关心状态变化(超过阈值),然后报警。报警方式通过邮件,短信等。
优点:告警反映迅速。
缺点:监控主机数量有限,承载低
zabbix = cacti + nagios
优点:基于两款工具优点于一身并更强大,实现企业级分布式监控。
缺点:2.2版本带宽占用大但是升级到2.4版本后更节省了带宽资源,其它再无发现。
zabbix监控流程
agentd需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。这里agentd收集数据分为主动和被动两种模式:
主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
被动:server向agent请求获取监控项的数据,agent返回数据。
【主动监测】通信过程如下:
zabbix首先向ServerActive配置的IP请求获取active items,获取并提交active tiems数据值server或者proxy。很多人会提出疑问:zabbix多久获取一次active items?它会根据配置文件中的RefreshActiveChecks的频率进行,如果获取失败,那么将会在60秒之后重试。分两个部分:
获取ACTIVE ITEMS列表
•Agent打开TCP连接(主动检测变成Agent打开)•Agent请求items检测列表•Server返回items列表•Agent 处理响应•关闭TCP连接•Agent开始收集数据
主动检测提交数据过程如下:
•Agent建立TCP连接•Agent提交items列表收集的数据•Server处理数据,并返回响应状态•关闭TCP连接
【被动监测】通信过程如下:
•Server打开一个TCP连接•Server发送请求agent.ping\n•Agent接收到请求并且响应
这里,被动模式每次都需要打开一个tcp连接,这样当监控项越来越多时,就会出现server端性能问题了。
那实际监控中是用主动的还是被动的呢?这里主要涉及两个地方:
1、新建监控项目时,选择的是zabbix代理还是zabbix端点代理程式(主动式),前者是被动模式,后者是主动模式。
2、agentd配置文件中StartAgents参数的设置,如果为0,表示禁止被动模式,否则开启。一般建议不要设置为0,因为监控项目很多时,可以部分使用主动,部分使用被动模式。
zabbix常用架构
server-agentd模式:
这个是最简单的架构了,常用于监控主机比较少的情况下。
server-proxy-agentd模式:
这个常用于比较多的机器,使用proxy进行分布式监控,有效的减轻server端的压力。