分布式系统监控-Zabbix


Zabbix是一个基于Web界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。可以用来监视各种网络参数,保证服务器系统的安全运营,并提供柔软的通知机制以让系统管理员快速定位/解决存在的各种问题。

Zabbix is the ultimate open source availability and performance monitoring solution. Offer advance monitoring, alerting, and visualization features today which are missing in other monitoring system, even some of the best commercial ones.
Zabbix由两部分构成:server与可选组件agent。
Zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux、Solaris、HP-UX、AIX、FreeBSD、OpenBSD、OS X、Windows NT4.0+等平台之上;可以单独监视远程服务器的服务状态;同时也可以与zabbix agent配合,可以轮询zabbix agent主动接收监视数据(trapping方式),同时还可被动接收zabbix agent发送的数据(trapping方式)。另外zabbix server还支持SNMP (v1,v2),可以与SNMP软件(例如:net-snmp)等配合使用。
Zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。其可以运行在上述提及等操作系统之上。
主要特点:
- 安装与配置简单,学习成本低
- 支持多语言
- 免费开源
- 自动发现服务器与网络设备
- 分布式监视以及WEB集中管理功能
- 可以无agent监视
- 用户安全认证和柔软的授权方式
- 通过WEB界面设置或查看监视结果
- email等通知功能等等
主要功能:
- CPU负荷
- 内存使用
- 磁盘使用
- 网络状况
- 端口监视
- 日志监视
Zabbix 官方于2024年4月上旬宣布,Zabbix 7.0 LTS 将在 AGPLv3 协议下发布。Zabbix 是一个企业级分布式开源监控解决方案,自 2001 年以来的所有主要和次要版本均在 GPLv2 许可下发布。因此此次协议变更不影响任何旧版本(v7.0之前,但是不包含v7.0)的 Zabbix。
“随着技术领域的不断发展,我们一直在寻找一种许可解决方案,既能让我们保持开源,又能保持我们的价值观不变、增加灵活性并维持版权保护。这就是我们在 AGPLv3 下发布 Zabbix 下一个主要版本 7.0 的原因...... 我们相信,在 AGPLv3 许可证下发布 Zabbix 软件 7.0 版本是保护我们的商业利益与保持免费和开源之间的完美平衡。”
公告称此次许可证的变更不会阻止 Zabbix 用户使用 Zabbix 软件。唯一的区别是,在 AGPLv3 许可证下如果用户修改源代码并通过分发或网络提供给他人,则必须共享新的源代码。开源是 Zabbix 商业模式的核心,迁移到 AGPLv3 是确保修改其软件的任何人都可以将其提供给所有人的最佳方式。即将发布的 7.0 版本就是实施的最佳时机,可以实现一箭双雕 —— “我们可以确保没有商业实体在绕过强制性许可证要求的同时窃取我们的产品,并且我们还可以确保任何修改我们代码的人都将他们的修改向所有人公开”。下文还要对此进行详述。
架构全面介绍
监控一切需要监控的东西,只要能够想到,能够用命令实现的都能用来监控。
基础层:主要偏硬件,监控主机和底层资源。比如cpu、 内存、网络吞吐、硬盘I/O、硬盘使用等
中间层:包括nginx、Redis、MQ、MySQL、Tomcat等
应用层:HTTP访问的吞吐量、响应时间、返回码、调用链路分析、性能瓶颈,还包括用户端的监控等
日志:syslog、nginx log、mysql log等

为什么使用Zabbix?
目前开源的解决方案中,Zabbix和Prometheus是使用较多的两个方案,这两个方案的区别和优势是什么?

对于偏传统的行业,云环境较少的场景下,是比较适合于Zabbix的使用,当然Prometheus是未来发展的方向。
Zabbix是什么?
Zabbix源码主要组成:
frontends:php,主要负责前端的业务操作
Zabbix agent:采集数据
Zabbx server:同步配置,处理数据,分析告警等。

Zabbix处理流程:
主要由四部分组成:
Portal-DB-Server-Agent
详细的工作流程如下:

详细流程可查看下图:

Zabbix是怎么做的?
Zabbix Process
当添加(自动发现)一个 host,并且为 host 添加对应的模板的时候,Portal 会解析出来对应的 item, preprocess,trigger 然后放在对应的 Db 表里面。
Server 的 dbconfig_thread 会从 Db 拿到对应的数据放在共享内存中,然后poller_thread 进程读取到对应的 items,开启与 Agent 建立连接,遍历 items 从 Agent(snmp,简单检查等) 获取到对应的指标数据
然后将指标数据给 preprocessing_manager_thread 进程,preprocessing_manager_thread 进程会安排对应的preprocessing_worker 进程对数据进行 preprocess
最后由 dbsyncer_thread 进程将数据放入 Db 中,Portal 界面从 Db 拿到对应的数据信息绘制和显示
dbsyncer_thread 同步数据到DB,遍历数据 并计算 expression 表达式计算指标,最后触发 escalator_thread 和 alerter_thread 做出相应的动作
对于可监控指标,Agent 自带多种可监控指标 cmd,Agent 只能监控内置的监控指标,可以通过插件拓展 可监控指标
Zabbix Server
dbconfig_thread:配置同步到共享内存,保证所有进程都可读
poller_thread:主动监控,解析 items 调用 Agent
*trapper_thread:收集 Agent 上报上来的数据
pinger_thread:定期 ping 所有监控主机,简单检查 ICMP
*alerter_thread:告警消息处理进程从 IPC 读出需要发动的消息,发出告警
housekeeper_thread:管家进程,过期数据清理
discoverer_thread:主机、服务的自动发现
escalator_thread:根据触发器的值判断是否告警,具体执行什么动作
dbsyncer_thread:同步数据到 db,并计算触发器值也同步到db
selfmon_thread:自监控
preprocessing_worker_thread:数据预处理进程,数据从 poller 和 trapper 进程过来
Zabbix Agent
collector_thread 周期采集基础信息,主要是内存和 CPU,储存于共享内存中
listener_thread 用于接收 server 或者 proxy 分配的的采集任务,被动采采集
active_checks_thread 主动采集上报
指标类型
按进程(处理方式)划分指标类型
Poller 进程(被动)
snmp|SNMP代理检查
simple_checks|简单检查(应用层状态检查)
calculated|计算监控项
internal|Zabbix内部检查
ssh_checks|SSH检查
telnet_checks|Telnet检查
external|外部检查
aggregate|汇总检查
odbc_checks|ODBC监控
httppoller 进程(被动)
http|HTTP 检查
ipmi_poller_thread 进程(被动)
ipmi|IPMI检查
icmp pinger 进程(被动)
simple_checks|简单检查(icmp 检查)
trapper 进程(主动)
trapper|捕捉器监控项
log_items|日志文件监控
snmptrap|SNMP traps
preprocess 进程(Follow me)
dependent_items|相关项目(从属监控项)
按客户端依赖划分指标类型
无依赖
snmp|SNMP代理检查
ipmi|IPMI检查
simple_checks|简单检查
external|外部检查
odbc_checks|ODBC监控
依赖其他监控项
calculated|计算监控项
aggregate|汇总检查
依赖第三方
zabbix_agent|Zabbix代理检查 (Agent)
snmptrap|SNMP traps (snmptrap)
log_items|日志文件监控 (Agent)
ssh_checks|SSH检查 (ssh 秘钥或密码)
telnet_checks|Telnet检查 (Telnet Server和 Telnet 密码)
trapper|捕捉器监控项 (Zabbix Sender)
http|HTTP 检查 (http 接口)
IDEA
被动监控对 Zabbix Server 来说会有大的压力,从监控类型来看,Zabbix 更多的是被动监控,主动监控只有 Agent Active、SnmpTrap,Sender,但是由于 Zabbix Agent 的强大,很多场景下主动监控的指标覆盖度完全能跟被动监控相当。所以要根据具体监控场景,主动和被动互相搭配,耗时的指标更加倾向于主动监控。
Zabbix的自动发现

