Zabbix 介绍和架构
为什么需要监控
运维行业有句话:“无监控、不运维”,监控俗称“第三只眼”。没了监控,基础运维,业务运维都是“瞎子”。 所以说监控是运维职业的根本。
尤其当前 DevOps 大行其道,用监控数据给自己撑腰,这显得更加必要,有人说运维是背锅侠,那么有 了监控,就有了充足的数据,一切以数据说话
所以作为一个运维工程师,如何构建一套监控系统是你的首要工作。
监控功能
- 在需要的时刻,提前预警即将出问题,避免故障发生
- 实时监控系统和业务,当出问题之后,通过发出告警,提醒相关人员,快速可以找到问题的根源,从而及 时处理问题
- 可以实现网站,应用或者服务器的故障自愈, 保证高可用性
- 以图形或易观察的方式呈现当前以及过往的状态,便于分析和预测系统发展趋势
需要监控什么
监控一切需要监控的资源,包括:服务器,网络设备,业务应用,云服务等
| 分类 | 实例内容 |
|---|---|
| 硬件监控 | 通过远程控制卡(如 Dell 的 iDRAC、HP 的 iLO 和 IBM 的 IMM 等)使用 IPMI 来完成物理设备的监控工作。通常必须监控包括温度、硬盘故障等;还包括路由器、交换机(端口、光衰、日志)、打印机等。 |
| 系统监控 | CPU、内存、硬盘使用率、硬盘 IO、系统负载、进程数。 |
| 服务监控 | nginx、apache、php-fpm、mysql、memcache、redis、tomcat、JVM、TCP 连接数。 |
| 性能监控 | 网站性能、服务器性能、数据库性能、存储性能。 |
| 日志监控 | 系统会产生系统日志,应用程序会有应用的访问日志、错误日志,服务有运行日志等。可以使用 ELK(Elasticsearch, Logstash, Kibana)来进行日志监控。 |
| 安全监控 | 用户登录数、passwd 文件变化、本地所有文件改动。使用 Nginx+Lua 编写一个 WAF(Web 应用防火墙),通过 Kibana 可以图形化展示不同的攻击类型统计。 |
| 网络监控 | IP、端口、URL、DB、ping 包、IDC 带宽网络流量、网络流出流出速率、网络入流量、网络出流是网络使用率、SMTP、POP3。 |
监控体系
- 系统层监控
- 系统监控:CPU、Load、Memory、Swap、Disk IO、Processes、Kernel Parameters、…
- 网络监控:网络设备、工作负载、网络延迟、丢包率、…..
- 中间件及基础设施类系统监控
- Web服务容器:Tomcat和Jetty等;
- 消息中间件:Kafka、RocketMQ和RabbitMQ等
- 数据库及缓存系统: MySQL、PostgreSQL、MongoDB、ElasticSearch和Redis等;
- 数据库连接池: Mycat、ShardingSphere等
- 存储系统:NFS和Ceph等
- 应用层监控
- 用于衡量应用程序代码的状态和性能
- 通过 APM(Application Performance Monitor应用性能监控)能够提供代码级性能监控并对故障快速定位
- 业务层监控
- 用于衡量应用程序的价值,例如电子商务网站上的销售量
- QPs、DAU日活、转化率
- 业务接口:登录数、注册数、订单量、搜索量和支付量等
Zabbix 概述和架构
Zabbix 介绍
Zabbix 是一个企业级分布式开源监控解决方案,支持实时监控数干台服务器,虚拟机和网络设备,采集百万级监控指标,适用于任何IT基础架构、服务、应用程序和资源的解决方案
Zabbix SIA 公司成立于2005年, 由CEO兼所有者Alexei Vladishev 创建,Zabbix 目前由此公司积极的持续开发更新维护, 并为用户提供技术支持服务。
Zabbix 软件能够监控众多网络参数和服务器的健康度、完整性。Zabbix 使用灵活的告警机制,允许用户为几乎任何事件配置基于邮件的告警。这样用户可以快速响应服务器问题。Zabbix 基于存储的数据提供出色的报表和数据可视化功能。这些功能使得 Zabbix 成为容量规划的理想选择。
Zabbix 支持主动轮询(polling)和被动捕获(trapping)。Zabbix所有的报表、统计数据和配置参数都可以通过基于 Web 的前端页面进行访问。基于 Web 的前端页面确保您可以在任何地方访问您监控的网络状态和服务器健康状况。适当的配置后,Zabbix 可以在监控 IT 基础设施方面发挥重要作用。无论是对于有少量服务器的小型组织,还是拥有大量服务器的大企业而言,同样适用。
Zabbix 是根据 GPL 通用公共许可证的第二版编写和发布的。这意味着产品源代码是免费发布的,可供公共使用。
Zabbix公司还为全球用户提供专业的技术支持服务 。
Zabbix 功能
Zabbix 是一个高度成熟完善的网络监控解决方案,包含了多种功能。
数据采集
- 历史数据, 即记录每个监控项采集到的每个监控值
- 趋势数据, 主要保留某个监控项一个小时内历史数据的最大值、最小值和平均值以及该监控项一个小时内所采集到的数据个数
- 可用性和性能检查;
- 支持 SNMP(包括主动轮询和被动捕获)、IPMI、JMX、VMware 监控;
- 自定义检查;
- 按照自定义的时间间隔采集需要的数据;
- 通过 Server/Proxy 和 Agents 来执行数据采集
灵活的阈值定义
- 您可以参考后端数据库定义非常灵活的告警阈值,即触发器
高度可配置化的告警
- 可以根据递增计划、接收者、媒介类型自定义发送告警通知;
- 使用宏变量可以使告警通知变得更加高效有用;
- 自动操作包含远程执行命令。
实时图形
- 使用内置图形功能可以将监控项实时绘制成图形。
Web 监控功能
- Zabbix可以追踪模拟鼠标在 Web 网站上的点击操作,来检查 Web 网站的功能和响应时间
丰富的可视化选项
- 可以组合多个监控项到单个视图中,创建自定义图表;
- 网络拓扑图;
- 以仪表盘样式展示自定义聚合图形和幻灯片演示;
- 报表;
- 监控资源的更高层次展示视图(业务视图)。
历史数据存储
- 存储在数据库中的数据;
- 历史配置;
- 内置数据管理机制
配置简单
- 将被监控设备添加为主机;
- 主机一旦添加到数据库中,就会采集数据用于监控;
- 将模板用于监控设备。
使用模板
- 模板中分组检查;
- 模板可以关联模板,继承已关联模板的属性
网络发现
- 自动发现网络设备;
- Zabbix Agent 发现设备后自动注册;
- 自动发现文件系统、网络接口和 SNMP OIDs 值。
快捷的 Web 界面
- 基于 PHP 的 Web 前端;
- 可以从任何地方访问;
- 您可以定制自己的操作方式;
- 您可以通过审计日志来查看你的操作。
Zabbix API
- Zabbix API 为 Zabbix 提供可编程接口,用于批量操作、第三方软件集成和其他用途。
权限管理系统
- 安全的用户身份验证;
- 指定的用户只能查看指定的权限范围内的视图。
功能强大且易于扩展的 Zabbix Agent
- 部署于被监控对象上;
- 支持 Linux 和 Windows ;
二进制守护进程
- 为了更好的性能和更少的内存占用,采用 C 语言编写;
- 便于移植。
适应更复杂的环境
- 使用 Zabbix Proxy 代理,可以轻松实现分布式远程监控
Zabbix 架构
Zabbix 由如下主要的功能组件组成


