什么是Zabbix?
zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。(LAMP架构)
zabbix 能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
监控功能
主机的性能监控、网络设备性能监控、数据库性能监控、多种告警方式、详细的报表图表绘制;
可监控对象:
- 设备:服务器、路由器、交换机等
- 软件:OS、网络、应用程序等
- 主机性能指标监控
- 故障监控:宕机,服务器不可用,主机不可达
为什么需要对各类系统进行监控?
在系统构建时的正常流程中,通常是不允许未被监控的系统或应用上线的,因为未被监控的系统存在不可预知性、故障未知性等不稳定因素,
且无法及时被发现并排除。这对整个架构或系统来说都是很大的风险隐患。所以我们原则上是需要对整个架构或系统进行监控,
随时监测系统各方面的指标是否正常,以提高整个系统的稳定性。
Zabbix是如何实现系统监控的?
一个完整的监控系统所需指标:
1.采样:周期性的获取某个被监测指标的相关数据
2.存储:将采集到的数据存储在指定的存储系统中,Zabbix默认是MySQL
3.展示:采集完数据后,为了使数据能更直观的展现在用户面前,可将采集到的数据做二次处理,做成各类图形,Zabbix就是使用的PHP程序将采集的数据通过Web GUI直观的展示给用户。
4.报警:当监控的指标出现异常时需要监控系统能自动的发出告警信息,甚至在出现报警后能自动完成修复。
Zabbix支持的数据采集协议:
1.SNMP:(Simple Network Management Protocol),简单网络管理协议。这是一个非常古老的且通用的监控协议,
几乎任何设备都支持用此方式进行系统监控。
2.Agent:在被监控端安装专门的监控程序,将数据采集后通过Agent发送至Server。
3.IPMI:智能平台管理接口。可在常用的服务器上看到类似以太网口的接口。
4.JMX:Java Management Extensions
Zabbix的常用组件:
1.Zabbix Web GUI:提供Web界面
2.Zabbix Database:提供数据存储功能,专用于存储配置信息,以及采集到的数据
3.Zabbix Server:接收Agent采集数据的核心组件。
4.Zabbix Agent:部署在被监控主机上,用于采集本地数据。
5.Zabbix Proxy:当被监控节点较多时,用于减轻Server压力的组件,也用于分布式监控系统。由Proxy接收数据后统一发送至Server。
zabbix架构图:
Zabbix逻辑组件:
主机组(host groups):主机组通常在给用户或用户组指派监控权限时使用
主机(hosts):要监控的网络设备,可由IP或DNS名称指定
应用(application):一组item的集合(mysql,redis,nginx,等)
监控项(items):一个特定监控指标(比如mysql主从状态)的相关的数据;这些数据来自于被监控对象;item是zabbix进行数据收集的核心,相对某个监控对象,每个item都由"key"标识
触发器(triggers)一个表达式,用于评估某监控对象的特定item内接收到的数据是否在合理范围内,也就是阈值;接收的数据量大于阈值时,触发器状态将从"OK"转变为"Problem",当数据再次恢复到合理范围,又转变为"OK";
事件(events):触发一个值得关注的事情,比如触发器状态转变,新的agent或重新上线的agent的自动注册等;
动作(actions):指对于特定事件事先定义的处理方法,如发送通知,何时执行操作
媒介(media):发送通知的通道,短信,邮件等
通知(notiflcations):通过选定的媒介向用户发送的有关某事件的信息
远程命令(remote command):预定义的命令,可在被监控主机处于某特定条件下时自动执行
报警升级(escalation):发送警报或者执行远程命令的自定义方案,如每隔5分钟发送一次警报,共发送5次等
模板(template):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接链接至某个主机
Zabbix实现监控的两种模式:
简单的讲,主动模式和被动模式都是将Agent作为参照的
主动模式:由Agent主动建立TCP链接并向Server端发送请求。
被动模式:由Server建立TCP链接并向Agent端发送请求。
zabbix工作进程
默认情况下 zabbix 包含6个进程:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外一个zabbix_java_gateway是可选的,这个需要单独安装。
zabbix_agentd
客户端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘使用情况等。
zabbix_get
zabbix 工具,单独使用的命令,通常在 server 或者 proxy 端执行获取远程客户端信息的命令。通常用于排错。例如在 server 端获取不到客户端的内存数据,可以使用 zabbix_get 获取客户端的内容的方式来做故障排查。
zabbix_sender
zabbix 工具,用于发送数据给 server 或者 proxy,通常用于耗时比较长的检查。很多检查非常耗时间,导致 zabbix 超时。于是在脚本执行完毕之后,使用 sender 主动提价数据。
zabbix_server
zabbix 服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到server(说明:当然不是数据都是主动提交给zabbix_server,也有的是 server 主动去取数据)
zabbix_proxy
zabbix 代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到 server 里。
zabbix_java_gateway
zabbix2.0之后引入的一个功能。顾名思义:Java网络,类似agentd,但是只用于 Java 方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到 server 或者proxy。