自动发现是伴随着指标监控来的,当发现能有采集到预设的指标时,这台主机就会被标记为可用,然后触发预设的Action,通知或者自动添加监控模板等。
自动发现分类
简单检查类
Agent 类型
snmp 类型
ICMP (ping) 类型
自动发现流程
配置 IP 段
配置自动发现指标
配置发现动作 Action
发现主机后添加 event
escalator_thread 进程处理对应的 event
Zabbix的模板结构
模板结构

从属指标

计算指标

Agent架构

Zabbix 告警数据格式:

变更授权协议为AGPLv3的相关说明
Zabbix 7.0 从 GPL v2 转为 AGPL v3 许可证,而任何旧版本的Zabbix都不受影响。此次许可证变更依然允许用户使用、修改或向他人提供特准的开源软件。但根据 AGPL 的许可,如果用户决定修改项目代码以供某方使用,则必须同时共享新的源代码(通过发行版或经由网络共享)。
1. 为什么Zabbix这样做?为什么是现在?
因为对我们来说,开源是核心,我们的商业模式就是让合作伙伴为客户提供个性化解决方案。我们决定转向AGPLv3是为了确保任何修改我们的软件的人都能公开让所有人使用。
正好7.0版本发布是个绝佳时机,一举两得:我们可以确保没有商业实体在绕过强制性许可证要求的同时窃取我们的产品,并且我们还可以确保任何修改我们代码的人都将他们的修改向所有人公开。
2. 这会影响我现有的Zabbix版本吗?
当然不会!任何旧版本的Zabbix都不受影响。
3.为什么选择AGPLv3?
自2001年以来,Zabbix所有版本都是根据GNU通用公共许可证第2.0版或更高版本(GPLv2或更高版本)发布的,这种协议被证明是强大且受人尊敬的。
但随着技术环境的发展,我们需要一种能够保持开源,又具有灵活性和版权保护的许可证。所以我们决定在下一个主要版本Zabbix 7.0中采用GNU Affero通用公共许可证第3版(AGPLv3)。
AGPL V3是一个经OSI批准的许可证,符合自由和开源软件的所有标准。AGPLv3的目的是对通过网络提供的修改版本强制执行版权许可,我们相信这将帮助我们在保持开源根源和有效版权保护之间达到合适的平衡。
4.这将如何影响Zabbix社区?
我们的社区影响着我们的受欢迎程度和我们开发的方向。他们的贡献对我们很重要,就我们而言,Zabbix软件版本7.0版采用AGPLv3发布不会对任何使用任何AGPLv3兼容许可证发布的插件、模块或小部件产生任何影响。我们的贡献者许可协议(CLA)不会以任何方式改变,您可以在此处找到其当前版本。
就模板而言,有一种看法认为应用程序编程接口(API)不受版权保护。然而,如果模板的开发者认为模板受版权保护,建议他们将模板发布为任何符合AGPLv3的宽松或强制性开源软件许可证(例如,3-clause BSD, MIT, Apache license 2.0, LGPLv3, GPLv3, or AGPLv3)。
5. 这将如何影响Zabbix本身(产品)?
不会。这一变化不会阻止Zabbix用户使用Zabbix软件。唯一的区别是,在AGPLv3许可下,用户必须在修改并向他人提供(通过分发或通过网络)时共享源代码。对于分发者来说,AGPLv3具有与其他强制性版权许可证相同的源代码共享要求,包括GPLv2或更高版本。
6. 结论
在Zabbix,我们认为知识应该是共享的,这也是我们一直秉持开放、透明和合作的价值观,并且我们很自豪地建立了一个繁荣的社区,所以我们大力支持开源运动。我们的目标一直都是能让数百万人获得我们的解决方案,同时保持我们的产品不断发展。
我们感谢那些热爱Zabbix并且不希望看到其任何变化的用户。我们相信,将Zabbix 7.0版本发布为AGPLv3许可证是保护我们的商业利益,同时保持自由和开源的完美平衡。
2024年4月正式宣布终止与广东乐维软件有限公司一切合作关系的严正声明
尊敬的 Zabbix 用户及合作伙伴:
Zabbix SIA,注册号:40003738045,注册地址:拉脱维亚里加 Dzelzavas 街 117 号,LV-1021(以下简称 “Zabbix”),是一家独立软件供应商,开发 Zabbix 监控解决方案软件(以下简称 “Zabbix 软件”),该软件作为开源软件分发,根据 https://www.zabbix.com/license 中所述的开源软件许可证进行许可。
Zabbix 向您通告一个重要的声明:Zabbix 已经于 2023 年 5 月 23 日与广东乐维软件有限公司(曾用名:广州九一乐维信息科技有限公司,以下简称 “乐维”)终止合作伙伴协议(以下称 “原协议”)。乐维不再是 Zabbix 合作伙伴,且 Zabbix 不再与乐维产生任何合作关系,其提供的服务不被 Zabbix 认可,不具有任何 Zabbix 的保障!
就乐维严重违反 Zabbix 合作伙伴准则的多项行为,声明如下:
1. 乐维声称其拥有 “Zabbix 企业版”(但 Zabbix 从未发行过 Zabbix 企业版),涉嫌混淆概念、虚假宣传,严重违背了 Zabbix 开源的实质,对 Zabbix 的品牌声誉造成了不可估量的严重损害,对所有的 Zabbix 用户存在严重的欺瞒。Zabbix 软件自诞生 25 年以来,一直秉承完全开源完全免费的思想,有其仅有一个开源版本,不存在 “企业版”、“商业版” 或 “收费版”,也不允许任何组织或个人基于 Zabbix 软件源代码开发其收费版本。
2. 乐维创始人丁某某在宣传中多次使用 “中国 Zabbix 第一人” 的用语,具有故意误导及夸大性质。Zabbix 从未授权任何个人以 Zabbix 的名义或使用 Zabbix 的称号进行宣传。坚决反对自称 “中国 Zabbix 第一人” 的不实陈述。另外,“第一” 的字眼具有夸大性质,未经授权使用 “Zabbix” 名称进行宣传具有误导性质,可能构成《反不正当竞争法》下的虚假宣传,Zabbix 保留采取任何维权手段的权利。
乐维的以上行为严重违反了 Zabbix 合作伙伴协议,毫无契约精神。严重伤害了用户的知情权和使用正版软件的权益,损害了合作关系的诚信和透明度,对 Zabbix 品牌声誉造成了不可挽回的损害,损害了 Zabbix 和大中华区其他 Zabbix 合作伙伴的正当权益。
Zabbix 拥有完善的服务体系和合作伙伴机制,Zabbix 用户可以得到强有力的支持和保障,提高工具使用效率,进而提升组织工作效率。未经有效书面授权的厂商不具备提供 Zabbix 服务的资质,同时所谓的 “Zabbix 企业版” 可能会在一定程度上会损坏原生 Zabbix 的功能,对用户的系统、数据安全造成不可控的风险。同时我们保留追究对所谓的 “Zabbix 企业版” 及其系列软件可能造成的侵权行为的权利,并告诫用户,侵权软件会随时面临被勒令停用的风险。
Zabbix 将继续致力于维护 Zabbix 品牌声誉和用户利益,同时与合作伙伴保持密切的沟通和合作,确保合作伙伴的权利和义务都能得到履行。最后我们呼吁广大 Zabbix 用户警惕乐维的行为,务必选择有保障的产品和服务。
最新版本:3.0
zabbix 3.0 正式版发布,这是一个LTS (长期支持版),超过50项新特性以及诸多改进,新特性包括:
重新设计的web界面
守护进程通信加密和认证
预测与趋势预测
进程级CPU利用率监测
性能的提升
支持多进程时间升级
windows服务发现
smtp认证支持
最新版本:6.0
Zabbix 6.0 LTS 于2022年2月15日发布,为业务服务提供商、DevOps和ITOps团队提供了附加值,优化了整体监控工作流程,并在许多不同层面提供了新见解。Zabbix不断升级以满足日益增长的用户需求,有哪些值得关注的新功能?来一睹为快!
目录
业务服务监控达到全新高度
高阶业务服务SLA计算逻辑
通过根因分析增强业务服务监控能力
开箱即用的Zabbix server高可用群集
机器学习
Kubernetes监控
详细高效的Zabbix审计日志模式
可视化数据的新方法
Zabbix性能优化
提升Zabbix Agent2模块化,新的Zabbix Agent 监控项和功能
原生TLS/SSL网站证书监控
通用性改进
通过自定义密码复杂程度要求来保护您的Zabbix登录
支持定制前端展示品牌logo
新增模板和集成
其它新功能和优化
01、BMS业务服务监控达到全新高度
优化Services部分,显示业务服务的状态和当前SLA级别,通过对现有Services页面和功能的重大改进和优化,业务服务监控提升到了一个新高度。业务服务监控功能(BSM)非常适合多组件服务场景,例如服务器群集、负载平衡器和其它具有冗余组件的服务。
6.0提供多种功能自定义业务服务树实现BMS业务服务监控:
• 重新设计 Zabbix 6.0 Services页面和功能
• 支持单个Zabbix实例监控超过10万个业务服务
• 支持新的灵活服务状态计算逻辑
• 能够自定义业务服务的访问权限
• 能够为特定业务服务自定义只读和读写权限
• 业务服务权限既可以基于显式服务列表,也可以基于服务标签的访问限制
• 导出和导入业务服务树
• 新的Service动作类型能让用户接收告警并对业务服务状态更改作出反应
02、高阶业务服务SLA计算逻辑
提供大量可供选择的服务状态计算规则,能支持灵活的服务定义,业务服务状态计算逻辑在Zabbix 6.0中得到了极大扩展,增加了许多新功能,例如:
• 能够为每项业务服务分配权重
• 仅当N个子服务都处于X严重级别的问题状态时才更改状态
• 对处于问题状态下的子服务的权重进行分析并作出反应
• 仅当特定百分比的子服务处于问题状态时才作出反应
• 其它计算规则
用户还可以自定义和访问指定服务的SLA报告。
03、通过根因分析增强业务服务监控能力
根因问题会立即显示在service下对业务服务执行根因分析。利用根因分析功能找出可能导致业务服务SLA下降的潜在问题列表:
• 在Zabbix前端Services页面查看根因问题列表
• 接收告警中的根因问题列表
• 通过Zabbix API收集根因问题信息
04、开箱即用的Zabbix server高可用群集
在系统信息组件中跟踪集群集节点状态,Zabbix server高可用防止硬件故障或计划维护期的停机:
• 原生选择加入HA群集配置
• 定义一个或多个备用节点
• 实时监控Zabbix server群集节点的状态
• 不需要外部工具即可将Zabbix server配置为HA群集模式
05、机器学习
使用新函数对意外异常率或与指标基准的偏差做出反应,新的基线监控和异常检测趋势功能以动态方式检测问题,而不是静态阈值方式:
• 新的趋势函数-baselinewma and baselinedev ,能计算指标基线和偏离值
• 新的趋势函数-trendstl,能检测异常指标行为
• 能够指定异常检测偏差算法及季节性
06、Kubernetes监控
Zabbix 6.0 LTS添加了多个新模板,用于监控不同的Kubernetes组件,新增Kubernetes监控功能,可以在Kubernetes系统从多个维度采集指标:
• Kubernetes节点和pods的自动发现和监控
• 无代理方式采集Kubernetes pods和节点的信息
• 获取Kubernetes节点主机高水平信息
Kubernetes监控还能够监控Kubernetes组件,例如
• kube-controller-manager
• kube-proxy
• kube-apiserver
• kube-scheduler
• kubelet
07、详细高效的Zabbix审计日志模式
重新设计的审计日志能提供全新的详细信息,并优化筛选功能。新的审计日志模式允许用户对Zabbix前端、Zabbix API和Zabbix server记录执行详细审计。通过修改审计日志,对Zabbix实例执行的所有更改都将记录在审计日志中:
• 创建、修改或删除新对象
• 通过LLD发现新实体
• API命令
• 定期登录/退出
• Zabbix实例中发生的所有其它事情
新的审计日志模式在设计时考虑了最佳性能,因此扩展的功能不会影响Zabbix实例的性能。审计日志模式的工作是一项持续的工作,会在后续Zabbix发布周期中持续进行。
08、可视化数据的新方法
主机排序组件可显示按监控项值排序的前N个或后N个主机的列表,Zabbix 6.0新增的构件提供了展示信息的许多新方法:
• 地理地图构件能在地图上显示主机和问题
• 数据表构件能创建有关主机指标状态的摘要视图
• 数据表构件的前N和后N函数能展示最高或最低的监控项值
• 单一监控项构件能展示单个指标的值
• 对现有矢量图的许多改进,例如新的矢量图类型、引用单一监控项等
• SLA构件能显示特定业务服务的当前SLA
09、Zabbix性能优化
针对不同的Zabbix组件进行多项性能优化:
• 提升链接模板时的性能
• 提升Zabbix proxy性能和内存使用率
历史数据表使用主键,这有多种好处,例如:
• 提高Zabbix server和Zabbix前端的性能
• 减少历史数据表的大小
10、提升Zabbix Agent2模块化,新的Zabbix Agent 监控项和功能,优化的Zabbix agent现在能够开箱即用监控一组指标,Zabbix 6.0为Zabbix Agent和Agent2提供了一套新的监控项。支持以下功能:
• 获取额外文件信息,如文件所有者和文件权限
• 采集agent主机元数据作为指标
• 计数匹配的TCP/UDP sockets
某些已有的监控项支持新的功能:
• vfs.fs.discovery-在Windows上添加了对{#FSLABEL}宏的支持
• vfs.fs.get-在Windows上添加了对{#FSLABEL}宏的支持
• vfs.file.size-添加了一个新的模式参数。设置以字节数或行数为单位
Zabbix Agent2现在支持加载独立插件,而无需重新编译Agent2。
11、原生TLS/SSL网站证书监控
使用新的Zabbix agent2 监控项监控SSL/TLS证书,支持使用新的Zabbix agent 2监控项来监控SSL/TLS证书。监控项可用于验证TLS/SSL证书,并提供其它证书详细信息。
12、通用性改进
通过优化的创建主机UI,使创建新主机从未如此简单,Zabbix 6.0使Zabbix配置工作流程更精简!Zabbix用户现在可直接在Monitoring页面创建主机和监控项:
• 直接从Monitoring -Hosts页面创建主机
• 直接从Monitoring -Latest data页面创建监控项
• 删除了Monitoring -Overview页面。为了改善用户体验,现在只能通过仪表盘构件访问触发器和数据概览功能。
现在将根据监控项的键值自动选择监控项的默认信息类型。拓扑图标签和图形名称中的简单宏已替换为表达式宏,以确保与新的触发器表达式语法一致。
13、通过自定义密码复杂程度要求来保护您的Zabbix登录
设置密码复杂程度确保前端登录安全,Zabbix超级管理员现在能够定义密码复杂程度要求。现在可以:
• 设置最小密码长度
• 定义密码字符要求
• 通过禁止使用最常见的密码字符串来降低字典攻击的风险。
14、支持定制前端展示品牌logo
定制Zabbix实例代表您的公司。将现有的Zabbix品牌和帮助页面URL替换为您自己的公司品牌和自定义网站URL。改名功能不会违反Zabbix许可协议-可以自由更换Zabbix品牌!
15、新增模板和集成
Zabbix 6.0为最受欢迎的供应商提供了许多新模板:
• f5 BIG-IP
• Cisco ASAv
• HPE ProLiant servers
• Cloudflare
• InfluxDB
• Travis CI
• Dell PowerEdge
Zabbix 6.0还带来了一个新的Github webhook集成,能基于Zabbix问题或恢复事件生成Github问题!所有官方的Zabbix模板现在都是独立的,不需要依赖导入其他模板。请查看当前可用集成的完整列表。
16、其它新功能和优化
更多改进功能(部分):
• 使用新聚合函数计数返回值或匹配监控项的数量-count和item_count函数
• 在未配置交换空间的情况下提升system.swap监控项行为
• 使用新的单调历史函数检测连续增加或减少的值
• 支持两个新的Prometheus预处理标签匹配运算符!= 及 !~
• 当从构件链接导航到列表样式页面时,构件显示能更可靠地转换为不同的筛选器选项
• 使用新配置参数ListenBacklog为Zabbix server、Zabbix proxy、Zabbix agent配置TCP队列中挂起连接的最大数量
• 文档页面字体和可读性的改进
• 调整许多现有模板和修复小bug
• 新增utf8mb4作为受支持的MySQL字符集和校对集
• 新增对Webhook的额外HTTP方法的支持
• 对Zabbix命令行工具的超时设置
想了解更多,欢迎查看官网说明升级体验。
官方主页:http://www.zabbix.com/

Zabbix is the ultimate open source availability and performance monitoring solution. Offer advance monitoring, alerting, and visualization features today which are missing in other monitoring system, even some of the best commercial ones.
Zabbix由两部分构成:server与可选组件agent。
Zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux、Solaris、HP-UX、AIX、FreeBSD、OpenBSD、OS X、Windows NT4.0+等平台之上;可以单独监视远程服务器的服务状态;同时也可以与zabbix agent配合,可以轮询zabbix agent主动接收监视数据(trapping方式),同时还可被动接收zabbix agent发送的数据(trapping方式)。另外zabbix server还支持SNMP (v1,v2),可以与SNMP软件(例如:net-snmp)等配合使用。
Zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。其可以运行在上述提及等操作系统之上。
主要特点:
- 安装与配置简单,学习成本低
- 支持多语言
- 免费开源
- 自动发现服务器与网络设备
- 分布式监视以及WEB集中管理功能
- 可以无agent监视
- 用户安全认证和柔软的授权方式
- 通过WEB界面设置或查看监视结果
- email等通知功能等等
主要功能:
- CPU负荷
- 内存使用
- 磁盘使用
- 网络状况
- 端口监视
- 日志监视
Zabbix 官方于2024年4月上旬宣布,Zabbix 7.0 LTS 将在 AGPLv3 协议下发布。Zabbix 是一个企业级分布式开源监控解决方案,自 2001 年以来的所有主要和次要版本均在 GPLv2 许可下发布。因此此次协议变更不影响任何旧版本(v7.0之前,但是不包含v7.0)的 Zabbix。
“随着技术领域的不断发展,我们一直在寻找一种许可解决方案,既能让我们保持开源,又能保持我们的价值观不变、增加灵活性并维持版权保护。这就是我们在 AGPLv3 下发布 Zabbix 下一个主要版本 7.0 的原因...... 我们相信,在 AGPLv3 许可证下发布 Zabbix 软件 7.0 版本是保护我们的商业利益与保持免费和开源之间的完美平衡。”
公告称此次许可证的变更不会阻止 Zabbix 用户使用 Zabbix 软件。唯一的区别是,在 AGPLv3 许可证下如果用户修改源代码并通过分发或网络提供给他人,则必须共享新的源代码。开源是 Zabbix 商业模式的核心,迁移到 AGPLv3 是确保修改其软件的任何人都可以将其提供给所有人的最佳方式。即将发布的 7.0 版本就是实施的最佳时机,可以实现一箭双雕 —— “我们可以确保没有商业实体在绕过强制性许可证要求的同时窃取我们的产品,并且我们还可以确保任何修改我们代码的人都将他们的修改向所有人公开”。下文还要对此进行详述。
架构全面介绍
监控一切需要监控的东西,只要能够想到,能够用命令实现的都能用来监控。
基础层:主要偏硬件,监控主机和底层资源。比如cpu、 内存、网络吞吐、硬盘I/O、硬盘使用等
中间层:包括nginx、Redis、MQ、MySQL、Tomcat等
应用层:HTTP访问的吞吐量、响应时间、返回码、调用链路分析、性能瓶颈,还包括用户端的监控等
日志:syslog、nginx log、mysql log等

为什么使用Zabbix?
目前开源的解决方案中,Zabbix和Prometheus是使用较多的两个方案,这两个方案的区别和优势是什么?

对于偏传统的行业,云环境较少的场景下,是比较适合于Zabbix的使用,当然Prometheus是未来发展的方向。
Zabbix是什么?
Zabbix源码主要组成:
frontends:php,主要负责前端的业务操作
Zabbix agent:采集数据
Zabbx server:同步配置,处理数据,分析告警等。

Zabbix处理流程:
主要由四部分组成:
Portal-DB-Server-Agent
详细的工作流程如下:

详细流程可查看下图:

Zabbix是怎么做的?
Zabbix Process
当添加(自动发现)一个 host,并且为 host 添加对应的模板的时候,Portal 会解析出来对应的 item, preprocess,trigger 然后放在对应的 Db 表里面。
Server 的 dbconfig_thread 会从 Db 拿到对应的数据放在共享内存中,然后poller_thread 进程读取到对应的 items,开启与 Agent 建立连接,遍历 items 从 Agent(snmp,简单检查等) 获取到对应的指标数据
然后将指标数据给 preprocessing_manager_thread 进程,preprocessing_manager_thread 进程会安排对应的preprocessing_worker 进程对数据进行 preprocess
最后由 dbsyncer_thread 进程将数据放入 Db 中,Portal 界面从 Db 拿到对应的数据信息绘制和显示
dbsyncer_thread 同步数据到DB,遍历数据 并计算 expression 表达式计算指标,最后触发 escalator_thread 和 alerter_thread 做出相应的动作
对于可监控指标,Agent 自带多种可监控指标 cmd,Agent 只能监控内置的监控指标,可以通过插件拓展 可监控指标
Zabbix Server
dbconfig_thread:配置同步到共享内存,保证所有进程都可读
poller_thread:主动监控,解析 items 调用 Agent
*trapper_thread:收集 Agent 上报上来的数据
pinger_thread:定期 ping 所有监控主机,简单检查 ICMP
*alerter_thread:告警消息处理进程从 IPC 读出需要发动的消息,发出告警
housekeeper_thread:管家进程,过期数据清理
discoverer_thread:主机、服务的自动发现
escalator_thread:根据触发器的值判断是否告警,具体执行什么动作
dbsyncer_thread:同步数据到 db,并计算触发器值也同步到db
selfmon_thread:自监控
preprocessing_worker_thread:数据预处理进程,数据从 poller 和 trapper 进程过来
Zabbix Agent
collector_thread 周期采集基础信息,主要是内存和 CPU,储存于共享内存中
listener_thread 用于接收 server 或者 proxy 分配的的采集任务,被动采采集
active_checks_thread 主动采集上报
指标类型
按进程(处理方式)划分指标类型
Poller 进程(被动)
snmp|SNMP代理检查
simple_checks|简单检查(应用层状态检查)
calculated|计算监控项
internal|Zabbix内部检查
ssh_checks|SSH检查
telnet_checks|Telnet检查
external|外部检查
aggregate|汇总检查
odbc_checks|ODBC监控
httppoller 进程(被动)
http|HTTP 检查
ipmi_poller_thread 进程(被动)
ipmi|IPMI检查
icmp pinger 进程(被动)
simple_checks|简单检查(icmp 检查)
trapper 进程(主动)
trapper|捕捉器监控项
log_items|日志文件监控
snmptrap|SNMP traps
preprocess 进程(Follow me)
dependent_items|相关项目(从属监控项)
按客户端依赖划分指标类型
无依赖
snmp|SNMP代理检查
ipmi|IPMI检查
simple_checks|简单检查
external|外部检查
odbc_checks|ODBC监控
依赖其他监控项
calculated|计算监控项
aggregate|汇总检查
依赖第三方
zabbix_agent|Zabbix代理检查 (Agent)
snmptrap|SNMP traps (snmptrap)
log_items|日志文件监控 (Agent)
ssh_checks|SSH检查 (ssh 秘钥或密码)
telnet_checks|Telnet检查 (Telnet Server和 Telnet 密码)
trapper|捕捉器监控项 (Zabbix Sender)
http|HTTP 检查 (http 接口)
IDEA
被动监控对 Zabbix Server 来说会有大的压力,从监控类型来看,Zabbix 更多的是被动监控,主动监控只有 Agent Active、SnmpTrap,Sender,但是由于 Zabbix Agent 的强大,很多场景下主动监控的指标覆盖度完全能跟被动监控相当。所以要根据具体监控场景,主动和被动互相搭配,耗时的指标更加倾向于主动监控。
Zabbix的自动发现

自动发现是伴随着指标监控来的,当发现能有采集到预设的指标时,这台主机就会被标记为可用,然后触发预设的Action,通知或者自动添加监控模板等。
自动发现分类
简单检查类
Agent 类型
snmp 类型
ICMP (ping) 类型
自动发现流程
配置 IP 段
配置自动发现指标
配置发现动作 Action
发现主机后添加 event
escalator_thread 进程处理对应的 event
Zabbix的模板结构
模板结构

从属指标

计算指标

Agent架构

Zabbix 告警数据格式:

变更授权协议为AGPLv3的相关说明
Zabbix 7.0 从 GPL v2 转为 AGPL v3 许可证,而任何旧版本的Zabbix都不受影响。此次许可证变更依然允许用户使用、修改或向他人提供特准的开源软件。但根据 AGPL 的许可,如果用户决定修改项目代码以供某方使用,则必须同时共享新的源代码(通过发行版或经由网络共享)。
1. 为什么Zabbix这样做?为什么是现在?
因为对我们来说,开源是核心,我们的商业模式就是让合作伙伴为客户提供个性化解决方案。我们决定转向AGPLv3是为了确保任何修改我们的软件的人都能公开让所有人使用。
正好7.0版本发布是个绝佳时机,一举两得:我们可以确保没有商业实体在绕过强制性许可证要求的同时窃取我们的产品,并且我们还可以确保任何修改我们代码的人都将他们的修改向所有人公开。
2. 这会影响我现有的Zabbix版本吗?
当然不会!任何旧版本的Zabbix都不受影响。
3.为什么选择AGPLv3?
自2001年以来,Zabbix所有版本都是根据GNU通用公共许可证第2.0版或更高版本(GPLv2或更高版本)发布的,这种协议被证明是强大且受人尊敬的。
但随着技术环境的发展,我们需要一种能够保持开源,又具有灵活性和版权保护的许可证。所以我们决定在下一个主要版本Zabbix 7.0中采用GNU Affero通用公共许可证第3版(AGPLv3)。
AGPL V3是一个经OSI批准的许可证,符合自由和开源软件的所有标准。AGPLv3的目的是对通过网络提供的修改版本强制执行版权许可,我们相信这将帮助我们在保持开源根源和有效版权保护之间达到合适的平衡。
4.这将如何影响Zabbix社区?
我们的社区影响着我们的受欢迎程度和我们开发的方向。他们的贡献对我们很重要,就我们而言,Zabbix软件版本7.0版采用AGPLv3发布不会对任何使用任何AGPLv3兼容许可证发布的插件、模块或小部件产生任何影响。我们的贡献者许可协议(CLA)不会以任何方式改变,您可以在此处找到其当前版本。
就模板而言,有一种看法认为应用程序编程接口(API)不受版权保护。然而,如果模板的开发者认为模板受版权保护,建议他们将模板发布为任何符合AGPLv3的宽松或强制性开源软件许可证(例如,3-clause BSD, MIT, Apache license 2.0, LGPLv3, GPLv3, or AGPLv3)。
5. 这将如何影响Zabbix本身(产品)?
不会。这一变化不会阻止Zabbix用户使用Zabbix软件。唯一的区别是,在AGPLv3许可下,用户必须在修改并向他人提供(通过分发或通过网络)时共享源代码。对于分发者来说,AGPLv3具有与其他强制性版权许可证相同的源代码共享要求,包括GPLv2或更高版本。
6. 结论
在Zabbix,我们认为知识应该是共享的,这也是我们一直秉持开放、透明和合作的价值观,并且我们很自豪地建立了一个繁荣的社区,所以我们大力支持开源运动。我们的目标一直都是能让数百万人获得我们的解决方案,同时保持我们的产品不断发展。
我们感谢那些热爱Zabbix并且不希望看到其任何变化的用户。我们相信,将Zabbix 7.0版本发布为AGPLv3许可证是保护我们的商业利益,同时保持自由和开源的完美平衡。
2024年4月正式宣布终止与广东乐维软件有限公司一切合作关系的严正声明
尊敬的 Zabbix 用户及合作伙伴:
Zabbix SIA,注册号:40003738045,注册地址:拉脱维亚里加 Dzelzavas 街 117 号,LV-1021(以下简称 “Zabbix”),是一家独立软件供应商,开发 Zabbix 监控解决方案软件(以下简称 “Zabbix 软件”),该软件作为开源软件分发,根据 https://www.zabbix.com/license 中所述的开源软件许可证进行许可。
Zabbix 向您通告一个重要的声明:Zabbix 已经于 2023 年 5 月 23 日与广东乐维软件有限公司(曾用名:广州九一乐维信息科技有限公司,以下简称 “乐维”)终止合作伙伴协议(以下称 “原协议”)。乐维不再是 Zabbix 合作伙伴,且 Zabbix 不再与乐维产生任何合作关系,其提供的服务不被 Zabbix 认可,不具有任何 Zabbix 的保障!
就乐维严重违反 Zabbix 合作伙伴准则的多项行为,声明如下:
1. 乐维声称其拥有 “Zabbix 企业版”(但 Zabbix 从未发行过 Zabbix 企业版),涉嫌混淆概念、虚假宣传,严重违背了 Zabbix 开源的实质,对 Zabbix 的品牌声誉造成了不可估量的严重损害,对所有的 Zabbix 用户存在严重的欺瞒。Zabbix 软件自诞生 25 年以来,一直秉承完全开源完全免费的思想,有其仅有一个开源版本,不存在 “企业版”、“商业版” 或 “收费版”,也不允许任何组织或个人基于 Zabbix 软件源代码开发其收费版本。
2. 乐维创始人丁某某在宣传中多次使用 “中国 Zabbix 第一人” 的用语,具有故意误导及夸大性质。Zabbix 从未授权任何个人以 Zabbix 的名义或使用 Zabbix 的称号进行宣传。坚决反对自称 “中国 Zabbix 第一人” 的不实陈述。另外,“第一” 的字眼具有夸大性质,未经授权使用 “Zabbix” 名称进行宣传具有误导性质,可能构成《反不正当竞争法》下的虚假宣传,Zabbix 保留采取任何维权手段的权利。
乐维的以上行为严重违反了 Zabbix 合作伙伴协议,毫无契约精神。严重伤害了用户的知情权和使用正版软件的权益,损害了合作关系的诚信和透明度,对 Zabbix 品牌声誉造成了不可挽回的损害,损害了 Zabbix 和大中华区其他 Zabbix 合作伙伴的正当权益。
Zabbix 拥有完善的服务体系和合作伙伴机制,Zabbix 用户可以得到强有力的支持和保障,提高工具使用效率,进而提升组织工作效率。未经有效书面授权的厂商不具备提供 Zabbix 服务的资质,同时所谓的 “Zabbix 企业版” 可能会在一定程度上会损坏原生 Zabbix 的功能,对用户的系统、数据安全造成不可控的风险。同时我们保留追究对所谓的 “Zabbix 企业版” 及其系列软件可能造成的侵权行为的权利,并告诫用户,侵权软件会随时面临被勒令停用的风险。
Zabbix 将继续致力于维护 Zabbix 品牌声誉和用户利益,同时与合作伙伴保持密切的沟通和合作,确保合作伙伴的权利和义务都能得到履行。最后我们呼吁广大 Zabbix 用户警惕乐维的行为,务必选择有保障的产品和服务。
最新版本:3.0
zabbix 3.0 正式版发布,这是一个LTS (长期支持版),超过50项新特性以及诸多改进,新特性包括:
重新设计的web界面
守护进程通信加密和认证
预测与趋势预测
进程级CPU利用率监测
性能的提升
支持多进程时间升级
windows服务发现
smtp认证支持
最新版本:6.0
Zabbix 6.0 LTS 于2022年2月15日发布,为业务服务提供商、DevOps和ITOps团队提供了附加值,优化了整体监控工作流程,并在许多不同层面提供了新见解。Zabbix不断升级以满足日益增长的用户需求,有哪些值得关注的新功能?来一睹为快!
目录
业务服务监控达到全新高度
高阶业务服务SLA计算逻辑
通过根因分析增强业务服务监控能力
开箱即用的Zabbix server高可用群集
机器学习
Kubernetes监控
详细高效的Zabbix审计日志模式
可视化数据的新方法
Zabbix性能优化
提升Zabbix Agent2模块化,新的Zabbix Agent 监控项和功能
原生TLS/SSL网站证书监控
通用性改进
通过自定义密码复杂程度要求来保护您的Zabbix登录
支持定制前端展示品牌logo
新增模板和集成
其它新功能和优化
01、BMS业务服务监控达到全新高度
优化Services部分,显示业务服务的状态和当前SLA级别,通过对现有Services页面和功能的重大改进和优化,业务服务监控提升到了一个新高度。业务服务监控功能(BSM)非常适合多组件服务场景,例如服务器群集、负载平衡器和其它具有冗余组件的服务。
6.0提供多种功能自定义业务服务树实现BMS业务服务监控:
• 重新设计 Zabbix 6.0 Services页面和功能
• 支持单个Zabbix实例监控超过10万个业务服务
• 支持新的灵活服务状态计算逻辑
• 能够自定义业务服务的访问权限
• 能够为特定业务服务自定义只读和读写权限
• 业务服务权限既可以基于显式服务列表,也可以基于服务标签的访问限制
• 导出和导入业务服务树
• 新的Service动作类型能让用户接收告警并对业务服务状态更改作出反应
02、高阶业务服务SLA计算逻辑
提供大量可供选择的服务状态计算规则,能支持灵活的服务定义,业务服务状态计算逻辑在Zabbix 6.0中得到了极大扩展,增加了许多新功能,例如:
• 能够为每项业务服务分配权重
• 仅当N个子服务都处于X严重级别的问题状态时才更改状态
• 对处于问题状态下的子服务的权重进行分析并作出反应
• 仅当特定百分比的子服务处于问题状态时才作出反应
• 其它计算规则
用户还可以自定义和访问指定服务的SLA报告。
03、通过根因分析增强业务服务监控能力
根因问题会立即显示在service下对业务服务执行根因分析。利用根因分析功能找出可能导致业务服务SLA下降的潜在问题列表:
• 在Zabbix前端Services页面查看根因问题列表
• 接收告警中的根因问题列表
• 通过Zabbix API收集根因问题信息
04、开箱即用的Zabbix server高可用群集
在系统信息组件中跟踪集群集节点状态,Zabbix server高可用防止硬件故障或计划维护期的停机:
• 原生选择加入HA群集配置
• 定义一个或多个备用节点
• 实时监控Zabbix server群集节点的状态
• 不需要外部工具即可将Zabbix server配置为HA群集模式
05、机器学习
使用新函数对意外异常率或与指标基准的偏差做出反应,新的基线监控和异常检测趋势功能以动态方式检测问题,而不是静态阈值方式:
• 新的趋势函数-baselinewma and baselinedev ,能计算指标基线和偏离值
• 新的趋势函数-trendstl,能检测异常指标行为
• 能够指定异常检测偏差算法及季节性
06、Kubernetes监控
Zabbix 6.0 LTS添加了多个新模板,用于监控不同的Kubernetes组件,新增Kubernetes监控功能,可以在Kubernetes系统从多个维度采集指标:
• Kubernetes节点和pods的自动发现和监控
• 无代理方式采集Kubernetes pods和节点的信息
• 获取Kubernetes节点主机高水平信息
Kubernetes监控还能够监控Kubernetes组件,例如
• kube-controller-manager
• kube-proxy
• kube-apiserver
• kube-scheduler
• kubelet
07、详细高效的Zabbix审计日志模式
重新设计的审计日志能提供全新的详细信息,并优化筛选功能。新的审计日志模式允许用户对Zabbix前端、Zabbix API和Zabbix server记录执行详细审计。通过修改审计日志,对Zabbix实例执行的所有更改都将记录在审计日志中:
• 创建、修改或删除新对象
• 通过LLD发现新实体
• API命令
• 定期登录/退出
• Zabbix实例中发生的所有其它事情
新的审计日志模式在设计时考虑了最佳性能,因此扩展的功能不会影响Zabbix实例的性能。审计日志模式的工作是一项持续的工作,会在后续Zabbix发布周期中持续进行。
08、可视化数据的新方法
主机排序组件可显示按监控项值排序的前N个或后N个主机的列表,Zabbix 6.0新增的构件提供了展示信息的许多新方法:
• 地理地图构件能在地图上显示主机和问题
• 数据表构件能创建有关主机指标状态的摘要视图
• 数据表构件的前N和后N函数能展示最高或最低的监控项值
• 单一监控项构件能展示单个指标的值
• 对现有矢量图的许多改进,例如新的矢量图类型、引用单一监控项等
• SLA构件能显示特定业务服务的当前SLA
09、Zabbix性能优化
针对不同的Zabbix组件进行多项性能优化:
• 提升链接模板时的性能
• 提升Zabbix proxy性能和内存使用率
历史数据表使用主键,这有多种好处,例如:
• 提高Zabbix server和Zabbix前端的性能
• 减少历史数据表的大小
10、提升Zabbix Agent2模块化,新的Zabbix Agent 监控项和功能,优化的Zabbix agent现在能够开箱即用监控一组指标,Zabbix 6.0为Zabbix Agent和Agent2提供了一套新的监控项。支持以下功能:
• 获取额外文件信息,如文件所有者和文件权限
• 采集agent主机元数据作为指标
• 计数匹配的TCP/UDP sockets
某些已有的监控项支持新的功能:
• vfs.fs.discovery-在Windows上添加了对{#FSLABEL}宏的支持
• vfs.fs.get-在Windows上添加了对{#FSLABEL}宏的支持
• vfs.file.size-添加了一个新的模式参数。设置以字节数或行数为单位
Zabbix Agent2现在支持加载独立插件,而无需重新编译Agent2。
11、原生TLS/SSL网站证书监控
使用新的Zabbix agent2 监控项监控SSL/TLS证书,支持使用新的Zabbix agent 2监控项来监控SSL/TLS证书。监控项可用于验证TLS/SSL证书,并提供其它证书详细信息。
12、通用性改进
通过优化的创建主机UI,使创建新主机从未如此简单,Zabbix 6.0使Zabbix配置工作流程更精简!Zabbix用户现在可直接在Monitoring页面创建主机和监控项:
• 直接从Monitoring -Hosts页面创建主机
• 直接从Monitoring -Latest data页面创建监控项
• 删除了Monitoring -Overview页面。为了改善用户体验,现在只能通过仪表盘构件访问触发器和数据概览功能。
现在将根据监控项的键值自动选择监控项的默认信息类型。拓扑图标签和图形名称中的简单宏已替换为表达式宏,以确保与新的触发器表达式语法一致。
13、通过自定义密码复杂程度要求来保护您的Zabbix登录
设置密码复杂程度确保前端登录安全,Zabbix超级管理员现在能够定义密码复杂程度要求。现在可以:
• 设置最小密码长度
• 定义密码字符要求
• 通过禁止使用最常见的密码字符串来降低字典攻击的风险。
14、支持定制前端展示品牌logo
定制Zabbix实例代表您的公司。将现有的Zabbix品牌和帮助页面URL替换为您自己的公司品牌和自定义网站URL。改名功能不会违反Zabbix许可协议-可以自由更换Zabbix品牌!
15、新增模板和集成
Zabbix 6.0为最受欢迎的供应商提供了许多新模板:
• f5 BIG-IP
• Cisco ASAv
• HPE ProLiant servers
• Cloudflare
• InfluxDB
• Travis CI
• Dell PowerEdge
Zabbix 6.0还带来了一个新的Github webhook集成,能基于Zabbix问题或恢复事件生成Github问题!所有官方的Zabbix模板现在都是独立的,不需要依赖导入其他模板。请查看当前可用集成的完整列表。
16、其它新功能和优化
更多改进功能(部分):
• 使用新聚合函数计数返回值或匹配监控项的数量-count和item_count函数
• 在未配置交换空间的情况下提升system.swap监控项行为
• 使用新的单调历史函数检测连续增加或减少的值
• 支持两个新的Prometheus预处理标签匹配运算符!= 及 !~
• 当从构件链接导航到列表样式页面时,构件显示能更可靠地转换为不同的筛选器选项
• 使用新配置参数ListenBacklog为Zabbix server、Zabbix proxy、Zabbix agent配置TCP队列中挂起连接的最大数量
• 文档页面字体和可读性的改进
• 调整许多现有模板和修复小bug
• 新增utf8mb4作为受支持的MySQL字符集和校对集
• 新增对Webhook的额外HTTP方法的支持
• 对Zabbix命令行工具的超时设置
想了解更多,欢迎查看官网说明升级体验。
官方主页:http://www.zabbix.com/
该文章最后由 阿炯 于 2024-05-10 09:25:24 更新,目前是第 4 版。