- SERVER
- Zabbix server 是 Zabbix 软件的核心组件
- Zabbix Agent 向其报告可用性、系统完整性信息和统计信息。
- Zabbix server也是存储所有配置信息、统计信息和操作信息的核心存储库。
- Zabbix server也是Zabbix监控系统的告警中心。在监控的系统中出现任何异常,将发出通知给管理员。
- 基本的 Zabbix Server 的功能分解成为三个不同的组件。他们是:Zabbix server、Web前端和数据库。
- Zabbix 的所有配置信息都存储在 Server和Web前端进行交互的数据库中。例如,当你通过Web前端(或者API)新增一个监控项时,它会被添加到数据库的监控项表里。然后,Zabbix server 以每分钟一次的频率查询监控项表中的有效项,接着将它存储在 Zabbix server 中的缓存里。这就是为什么 Zabbix前端所做的任何更改需要花费两分钟左右才能显示在最新的数据段的原因。
- 数据库
- 所有配置信息以及 Zabbix 采集到的数据都被持久存储在数据库中
- 可以支持MySQL,PostgreSQL,Oracle 等多种数据库
- WEB 界面
- WEB 界面是 Zabbix server 的一部分,用于实现展示和配置的界面
- 通常(但不一定)和 Zabbix server 运行在同一台物理机器上
- 基于 Apache(Nginx)+PHP 实现,早期只支持LAMP架构,从Zabbix5.0开始支持LNMP
- AGENT
- Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给Zabbix server。从Zabbix5.0开始支技Zabbix Agent2
- PROXY
- Zabbix Proxy 可以代替 Zabbix Server 采集性能和可用性数据
- Zabbix Proxy 在 Zabbix 的部署是可选部分
- Zabbix Proxy 的部署可以很好的分担单个Zabbix server的负载
- Java 网关
- Zabbix 要监控 tomcat 服务器和其它JAVA程序,需要使用 Java gateway 做为代理,才能从JAVA程序中获取数据
- 内部配置的数据流程
- Zabbix 内部的数据流对Zabbix的使用也很重要。首先,为了创建一个采集数据的监控项,就必须先创建主机。其次,在任务的另外一端,必须要有监控项才能创建触发器(trigger),必须要有触发器来创建动作(action)。因此,如果您想要收到类似“X个server上CPU负载过高”这样的告警,您必须首先为 Server X 创建一个主机条目,其次创建一个用于监控其 CPU的监控项,最后创建一个触发器,用来触发 CPU负载过高这个动作,并将其发送到您的邮箱里。虽然这些步骤看起来很繁琐,但是使用模板的话,实际操作非常简单。也正是由于这种设计,使得 Zabbix 的配置变得更加灵活易用。
Zabbix Server 启动进程
zabbix server 进程说明
Zabbix服务器端进程有多达二十多种
当在操作系统下用ps aux命令来查看时,往往看到很多zabbix系统进程,而这些系统进程在zabbix内部称为实例。这些实例各处负责不同的工作,就形成了不同种类型的进程,各种类型进程的说明如下:
报警器(alerter)——该类型的进程是用来发送报警通知的
配置同步器(configuration syncer)——用于将配置文件中的配置信息同步到内存中缓存
数据发送器(data sender)——服务器代理节点用于发送数据的进程(服务器端没有这类进程)
数据库看门狗(db watchdog)——该进程用于监视zabbix系统的数据库状态,当数据库状态变为不可用时,发送警告信息(服务器代理端不支持这类型进程)。
自动发现器(discoverer)——用于自动发现设备的进程
步骤(escalator)——用于处理动作中的步骤的进程
心跳发送器(heartbeat sender)——服务器代理端用于发送心跳信息(服务器端没有这类型的进程)
历史数据同步器(history syncer)——用于写历史数据表
管家(housekeeper)——用于清理过期的历史数据的进程
HTTP 轮询器(http poller)——用于轮询web类的监控项目
Ping检查器(icmp pinger)——用于定期的进行ICMP PING检查
ipmi 轮询器(ipmi poller)——用于定期进行ipmi监控项目的检查
java 轮询器(java poller)——用于轮询java 监控项目
分布式节点看守器(node watcher)——用于在不同的分布式节点发送历史数据和配置信息更新的进程
轮询器(poller)——用于普通的被动监控项目的轮询
服务器代理轮询(proxy poller)——用于服务器代理的被动轮询
自我监控(self-monitoring)——用于收集Zabbix系统内部的监控信息
定时器(timer)——用于处理触发器中也时间相关的函数和维护模式的进程
陷入器(trapper)——用于处理主动采集、陷入以及分布式节点间或服务器代理的通信
不可到达轮询器(unreachable poller)——用于轮询不可到达到的设备
vmware 收集器(vmware collector)——负责从vmware服务进程中收集数据(服务器代理端不支持这种类型的进程);
可用的mode参数包括:
avg——指定类型所有进程的平均值
count——返回创建的指定类型进程的数量
max——最大值
min——最小值
——进程号,含义参见“描述”中所述的;
可用的state参数包括:
繁忙(busy)——表示处于繁忙状态的进程;
空闲(idle)——表示处于空闲状态的进程;
Zabbix 术语
被监控: 即 Zabbix 监控的主机或设备
监控项item:即 Zabbix 监控的相关指标,比如:CPU利用率,内存使用率,TCP连接数等
应用集Application:为方便管理众多的监控项,可将多个同类型的监控项进行归类,纳入一个集合中,即应用集
触发器Trigger:是一个表达式,或者说一个条件,如磁盘利用率超过80%等,当触发条件后,会导致一个触发事件,这个事件会执行一个或多个动作
动作Action:动作是触发器的条件被触发后的行为,可以是发送一条短信,微信或邮件,或是重启某个服务
告警:当触发器和动作二者结合起来时,就构成了的告警机制,比如cpu的使用率达到80%以上,触发了报警动作,系统将自动发送一封邮件到指定的邮箱。然后运维可以及时的去处理此错误。
Web 监测:对WEB服务进行检测,比如:访问指定网站是否可正常访问
模板 Template: 可以方便地应用于多个主机的一组实体的集合。而这些实体包括:
- items(监控项)
- applications(应用集)
- triggers(触发器)
- graphs(图形)
- screens (聚合图形,自Zabbix 2.0起)
- low-level discovery rules (自动发现规则 ,自Zabbix 2.0起)
- web scenarios (web场景, 自Zabbix 2.0起)。
由于现实中的许多主机是相同或类似的,所以,为一个主机创建的一组实体(项目,触发器,图形,…)可能对许多人有用。虽然可以将它们复制到每个新的主机上,但过程很繁琐。可以将需要的实体都复制到一个模板,然后根据需要将模板应用于尽可能多的主机。
当模板链接到主机时,模板的所有实体(项目,触发器,图形,…)都将添加到主机。
模板通常用于为特定服务或应用程序(如Apache,MySQL,PostgreSQL,Postfix …)分组实体,然后应用于运行这些服务的主机。
使用模板的另一个好处是当所有主机都需要更改时。只需要在模板上更改某些内容将会将更改应用到所有链接的主机。
创建新模板时,链接的模板选项卡允许将一个或多个“嵌套”模板链接到此模板。所有实体(项目,触发器,图表等)将从链接的模板继承。
因此,使用模板是减少工作量并简化Zabbix配置的好方法。
模板分为内置模板和自定义模板
内置模板参考: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates
Zabbix 各种组件的关系
