关于本文档 · 贡献者 · 文档协议 · 致谢
关于本文档
文档名称:《企业级监控系统 ZABBIX》
使用协议:《知识共享公共许可协议(CCPL)》
贡献者
| 贡献者名称 | 贡献 度 |
文档变更记录 | 个人主页 |
|---|---|---|---|
| 马哥(马永亮) | 主编 | http://github.com/iKubernet es/ |
|
| 杰哥(张士杰) | 作者 | 159页 | http://blogs.studylinux.net/ |
| 王晓春 | 作者 | 465页,版本迭代升级,修订和内容丰富 | http://www.wangxiaochun.c om |
文档协议
署名要求 :使用本系列文档,您必须保留本页中的文档来源信息,具体请参考《知识共享 (Creative Commons) 署名4.0公共许可协议国际版》。
非商业化使用 :遵循《知识共享公共许可协议(CCPL)》,并且您不能将本文档用于马哥教育相关业务之外的其他任何商业用途。
您的权利 :遵循本协议后,在马哥教育相关业务之外的领域,您将有以下使用权限:
共享 — 允许以非商业性质复制本作品。
改编 — 在原基础上修改、转换或以本作品为基础进行重新编辑并用于个人非商业使用。
致谢
本文档中,部分素材参考了相关项目的文档,以及通过搜索引擎获得的内容,这里先一并向相关的贡献者表示感谢。
内容概述
Zabbix 介绍和架构
-
Zabbix 部署
-
Zabbix 核心功能
-
Zabbix 监控实战案例
-
Zabbix 利用 Grafana 进行图形展示
-
Zabbix 分布式实现 Proxy
-
Zabbix 自动化运维
-
Zabbix 性能优化
-
Zabbix 高可用
1 Zabbix 介绍和架构
1.1 为什么需要监控
运维行业有句话:“无监控、不运维”,监控俗称“第三只眼”。没了监控,什么基础运维,业务运维都是“瞎子”。所以说监控是运维这个职业的根本。尤其是在现在DevOps这么火的时候,用监控数据给自己撑腰,这显得更加必要,有人说运维是背锅侠,那么,有了监控,有了充足的数据,一切以数据说话,运维还需要背锅吗,所以作为一个运维工程师,如何构建一套监控系统是你的第一件工作。
监控功能
-
在需要的时刻,提前预警即将出问题,避免故障发生
-
实时监控系统和业务,当出问题之后,通过发出告警,提醒相关人员,快速可以找到问题的根源,从而及时处理问题
-
可以实现网站,应用或者服务器的故障自愈, 保证高可用性
-
以图形或易观察的方式呈现当前以及过往的状态,便于分析和预测系统发展趋势
1.2 需要监控什么
监控一切需要监控的资源,包括:服务器,网络设备,业务应用,云服务等

| 分类 | 实例内容 |
|---|---|
| 硬件监控 | 通过远程控制卡: DeLL的iDRAC,HP的ILO和IBM的IMM等使用IPMI来完成物理设备的监控工作。通常必须要监控包括温度、硬盘故障等路由器,交换机(端口,光衰,日志),打印机等 |
| 系统监控 | cpu,内存,硬盘使用率,硬盘IO,系统负载,进程数 |
| 服务监控 | nginx,apache, php-fpm,mysql.memcache,redis ,tomcat,JVM,TCP连接数 |
| 性能监控 | 网站性能,服务器性能,数据库性能,存储性能 |
| 日志监控 | 系统会产生系统日志,应用程序会有应用的访问日志、错误日志,服务有运行日志等, 可以使用ELK来进行日志监控 |
| 安全监控 | 用户登录数,passwd文件变化,本地所有文件改动 Nginx+Lua编写一个WAF通过kibana可以图形化的展示不同的攻击类型的统计。 |
| 网络监控 | IP,端口,URL,DB,ping包,IDC带宽网络流量,网络流出流出速率,网络入流量,网络出流是.网络使用率,SMTP.POP3 |
1.3 监控工具
开源工具: cacti、nagios、zabbix、Prometheus、open-falcon 等,还有一些商业的监控方案

1.3.1 Cacti

Cacti是基于LAMP平台展现的网络流量监测及分析工具
通过SNMP技术或自定义脚本从目标设备/主机获取监控指标信息
其次还可以进行数据存储,调用模板将数据存到数据库,使用rrdtool存储和更新数据,通过rrdtoo1绘制结果图形
最后进行数据展现,通过web方式将监控结果呈现出来,常用于在数据中心监控网络设备。
cacti是很老的一款监控工具,其实说它是一款流量监控工具更合适,对流量监控比较精准,但缺点很多,出图不好看,不支持分布式,也没有告警功能,所以当前使用的用户越来越少。
缺点:告警不及时
官网: https://www.cacti.net
github: https://github.com/Cacti/cacti
二次开发版: https://cactifans.org/
1.3.2 Nagios
.jpg)

Nagios是一款开源的免费监控工具,可以有效地监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员, 在状态恢复后发出正常的邮件或短信通知。
nagios主要的特征是监控告警,最强大的就是告警功能,可支持多种告警方式,但缺点是没有强大的数据收集机制,并且数据出图也很简陋,当监控的主机越来越多时,添加主机也非常麻烦,配置文件都是基于文本配置的,不支持web方式管理和配置,这样很容易出错,不易维护。
分层告警机制及自定义监控相对薄弱。
监控主机数量有限,承载能力较低
官网: https://www.nagios.org/
1.3.3 猎鹰 Open-falcon

open-falcon(猎鹰)是一款用golang和python写的监控系统,由小米启动这个项目相对zabbix在性能、扩展性、和用户的使用效率方面,都有较大优势
发布时间较短
不支持很多基础的服务监控插件,如lTomcat、 apache等
功能不完善,更新较缓慢
无专门运维支撑,社区运营有欠缺。
官网: http://www.open-falcon.org/
github: https://github.com/open-falcon
1.3.4 夜莺 Nightingale

夜莺(Nightingale)是滴滴基础平台联合滴滴云研发和开源的企业级监控解决方案。旨在满足云原生时代企业级的监控需求。
Nightingale 在Open-Falcon 的基础上,结合滴滴的最佳实践,在性能、可维护性、易用性方面做了大量的改进
Nightingale 在产品完成度、系统高可用、以及用户体验方面,达到了企业级的要求,可满足不同规模用户的场景,小到几台机器,大到数十万都可以完美支撑。兼顾云原生和裸金属,支持应用监控和系统监控,插件机制灵活,插件丰富完善,具有高度的灵活性和可扩展性。
Nightingale 作为集团统一的监控解决方案,支撑了滴滴内部数十亿监控指标,覆盖了从系统、容器、到应用等各层面的监控需求,周活跃用户数千。五年磨一剑,取之开源,回馈开源。
当前社区比较活跃,升级较频繁
官网:
https://n9e.github.io/
http://n9e.didiyun.com/
1.3.5 Zabbix

zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。功能强大,成熟可靠,使用者众多
官网: https://www.zabbix.com/
1.3.6 Prometheus

Prometheus 是一个开源的服务监控系统和时间序列数据库,主要在监控容器领域使用,可以实现容器的动态发现和监控
官网: https://prometheus.io/
1.3.7 商业监控方案
商业监控的方案,可以实现从外部网络,如全国的不同运营商的网络访问指定服务,贴近实际用户的访问感受,了解实现的访问情况.
http://ping.chinaz.com/ 站长之家
https://www.jiankongbao.com/ 监控宝
https://www.toushibao.com/ 透视宝
https://www.tingyun.com/ 听云


1.3.8 云监控
云监控为云上用户提供开箱即用的企业级开放型一站式监控解决方案。云监控涵盖IT设施基础监控和外网网络质量拨测监控,是基于事件、自定义指标和日志的业务监控,为您全方位提供更高效、全面、省钱的监控服务。使用云监控,不但可以帮助您提升系统服务可用时长,还可以降低企业IT运维监控成本。
云监控通过提供跨云服务和跨地域的应用分组管理模型和报警模板,帮助您快速构建支持几十种云服务、管理数万实例的高效监控报警管理体系。
云监控用于监控各云服务资源的监控指标,探测云服务ECS和运营商站点的可用性,并针对指定监控指标设置报警。使您全面了解阿里云上资源的使用情况和业务运行状况,并及时对故障资源进行处理,保证业务正常运行。
https://help.aliyun.com/document_detail/35170.html
https://cloud.tencent.com/document/product/248/13466


1.4 Zabbix 概述和架构
1.4.1 Zabbix 介绍

zabbix官网: https://www.zabbix.com

Zabbix 是一个企业级分布式开源监控解决方案,支持实时监控数干台服务器,虚拟机和网络设备,采集百万级监控指标,适用于任何IT基础架构、服务、应用程序和资源的解决方案
Zabbix SIA 公司成立于2005年, 由CEO兼所有者Alexei Vladishev 创建,Zabbix 目前由此公司积极的持续开发更新维护, 并为用户提供技术支持服务。


Zabbix 软件能够监控众多网络参数和服务器的健康度、完整性。Zabbix 使用灵活的告警机制,允许用户为几乎任何事件配置基于邮件的告警。这样用户可以快速响应服务器问题。Zabbix 基于存储的数据提供出色的报表和数据可视化功能。这些功能使得 Zabbix 成为容量规划的理想选择。
Zabbix 支持主动轮询(polling)和被动捕获(trapping)。Zabbix所有的报表、统计数据和配置参数都可以通过基于 Web 的前端页面进行访问。基于 Web 的前端页面确保您可以在任何地方访问您监控的网络状态和服务器健康状况。适当的配置后,Zabbix 可以在监控 IT 基础设施方面发挥重要作用。无论是对于有少量服务器的小型组织,还是拥有大量服务器的大企业而言,同样适用。
Zabbix 是根据 GPL 通用公共许可证的第二版编写和发布的。这意味着产品源代码是免费发布的,可供公共使用。
Zabbix公司还为全球用户提供专业的技术支持服务 。
1.4.2 Zabbix 功能
Zabbix 是一个高度成熟完善的网络监控解决方案,包含了多种功能。

官方链接:
https://www.zabbix.com/documentation/5.0/zh/manual/introduction/features
数据采集
-
历史数据, 即记录每个监控项采集到的每个监控值
-
趋势数据, 主要保留某个监控项一个小时内历史数据的最大值、最小值和平均值以及该监控项一个小时内所采集到的数据个数
-
可用性和性能检查;
-
支持 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 代理,可以轻松实现分布式远程监控
1.4.3 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 的配置变得更加灵活易用。
1.4.4 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)——表示处于空闲状态的进程;
1.4.5 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
1.4.6 Zabbix 各种组件的关系

2 Zabbix 部署
2.1 Zabbix 部署环境准备
2.1.1 Zabbix 版本选择
Zabbix 历史版本
https://en.wikipedia.org/wiki/Zabbix

Zabbix 产品周期
https://www.zabbix.com/cn/life_cycle_and_release_policy
Zabbix 分为两种版本: LTS和标准版本

Zabbix LTS
LTS代表“长期支持版本”。Zabbix LTS版本 每一年半 发布一次,且为Zabbix客户提供五年的支持服务
-
3年全面支持 - 支持修复基础的、紧急的以及安全性上的问题
-
2年最低限度支持 - 仅限支持修复紧急的和安全性上的问题
Zabbix LTS(长期支持)版本没有任何额外的或隐藏的消费成本。Zabbix是一个100%开源软件,每个人都可以下载使用。
Zabbix LTS 特点:
-
支持期限更长,例如:为潜在的安全问题及bug迭代更新
-
令人期待的高质量更新以及全新的功能点
-
快速更新,可适用于多变的复杂环境
-
在版本升级方面,更容易规划管理

2.1.2 Zabbix 部署架构

2.1.3 Zabbix 安装要求
安装官方要求
https://www.zabbix.com/documentation/6.0/zh/manual/installation/requirements
https://www.zabbix.com/documentation/5.0/zh/manual/installation/requirements
https://www.zabbix.com/documentation/4.0/zh/manual/installation/requirements
2.2 安装 Zabbix Server
2.2.1 Zabbix Server 安装方法介绍
Zabbix Server 提供了三种安装方法
二进制包安装: 官方提供了二进制包安装的方法,可以支持CentOS和Debian/Ubuntu的安装
源码编译安装: 部署繁琐,生产环境定制安装可以使用
- 基于容器安装: 测试环境使用,参考链接如下
https://www.zabbix.com/documentation/6.0/zh/manual/installation/containers
https://www.zabbix.com/documentation/5.0/zh/manual/installation/containers
https://www.zabbix.com/documentation/4.0/zh/manual/installation/containers
2.2.2 二进制包安装 Zabbix Server
官方提供对多种OS版本的Zabbix 安装
可以从 ZABBIX 官方的软件仓库或镜像网站安装Zabbix SIA 提供了官方的 RPM 和 DEB 发行包二进制包安装Zabbix官方参考文档:
#Zabbix5.0
https://www.zabbix.com/documentation/5.0/zh/manual/installation/install_from_pac
kages
https://www.zabbix.com/documentation/5.0/zh/manual/installation/install_from_pac
kages/rhel_centos
https://www.zabbix.com/documentation/5.0/zh/manual/installation/install_from_pac
kages/debian_ubuntu
#Zabbix4.0
https://www.zabbix.com/documentation/4.0/zh/manual/installation/install_from_pac
kages
https://www.zabbix.com/documentation/4.0/zh/manual/installation/install_from_pac
kages/rhel_centos
https://www.zabbix.com/documentation/4.0/manual/installation/install_from_packag
es/debian_ubuntu
官方和镜像仓库
#官方包仓库:
https://repo.zabbix.com/
#镜像源
https://mirrors.aliyun.com/zabbix/
https://mirrors.tuna.tsinghua.edu.cn/zabbix/

Zabbix 相关二进制包介绍
zabbix-server-mysql #Zabbix Server服务器包
zabbix-frontend-php #Zabbix 前端Web服务包,本质为LAP
abbix-apache-conf #Zabbix 前端Web服务配置包,本质为LAP
zabbix-agent #Zabbix 客户端包
zabbix-agent2 #Zabbix 客户端包
zabbix-get #Zabbix 服务测试包
2.2.2.1 安装Zabbix Server 包
访问链接: https://www.zabbix.com/download 找到仓库的源
#CentOS8安装Zabbix5.0
https://www.zabbix.com/download?
zabbix=5.0&os_distribution=centos&os_version=8&db=mysql&ws=apache
#Ubuntu18.04安装Zabbix5.0
https://www.zabbix.com/download?
zabbix=5.0&os_distribution=ubuntu&os_version=18.04_bionic&db=mysql&ws=apache
#CentOS8安装Zabbix4.0
https://www.zabbix.com/download?
zabbix=4.0&os_distribution=centos&os_version=8&db=mysql&ws=apache
#Ubuntu18.04安装Zabbix4.0
https://www.zabbix.com/download?
zabbix=4.0&os_distribution=ubuntu&os_version=18.04_bionic&db=mysql&ws=apache


范例: 在ubuntu18.04 安装 Zabbix Server 5.0
# 官网下载
[root@zabbix-server ~]#wget
https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-
release_5.0-1+bionic_all.deb
# 镜像下载
[root@zabbix-server ~]#wget
https://mirrors.aliyun.com/zabbix/zabbix/5.0/ubuntu/pool/main/z/zabbix-
release/zabbix-release_5.0-1+bionic_all.deb
[root@zabbix-server ~]#dpkg -L zabbix-release
/.
/etc
/etc/apt
/etc/apt/sources.list.d
/etc/apt/sources.list.d/zabbix.list
/etc/apt/trusted.gpg.d
/etc/apt/trusted.gpg.d/zabbix-official-repo.gpg
/usr
/usr/share
/usr/share/doc
/usr/share/doc/zabbix-release
/usr/share/doc/zabbix-release/README.Debian
/usr/share/doc/zabbix-release/changelog.Debian
/usr/share/doc/zabbix-release/copyright
[root@zabbix-server ~]#cat /etc/apt/sources.list.d/zabbix.list
deb http://repo.zabbix.com/zabbix/5.0/ubuntu bionic main
deb-src http://repo.zabbix.com/zabbix/5.0/ubuntu bionic main
# 镜像加速
[root@zabbix-server ~]#sed -i.bak
's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#'
/etc/apt/sources.list.d/zabbix.list
[root@zabbix-server ~]#cat /etc/apt/sources.list.d/zabbix.list
deb https://mirrors.aliyun.com/zabbix/zabbix/5.0/ubuntu bionic main
deb-src https://mirrors.aliyun.com/zabbix/zabbix/5.0/ubuntu bionic main
[root@zabbix-server ~]#apt update
# 安装包
[root@zabbix-server ~]#apt -y install zabbix-server-mysql zabbix-frontend-php
zabbix-apache-conf zabbix-agent zabbix-get
#安装MySQL
[root@zabbix-server ~]#apt install mysql-server -y
#如果MySQL和ZabbixServer在同一台主机,此项可不改
[root@zabbix-server ~]#vim /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address =0.0.0.0
[root@zabbix-server ~]#systemctl restart mysql.service
#准备数据库和用户
[root@zabbix-server ~]#mysql -uroot
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by '123456';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;
#初绐化数据库的表
[root@zabbix-server ~]#zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz |
mysql -uzabbix -p123456 zabbix
#修改Zabbix Server 连接MySQL
[root@zabbix-server ~]#vim /etc/zabbix/zabbix_server.conf
DBPassword=123456
#修改PHP配置
[root@zabbix-server ~]#vim /etc/zabbix/apache.conf
php_value date.timezone Asia/Shanghai
[root@zabbix-server ~]#systemctl restart zabbix-server zabbix-agent apache2
[root@zabbix-server ~]#systemctl is-active zabbix-server zabbix-agent apache2
active
active
active
[root@zabbix-server ~]#systemctl enable zabbix-server zabbix-agent apache2
#安装中文包
[root@zabbix-server ~]#apt -y install language-pack-zh-hans
#安装日文包
[root@zabbix-server ~]#apt install language-pack-ja
[root@zabbix-server ~]#systemctl restart apache2
#浏览器访问
http://server_ip_or_name/zabbix
范例:在 CentOS 8上实现安装Zabbix Server
#Zabbix5.0
[root@zabbix-server ~]#rpm -Uvh
https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-
1.el8.noarch.rpm
#Zabbix4.0
[root@zabbix-server ~]#rpm -Uvh
https://repo.zabbix.com/zabbix/4.0/rhel/8/x86_64/zabbix-release-4.0-
2.el8.noarch.rpm
#修改为阿里云源
[root@zabbix-server ~]#vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository -$basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/8/x86_64/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
# 或者 sed 修改
[root@zabbix-server ~]#sed -i.bak 's/repo.zabbix.com/mirrors.aliyun.com\/zabbix/'
/etc/yum.repos.d/zabbix.repo
[root@zabbix-server ~]#dnf clean all
[root@zabbix-server ~]#dnf install zabbix-server-mysql zabbix-web-mysql zabbix-
agent zabbix-get
[root@zabbix-server ~]#zabbix_server -V
zabbix_server (Zabbix) 5.0.14
Revision 892ce506db 16 July 2021, compilation time: Jul 16202114:45:07
Copyright (C) 2021 Zabbix SIA
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.
This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/).
Compiled with OpenSSL 1.1.1 11 Sep 2018
Running with OpenSSL 1.1.1 11 Sep 2018
2.2.2.2 准备数据库和数据表
2.2.2.2.1 准备数据库
[root@zabbix-server ~]#yum -y install mysql-server
[root@zabbix-server ~]#systemctl enable --now mysqld
[root@zabbix-server ~]#mysql -uroot -p
Enter password:
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by '123456';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
#如果MySQL 和 Zabbix Server不在同一台主机
mysql> create user zabbix@'10.0.0.%' identified by '123456';
mysql> grant all privileges on zabbix.* to zabbix@'10.0.0.%';
#注意:如果使用MySQL8.0还需要执行下面
mysql>ALTER USER zabbix@'10.0.0.%' IDENTIFIED WITH mysql_native_password BY
'123456';
#或者执行下面
[root@zabbix-server ~]#echo 'default-authentication-plugin=mysql_native_password'
>> /etc/my.cnf.d/mysql-server.cnf
[root@zabbix-server ~]#systemctl enable --now mysqld
2.2.2.2.2 导入数据表
[root@zabbix-server ~]#zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz |
mysql -uzabbix -p123456 zabbix
[root@zabbix-server ~]#mysql -uzabbix -p123456 zabbix -e 'show tables;'
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------------+
| Tables_in_zabbix |
+----------------------------+
| acknowledges |
| actions |
| alerts |
| application_discovery |
| application_prototype |
| application_template |
| applications |
2.2.2.3 修改zabbix的配置文件
[root@zabbix-server ~]#vim /etc/zabbix/zabbix_server.conf
[root@zabbix-server ~]#grep '^[^#]' /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
DBName=zabbix
DBUser=zabbix
DBPassword=123456
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
2.2.2.4. 修改php相关配置文件
修改正确的时区信息
[root@zabbix-server ~]#vim /etc/php-fpm.d/zabbix.conf
[root@zabbix-server ~]#cat /etc/php-fpm.d/zabbix.conf
[zabbix]
user = apache
group = apache
listen = /run/php-fpm/zabbix.sock
listen.acl_users = apache,nginx
listen.allowed_clients =127.0.0.1
pm = dynamic
pm.max_children =50
pm.start_servers =5
pm.min_spare_servers =5
pm.max_spare_servers =35
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_value[max_execution_time] =300
php_value[memory_limit] = 128M
php_value[post_max_size] = 16M
php_value[upload_max_filesize] = 2M
php_value[max_input_time] =300
php_value[max_input_vars] =10000
php_value[date.timezone] = Asia/Shanghai #只需要修改此行
2.2.2.5 启动zabbix相关服务
[root@zabbix-server |
~]#systemctl enable |
--now zabbix-server zabbix-agent httpd |
|---|---|---|
php-fpm |
||
[root@zabbix-server |
~]#ss -ntl |
|
State |
Recv-Q Send-Q |
Local Address:Port Peer |
Address:Port |
||
LISTEN |
0128 |
0.0.0.0:100500.0.0.0:* |
LISTEN |
0128 |
0.0.0.0:100510.0.0.0:* |
LISTEN |
0128 |
0.0.0.0:220.0.0.0:* |
LISTEN |
0100 |
127.0.0.1:250.0.0.0:* |
LISTEN |
0128 |
[::]:10050 [::]:* |
LISTEN |
0128 |
[::]:10051 [::]:* |
LISTEN |
070 |
*:33060 *:* |
LISTEN |
0128 |
*:3306 *:* |
LISTEN |
0128 |
*:80 *:* |
LISTEN |
0128 |
[::]:22 [::]:* |
LISTEN |
0100 |
[::1]:25 [::]:* |
#查看进程
[root@zabbix-server ~]#ps -ef |grep zabbix
zabbix 7671015:32 ? 00:00:00 /usr/sbin/zabbix_server -c
/apps/zabbix-server/etc/zabbix_server.conf
zabbix 27911017:14 ? 00:00:00 zabbix_server -c
/apps/zabbix-server/etc/zabbix_server.conf
zabbix 27922791017:14 ? 00:00:00 zabbix_server: configuration
syncer [synced configuration in0.034296 sec, idle 60 sec]
zabbix 27932791017:14 ? 00:00:00 zabbix_server: housekeeper
[deleted 0 hist/trends, 0 items/triggers, 0 events, 0 sessions, 0 alarms, 0
audit items in0.006651 sec, idle for1 hour(s)]
zabbix 27942791017:14 ? 00:00:00 zabbix_server: timer #1
[updated 0 hosts, suppressed 0 events in 0.003964 sec, idle 59 sec]
zabbix 27952791017:14 ? 00:00:00 zabbix_server: http poller
#1 [got 0 values in 0.001675 sec, idle 5 sec]
zabbix 27962791017:14 ? 00:00:00 zabbix_server: discoverer #1
[processed 0 rules in 0.001440 sec, idle 60 sec]
zabbix 27972791017:14 ? 00:00:02 zabbix_server: history
syncer #1 [processed 2 values, 0 triggers in 0.008044 sec, idle 1 sec]
zabbix 27982791017:14 ? 00:00:01 zabbix_server: history
syncer #2 [processed 0 values, 0 triggers in 0.000039 sec, idle 1 sec]
zabbix 27992791017:14 ? 00:00:01 zabbix_server: history
syncer #3 [processed 0 values, 0 triggers in 0.000011 sec, idle 1 sec]
zabbix 28002791017:14 ? 00:00:01 zabbix_server: history
syncer #4 [processed 0 values, 0 triggers in 0.000042 sec, idle 1 sec]
zabbix 28012791017:14 ? 00:00:01 zabbix_server: escalator #1
[processed 0 escalations in 0.003402 sec, idle 3 sec]
zabbix 28022791017:14 ? 00:00:00 zabbix_server: proxy poller
#1 [exchanged data with 0 proxies in 0.000040 sec, idle 5 sec]
zabbix 28032791017:14 ? 00:00:00 zabbix_server: self-
monitoring [processed data in0.000040 sec, idle 1 sec]
zabbix 28042791017:14 ? 00:00:00 zabbix_server: task manager
[processed 0 task(s) in0.001278 sec, idle 5 sec]
zabbix 28052791017:14 ? 00:00:00 zabbix_server: poller #1
[got 0 values in 0.000012 sec, idle 1 sec]
zabbix 28062791017:14 ? 00:00:00 zabbix_server: poller #2
[got 0 values in 0.000035 sec, idle 1 sec]
zabbix 28072791017:14 ? 00:00:00 zabbix_server: poller #3
[got 0 values in 0.000024 sec, idle 1 sec]
zabbix 28082791017:14 ? 00:00:00 zabbix_server: poller #4
[got 0 values in 0.000046 sec, idle 1 sec]
zabbix 28092791017:14 ? 00:00:00 zabbix_server: poller #5
[got 1 values in 0.002690 sec, idle 1 sec]
zabbix 28102791017:14 ? 00:00:00 zabbix_server: unreachable
poller #1 [got 0 values in 0.000048 sec, idle 5 sec]
zabbix 28112791017:14 ? 00:00:00 zabbix_server: trapper #1
[processed data in 0.001228 sec, waiting for connection]
zabbix 28122791017:14 ? 00:00:00 zabbix_server: trapper #2
[processed data in 0.000642 sec, waiting for connection]
zabbix 28132791017:14 ? 00:00:00 zabbix_server: trapper #3
[processed data in 0.001207 sec, waiting for connection]
zabbix 28142791017:14 ? 00:00:00 zabbix_server: trapper #4
[processed data in 0.000743 sec, waiting for connection]
zabbix 28152791017:14 ? 00:00:00 zabbix_server: trapper #5
[processed data in 0.000800 sec, waiting for connection]
zabbix 28162791017:14 ? 00:00:00 zabbix_server: icmp pinger
#1 [got 0 values in 0.000011 sec, idle 5 sec]
zabbix 28172791017:14 ? 00:00:01 zabbix_server: alert manager
#1 [sent 0, failed 0 alerts, idle 5.012562 sec during 5.012678 sec]
zabbix 28182791017:14 ? 00:00:00 zabbix_server: alerter #1
started
zabbix 28192791017:14 ? 00:00:00 zabbix_server: alerter #2
started
zabbix 28202791017:14 ? 00:00:00 zabbix_server: alerter #3
started
zabbix 28212791017:14 ? 00:00:00 zabbix_server: preprocessing
manager #1 [queued 0, processed 12 values, idle 5.006746 sec during 5.006944
sec]
zabbix 28222791017:14 ? 00:00:00 zabbix_server: preprocessing
worker #1 started
zabbix 28232791017:14 ? 00:00:00 zabbix_server: preprocessing
worker #2 started
zabbix 28242791017:14 ? 00:00:00 zabbix_server: preprocessing
worker #3 started
zabbix 29121017:20 ? 00:00:00 zabbix_agentd
zabbix 29132912017:20 ? 00:00:01 zabbix_agentd: collector
[idle 1 sec]
zabbix 29142912017:20 ? 00:00:00 zabbix_agentd: listener #1
[waiting for connection]
zabbix 29152912017:20 ? 00:00:00 zabbix_agentd: listener #2
[waiting for connection]
zabbix 29162912017:20 ? 00:00:00 zabbix_agentd: listener #3
[waiting for connection]
zabbix 29172912017:20 ? 00:00:00 zabbix_agentd: active checks
#1 [idle 1 sec]
[root@zabbix-server ~]#ps aux|grep zabbix
zabbix 17700.0 0.2 766082068 ? S 16:09 0:00
/usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
zabbix 17710.0 0.2 766082004 ? S 16:09 0:00
/usr/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix 17720.0 0.3 767403884 ? S 16:09 0:00
/usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix 17730.0 0.4 767403900 ? S 16:09 0:00
/usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix 17740.0 0.4 767403900 ? S 16:09 0:00
/usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
zabbix 17750.0 0.3 767403664 ? S 16:09 0:00
/usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
zabbix 17770.0 0.4 1847204556 ? S 16:09 0:00
/usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
zabbix 17800.0 0.3 1851283136 ? S 16:09 0:00
/usr/sbin/zabbix_server: configuration syncer [synced configuration in0.017577
sec, idle 60 sec]
apache 17860.0 2.0 26942020348 ? S 16:09 0:00 php-fpm: pool
zabbix
apache 17870.0 1.9 26942018984 ? S 16:09 0:00 php-fpm: pool
zabbix
apache 17880.0 2.0 26942020056 ? S 16:09 0:00 php-fpm: pool
zabbix
apache 17890.0 1.7 26739217104 ? S 16:09 0:00 php-fpm: pool
zabbix
apache 17900.0 1.8 26944018296 ? S 16:09 0:00 php-fpm: pool
zabbix
zabbix 17910.0 0.0 184720516 ? S 16:09 0:00
/usr/sbin/zabbix_server: housekeeper [startup idle for30 minutes]
zabbix 17920.0 0.2 1847202232 ? S 16:09 0:00
/usr/sbin/zabbix_server: timer #1 [updated 0 hosts, suppressed 0 events in
0.001319 sec, idle 48 sec]
zabbix 17930.0 0.2 1847202296 ? S 16:09 0:00
/usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.000849 sec, idle 5
sec]
zabbix 17940.0 0.4 1858684764 ? S 16:09 0:00
/usr/sbin/zabbix_server: discoverer #1 [processed 0 rules in 0.000760 sec, idle
60 sec]
zabbix 17950.0 0.3 1847523176 ? S 16:09 0:00
/usr/sbin/zabbix_server: history syncer #1 [processed 0 values, 0 triggers in
0.000029 sec, idle 1 sec]
zabbix 17960.0 0.3 1848843476 ? S 16:09 0:00
/usr/sbin/zabbix_server: history syncer #2 [processed 0 values, 0 triggers in
0.000036 sec, idle 1 sec]
zabbix 17970.0 0.3 1847523196 ? S 16:09 0:00
/usr/sbin/zabbix_server: history syncer #3 [processed 0 values, 0 triggers in
0.000037 sec, idle 1 sec]
zabbix 17980.0 0.3 1847523184 ? S 16:09 0:00
/usr/sbin/zabbix_server: history syncer #4 [processed 0 values, 0 triggers in
0.000024 sec, idle 1 sec]
zabbix 17990.0 0.3 1847203384 ? S 16:09 0:00
/usr/sbin/zabbix_server: escalator #1 [processed 0 escalations in 0.000606 sec,
idle 3 sec]
zabbix 18000.0 0.3 1847203536 ? S 16:09 0:00
/usr/sbin/zabbix_server: proxy poller #1 [exchanged data with 0 proxies in
0.000044 sec, idle 5 sec]
zabbix 18010.0 0.2 1847202364 ? S 16:09 0:00
/usr/sbin/zabbix_server: self-monitoring [processed data in0.000041 sec, idle 1
sec]
zabbix 18020.0 0.2 1847202296 ? S 16:09 0:00
/usr/sbin/zabbix_server: task manager [processed 0 task(s) in0.000559 sec, idle
5 sec]
zabbix 18030.0 0.5 1892005500 ? S 16:09 0:00
/usr/sbin/zabbix_server: poller #1 [got 0 values in 0.000013 sec, idle 1 sec]
zabbix 18040.0 0.4 1892484672 ? S 16:09 0:00
/usr/sbin/zabbix_server: poller #2 [got 1 values in 0.000140 sec, idle 1 sec]
zabbix 18050.0 0.4 1892004708 ? S 16:09 0:00
/usr/sbin/zabbix_server: poller #3 [got 0 values in 0.000051 sec, idle 1 sec]
zabbix 18060.0 0.5 1892005500 ? S 16:09 0:00
/usr/sbin/zabbix_server: poller #4 [got 0 values in 0.000030 sec, idle 1 sec]
zabbix 18070.0 0.5 1892005040 ? S 16:09 0:00
/usr/sbin/zabbix_server: poller #5 [got 0 values in 0.000014 sec, idle 1 sec]
zabbix 18080.0 0.5 1891805576 ? S 16:09 0:00
/usr/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000051 sec,
idle 5 sec]
zabbix 18090.0 0.3 1847203556 ? S 16:09 0:00
/usr/sbin/zabbix_server: trapper #1 [processed data in 0.000489 sec, waiting for
connection]
zabbix 18100.0 0.3 1847203556 ? S 16:09 0:00
/usr/sbin/zabbix_server: trapper #2 [processed data in 0.000888 sec, waiting for
connection]
zabbix 18110.0 0.4 1847204296 ? S 16:09 0:00
/usr/sbin/zabbix_server: trapper #3 [processed data in 0.000574 sec, waiting for
connection]
zabbix 18120.0 0.3 1847203540 ? S 16:09 0:00
/usr/sbin/zabbix_server: trapper #4 [processed data in 0.000498 sec, waiting for
connection]
zabbix 18130.0 0.3 1847203504 ? S 16:09 0:00
/usr/sbin/zabbix_server: trapper #5 [processed data in 0.001988 sec, waiting for
connection]
zabbix 18140.0 0.2 1880242340 ? S 16:09 0:00
/usr/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000010 sec, idle 5
sec]
zabbix 18150.0 0.2 1847202108 ? S 16:09 0:00
/usr/sbin/zabbix_server: alert manager #1 [sent 0, failed 0 alerts, idle
5.010906 sec during 5.011049 sec]
zabbix 18160.0 0.0 184720592 ? S 16:09 0:00
/usr/sbin/zabbix_server: alerter #1 started
zabbix 18170.0 0.0 184720580 ? S 16:09 0:00
/usr/sbin/zabbix_server: alerter #2 started
zabbix 18180.0 0.0 184720580 ? S 16:09 0:00
/usr/sbin/zabbix_server: alerter #3 started
zabbix 18190.0 0.2 1847202284 ? S 16:09 0:00
/usr/sbin/zabbix_server: preprocessing manager #1 [queued 0, processed 7 values,
idle 5.004650 sec during 5.004979 sec]
zabbix 18200.0 0.2 1847202344 ? S 16:09 0:00
/usr/sbin/zabbix_server: preprocessing worker #1 started
zabbix 18210.0 0.2 1847202344 ? S 16:09 0:00
/usr/sbin/zabbix_server: preprocessing worker #2 started
zabbix 18220.0 0.2 1847202380 ? S 16:09 0:00
/usr/sbin/zabbix_server: preprocessing worker #3 started
apache 23470.0 2.1 26942021364 ? S 16:22 0:00 php-fpm: pool
zabbix
apache 23590.0 2.0 26737220056 ? S 16:23 0:00 php-fpm: pool
zabbix
root 26230.0 0.1 121081068 pts/3 S+16:26 0:00 grep--
color=auto zabbix
[root@zabbix-server ~]#
2.2.2.6 访问 Zabbix的web管理页面完成配置向导
访问下面链接
http://server_ip_or_name/zabbix

检查环境

输入数据库信息


上面所填写的内容保存在下面文件中
#如果是CentOS下面文件
-
/etc/zabbix/web/zabbix.conf.php -
# 如果是 Ubuntu 则下面文件 -
/usr/share/zabbix/conf/zabbix.conf.php 实质也是 /etc/zabbix/web/zabbix.conf.php 软链接

完成安装

Zabbix 前端已经就绪!第一次登录, 默认的用户名是 Admin ,密码是 zabbix

2.2.2.7 中文及乱码
默认为英文,可修改为中文
#CentOS安装中文包,再修改语言,否则无法选择
[root@zabbix-server ~]#yum -y install langpacks-zh_CN
#Ubuntu安装下面中文包
[root@zabbix-server ~]#apt -y install language-pack-zh-hans

因为字体兼容性的原因,在显示中文时可能会有乱码出现
注意:乱码和语言环境无关,英语环境也支持中文显示,但会有乱码

将中文字体上传到 Zabbix Server 的目录 /usr/share/zabbix/assets/fonts 下

[root@zabbix-server fonts]#pwd
/usr/share/zabbix/assets/fonts
# 支持 ttf 和 ttc 后缀的字体文件
[root@zabbix-server fonts]#mv graphfont.ttf graphfont.ttf.bak
[root@zabbix-server fonts]#mv SIMYOU.TTF graphfont.ttf
[root@zabbix-server fonts]#ls
graphfont.ttf graphfont.ttf.bak
#注意:字体文件路径和名称的定义在文件/usr/share/zabbix/include/defines.inc.php中配置
#可以修改下面FONT_NAME指定新字体件,注意不需加文件后缀
[root@zabbix-server ~]#grep FONT_NAME /usr/share/zabbix/include/defines.inc.php
define('ZBX_GRAPH_FONT_NAME', 'graphfont'); // font file name
define('ZBX_FONT_NAME', 'graphfont');
再次刷新页面,乱码问题解决

2.2.2.8 案例: 在Ubuntu20.04 安装 Zabbix Server 6.0
官方链接
https://www.zabbix.com/cn/download?
zabbix=6.0&os_distribution=ubuntu&os_version=20.04_focal&db=mysql&ws=nginx

#Install Zabbix repository
[root@ubuntu2004 ~]#wget
https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-
release_6.0-1+ubuntu20.04_all.deb
[root@ubuntu2004 ~]#dpkg -i zabbix-release_6.0-1+ubuntu20.04_all.deb
[root@ubuntu2004 ~]#cat /etc/apt/sources.list.d/zabbix.list
deb https://repo.zabbix.com/zabbix/6.0/ubuntu focal main
deb-src https://repo.zabbix.com/zabbix/6.0/ubuntu focal main
#加速,更新为国内源(可选)
[root@ubuntu2004 ~]#sed -i.bak
's#https://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#'
/etc/apt/sources.list.d/zabbix.list
[root@ubuntu2004 ~]#cat /etc/apt/sources.list.d/zabbix.list
deb https://mirrors.aliyun.com/zabbix/zabbix/6.0/ubuntu focal main
deb-src https://mirrors.aliyun.com/zabbix/zabbix/6.0/ubuntu focal main
[root@ubuntu2004 ~]#apt update
#安装Zabbix server,Web前端,agent2
[root@ubuntu2004 ~]#apt -y install zabbix-server-mysql zabbix-frontend-php
zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2 zabbix-get
#安装nginx
[root@ubuntu2004 ~]#nginx -v
nginx version: nginx/1.18.0 (Ubuntu)
#安装php-fpm
[root@ubuntu2004 ~]#php-fpm7.4 -v
PHP 7.4.3 (fpm-fcgi) (built: May 6202200:16:42)
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies
#安装zabbix_agent2
[root@ubuntu2004 ~]#zabbix_agent2 -V
zabbix_agent2 (Zabbix) 6.0.5
.......
# 创建初始数据库
[root@ubuntu2004 ~]#apt -y install mysql-server
[root@ubuntu2004 ~]#mysql
Server version: 8.0.29-0ubuntu0.20.04.3 (Ubuntu)
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by '123456';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;
#导入初始架构和数据,系统将提示您输入新创建的密码。
[root@ubuntu2004 ~]#zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz |
mysql -uzabbix -p123456 zabbix
#验证数据库和表
[root@ubuntu2004 ~]#mysql -uzabbix -p123456 zabbix -e 'show tables;' |head
mysql: [Warning] Using a password on the command line interface can be insecure.
Tables_in_zabbix
acknowledges
actions
alerts
auditlog
autoreg_host
conditions
config
config_autoreg_tls
corr_condition
#为Zabbix server配置数据库
[root@ubuntu2004 ~]#vim /etc/zabbix/zabbix_server.conf
DBPassword=123456
#确认数据库配置
[root@ubuntu2004 ~]#grep -E '^DB|DBHost=' /etc/zabbix/zabbix_server.conf
# DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=123456
#为Zabbix前端配置PHP
[root@ubuntu2004 ~]#vim /etc/zabbix/nginx.conf
#取消下面两行的注释并修改
listen 80;
server_name zabbix.wang.org;
#默认安装apache2和nginx冲突,禁用apache2
[root@ubuntu2004 ~]#systemctl disable --now apache2.service
#重启服务
[root@ubuntu2004 ~]#systemctl restart zabbix-server zabbix-agent2 nginx php7.4-
fpm
[root@ubuntu2004 ~]#systemctl enable zabbix-server zabbix-agent2 nginx php7.4-
fpm
[root@ubuntu2004 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 01280.0.0.0:22 0.0.0.0:*
LISTEN 0128127.0.0.1:6010 0.0.0.0:*
LISTEN 0128127.0.0.1:6011 0.0.0.0:*
LISTEN 040960.0.0.0:10051 0.0.0.0:*
LISTEN 070127.0.0.1:33060 0.0.0.0:*
LISTEN 0151127.0.0.1:3306 0.0.0.0:*
LISTEN 05110.0.0.0:80 0.0.0.0:*
LISTEN |
04096 |
127.0.0.53%lo:530.0.0.0:* |
|---|---|---|
LISTEN |
0128 |
[::]:22 [::]:* |
LISTEN |
0128 |
[::1]:6010 [::]:* |
LISTEN |
0128 |
[::1]:6011 [::]:* |
LISTEN |
04096 |
*:10050 *:* |
LISTEN |
04096 |
[::]:10051 [::]:* |
LISTEN |
0511 |
[::]:80 [::]:* |
#配置Zab#连接到新#根据Zab |
bix前端安装的Zabbix前端:bix文件里步骤操作: |
http://server_ip_or_nameInstalling frontend |
初始页面,可以修改语言

条件检测

输入MySQL数据库相关连接信息

指定主机名称和时区

汇总信息

最后完成

登录Web 管理页面,第一次登录, 默认的用户名是 Admin ,密码是 zabbix


上面所填写的内容保存在下面文件中
#如果是CentOS下面文件
/etc/zabbix/web/zabbix.conf.php
# 如果是 Ubuntu 则下面文件
/usr/share/zabbix/conf/zabbix.conf.php 实质也是/etc/zabbix/web/zabbix.conf.php软链
接
因为字体的原因乱码

在Windows中找一个中文字体


将字体上传到 Zabbix Server
[root@ubuntu2004 ~]#ls
MSYHBD.TTC MSYHL.TTC MSYH.TTC
[root@ubuntu2004 ~]#dpkg -L zabbix-frontend-php |grep fonts
/usr/share/zabbix/assets/fonts
/usr/share/zabbix/fonts
[root@ubuntu2004 ~]#ll /usr/share/zabbix/assets/fonts/graphfont.ttf
lrwxrwxrwx 1 root root 386月921:13
/usr/share/zabbix/assets/fonts/graphfont.ttf -> /etc/alternatives/zabbix-
frontend-font
[root@ubuntu2004 ~]#ll /etc/alternatives/zabbix-frontend-font
lrwxrwxrwx 1 root root 476月921:13 /etc/alternatives/zabbix-frontend-font ->
/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf
[root@ubuntu2004 ~]#ll /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf
-rw-r--r--1 root root 7570767月302016
/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf
[root@ubuntu2004 ~]#ls /usr/share/fonts/truetype/dejavu/
DejaVuMathTeXGyre.ttf DejaVuSansMono-BoldOblique.ttf
DejaVuSerifCondensed-BoldItalic.ttf
DejaVuSans-BoldOblique.ttf DejaVuSansMono-Bold.ttf
DejaVuSerifCondensed-Bold.ttf
DejaVuSans-Bold.ttf DejaVuSansMono-Oblique.ttf
DejaVuSerifCondensed-Italic.ttf
DejaVuSansCondensed-BoldOblique.ttf DejaVuSansMono.ttf
DejaVuSerifCondensed.ttf
DejaVuSansCondensed-Bold.ttf DejaVuSans-Oblique.ttf DejaVuSerif-
Italic.ttf
DejaVuSansCondensed-Oblique.ttf DejaVuSans.ttf
DejaVuSerif.ttf
DejaVuSansCondensed.ttf DejaVuSerif-BoldItalic.ttf
DejaVuSans-ExtraLight.ttf DejaVuSerif-Bold.ttf
[root@ubuntu2004 ~]#mv /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf{,.bak}
[root@ubuntu2004 ~]#ls
MSYHBD.TTC MSYHL.TTC MSYH.TTC
#找一个字体替换默认字体
root@ubuntu2004 ~]#mv MSYH.TTC /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf
再次查看Web 显示正常

2.2.3 编译安装 Zabbix Server
官方源码编译安装参考文档:
https://www.zabbix.com/documentation/6.0/zh/manual/installation/install
https://www.zabbix.com/documentation/5.0/zh/manual/installation/install
https://www.zabbix.com/documentation/4.0/zh/manual/installation/install
2.2.3.1 安装相关包
CentOS 安装相关包
[root@zabbix-server ~]#yum -y install gcc pcre-devel libxml2-devel php-bcmath
php-mbstring net-snmp net-snmp-devel curl-devel php php-gd php-xml libevent-devel
java-1.8.0-openjdk-devel mariadb mariadb-devel
Ubuntu 安装相关包
[root@ubuntu1804 ~]#apt update
[root@ubuntu1804 ~]#apt -y install apache2 apache2-bin apache2-data apache2-
utils fontconfig-config fonts-dejavu-core fping libapache2-mod-php libapache2-
mod-php7.2 libapr1 libapruti11 1ibaprutil1-dbd-sq7ite3 libaprutil1-ldap
1ibfontconfig1 libgd3 libikseme13 libjbig0 libjpeg-turbo8 libjpeg8 liblua5.2-0
libodbc1 libopenipmi0 libsensors4 libsnmp-base libsnmp30 libsodium23 1ibssh2-1
1ibtiff5 7ibwebp6 1ibxpm4 php-bcmath php-common php-gd php7.2-common php7.2-gd
php7.2-json php7.2-1dap php7.2-mbstring php7.2-mysq1 php7.2-opcache php7.2-
read1ine libxm12-dev libxm12 snmp libsnmp-dev libevent-dev openjdk-8-jdk
libcurl4-openss1-dev php7.2-xm7 snmpd ss1-cert ttf-dejavu-core libmysqlclient-
dev
2.2.3.2 创建用户和组
[root@zabbix-server ~]#groupadd zabbix
[root@zabbix-server ~]#useradd -g zabbix zabbix
2.2.3.3 下载源码包
下载链接:
https://www.zabbix.com/download_sources



[root@zabbix-server ~]#cd /usr/local/src
[root@zabbix-server src]#wget
https://cdn.zabbix.com/zabbix/sources/stable/6.0/zabbix-6.0.4.tar.gz
[root@zabbix-server src]#wget
https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.14.tar.gz
[root@zabbix-server src]#wget
https://cdn.zabbix.com/zabbix/sources/stable/4.0/zabbix-4.0.24.tar.gz
[root@zabbix-server src]#ll zabbix-4.0.24.tar.gz -h
-rw-r--r--1 root root 17M Aug 2415:47 zabbix-4.0.24.tar.gz
2.2.3.4 编译安装
官方链接
https://www.zabbix.com/documentation/6.0/zh/manual/installation/install
https://www.zabbix.com/documentation/5.0/zh/manual/installation/install
https://www.zabbix.com/documentation/4.0/zh/manual/installation/install

范例:
[root@zabbix-server src]#ls
zabbix-4.0.24.tar.gz
[root@zabbix-server src]#tar xf zabbix-4.0.24.tar.gz
[root@zabbix-server zabbix-4.0.24]#./configure --prefix=/apps/zabbix_server --
enable-server --enable-agent --enable-java --with-mysql --with-net-snmp --
with-libcurl --with-libxml
#选项说明
--prefix=/apps/zabbix #指定安装目录
--enab1e-server#安装zabbix server
--enab1e-agent#启用zabbix agent
--enable-agent2#启用zabbix agent2(需要go环境)
--enab1e-proxy#启用proxy的支持
--enable-java#启用java-gateway支持
--with-mysql#使用 MySQL 客户端库
--with-net-snmp#启用Net-SNMP包
--with-libcurl#启用curl包
--with-libxml#启用libxml2客户端库
......
Enable Java gateway: yes
Java gateway details:
Java compiler: javac
Java archiver: jar
LDAP support: no
IPv6 support: no
***********************************************************
* Now run 'make install' *
* *
* Thank you for using Zabbix! *
* <http://www.zabbix.com> *
***********************************************************
[root@zabbix-server zabbix-4.0.24]#make -j 2
[root@zabbix-server zabbix-4.0.24]#make install
[root@zabbix-server ~]#ls /apps/zabbix_server/
bin etc lib sbin share
#创建软链接
[root@zabbix-server ~]#ln -s /apps/zabbix_server/sbin/* /usr/sbin/
[root@zabbix-server ~]#ln -s /apps/zabbix_server/bin/* /usr/bin/
[root@zabbix-server ~]#zabbix_<TAB><TAB>
zabbix_agentd zabbix_get zabbix_sender zabbix_server
#或者
[root@zabbix-server ~]#echo 'PATH=/apps/zabbix_server/bin:$PATH' >
/etc/profile.d/zabbix.sh
[root@zabbix-server ~]#. /etc/profile.d/zabbix.sh
2.2.3.5 准备数据库和相关表
注意:生产环境监控数据比较多,占用空间可能会达到T级别以上,数据库的磁盘需要预留足够的空间
2.2.3.5.1 安装MySQL
#安装MySQL8.0
[root@zabbix-mysql-master ~]##yum -y install mysql-server
[root@zabbix-mysql-master ~]#systemctl enable --now mysqld
[root@zabbix-mysql-server ~]#mysql -uroot -p
Enter password:
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user 'zabbix'@'10.0.0.%' identified by '123456';
mysql> grant all privileges on zabbix.* to 'zabbix'@'10.0.0.%';
#注意:如果使用MySQL8.0和Zabbix不在同一主机,还需要执行下面
mysql>ALTER USER zabbix@'10.0.0.%' IDENTIFIED WITH mysql_native_password BY
'123456';
#或者执行下面
[root@zabbix-mysql-master ~]#echo 'default-authentication-
plugin=mysql_native_password' >> /etc/my.cnf.d/mysql-server.cnf
[root@zabbix-mysql-master ~]#systemctl restart mysqld
2.2.3.5.2 初始化数据库
[root@zabbix-server ~]#ls /usr/local/src/zabbix-4.0.24/database/mysql/*.sql -1
/usr/local/src/zabbix-4.0.24/database/mysql/data.sql
/usr/local/src/zabbix-4.0.24/database/mysql/images.sql
/usr/local/src/zabbix-4.0.24/database/mysql/schema.sql
[root@zabbix-server ~]#mysql -uzabbix -p123456 -h10.0.0.101 zabbix <
/usr/local/src/zabbix-4.0.24/database/mysql/schema.sql
[root@zabbix-server ~]#mysql -uzabbix -p123456 -h10.0.0.101 zabbix <
/usr/local/src/zabbix-4.0.24/database/mysql/images.sql
[root@zabbix-server ~]#mysql -uzabbix -p123456 -h10.0.0.101 zabbix <
/usr/local/src/zabbix-4.0.24/database/mysql/data.sql
注意: 在CentOS8 安装Mariadb-10.3在导入schema.sql 出下面提示错误,而在CentOS7 安装Mariadb5.5 无错误
Row size too large. The maximum row size for the used table type, not counting
BLOBs, is 8126. You have to change some columns to TEXT or BLOBs
2.2.3.5.3 验证数据库和相关表
[root@zabbix-server ~]#mysql -uzabbix -p123456 -h10.0.0.101 zabbix -e 'show
tables;'
+----------------------------+
| Tables_in_zabbix |
+----------------------------+
| acknowledges |
| actions |
| alerts |
| application_discovery |
| application_prototype |
| application_template |
2.2.3.6 修改 Zabbix Server 配置文件
[root@zabbix-server ~]#vim /apps/zabbix-server/etc/zabbix_server.conf
[root@zabbix-server ~]#grep '^[^#]' /apps/zabbix-server/etc/zabbix_server.conf
LogFile=/tmp/zabbix_server.log
DBHost=10.0.0.101
DBName=zabbix
DBUser=zabbix
DBPassword=123456
DBPort=3306
#Timeout=4
#LogSlowQueries=3000
2.2.3.7 启动相关服务
[root@zabbix-server ~]#zabbix_server -c /apps/zabbix-
server/etc/zabbix_server.conf
[root@zabbix-server ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer
Address:Port
LISTEN 01280.0.0.0:22
0.0.0.0:*
LISTEN 0100127.0.0.1:25
0.0.0.0:*
LISTEN 01280.0.0.0:10051
0.0.0.0:*
LISTEN 0128 [::]:22
[::]:*
LISTEN 0100 [::1]:25
[::]:*
[root@zabbix-server ~]#tail /tmp/zabbix_server.log
31096:20200825:144614.763 server #31 started [preprocessing worker #1]
31098:20200825:144614.764 server #33 started [preprocessing worker #3]
31097:20200825:144614.771 server #32 started [preprocessing worker #2]
启动httpd服务
[root@zabbix-server ~]#systemctl enable --now httpd
查看进程
[root@zabbix-server ~]#ps -ef|grep zabbix
zabbix 7651019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server -c /apps/zabbix-server/etc/zabbix_server.conf
zabbix 1173765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: configuration syncer [synced configuration in
0.034778 sec, idle 60 sec]
zabbix 1174765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: housekeeper [startup idle for30 minutes]
zabbix 1175765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: timer #1 [updated 0 hosts, suppressed 0 events in
0.002802 sec, idle 59 sec]
zabbix 1176765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: http poller #1 [got 0 values in 0.001538 sec, idle 5
sec]
zabbix 1177765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: discoverer #1 [processed 0 rules in 0.001681 sec, idle
60 sec]
zabbix 1178765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: history syncer #1 [processed 0 values, 0 triggers in
0.000053 sec, idle 1 sec]
zabbix 1179765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: history syncer #2 [processed 0 values, 0 triggers in
0.000052 sec, idle 1 sec]
zabbix 1180765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: history syncer #3 [processed 0 values, 0 triggers in
0.000015 sec, idle 1 sec]
zabbix 1181765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: history syncer #4 [processed 0 values, 0 triggers in
0.000015 sec, idle 1 sec]
zabbix 1182765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: escalator #1 [processed 0 escalations in 0.003079 sec,
idle 3 sec]
zabbix 1183765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: proxy poller #1 [exchanged data with 0 proxies in
0.000045 sec, idle 5 sec]
zabbix 1184765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: self-monitoring [processed data in0.000037 sec, idle
1 sec]
zabbix 1185765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: task manager [processed 0 task(s) in0.001431 sec,
idle 5 sec]
zabbix 1186765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: poller #1 [got 0 values in 0.000006 sec, idle 5 sec]
zabbix 1187765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: poller #2 [got 0 values in 0.000030 sec, idle 5 sec]
zabbix 1188765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: poller #3 [got 0 values in 0.000006 sec, idle 5 sec]
zabbix 1189765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: poller #4 [got 0 values in 0.000006 sec, idle 5 sec]
zabbix 1190765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: poller #5 [got 0 values in 0.000023 sec, idle 5 sec]
zabbix 1191765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000045 sec,
idle 5 sec]
zabbix 1192765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: trapper #1 [processed data in 0.000000 sec, waiting
for connection]
zabbix 1193765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: trapper #2 [processed data in 0.000000 sec, waiting
for connection]
zabbix 1194765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: trapper #3 [processed data in 0.000000 sec, waiting
for connection]
zabbix 1195765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: trapper #4 [processed data in 0.000000 sec, waiting
for connection]
zabbix 1196765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: trapper #5 [processed data in 0.000000 sec, waiting
for connection]
zabbix 1197765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000030 sec, idle 5
sec]
zabbix 1198765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: alert manager #1 [sent 0, failed 0 alerts, idle
5.011053 sec during 5.011165 sec]
zabbix 1199765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: alerter #1 started
zabbix 1200765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: alerter #2 started
zabbix 1201765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: alerter #3 started
zabbix 1202765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: preprocessing manager #1 [queued 0, processed 1
values, idle 5.002434 sec during 5.002548 sec]
zabbix 1203765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: preprocessing worker #1 started
zabbix 1204765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: preprocessing worker #2 started
zabbix 1205765019:33 ? 00:00:00 /apps/zabbix-
server/sbin/zabbix_server: preprocessing worker #3 started
root 12641212019:37 pts/1 00:00:00 grep--color=auto zabbix
[root@zabbix-server ~]#pstree -p |grep zabbix
| ``-zabbix_server(765)-+-zabbix_server(1173)` |
|---|
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ` |
| ``-zabbix_server(1205)` |
2.2.3.8 配置php和初始化登录WEB页面
[root@zabbix-server ~]#mkdir /var/www/html/zabbix
[root@zabbix-server ~]#cp -a /usr/local/src/zabbix-4.0.24/frontends/php/.
/var/www/html/zabbix/
[root@zabbix-server ~]#ls /var/www/html/zabbix/
actionconf.php assets correlation.php
image.php overview.php srv_status.php
.......

缺失相关包和配置,提示下面失败

安装配置后再访问
[root@zabbix-server ~]#yum -y install php-gd php-xml php-json php-mysqlnd
[root@zabbix-server ~]#vim /etc/php.ini
post_max_size = 16M
max_execution_time =300
max_input_time =300
date.timezone = Asia/Shanghai
[root@zabbix-server ~]#systemctl restart httpd

连接数据库信息

创建配置文件
下载配置文件并上传至目录/var/www/html/zabbix/conf/
[root@zabbix-server ~]#cat /var/www/html/zabbix/conf/zabbix.conf.php
<?php
// Zabbix GUI configuration file.
global $DB;
$DB['TYPE'] ='MYSQL';
$DB['SERVER'] ='10.0.0.101';
$DB['PORT'] ='0';
$DB['DATABASE'] ='zabbix';
$DB['USER'] ='zabbix';
$DB['PASSWORD'] ='123456';
// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] ='';
$ZBX_SERVER='10.0.0.100';
$ZBX_SERVER_PORT='10051';
$ZBX_SERVER_NAME='Zabbix Server';
$IMAGE_FORMAT_DEFAULT= IMAGE_FORMAT_PNG;
再次刷新页面,可以看到成功

Zabbix 前端已经就绪!第一次登录, 默认的用户名是 Admin ,密码是 zabbix


修改PHP文件,防止重复安装
[root@zabbix-server zabbix]#pwd
/var/www/html/zabbix
[root@zabbix-server zabbix]#mv setup.php setup.php.bak
2.2.3.9 启动zabbix agent
[root@zabbix-server ~]#zabbix_agentd
[root@zabbix-server ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer
Address:Port
LISTEN 01280.0.0.0:22
0.0.0.0:*
LISTEN 0100127.0.0.1:25
0.0.0.0:*
LISTEN 01280.0.0.0:10050
0.0.0.0:*
LISTEN 01280.0.0.0:10051
0.0.0.0:*
LISTEN 0128 *:80
*:*
LISTEN 0128 [::]:22
[::]:*
LISTEN 0100 [::1]:25
[::]:*
[root@zabbix-server ~]#lsof -i:10050
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zabbix_ag 2912 zabbix 7u IPv4 43326 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 2913 zabbix 7u IPv4 43326 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 2914 zabbix 7u IPv4 43326 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 2915 zabbix 7u IPv4 43326 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 2916 zabbix 7u IPv4 43326 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 2917 zabbix 7u IPv4 43326 0t0 TCP *:zabbix-agent (LISTEN)
2.2.3.10 验证监控数据

2.2.3.11 创建 service 文件
2.2.3.11.1 Zabbix Server 的 service 文件
[root@zabbix-server ~]#killall zabbix_server
[root@zabbix-server ~]#cat /lib/systemd/system/zabbix-server.service
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/apps/zabbix_server/etc/zabbix_server.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-server
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_server.pid
KillMode=control-group
ExecStart=/apps/zabbix_server/sbin/zabbix_server -c$CONFFILE
ExecStop=/bin/kill -SIGTERM$MAINPID
RestartSec=10s
TimeoutSec=0
[Install]
WantedBy=multi-user.target
[root@zabbix-server ~]#systemctl daemon-reload
[root@zabbix-server ~]#systemctl enable --now zabbix-server.service
2.2.3.11.2 Zabbix agent 的 service 文件
[root@zabbix-server ~]#killall zabbix_agentd
[root@zabbix-server ~]#vim /lib/systemd/system/zabbix-agent.service
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_agentd.pid
KillMode=control-group
ExecStart=/apps/zabbix_server/sbin/zabbix_agentd -c
/apps/zabbix_server/etc/zabbix_agentd.conf
ExecStop=/bin/kill -SIGTERM$MAINPID
RestartSec=10s
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
[root@zabbix-server ~]#systemctl daemon-reload
[root@zabbix-server ~]#systemctl enable --now zabbix-agent.service
2.2.3.12 实现中文界面
默认是英文界面,不支持中文

安装相关中文包
[root@zabbix-server ~]#localectl list-locales |grep zh
[root@zabbix-server ~]#yum -y install langpacks-zh_CN
[root@zabbix-server ~]#localectl list-locales |grep zh
zh_CN
zh_CN.gb18030
zh_CN.gbk
zh_CN.utf8
zh_HK
zh_HK.utf8
zh_SG
zh_SG.gbk
zh_SG.utf8
zh_TW
zh_TW.euctw
zh_TW.utf8
.......
再次刷新页面可以选择中文


2.2.3.13 解决乱码问题
当前系统有些监控项部分显示有乱码,是由于web界面显示为中文但是系统没有相关字体,因此需要准备相关字体文件才能正常显示,



#注意: 文件名一定是小写
[root@zabbix-server ~]#ll /var/www/html/zabbix/assets/fonts/
total 66276
-rw-r--r--1 wang wang 756072 Aug 2415:46 DejaVuSans.ttf
-rw-r--r--1 root root 11787328 Mar 22019 simkai.ttf
-rw-r--r--1 root root 6700204 May 1713:28 simyou.ttf
[root@zabbix-server ~]#sed -i.bak 's/DejaVuSans/simyou/'
/var/www/html/zabbix/include/defines.inc.php
#修改下面两行
define('ZBX_GRAPH_FONT_NAME', 'simyou'); // font file name
define('ZBX_FONT_NAME', 'simyou');
再次刷新页面,乱码消失

2.2.4 容器安装 Zabbix Server
官方文档:
https://www.zabbix.com/documentation/5.0/zh/manual/installation/containers
注意:官方文档有bug
范例:
#先安装docker,此步略
#1.创建专用于Zabbix组件容器的网络:
[root@ubuntu1804 ~]#docker network create --subnet 172.20.0.0/16 --ip-range
172.20.240.0/20 zabbix-net
#2.启动空的MySQL服务器实例
#注意:此步官方文档有bug
[root@ubuntu1804 ~]#docker run --name mysql-server -t \
--restart=unless-stopped \
-eMYSQL_DATABASE="zabbix" \
-eMYSQL_USER="zabbix" \
-eMYSQL_PASSWORD="zabbix_pwd" \
-eMYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
-d mysql:8.0 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
#3.启动Zabbix Java gateway实例
[root@ubuntu1804 ~]#docker run --name zabbix-java-gateway -t \
--network=zabbix-net \
--restart=unless-stopped \
-d zabbix/zabbix-java-gateway:alpine-5.0-latest
#4.启动Zabbix server实例并将该实例与创建的MySQL服务器实例链接
[root@ubuntu1804 ~]#docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-eMYSQL_DATABASE="zabbix" \
-eMYSQL_USER="zabbix" \
-eMYSQL_PASSWORD="zabbix_pwd" \
-eMYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--network=zabbix-net \
-p10051:10051 \
--restart=unless-stopped \
-d zabbix/zabbix-server-mysql:alpine-5.0-latest
#5.启动Zabbix Web界面,并将实例与创建的MySQL服务器和Zabbix server实例链接
[root@ubuntu1804 ~]#docker run --name zabbix-web-nginx-mysql -t \
-eZBX_SERVER_HOST="zabbix-server-mysql" \
-eDB_SERVER_HOST="mysql-server" \
-eMYSQL_DATABASE="zabbix" \
-eMYSQL_USER="zabbix" \
-eMYSQL_PASSWORD="zabbix_pwd" \
-eMYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
-p80:8080 \
--restart=unless-stopped \
-d zabbix/zabbix-web-nginx-mysql:alpine-5.0-latest
[root@ubuntu1804 ~]#docker ps
CONTAINER ID IMAGE COMMAND
CREATED STATUS PORTS
NAMES
72a464ea73a8 zabbix/zabbix-web-nginx-mysql:alpine-5.0-latest "docker-
entrypoint.sh"5 minutes ago Up 5 minutes 8443/tcp, 0.0.0.0:80-
>8080/tcp zabbix-web-nginx-mysql
9d239229ebfe mysql:8.0 "docker-
entrypoint.s…"6 minutes ago Up 6 minutes 3306/tcp, 33060/tcp
mysql-server
6d05971c8622 zabbix/zabbix-server-mysql:alpine-5.0-latest "/sbin/tini
-- /usr/…"8 minutes ago Up 8 minutes 0.0.0.0:10051->10051/tcp
zabbix-server-mysql
dc77a1cf1ca0 zabbix/zabbix-java-gateway:alpine-5.0-latest "docker-
entrypoint.s…"19 minutes ago Up 19 minutes 10052/tcp
zabbix-java-gateway
[root@ubuntu1804 ~]#docker images
REPOSITORY TAG IMAGE ID CREATED
SIZE
zabbix/zabbix-web-nginx-mysql alpine-5.0-latest a3fb50be95b6 4 days
ago 162MB
zabbix/zabbix-java-gateway alpine-5.0-latest 0814670cd5ac 4 days
ago 83.6MB
mysql 8.0 c60d96bd2b77 2 weeks
ago 514MB
zabbix/zabbix-server-mysql alpine-5.0-latest 6c3836e6aa39 3 weeks
ago 67.3MB
#6.启动Zabbix agent
docker run --name zabbix-agent \
-eZBX_HOSTNAME="Zabbix server" \
-eZBX_SERVER_HOST="127.0.0.1" \
--network container:zabbix-server-mysql \
--restart=unless-stopped \
-d zabbix/zabbix-agent:${TAG}
#访问本机的http服务即可,默认用户Admin,密码:zabbix,直接登录无需初始化过程
http://zabbix-server-ip/


2.3 安装 Zabbix Agent
Zabbix Agent 需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端, zabbix server将数据存储到数据库中,zabbix web 访问数据库在前端进行展现和绘图。

安装Zabbix Agent 有三种方式
包安装
二进制安装编译安装
2.3.1 包安装 Zabbix Agent
2.3.1.1 Linux 安装 Zabbix Agent
可以从官方或国内镜像站点下载
https://repo.zabbix.com/zabbix/
https://mirrors.aliyun.com/zabbix/zabbix/
https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/
范例: 在ubuntu20.04 安装 Zabbix Agent2 6.0
[root@ubuntu2004 ~]# wget
https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-
release_6.0-1+ubuntu20.04_all.deb
[root@ubuntu2004 ~]#dpkg -i zabbix-release_6.0-1+ubuntu20.04_all.deb
[root@ubuntu2004 ~]#apt update
#安装agent2
[root@ubuntu2004 ~]#apt install zabbix-agent2
#修改配置
[root@ubuntu2004 ~]#vim /etc/zabbix/zabbix_agent2.conf
Server=zabbix.wang.org
[root@ubuntu2004 ~]#systemctl restart zabbix-agent2.service
[root@ubuntu2004 ~]#ss -ntlp|grep zabbix
LISTEN 0128 *:10050 *:* users:
(("zabbix_agent2",pid=1317,fd=8))
#注意: 后续还需要在Zabbix Server 添加此主机才能实现监控
范例: 在Rocky8上安装直接安装Zabbix agent 2包
[root@rocky8 ~]#
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/6.0/rhel/8/x86_64/zabbix-
agent2-6.0.5-1.el8.x86_64.rpm
#修改配置
[root@rocky8 ~]#vim /etc/zabbix/zabbix_agent2.conf
Server=zabbix.wang.org
[root@rocky8 ~]#systemctl restart zabbix-agent2.service
[root@rocky8 ~]#ss -ntlp|grep zabbix
LISTEN 0128 *:10050 *:* users:
(("zabbix_agent2",pid=1317,fd=8))
#注意: 后续还需要在Zabbix Server 添加此主机才能实现监控
范例: Rocky8 通过配置仓库进行安装
[root@rocky8 ~]#rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-
release-6.0-1.el8.noarch.rpm
[root@centos8 ~]#rpm -Uvh
https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-
1.el8.noarch.rpm
[root@centos8 ~]#rpm -Uvh
https://repo.zabbix.com/zabbix/4.0/rhel/8/x86_64/zabbix-release-4.0-
2.el8.noarch.rpm
#修改为阿里云源
[root@zabbix-server ~]#vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository -$basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/8/x86_64/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
#或者sed修改
[root@centos8 ~]#sed -i.bak
's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#'
/etc/yum.repos.d/zabbix.repo
[root@centos8 ~]#yum -y install zabbix-agent
[root@centos8 ~]#rpm -ql zabbix-agent
/etc/logrotate.d/zabbix-agent
/etc/zabbix/zabbix_agentd.conf
/etc/zabbix/zabbix_agentd.d
/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
/usr/lib/.build-id
/usr/lib/.build-id/0e
/usr/lib/.build-id/0e/5b09aaf28432877d1fb9885bb527d6215463d3
/usr/lib/systemd/system/zabbix-agent.service
/usr/lib/tmpfiles.d/zabbix-agent.conf
/usr/sbin/zabbix_agentd
/usr/share/doc/zabbix-agent
/usr/share/doc/zabbix-agent/AUTHORS
/usr/share/doc/zabbix-agent/COPYING
/usr/share/doc/zabbix-agent/ChangeLog
/usr/share/doc/zabbix-agent/NEWS
/usr/share/doc/zabbix-agent/README
/usr/share/man/man8/zabbix_agentd.8.gz
/var/log/zabbix
/var/run/zabbix
#修改配置
[root@centos8 ~]#vim /etc/zabbix/zabbix_agentd.conf
[root@centos8 ~]#grep '^[^#]' /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.100 #必须指向Zabbix Server,此为必须项
ServerActive=127.0.0.1 #主动模式才需要指向Zabbix Server,此处无需修改
Hostname=10.0.0.104 #修改为当前主机的IP,主动模式才需要,此处可选
Timeout=30#建议修改此值
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@centos8 ~]#systemctl enable --now zabbix-agent.service
[root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 01280.0.0.0:22 0.0.0.0:*
LISTEN 0100127.0.0.1:25 0.0.0.0:*
LISTEN 01280.0.0.0:10050 0.0.0.0:*
LISTEN 0128 [::]:22 [::]:*
LISTEN 0100 [::1]:25 [::]:*
LISTEN 0128 [::]:10050 [::]:*
#查看版本
[root@centos8 ~]#zabbix_agentd -V
zabbix_agentd (daemon) (Zabbix) 5.0.14
Revision 892ce506db 16 July 2021, compilation time: Jul 19202110:33:38
Copyright (C) 2021 Zabbix SIA
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.
This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/).
Compiled with OpenSSL 1.1.1g FIPS 21 Apr 2020
Running with OpenSSL 1.1.1g FIPS 21 Apr 2020
2.3.1.2 Windows 上安装 Agent2
官方下载链接
https://www.zabbix.com/cn/download_agents?
version=6.0+LTS&release=6.0.5&os=Windows&os_version=Any&hardware=amd64&encryptio
n=OpenSSL&packaging=MSI&show_legacy=0





验证端口
C:\Users\lbtoo>netstat -an| find "10050"
TCP 0.0.0.0:10050 0.0.0.0:0 LISTENING
TCP [::]:10050 [::]:0 LISTENING
2.3.2 二进制安装 Zabbix Agent
官方提供了针对不同的OS编译好的程序,进行配置后即可直接使用注意: 此方式在CentOS 8 上存在问题
官方下载链接:
https://www.zabbix.com/download_agents?
version=4.0+LTS&release=4.0.24&os=Linux&os_version=3.0&hardware=amd64&encryption
=No+encryption&packaging=Archive

[root@centos7 ~]#wget
https://cdn.zabbix.com/zabbix/binaries/stable/5.0/5.0.14/zabbix_agent-5.0.14-
linux-3.0-amd64-static.tar.gz
[root@centos7 ~]#wget https://www.zabbix.com/downloads/4.0.24/zabbix_agent-
4.0.24-linux-3.0-amd64-static.tar.gz
[root@centos7 ~]#mkdir -p /apps/zabbix_agent
[root@centos7 ~]#tar xf zabbix_agent-4.0.24-linux-3.0-amd64-static.tar.gz -C
/apps/zabbix_agent/
[root@centos7 ~]#tree /apps/zabbix_agent/
/apps/zabbix_agent/
├── bin
│ ├── zabbix_get
│ └── zabbix_sender
├── conf
│ ├── zabbix_agentd
│ │ ├── userparameter_examples.conf
│ │ └── userparameter_mysql.conf
│ └── zabbix_agentd.conf
└── sbin
└── zabbix_agentd
4 directories, 6 files
[root@centos7 ~]#echo 'PATH=/apps/zabbix_agent/bin:/apps/zabbix_agent/sbin:$PATH'
> /etc/profile.d/zabbix_agent.sh
[root@centos7 ~]#. /etc/profile.d/zabbix_agent.sh
# 修改配置
[root@centos7 ~]#HOST=`hostname -I`
[root@centos7 ~]#sed -i.bak -e "s/Server=127.0.0.1/Server=10.0.0.100/" -e
"s/Hostname=Zabbix server/Hostname=$HOST/"
/apps/zabbix_agent/etc/zabbix_agentd.conf
#启动服务
[root@centos7 ~]#/apps/zabbix_agent/sbin/zabbix_agentd -c
/apps/zabbix_agent/conf/zabbix_agentd.conf
zabbix_agentd [1370]: user zabbix does not exist
zabbix_agentd [1370]: cannot run as root!
[root@centos7 ~]#useradd zabbix
[wang@centos7 ~]$/apps/zabbix_agent/sbin/zabbix_agentd -c
/apps/zabbix_agent/conf/zabbix_agentd.conf
[root@centos7 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0128 *:22 *:*
LISTEN 0100127.0.0.1:25 *:*
LISTEN 0128 *:10050 *:*
LISTEN 0128 [::]:22 [::]:*
LISTEN 0100 [::1]:25 [::]:*
[root@centos7 ~]#killall zabbix_agentd
[root@centos7 ~]#vim /lib/systemd/system/zabbix-agent.service
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_agentd.pid
KillMode=control-group
ExecStart=/apps/zabbix_agent/sbin/zabbix_agentd -c
/apps/zabbix_agent/conf/zabbix_agentd.conf
ExecStop=/bin/kill -SIGTERM$MAINPID
RestartSec=10s
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
[root@zabbix-server ~]#systemctl daemon-reload
[root@zabbix-server ~]#systemctl enable --now zabbix-agent.service
2.3.3 编译安装 Zabbix Agent
编译安装 zabbix agent 和 zabbix server 是同一个源码包,只需指定不同的编译选项即可
[root@centos8 ~]#yum -y install gcc pcre-devel
[root@centos8 ~]#useradd zabbix
[root@centos8 ~]#wget https://cdn.zabbix.com/zabbix/sources/stable/4.0/zabbix-
4.0.24.tar.gz
cd /usr/local/src
[root@centos8 ~]#tar xf zabbix-4.0.24.tar.gz
[root@centos8 ~]#cd zabbix-4.0.24/
[root@centos8 zabbix-4.0.24]#./configure --prefix=/apps/zabbix_agent --enable-
agent
[root@centos8 zabbix-4.0.24]#make && make install
[root@centos8 zabbix-4.0.24]#tree /apps/zabbix_agent/
/apps/zabbix_agent/
├── bin
│ ├── zabbix_get
│ └── zabbix_sender
├── etc
│ ├── zabbix_agentd.conf
│ └── zabbix_agentd.conf.d
├── lib
│ └── modules
├── sbin
│ └── zabbix_agentd
└── share
└── man
├── man1
│ ├── zabbix_get.1
│ └── zabbix_sender.1
└── man8
└── zabbix_agentd.8
10 directories, 7 files
#修改配置
[root@centos8 ~]#HOST=`hostname -I`
[root@centos8 ~]#sed -i.bak -e "s/Server=127.0.0.1/Server=10.0.0.100/" -e
"s/Hostname=Zabbix server/Hostname=$HOST/"
/apps/zabbix_agent/etc/zabbix_agentd.conf
#创建service文件
[root@centos8 ~]#vim /lib/systemd/system/zabbix-agent.service
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_agentd.pid
KillMode=control-group
ExecStart=/apps/zabbix_agent/sbin/zabbix_agentd -c
/apps/zabbix_agent/etc/zabbix_agentd.conf
ExecStop=/bin/kill -SIGTERM$MAINPID
RestartSec=10s
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
[root@centos8 ~]#systemctl daemon-reload
[root@centos8 ~]#systemctl enable --now zabbix-agent.service
[root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer
Address:Port
LISTEN 01280.0.0.0:22
0.0.0.0:*
LISTEN 0100127.0.0.1:25
0.0.0.0:*
LISTEN 01280.0.0.0:10050
0.0.0.0:*
LISTEN 0128 [::]:22
[::]:*
LISTEN 0100 [::1]:25
[::]:*
2.3.4 一键编译安装 Zabbix Agent 脚本
范例1: CentOS和Ubuntu 通用
[root@ubuntu1804 ~]#cat install_zabbix_agent_src.sh
#!/bin/bash
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#Date: 2020-08-27
#FileName: install_zabbix_agent_src.sh
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
ZABBIX_VER=5.0.13
FILE=zabbix-${ZABBIX_VER}.tar.gz
INSTALL_DIR=/apps/zabbix_agent
SERVER=10.0.0.100
HOST=`hostname -I`
. /etc/os-release
color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo-n"$1" && $MOVE_TO_COL
echo-n"["
if [ $2="success"-o$2="0" ] ;then
${SETCOLOR_SUCCESS}
echo-n$" OK "
elif [ $2="failure"-o$2="1" ] ;then
${SETCOLOR_FAILURE}
echo-n$"FAILED"
else
${SETCOLOR_WARNING}
echo-n$"WARNING"
fi
${SETCOLOR_NORMAL}
echo-n"]"
echo
}
check(){
wget
https://cdn.zabbix.com/zabbix/sources/stable/${ZABBIX_VER%.*}/zabbix-$ZABBIX_VER
.tar.gz
[ -e${FILE} ] || { color "$FILE文件不存在,请检查"1 ; exit1; }
}
prepare (){
if [ $ID="centos"$ID="rocky" ];then
yum -y install gccmake pcre-devel || { color "zabbix agent 相关包安装失
败,请检查"1 ;exit; }
else
apt -y install gccmake || { color "zabbix agent 相关包安装失败,请检查"1
;exit; }
fi
id zabbix &> /dev/null || useradd -r zabbix
}
install() {
tar xf $FILE
cd zabbix-$ZABBIX_VER
./configure --prefix=${INSTALL_DIR}--enable-agent
make && make install
}
config () {
sed-i.bak -e"s/Server=127.0.0.1/Server=$SERVER/"-e"s/Hostname=Zabbix
server/Hostname=$HOST/"${INSTALL_DIR}/etc/zabbix_agentd.conf
echo'PATH=${INSTALL_DIR}/bin/:${INSTALL_DIR}/sbin/:$PATH' >
/etc/profile.d/zabbix_agent.sh
}
service (){
cat > /lib/systemd/system/zabbix-agent.service <<EOF
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_agentd.pid
KillMode=control-group
ExecStart=${INSTALL_DIR}/sbin/zabbix_agentd -c
${INSTALL_DIR}/etc/zabbix_agentd.conf
ExecStop=/bin/kill -SIGTERM$MAINPID
RestartSec=10s
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now zabbix-agent.service
systemctl is-active zabbix-agent.service && color "Zabbix Agent 安装完成并启动"
0
}
check
prepare
install
config
service
范例2: 只针对CentOS系统
[root@centos8 ~]#cat install_zabbix_agent_for_centos.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#FileName: install_zabbix_agent_for_centos.sh
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
. /etc/init.d/functions
VERSION=zabbix-4.0.24
FILE=${VERSION}.tar.gz
SERVER=10.0.0.100
HOST=`hostname -I`
check(){
[ -e${FILE} ] || { action "$FILE文件不存在,请检查"false ; exit1; }
}
prepare (){
yum -y install gcc pcre-devel || { action "zabbix agent 相关包安装失败,请检查"
false ;exit; }
id zabbix &> /dev/null || useradd -r zabbix
}
install() {
tar xf $FILE
cd$VERSION
./configure --prefix=/apps/zabbix_agent --enable-agent
make && make install
}
config () {
sed-i.bak -e"s/Server=127.0.0.1/Server=$SERVER/"-e"s/Hostname=Zabbix
server/Hostname=$HOST/" /apps/zabbix_agent/etc/zabbix_agentd.conf
}
service (){
cat > /lib/systemd/system/zabbix-agent.service <<EOF
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_agentd.pid
KillMode=control-group
ExecStart=/apps/zabbix_agent/sbin/zabbix_agentd -c
/apps/zabbix_agent/etc/zabbix_agentd.conf
ExecStop=/bin/kill -SIGTERM$MAINPID
RestartSec=10s
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now zabbix-agent.service && action "Zabbix Agent 安装完成
并启动"
}
env(){
echo'PATH=/apps/zabbix_agent/bin/:/apps/zabbix_agent/sbin/:$PATH' >
/etc/profile.d/zabbix_agent.sh
}
check
prepare
install
config
service
env
2.3.5 利用 Ansible 批量部署 Zabbix Agent
#先实现所有被监控主机的ssh key 验证
过程略
#由于ansible是在Ubuntu上安装,需要在所有Zabbix Agent上安装python环境
[root@ubuntu1804 ~]#ln -s python3 /usr/bin/python
[root@centos8 ~]# yum -y install python3 && ln -s python3 /usr/bin/python
#安装ansible
[root@zabbix-server ~]#apt -y install ansible
[root@zabbix-server ~]#grep -Ev "^$|#" /etc/ansible/hosts
[web]
10.0.0.[7:9]
#检查环境
[root@zabbix-server ~]#ansible web -m ping
10.0.0.7 | SUCCESS => {
"changed": false,
"ping": "pong"
}
10.0.0.8 | SUCCESS => {
"changed": false,
"ping": "pong"
}
10.0.0.9 | SUCCESS => {
"changed": false,
"ping": "pong"
}
[root@zabbix-server ~]#ls /opt
install_zabbix_agent.yml templates
[root@zabbix-server ~]#grep -Ev '^$|#' /opt/templates/zabbix_agentd.conf.j2
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server={{ zabbix_server }}
ServerActive={{ zabbix_server }}
Hostname={{ ansible_eth0.ipv4.address }}
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@zabbix-server ~]#cat /opt/install_zabbix_agent.yml
---
#install zabbix agent
- hosts: web
remote_user: root
serial: 1
vars:
zabbix_server: "10.0.0.100"
zabbix_ver: "5.0"
tasks:
- name: install repo package for CentOS 7
yum:
name: https://repo.zabbix.com/zabbix/{{ zabbix_ver }}/rhel/{{
ansible_distribution_major_version }}/x86_64/zabbix-release-{{ zabbix_ver
}}-1.el{{ ansible_distribution_major_version }}.noarch.rpm
when:
- ansible_facts['distribution'] =="CentOS"
- ansible_facts['distribution_major_version'] =="7"
- name: install repo package for CentOS 8
dnf:
name: https://repo.zabbix.com/zabbix/{{ zabbix_ver }}/rhel/{{
ansible_distribution_major_version }}/x86_64/zabbix-release-{{ zabbix_ver
}}-1.el{{ ansible_distribution_major_version }}.noarch.rpm
when:
- ansible_facts['distribution'] =="CentOS"
- ansible_facts['distribution_major_version'] =="8"
- name: download repo package for Ubuntu 18.04
get_url:
url: https://repo.zabbix.com/zabbix/{{ zabbix_ver
}}/ubuntu/pool/main/z/zabbix-release/zabbix-release_{{ zabbix_ver }}-1+{{
ansible_distribution_release }}_all.deb
dest: /opt/
when:
- ansible_facts['distribution'] =="Ubuntu"
- ansible_facts['distribution_major_version'] =="18"
- name: install repo package for ubuntu 18.04
shell: dpkg -i /opt/zabbix-release_{{ zabbix_ver }}-1+{{
ansible_distribution_release }}_all.deb
when:
- ansible_facts['distribution'] =="Ubuntu"
- ansible_facts['distribution_major_version'] =="18"
- name: aliyun repo for CentOS
replace:
path: /etc/yum.repos.d/zabbix.repo
regexp: 'repo.zabbix.com'
replace: 'mirrors.aliyun.com/zabbix'
when: ansible_facts['distribution'] =="CentOS"
- name: aliyun repo for Ubuntu 18.04
replace:
path: /etc/apt/sources.list.d/zabbix.list
regexp: 'repo.zabbix.com'
replace: 'mirrors.aliyun.com/zabbix'
when:
- ansible_facts['distribution'] =="Ubuntu"
- ansible_facts['distribution_major_version'] =="18"
- name: install zabbix agent packages for CentOS 7
yum: name=zabbix-agent
when:
- ansible_facts['distribution'] =="CentOS"
- ansible_facts['distribution_major_version'] =="7"
- name: install zabbix agent packages for CentOS 8
dnf: name=zabbix-agent
when:
- ansible_facts['distribution'] =="CentOS"
- ansible_facts['distribution_major_version'] =="8"
- name: install zabbix agent packages for ubuntu 18.04
apt:
name: zabbix-agent
update_cache: yes
when:
- ansible_facts['distribution'] =="Ubuntu"
- ansible_facts['distribution_major_version'] =="18"
- name: zabbix agent config file
template: src=zabbix_agentd.conf.j2 dest=/etc/zabbix/zabbix_agentd.conf
- name: start zabbix agent service
service: name=zabbix-agent state=restarted enabled=yes
#开始批量部署
[root@zabbix-server ~]#ansible-playbook /opt/install_zabbix_agent.yml
#验证安装是否成功
[root@ubuntu1804 ~]#zabbix_agentd -V
zabbix_agentd (daemon) (Zabbix) 5.0.14
Revision 892ce506db 16 July 2021, compilation time: Jul 16202114:45:07
Copyright (C) 2021 Zabbix SIA
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.
This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/).
Compiled with OpenSSL 1.1.1 11 Sep 2018
Running with OpenSSL 1.1.1 11 Sep 2018
[root@ubuntu1804 ~]#systemctl is-active zabbix-agent.service
active
2.3.6 利用 zabbix_get 工具测试 Zabbix Agent 是否正常
利用 zabbix_get 工具可以测试 Zabbix Agent 是否正常
Zabbix Agent 内置的监控项
https://www.zabbix.com/documentation/5.0/zh/manual/config/items/itemtypes/zabbix
_agent
不同平台支持 Zabbix agent监控项:
https://www.zabbix.com/documentation/5.0/zh/manual/appendix/items/supported_by_p
latform
范例: Ubuntu20.04安装 Zabbix_get
[root@ubuntu2004 ~]#wget wget
https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-
release_6.0-1+ubuntu20.04_all.deb
[root@ubuntu2004 ~]#dpkg -i zabbix-release_6.0-1+ubuntu20.04_all.deb
[root@ubuntu2004 ~]#apt update
[root@ubuntu2004 ~]#apt -y install zabbix-get
[root@ubuntu2004 ~]#zabbix_get -V
zabbix_get (Zabbix) 6.0.5
Revision 8da3e1f8419 30 May 2022, compilation time: May 30202206:40:36
Copyright (C) 2022 Zabbix SIA
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.
This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/).
Compiled with OpenSSL 1.1.1f 31 Mar 2020
Running with OpenSSL 1.1.1f 31 Mar 2020
范例: Rocky8 安装 zabbix_get
[root@rocky8 ~]#rpm -ivh
https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/8/x86_64/zabbix-get-
6.0.5-1.el8.x86_64.rpm
[root@rocky8 ~]#zabbix_get -V
zabbix_get (Zabbix) 6.0.5
Revision 8da3e1f8419 30 May 2022, compilation time: May 30202213:41:39
Copyright (C) 2022 Zabbix SIA
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.
This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/).
Compiled with OpenSSL 1.1.1g FIPS 21 Apr 2020
Running with OpenSSL 1.1.1k FIPS 25 Mar 2021
范例: 使用zabbix_get 工具查看验证agent是否正常
#返回1表示正常
[root@zabbix-server ~]#/apps/zabbix_server/bin/zabbix_get -s 10.0.0.103 -p 10050
-k "agent.ping"
1
[root@zabbix-server ~]#/apps/zabbix_server/bin/zabbix_get -s 127.0.0.1 -p 10050 -
k "agent.ping"
1
#故障现象,可能为agent主机的网络不通导致,agent服务没有启动,配置错误如:Server错误地
址,StartAgents=0等
[root@zabbix-server ~]#/apps/zabbix_server/bin/zabbix_get -s 10.0.0.102 -p 10050
-k "agent.ping"
zabbix_get [9147]: Get value error: cannot connect to [[10.0.0.102]:10050]: [113]
No route to host
#故障现象,一般为主标主机没有启动agent
[root@zabbix-server ~]#zabbix_get -s 10.0.0.7 -p 10050 -k "agent.ping"
zabbix_get [19982]: Get value error: cannot connect to [[10.0.0.7]:10050]: [111]
Connection refused
#故障现象,agent 没有将server指令指向server的地址,导致server无法获取agent的信息
[root@zabbix-server ~]#/apps/zabbix_server/bin/zabbix_get -s 10.0.0.100 -p 10050
-k "agent.ping"
zabbix_get [9162]: Check access restrictions in Zabbix agent configuration
范例: 利用zabbix_get 获取指定的监控项
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -p 10050 -k "system.hostname"
centos8.magedu.org
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -p 10050 -k "system.uname"
Linux centos8.magedu.org 4.18.0-240.el8.x86_64 #1 SMP Fri Sep 25 19:48:47 UTC
2020 x86_64
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -p 10050 -k "system.users.num"
2
#检查端口是否打开
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -p 10050 -k "net.tcp.port[,22]"
1
#查看sshd进程数
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -p 10050 -k "proc.num[sshd,,,]"
3
#查看zabbix_agentd进程数
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -p 10050 -k
'proc.num[zabbix_agentd]'
6
范例: 使用Zabbix WEB 测试是否agent 正常

2.3.7 Zabbix Agent2 安装和配置
Zabbix agent 2 是新一代的 Zabbix agent,在Zabbix 4.4的版本时已经推出. 未来可能会代替 Zabbix agent
官方说明
https://www.zabbix.com/documentation/5.0/manual/concepts/agent2
Zabbix Agent2 特点
减少 TCP 连接的数量
基于 go 开发,支持更大的并发性检查
插件易于扩展。插件应该能够:
-
提供琐碎的检查,包括只有几个简单的代码行
-
提供复杂的检查,包括长期运行的脚本和独立的数据收集,并定期发回数据
-
是 Zabbix agent 的替代版版本(因为它支持所有以前的功能)
-
agent2是多线程模式,agent是多进程模式
对比 Agent和Agent2 官方链接
https://www.zabbix.com/documentation/5.0/zh/manual/appendix/agent_comparison
| 参数 | Zabbix agent | Zabbix agent 2 |
|---|---|---|
| 程序设计语言 | C | 一部分使用C,其他用go |
| 守护进程 | yes | no (Windows 5.0.4之后版本支持) |
| 扩展支持 | 自定义C的可加载模块。 | 自定义GO的插件。 |
| 请求 | ||
| 支持平台 | Linux, IBM AIX, FreeBSD, NetBSD, OpenBSD, HP-UX, Mac OS X, Solaris: 9, 10, 11, Windows:从 xp开始所有的桌面和服务端版本。 |
Linux, Windows:从xp开始所有的桌面和服务端版本。 |
| GnuTLS 3.1.18 and newer OpenSSL |
||
| 支持的加密库 | 1.0.1, 1.0.2, 1.1.0, 1.1.1 SSL库- tested with versions 2.7.4, 2.8.2 (某些限制的使用,查看加密详情页). |
Linux: OpenSSL 1.0.1和最新版本在Zabbix 4.4.8之后支持。MS Windows: OpenSSL 1.1.1或者最新版. OpenSSL库必须开启PSK,否则LibreSSL不支持. |
| 监控进程 | ||
| 进程 | 每个server/proxy都有独立的进程。 | 单个进程多线程。 这最大的线程数由GOMAXPROCS环境变量决定。 |
| 指标 | UNIX:查看支持的 items. Windows:查看指定Windows版本的监控项. |
UNIX: Zabbix agent支持所有指标。 其他的, agent2提供Docker, Memcached, MySQL, PostgreSQL, Redis, systemd (查看agent2的监控项)的Zabbix-native监控方案 Windows: Zabbix agent支持所有指标和HTTPS检查 net.tcp.service* , LDAP.其他的, agent2提供关于 PostgreSQL, Redis的Zabbix-native监控方案。 |
| 并发 | 单进程按监控项顺序进行检查 | 来自不同插件的检查或一个插件内的多个检查可以同时执行。 |
| 计划/灵活间隔 | 仅支持被动检查。 | 支持主动检查。 |
| 第三方 traps |
no | yes |
| Additional features |
||
| 永久存储 | no | yes |
| 超时设置 | 只能定义agent级别。 | 超时插件可以覆盖在agent上的级别超时设置。 |
| 参数 | Zabbix agent | Zabbix agent 2 |
|---|---|---|
| 删除用户权限 | yes (Unix-like systems only) |
no |
| 用户可配 | ||
| 置密码套件 | yes | no |
Agent2 使用说明
https://www.zabbix.com/documentation/5.0/zh/manpages/zabbix_agent2
范例: Rocky8 安装Zabbix Agent2
# 从国内镜像下载
[root@rocky8 ~]#rpm -ivh
https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/8/x86_64/zabbix-
agent2-6.0.5-1.el8.x86_64.rpm
[root@rocky8 ~]#rpm -ql
https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/8/x86_64/zabbix-
agent2-6.0.5-1.el8.x86_64.rpm
warning:
https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/8/x86_64/zabbix-
agent2-6.0.5-1.el8.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID a14fe591:
NOKEY
/etc/logrotate.d/zabbix-agent2
/etc/zabbix/zabbix_agent2.conf
/etc/zabbix/zabbix_agent2.d
/etc/zabbix/zabbix_agent2.d/plugins.d/ceph.conf
/etc/zabbix/zabbix_agent2.d/plugins.d/docker.conf
/etc/zabbix/zabbix_agent2.d/plugins.d/memcached.conf
/etc/zabbix/zabbix_agent2.d/plugins.d/modbus.conf
/etc/zabbix/zabbix_agent2.d/plugins.d/mongodb.conf
/etc/zabbix/zabbix_agent2.d/plugins.d/mqtt.conf
/etc/zabbix/zabbix_agent2.d/plugins.d/mysql.conf
/etc/zabbix/zabbix_agent2.d/plugins.d/oracle.conf
/etc/zabbix/zabbix_agent2.d/plugins.d/postgres.conf
/etc/zabbix/zabbix_agent2.d/plugins.d/redis.conf
/etc/zabbix/zabbix_agent2.d/plugins.d/smart.conf
/usr/lib/.build-id
/usr/lib/.build-id/88
/usr/lib/.build-id/88/e20f765be60a306e65225d3110fae01371ddee
/usr/lib/systemd/system/zabbix-agent2.service
/usr/lib/tmpfiles.d/zabbix_agent2.conf
/usr/sbin/zabbix_agent2
/usr/share/doc/zabbix-agent2
/usr/share/doc/zabbix-agent2/AUTHORS
/usr/share/doc/zabbix-agent2/COPYING
/usr/share/doc/zabbix-agent2/ChangeLog
/usr/share/doc/zabbix-agent2/NEWS
/usr/share/doc/zabbix-agent2/README
/usr/share/man/man8/zabbix_agent2.8.gz
/var/log/zabbix
/var/run/zabbix
[root@rocky8 ~]#vim /etc/zabbix/zabbix_agent2.conf
Server=zabbix.wang.org
[root@rocky8 ~]#systemctl enable --now zabbix-agent2.service
[root@rocky8 ~]#ss -ntlp|grep zabbix
LISTEN 0128 *:10050 *:* users:
(("zabbix_agent2",pid=22792,fd=8))
#Zabbix Server 测试连接
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -k agent.ping
1


过一会儿会变绿


范例: 安装和配置Zabbix agent2
#停止agent 防止端口10050/tcp冲突
[root@ubuntu1804 ~]#systemctl disable --now zabbix-agent
#安装
[root@ubuntu1804 ~]#apt -y install zabbix-agent2
[root@centos8 ~]#yum -y install zabbix-agent2
#配置文件和agent相同
[root@ubuntu1804 ~]#grep -vE '^$|#' /etc/zabbix/zabbix_agent2.conf
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=10.0.0.100 #修改此行
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
[root@ubuntu1804 ~]#systemctl restart zabbix-agent2
#在Zabbix Server测试
[root@zabbix-server ~]#zabbix_get -s 10.0.0.9 -k 'agent.ping'
1
#agent2是多线程
[root@rocky8 ~]#pstree -p|grep zabbix_agent2
`-zabbix_agent2(1825)-+-{zabbix_agent2}(1826)
|-{zabbix_agent2}(1827)
|-{zabbix_agent2}(1828)
|-{zabbix_agent2}(1829)
|-{zabbix_agent2}(1830)
|-{zabbix_agent2}(1831)
`-{zabbix_agent2}(1833)
#agent是多进程
[root@rocky8 ~]#pstree -p | grep zabbix_agent
`-zabbix_agentd(1448)-+-zabbix_agentd(1449)
|-zabbix_agentd(1450)
|-zabbix_agentd(1451)
|-zabbix_agentd(1452)
`-zabbix_agentd(1453)
2.4 案例: 将Zabbix Server的MySQL 数据库迁移到独立的 MySQL服务器
#停止 Zabbix 服务
[root@zabbix-server ~]#systemctl stop zabbix-server.service
#备份数据库
[root@zabbix-server ~]#mysqldump -uroot -A -F --single-transaction >
/data/all.sql
[root@zabbix-server ~]#systemctl disable --now mysql
#在独立数据库服务器上安装并恢复数据库
[root@mysql-server ~]#apt -y install mysql-server
[root@mysql-server ~]#vim /etc/mysql/mysql.conf.d/mysqld.cnf
#注释两行
#bind-address = 127.0.0.1
#mysqlx-bind-address = 127.0.0.1
[root@mysql-server ~]#systemctl restart mysql
[root@mysql-server ~]#mysql < all.sql
#重新授权用户允许远程连接zabbix数据库
[root@mysql-server ~]#mysql
mysql>create user zabbix@'10.0.0.%' identified by '123456';
mysql>grant all privileges on zabbix.* to zabbix@'10.0.0.%';
#将php的配置指向新的数据库服务器IP
[root@zabbix-server ~]#vim /usr/share/zabbix/conf/zabbix.conf.php
$DB['SERVER'] ='10.0.0.101';
#将Zabbix Server的配置指向新的数据库服务器IP
[root@zabbix-server ~]#vim /etc/zabbix/zabbix_server.conf
DBHost=10.0.0.101
DBPort=3306
#重启服务生效
[root@zabbix-server ~]#systemctl start zabbix-server.service
3 Zabbix 核心功能
3.1 使用现有模板和监控项监控主机和应用
内置模板参考链接:
https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates
使用现有模板和监控项监控主机流程
-
在被监控的主机上安装Zabbix Agent ,建议和 Zabbix Server 同一个版本
-
配置 Zabbix agent的配置文件关键两项,并重启服务生效
Server = <Zabbix_Server_IP>
Hostname=<本机IP>
-
在Zabbix Server 上使用 zabbix_get 工具测试是否正常连接被监控主机
-
在Zabbix Server 添加被监控主机
-
在Zabbix WEB 添加已有的模板至被监控的主机
-
在Zabbix WEB 观察是否有新数据生成
3.1.1 监控 Linux 主机
监控前先确保被监控主机已经安装好Zabbix agent并启动
LInux 主机模板参考链接:
https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/os/linux
3.1.1.1 添加主机


3.1.1.2 关联内置模板
模板是一些事先定义好的相关监控项的集合,直接关联模板,比一个一个加入监控项要方便很多模板分为内置模板和自定义模板
内置模板参看:
https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates
内置的监控项
https://www.zabbix.com/documentation/5.0/zh/manual/config/items/itemtypes/zabbix
_agent
关联内置模板: Template OS linux



3.1.1.3 确认成功
等一会儿可以看到下面 ZBX 变绿色,表示成功

3.1.1.4 查看监控数据

3.1.1.5 修改自动发现的时间间隔
默认分区和网络的监控间隔较长,修改间隔到合适时长
通常生产中一个主机的监控项可能有100个左右,为了控制监控压力,在实现高可用的情况下,时间间隔也不宜太短,一般使用5分钟的时间间隔较常见



过一会可以看到磁盘的数据

可以观察到网卡的流量

3.1.2 监控 Windows 主机
注意: 要监控 Windows 需要提前关掉 Windows 防火墙和其它防火墙软件,如火绒等,否则可能会失败
3.1.2.1 安装 Zabbix Agent2
https://www.zabbix.com/cn/download_agents?
version=6.0+LTS&release=6.0.5&os=Windows&os_version=Any&hardware=amd64&encryptio
n=OpenSSL&packaging=Archive&show_legacy=0
下载链接
https://cdn.zabbix.com/zabbix/binaries/stable/6.0/6.0.5/zabbix_agent2-6.0.5-
windows-amd64-openssl.msi
https://cdn.zabbix.com/zabbix/binaries/stable/6.0/6.0.5/zabbix_agent2-6.0.5-
windows-amd64-openssl-static.zip
https://cdn.zabbix.com/zabbix/binaries/stable/5.0/5.0.24/zabbix_agent-5.0.24-
windows-amd64-openssl.msi
https://cdn.zabbix.com/zabbix/binaries/stable/5.0/5.0.24/zabbix_agent2-5.0.24-
windows-amd64-openssl.msi







验证端口
C:\Users\lbtoo>netstat -an| find "10050"
TCP 0.0.0.0:100500.0.0.0:0 LISTENING
TCP [::]:10050 [::]:0 LISTENING
如果下载的 Archive 包,解压缩,修改zabbix_agent2.conf
#修改配置文件 c:\zabbix_agents2\conf\zabbix_agent2.conf
...
Server=zabbix.wang.org
ServerActive=zabbix.wang.org
Hostname=windows10
#以管理员身份运行cmd,将zabbix命令注册为服务、然后启动该服务;
c:\zabbix_agent2\bin\zabbix_agentd.exe -c
c:\zabbix_agent2\conf\zabbix_agent2.conf --
install
#查看端口
netstat -an|find "10050"
在Zabbix Server 测试连接agent
[root@zabbix-server ~]#zabbix_get -s 10.0.0.1 -k agent.ping
1
3.1.2.2 通过Web 配置 Zabbix Server 监控 Windows 主机

关联内置模板 windows by Zabbix agent


稍等一分钟, ZBX字体变绿

查看最新数据

查看图形显示

3.1.3 监控 Nginx 服务
nginx 模板参考:
https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/app/nginx_http
3.1.3.1 查看 nginx 内置模板和修改宏定义
使用内置模板: Template App Nginx by HTTP




修改模板中的宏定义值status页面的URL
3.1.3.2 修改模板的时间间隔
为方便观察结果,修改模板中监控项的更新的时间间隔为1m




3.1.3.3 安装和配置nginx服务
[root@centos8 ~]#yum -y install nginx
[root@centos8 ~]#vim /etc/nginx/nginx.conf
http {
server {
location / {
}
#添加下面三行,修改basic_status为/status和前面zabbix的模板定义的路径要保持一致
location = /status {
stub_status;
}
}
}
[root@centos8 ~]#systemctl enable --now nginx

3.1.3.4 添加监控的主机并关联模板
使用内置模板: Template App Nginx by HTTP

.jpg)



3.1.3.5 查看监控数据


3.1.4 监控 Php-fpm 服务
php-fpm 模板参考:
https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/app/php-
fpm_agent
3.1.4.1 在前面nginx基础上实现php-fpm服务
[root@centos8 ~]#yum -y install php-fpm
[root@centos8 ~]#vim /etc/php-fpm.d/www.conf
listen=127.0.0.1:9000
pm.status_path = /php_status
ping.path = /ping
[root@centos8 ~]#systemctl enable --now php-fpm.service
#修改nginx的配置
[root@centos8 ~]#vim /etc/nginx/nginx.conf
.....
location / {
}
location = /status {
stub_status;
}
location ~ ^/(ping|php_status)$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
#fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
.......
[root@centos8 ~]#systemctl restart nginx
#浏览器测试访问可以看到下面页面


3.1.4.2 修改内置模板
注意: 选择正确的模板
使用 Zabbix 内置模板 Template App PHP-FPM by Zabbix agent

修改内置模板的监控间隔


修改内置模板的宏定义,注意要和前面php-fpm的路径相匹配

3.1.4.3 关联内置模板到监控的主机
使用 Zabbix 内置模板 Template App PHP-FPM by Zabbix agent


.jpg)

3.1.4.4 查看监控结果

3.2 自定义模板 Templates 和监控项 Items
上面对Linux系统的监控是使用系统内置模板的监控项,虽然 Zabbix 内置的模板及其包括的监控项已经很丰富
但是内置的监控项可能不一定适合当前环境,或者有些不需要的监控项,或者需要的监控项并没有提供
因此实际生产中仍可能需要通过自定义监控项来满足当前环境的监控需求
自定义模板和监控项实现过程
-
在Zabbix 被监控主机上编写自定义监控项的取值的脚本,并加执行权限
-
在Zabbix 被监控主机上的配置文件中添加自定义监控项,指定 key 和对 key 赋值的脚本及参数
-
在Zabbix Server 上使用 zabbix_get 工具测试是否能取到自定义监控项信息
-
在Zabbix Web 创建模板,在模板中添加自定义监控项
-
在Zabbix Web 将模板关联至被监控的主机
-
导出自定义模板可以在其它 Zabbix Server 复用
除了自定义模板,也可以从zabbix网站查找适合自已的模板
https://share.zabbix.com/

3.2.1 自定义监控项
系统内置的监控项如下
https://www.zabbix.com/documentation/5.0/zh/manual/config/items/itemtypes/zabbix
_agent
内置的监控项无法满足要求,可以自定义监控项
3.2.1.1 自定义监控项配置
监控项键值的格式
https://www.zabbix.com/documentation/5.0/zh/manual/config/items/item/key

客户端可以自定义监控项,在Zabbix Agent 配置文件添加内容,格式如下
#cat /etc/zabbix/zabbix_agentd.conf
#cat /etc/zabbix/zabbix_agent2.conf
UserParameter=<key>,<shell command>
Include=/etc/zabbix/zabbix_agentd.d/*.conf
#或者创建独立的自定义文件
#cat /etc/zabbix/zabbix_agentd.d/*.conf
#cat /etc/zabbix/zabbix_agent2.d/*.conf
UserParameter=<key>,<shell command>
说明:
key 必须整个系统唯一。注意大小写是敏感的, Key名允许的字符如下
0-9a-zA-Z_-.
key使用 [*] 用于定义该key接受括号内的参数。参数需在配置监控项时给出;参数禁止使用下列字符:\ ’ ” ` * ? [ ] { } ~ $ ! & ; ( ) <>
- Command:命令用于生成key对应的值。可以在命令中使用位置引用$1 … $9来引用监控项Key中的相应参数。Zabbix解析监控项Key的[]中包含的参数,并相应地替换$1,…,$9。$0会替换为完整的原始命令(在对$0,…,$9执行替换之前的命令)运行。不管位置参数($0,…,$9)是用双引号( “ )还是单引号( ’ )括起来,都会解析位置引用
测试监控项
在Zabbix Agent 上执行测试
#不需要重启服务:
zabbix_agent -t"在客户端定义的key名[arg1,arg2,...]"
zabbix_agent2 -t"在客户端定义的key名[arg1,arg2,...]"
在Zabbix Server上可以使用zabbix_get工具获取自定义监控项
#需要重启服务:systemctl restart zabbix-agent2.service
zabbix_get -s客户端IP -p10050-k"在客户端定义的key名[arg1,arg2,...]"
注意:
如果用脚本实现首行必须加shebang机制如果编译安装的程序,需要写程序的完整路径
3.2.1.2 宏Macros
另外Zabbix 支持用户自定义宏,即支持变量定义
自定义宏格式为: {$macrosz_name}
官方文档
https://www.zabbix.com/documentation/5.0/zh/manual/appendix/macros
3.2.1.3 自定义监控项配置案例
范例:取根文件系统的空间利用率
[root@centos8 ~]#cat /etc/zabbix/zabbix_agentd.d/test.conf
[root@centos8 ~]#cat /etc/zabbix/zabbix_agent2.d/test.conf
UserParameter=root_filesystem_use,df|awk -F' +|%''$7 == "/" {print $5 }'
#客户端测试
[root@centos8 ~]#zabbix_agent -t root_filesystem_use
[root@centos8 ~]#zabbix_agent2 -t root_filesystem_use
#重启服务后服务器端才能获取数据
[root@centos8 ~]#systemctl restart zabbix-agent.service
#服务器端测试
[root@zabbix-server ~]#yum -y install zabbix-get
[root@zabbix-server ~]#apt -y install zabbix-get
[root@zabbix-server ~]#zabbix_get -s 10.0.0.38 -p 10050 -k
"root_filesystem_use"
范例:自定义监控项实现连接数
[root@centos8 ~]#cat /etc/zabbix/zabbix_agentd.d/test.conf
UserParameter=tcp_state_estab,ss -ant|grep -c ESTAB
[root@centos8 ~]#systemctl restart zabbix-agent.service
[root@zabbix-server ~]#zabbix_get -s 10.0.0.38 -p 10050 -k "tcp_state_estab"
5
范例:实现自定义监控项的参数
[root@centos8 ~]#cat /etc/zabbix/zabbix_agentd.d/test.conf
UserParameter=test[*],echo $1
[root@centos8 ~]#systemctl restart zabbix-agent.service
[root@zabbix-server ~]#zabbix_get -s 10.0.0.38 -p 10050 -k "test[This is a test
item]"
This is a test item
范例:利用自定义监控项的参数功能监控MySQL的存活状态
[root@centos8 ~]#yum -y install mysql-server
[root@centos8 ~]#systemctl enable --now mysqld
[root@centos8 ~]#mysql
mysql> create user test@'localhost' identified by '123456';
[root@centos8 ~]#mysqladmin -utest -p123456 ping
mysqladmin: [Warning] Using a password on the command line interface can be
insecure.
mysqld is alive
[root@centos8 ~]#cat /etc/zabbix/zabbix_agentd.d/test.conf
UserParameter=mysql.ping[*],mysqladmin -u$1-p$2ping2>/dev/null| grep-c alive
[root@centos8 ~]#systemctl restart zabbix-agent.service
[root@zabbix-server ~]#zabbix_get -s 10.0.0.38 -p 10050 -k
"mysql.ping[test,123456]"
1
[root@centos8 ~]#systemctl stop mysqld
[root@zabbix-server ~]#zabbix_get -s 10.0.0.38 -p 10050 -k
"mysql.ping[test,123456]"
0
3.2.2 自定义模板
3.2.2.1什么是模板
所谓模板,就是一些相关的监控项的集合,还可以在模板中包括图形,触发器等
为什么需要模板?
-
为每个主机单独添加相同的一组监控项比较麻烦,例如:100台主机增加一个tcp80的监控项修改监控项比较麻烦,例如:100台服务器的监控项将80改成8080
-
删除每个主机的同一组监控项,例如:100台服务器的监控项删除
-
删除主机会连同主机的监控项一起被删除;不能复用监控项
所以可以使用模板的方式,来解决上述的一些问题
3.2.2.2 自定义模板使用流程
创建模板,模板必须属于某个主机组(一般属于主机组Templates)
- 在模板中创建监控项、图形、触发器
创建需要监控的主机,然后关联对应的模板
- 更改模板的监控项目,所以使用模板的都会自动更改导出模板,后期可以至其他系统继续使用
3.3 监控项的值映射 Value mapping
3.3.1 什么是值映射
为了接收到的值能更“人性化”的显示,可以通过值映射方式,将数值与字符串之间进行关系绑定示例:
http 响应码 '200' → 'OK' '403' → 'Forbidden' '404' → 'Not Found'
3.3.2 创建值映射
要定义值映射: 管理 --- 一般 --- 界面设置的从下拉列表中选择--- 值映射
.jpg)



点击右上角的创建值映射
3.3.3 使用值映射
添加监控项时,在查看值处选中上面创建的值映射名称

查看结果


3.4 触发器 Triggers
3.4.1 触发器介绍
触发器是条件的定义,一个触发器是根据一个监控项的返回值,将之对比预先设置的阈值,当监控项返回了不符合预定义的值范围后,就进行触发下一步操作的警戒线,一般要对创建的监控项设置触发器以及触发方式和值的大小
可以在指定主机上创建触发器,只是针对指定主机有效
也可以在指定模板上创建触发器,则使用此模板的所有主机都有效,一个模板中可以有多触发器
触发器中使用的表达式是非常灵活的。你可以使用它们去创建关于监控统计的复杂逻辑测试。
3.4.2 触发器严重性
触发器严重性表示触发器的重要程度
Zabbix支持下列6种触发器的严重程度:
| 严重性 | 颜色 |
|---|---|
| 未分类 | 灰色 |
| 信息 | 浅蓝色 |
| 警告 | 黄色 |
| 一般严重 | 橙色 |
| 严重 | 浅红色 |
| 灾难 | 红色 |
严重性功能
-
通过不同的颜色区分不同的严重程度
-
报警音频,不同的音频代表不同的严重程度
-
用户媒介,不同的用户媒介(通知渠道)代表不同的严重程度。例如,短信 - 高严重性,email - 其他。
不同的严重性通过触发器执行对应的条件动作
3.4.3 触发器表达式格式
一个简单的表达式格式:
{<server|template>:<key>.<function>(<parameter>)}<operator><constant>
触发器官方文档
https://www.zabbix.com/documentation/5.0/zh/manual/config/triggers/expression
函数官方文档
https://www.zabbix.com/documentation/5.0/zh/manual/appendix/triggers/functions
https://www.zabbix.com/documentation/5.0/manual/appendix/triggers/functions
触发器表达式常用函数
| 函数名 称 |
说明 | 范例 |
|---|---|---|
| avg() | 监控项的平均值 | avg(#5)→ 最新5个值的平均值 avg(1h)→ 最近一小时的平均值 avg(1h,1d)→ 一天前的一小时内的平均值 |
| min() | 监控项的最小值 | CPU使用率最近5分钟的最小值大于6 system.cpu.load.min(5m)>6 CPU最近5次最小的值大于2 system.cpu.load.min(#5)>2 |
| max() | 监控项的最大值 | max(#5)→ 最新5个值的最大值 max(1h)→ 最近一小时的最大值 |
| last() | 最后的第几个值 | 注意last的#num参数和在其它函数中的作用不同例如:返回值3, 7, 2, 6, 9 last()通常等同于last(#1) last(#5) -第五个最新值,注意:不是五个最新值 last(#2)将返回值为7,last(#5)返回值为9 last(#10,30)表示每隔30s采样一次,取倒数第10个值 |
| diff() | 比对上一次文件的内容 | 返回值为1,表示发生变化,返回值为0,表示没有变化 |
| nodata() | 监控一段时间内是否返回数据 | 时间不少于30秒,因为timer处理器每30秒调用一次返回1 -指定评估期没有接收到数据返回0 -其它 |
运算符
触发器支持下列运算符(在执行中优先级递减)
| 优 先 级 运 算 |
定 义 |
**[未知值] | **/manual/config/triggers/expression#expressions_with_unsupported_items_and_unknown_values)**** 注释 |
|---|---|---|---|
| 1 | - | 负 | *-**Unknown→Unknown |
| 2 | not | 逻辑非** | ot** Unknown→Unknown |
| 3 | ***** | 乘 | Unknown→Unknown (yes, Unknown, not 0 - to not lose Unknown in arithmetic operations) 1.2 Unknown→Unknown |
| / | 除 | nknown**/0→error Unknown/1.2→Unknown 0.0/**Unknown→Unknown | |
| 4 | + | 加 | .2**+**Unknown→Unknown |
| - | 减 | .2**-**Unknown→Unknown | |
| 5 | < | 小于。该运算符定义:1.2 **< A<B⇔(A<B- 0.000001) |
** Unknown→Unknown |
| <= | 小于等于。该运算符定义: Unknown **& A<=B⇔ (A≤B+0.000001) |
t;=** Unknown→Unknown | |
| > | 大于.该运算符定义:A>B ⇔(A>B+0.000001) |
||
| >= | 大于等于。 该运算符定义: A>=B⇔(A≥B-0.000001) |
||
| 6 | = | 相等。 该运算符定义:A=B ⇔(A≥B-0.000001) and (A≤B+0.000001) |
|
| <> | 不等于。该运算符定义: A<>B⇔(A<B-0.000001) or (A>B+0.000001) |
||
| 7 | and | 逻辑与0 | andUnknown→ 0 1andUnknown→ Unknown Unknownand* Unknown→Unknown |
| 8 | or | 逻辑或1 | orUnknown→ 1 0orUnknown→ Unknown Unknownor* Unknown→Unknown |
not , and and or 运算符区分大小写,而且必须为小写。它们也必须被空格或括号包围。
所有运算符中, 除了 - 和 not ,都有左到右的关联性。 - 和 not 是非结合的(意味着 -(-1) 和 not (not 1) 应该用 --1 and not not 1 代替).
计算结果:
-
< , <= , > , >= , = , <> 如果指定的关系为真,运算符将会在触发器表达式中产生‘1’。如果指定的关系为假,则返回‘0’。如果至少有一个运算数未知,则结果未知;
-
and 对于已知的运算对象,如果两个运算对象的比较不等于“0”,则运算符将会在触发器表达式中产生“1”,否则,它产生“0”;对于未知的运算对象,如果两个运算对象的比较等于“0”,则会产生 “0”,否则,则会产生“Unknown”;
-
or 对于已知的运算对象,如果其中任意一个运算对象的比较不等于“0”,则运算符会在触发器表达式中产生“1”,否则,它产生“0”;对于未知的运算对象进行“or”运算,则只有当一个运算对象的比较不等于“0”,才会产生“1”,否则,它会产生“Unknown”;
-
如果操作数的值不等于“0”,则已知操作数的逻辑否定运算符 not 的结果是“0”;如果操作数的值等于 “0”,则为“1”。对于未知的操作数 not 产生“Unknown”。
官方触发器示例
https://www.zabbix.com/documentation/5.0/zh/manual/config/triggers/expression
#示例
www.zabbix.com 主机的处理器负载过高
{www.zabbix.com:system.cpu.load[all,avg1].last()}>5
'www.zabbix.com:system.cpu.load[all,avg1]'给出了被监控参数的简短名称。它指定了服务器
是“www.zabbix.com”,监控项的键值是“system.cpu.load[all,avg1]”。通过使用函数“last()”获取
最新的值。最后,“>5”意味着当www.zabbix.com最新获取的处理器负载值大于5时触发器就会处于异常状
态。
#示例
www.zabbix.com is overloaded
{www.zabbix.com:system.cpu.load[all,avg1].last()}>5 or
{www.zabbix.com:system.cpu.load[all,avg1].min(10m)}>2
当前处理器负载大于5或者最近10分钟内最小值大于2,表达式为true。
#示例
/etc/passwd文件被修改
使用函数diff:
{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff()}=1
当文件/etc/passwd的checksum值与最近的值不同时,表达式为true。
类似的,表达式可以用于监控重要文件的修改, 如/etc/passwd, /etc/inetd.conf, /kernel等
#示例
有用户正在从互联网上下载一个大文件
使用min函数:
{www.zabbix.com:net.if.in[eth0,bytes].min(5m)}>100K
在过去5分钟内,eth0上接收字节数大于100kb时,表达式为true。
#示例
SMTP服务群集的两个节点都停止。注意在一个表达式中使用两个不同的主机:
{smtp1.zabbix.com:net.tcp.service[smtp].last()}=0 and
{smtp2.zabbix.com:net.tcp.service[smtp].last()}=0
当SMTP服务器smtp1.zabbix.com和smtp2.zabbix.com都停止,表达式为true
#示例
Zabbix agent需要升级
使用str()函数:
{www.zabbix.com:agent.version.str("beta8")}=1
如果Zabbix agent版本是beta8(可能是1.0beta8),则表达式为真。
#示例
服务器无法访问
{www.zabbix.com:icmpping.count(30m,0)}>5
当主机“www.zabbix.com”在30分钟内超过5次不可达,则表达式为真。
#示例
3分钟内没有心跳检查
使用nodata()函数:
{www.zabbix.com:tick.nodata(3m)}=1
要使用这个触发器,'tick'必须定义成一个
Zabbix[:manual/config/items/itemtypes/trapper|trapper]]监控项。主机应该使用
zabbix_sender定期发送这个监控项的数据。
如果在180秒内没有接收到数据,则触发值变为异常状态。
注意:nodata可以在任何类型的监控项中使用。
#示例
夜间的CPU负载
使用time()函数:
{zabbix:system.cpu.load[all,avg1].min(5m)}>2 and
{zabbix:system.cpu.load[all,avg1].time()}>000000 and
{zabbix:system.cpu.load[all,avg1].time()}<060000
仅在夜间(00:00-06:00),触发器状态变可以变为真。
#示例
检查客户端本地时间是否与Zabbix服务器时间同步
使用fuzzytime()函数:
{MySQL_DB:system.localtime.fuzzytime(10)}=0
当MySQL_DB服务器的本地时间与Zabbix server之间的时间相差超过10秒,触发器将变为异常状态。
#示例
比较今天的平均负载和昨天同一时间的平均负载(使用第二个“时间偏移”参数)。
{server:system.cpu.load.avg(1h)}/{server:system.cpu.load.avg(1h,1d)}>2
如果最近一小时平均负载超过昨天相同小时负载的2倍,触发器将触发。
#示例
使用了另一个监控项的值来获得触发器的阈值:
{Template PfSense:hrStorageFree[{#SNMPVALUE}].last()}<{Template
PfSense:hrStorageSize[{#SNMPVALUE}].last()}*0.1
如果剩余存储量下降到10%以下,触发器将触发。
#示例
使用评估结果获取超过阈值的触发器数量:
({server1:system.cpu.load[all,avg1].last()}>5) +
({server2:system.cpu.load[all,avg1].last()}>5) +
({server3:system.cpu.load[all,avg1].last()}>5)>=2
如果表达式中至少有两个触发器大于5,触发器将触发。
3.4.4 滞后
有时我们需要一个OK和问题状态之间的区间值,而不是一个简单的阈值。
例如,我们希望定义一个触发器,当机房温度超过20C时,触发器会出现异常,我们希望它保持在那种状态,直到温度下降到15C以下。
为了做到这一点,我们首先定义问题事件的触发器表达式。然后在中选择‘恢复表达式’,并为OK事件输入恢复表达式。
注意,只有首先解决问题事件才会评估恢复表达式。如果问题条件仍然存在,则不能通过恢复表达式来解决问题。
示例 1
机房温度过高。
问题表达式:
{server:temp.last()}>20
恢复表达式:
{server:temp.last()}<=15
示例 2
磁盘剩余空间过低。
问题表达式: it is less than 10GB for last 5 minutes
{server:vfs.fs.size[/,free].max(5m)}<10G
恢复表达式: it is more than 40GB for last 10 minutes
{server:vfs.fs.size[/,free].min(10m)}>40G
3.4.5 开启 Zabbix Server的声音提示

3.4.6 自定义触发器
3.4.6.1 配置单条件触发器
自定义单条件触发器:设置内存低于 30% 进行告警,点击对应主机→ 创建触发器获取内存还剩余的百分比:
剩余 30% 可用,则需要告警通知;剩余 50% 可用,就算恢复;
编辑触发器表达式
#问题表达式:
{Webserverb:mem_use_percent.last()}<30
#恢复表达式:
{Webserver:mem.use_percent.last()}>60
#测试内存
dd if=/dev/zero of=/dev/null bs=1000M count=1024
3.4.6.2 配置多条件触发器
自定义多条件触发器:设置空闲内存低于 30%并且swap使用大于1% 进行告警
#增加swap的自定义监控项
UserParameter=swap_use,free |awk '/^Swap/{print $3*100/$2}'
#编辑触发器表达式
#问题表达式:
{Webserver:mem_unuse_percent.last()}<=30 and {Web:swap_use.last()}>=1
#恢复表达式:
{Webserver:mem_unuse_percent.last()}>=50
#使用命令压测
dd if=/dev/zero of=/dev/null bs=500M count=1024
#只满足内存低于30%,所以不会警告
dd if=/dev/zero of=/dev/null bs=1000M count=1024
#内存低于30%,并且swap使用超过1%
3.4.7 触发器依赖关系
3.4.7.1 什么是触发器依赖
有时候一台主机的可用性依赖于另一台主机。如果一台路由器宕机,则路由器后端的服务器将变得不可用。
如果这两者都设置了触发器,你可能会收到关于两个主机宕机的通知,然而只有路由器是真正故障的。 这就是主机之间某些依赖关系可能有用的地方,设置依赖关系的通知会被抑制,而只发送根本问题的通知。
触发器依赖关系示例
例如,主机位于路由器2后面,路由器2在路由器1后面。
Zabbix - 路由器1 - 路由器2 - 主机
如果路由器1宕机,显然主机和路由器2也不可达,然而我们不想收到主机、路由器1和路由器2都宕机的 3条通知。
因此,在这种情况下我们定义了两个依赖关系:
-
' 主机宕机 ' 触发器依赖于 ' 路由器 2 宕机 ' 触发器 -
' 路由器 2 宕机 ' 触发器依赖于 ' 路由器 1 宕机 ' 触发器
3.4.7.2 触发器依赖案例
3.4.7.2.1 依赖场景环境说明
假设:充当R 路由节点,H 充当主机节点
模拟当H节点的80端口如果不存活,需要检查R节点的80端口是否存活
-
如果R路由节点的80端口存活,则触发H主机节点的80端口不存活警告
-
如果R路由节点的80端口不存活,则仅触发路由节点的警告,而不触发主机节点的警告
3.4.7.2.2 定义触发器表达式
R路由节点:定义监控项,配置触发器
H主机节点:定义监控项,配置触发器
3.4.7.2.3 模拟路由与主机故障
模拟R路由器、H主机节点同时障时,会同时收到两个告警,显然不符合预期效果
3.4.7.2.4 配置触发器依赖关系
在H服务器节点上对应的触发器上配置依赖关系,依赖R路由节点对应的触发器
3.4.7.2.5 再次模拟路由与节点故障
关闭 “路由器” 80端口,以及主机节点80端口;此时只有路由节点会警告
启用 “路由器” 80端口,关闭主机节点80端口,此时只有主机节点会警告
3.5 图形 Graphs
3.5.1 什么是图形
随着时间的推移,Zabbix采集到大量监控数据,对于用户而言,如果可以通过可视化图形方式查看历史数据,而不仅仅是看到当前数字,那会更容易了解发生了什么事情以及发展的趋势.
3.5.2 自定义图形
Zabbix 本身提供了一些图形,但用户也可以自定义图形
自定义图表,顾名思义,就是提供自定义定制的功能。
自定义图表需要人为配置,可以为某台主机、多台主机、某个模板创建自定义图表。
3.5.3 案例
3.5.3.1 在模板中创建图形


创建图形


选中所有监控项


3.5.3.2 模板关联至主机

3.5.3.3 查看图形

过滤图形只显示自定义的图形



3.6 聚合图形 Screens
Zabbix中一个图形只是包括相关监控项的一张图
如果想在一个界面里显示包含多组监控项的多个图形可以使用聚合图形默认Zabbix 中已有的聚合图形如下

用户也可以自定义聚合图形
3.6.1 创建聚合图形
3.6.1.1 方法1
如果想将多个主机或不同模板的相关图形放在同一个聚合图形中,则执行下面执行操作监测--聚合图形--创建聚合图形,此方式比更灵活



3.6.1.2 方法2
如果想将同一个主机的多个监控项图形放在一个聚合图形,则执行下面操作配置--模板--在指定的模板--聚合图形,此方式比较有局限性

创建聚合图形

指定名称和图形的个数

3.6.2 添加监控项相关的图形
选择 构造函数


添加多个图形到此聚合图形中

3.6.3 查看聚合图形
监测--模板关联的主机--聚合图形

右上角选中创建的聚合图形





3.6.4 创建多个聚合图形
复重上面过程,创建多个聚合图形


3.6.5 利用多个聚合图形实现幻灯片功能(轮播图)
3.6.5.1 创建幻灯片 Slide shows
监测--聚合图形 --Zabbix 5.0 版在左上角的幻灯片演示


Zabbix 4.0 版在右上角

3.6.5.2 添加聚合图形
5.0 版本界面


4.0版本界面



3.6.2.3 验证幻灯片
Zabbix 5.0版本如下

选择上面创建的幻灯片名称

可以观察到每隔3s就会轮播各个聚合图形

Zabbix 4.0版本如下


3.7 用户 Users 和组 Groups 管理
3.7.1 用户管理
系统默认有Admin和guest两个用户,其中guest,密码为空,默认被禁用
创建新用户
管理 --- 用户
创建新用户,指定群组




3.7.2 组管理
管理 --- 用户组群



3.8 告警通知
生产环境中,通常当达到一定的指标,比如硬盘使用率为80%左右时,会触发触发器的条件,而触发器可以再触发动作,实现事件通知告警或执行指定命令等.要实现事件通知告警,就需要一个中间介质来发送告警消息给运维
Zabbix 有如下常见报警介质:
-
E-mail
-
微信短信
3.8.1 邮件告警
3.8.1.1 邮箱开启 SMTP 功能
在邮箱上开启SMTP功能,利用此邮箱实现发送报警邮件
3.8.1.1.1 QQ邮箱开启邮件通知功能
.jpg)
获取授权码
3.8.1.1.2 网易邮箱开启邮件通知功能



3.8.1.2 创建报警媒介类型实现发信人功能
报警媒介类型是一种给运维工程师发送消息通知的渠道,即当zabbix的触发器触发一个事件后,怎么才能把这个事件通过某些方式通知给运维工程师呢? 媒介类型就起到此作用,如果想要实现邮件告警功能,那么对应的媒介类型就是配置用来发送告警邮件的发件人邮箱。
管理-->报警媒介类型-->创建报警媒介类型

结合上一小节邮箱的配置输入以下内容
3.8.1.2.1 QQ 邮箱配置

添加消息模板用于发送信息

#可以修改两个消息模板
# 问题
主题: 告警: {EVENT.NAME}
告警主机:{HOST.NAME1}
告警服务: {ITEM.NAME1}
告警Key1: {ITEM.KEY1}:{ITEM.VALUE1}
告警Key2: {ITEM.KEY2}:{ITEM.VALUE2}
严重级别: {TRIGGER.SEVERITY}
# 恢复 Problem Recovery
主题: 恢复: {EVENT.DURATION}: {EVENT.NAME}
恢复主机:{HOST.NAME1}
恢复服务: {ITEM.NAME1}
恢复Key1:{ITEM.KEY1}:{ITEM.VALUE1}
恢复Key2: {ITEM.KEY2}:{ITEM.VALUE2}
创建完成,可以看到下面信息

测试是否邮件正常,有时QQ邮箱不成功,可以尝试其它邮箱,如163邮箱

成功可以收下邮件和提示

zabbix4.0版本界面如下:


3.8.1.2.2 网易邮箱配置

Zabbix 4.0 界面


3.8.1.3 给指定用户添加报警媒介实现收件人功能
媒介类型创建好之后,还需要在每个zabbix账户里面添加相应的收件配置,比如邮件类型的媒介类型要给zabbix账户添加邮箱,如果是微信类型的媒介类型那么就要在zabbix账户设置微信号,短信类型的媒介类型那就得给zabbix账户设置手机号用于接收报警消息内容。
在zabbix用户中添加报警媒介时,需要指定告警信息的收件人的邮件地址



zabbix 4.0 界面如下



注意:下面图中一定要点击“更新”才能生效

3.8.1.4 创建和配置动作
动作可以实现当触发器被触发后可以执行哪些操作,一般可以是发送告警或执行命令关于宏,即一些在Zabbix 中可以调用的变量
宏分为三种
系统内置的宏变量: {MACRO} 用户自定义的宏变量: {$MACRO} 低级别自动发现宏变量: {#MACRO}
3.8.1.4.1 创建动作
指定动作即条件为事件的严重度为信息时就触发动作

Zabbix 4.0 界面如下

3.8.1.4.2 配置操作
官方宏参考:
https://www.zabbix.com/documentation/5.0/zh/manual/appendix/macros/supported_by_
location
https://www.zabbix.com/documentation/4.0/zh/manual/appendix/macros/supported_by_
location
范例: 操作和恢复操作的定制消息主题和和内容
#操作主题
故障:{TRIGGER.STATUS} 服务器:{HOSTNAME1} 事件:{TRIGGER.NAME}故障!
#消息内容
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
#恢复操作主题
恢复:{TRIGGER.STATUS} 服务器:{HOSTNAME1} 事件:{TRIGGER.NAME}已恢复!
#恢复消息内容
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
故障持续时间:{EVENT.AGE}
恢复时间:{EVENT.RECOVERY.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
故障邮件内容

恢复邮件内容

范例: 配置操作
操作内容
默认标题:业务报警 {EVENT.NAME}
消息内容:业务报警服务器:{HOST.NAME},IP:{HOST.IP},详情:{ITEM.NAME}:{ITEM.VALUE}
步骤设为0时 ,表示会不停的持续发送警报,一般建议1到3表示执行三次。
步骤持续时间 表示如果有后续步骤执行时的间隔时长,默认为0表示使用默认时间1h后才会执行后续步骤,此值最低不能低于60s,最大不能超过604800s,可以设为1到5m(分钟)比较合适

zabbix 4.0 界面如下


3.8.1.4.3 配置故障恢复信息
恢复操作内容
默认标题:业务恢复
信息内容:业务恢复服务器:{HOST.NAME},IP:{HOSTNAME1},详情:{ITEM.NAME}:{ITEM.VALUE}


zabbix4.0 版本如下界面


3.8.1.5 模拟故障验证邮件通知
利用之前创建的触发器实现邮件通知
停止nginx服务,触发邮件报警

[root@centos8 ~]#systemctl stop nginx


恢复nginx服务也会触发邮件报警
[root@centos8 ~]#systemctl start nginx


在报表中可以看到动作日志如下面信息

zabbix 4.0 界面如下


3.8.1.6 分级告警
当出现报警后,一般会根据组织的重要级别,按时间逐级分层向上报警,如下面常见分层报警
初级运维/指定运维组--高级运维工程师/业务运维-—->架构师--->总监/CTO
要实现分级告警,必须确保有多个用户,并分别指定不同的邮箱
3.8.1.6.1 配置Admin用户的邮箱


3.8.1.6.2 另一个用户wang使用不同的邮箱



Zabbix4.0版本界面如下




3.8.1.6.3 配置操作指定不同的步骤发邮件给不同的用户
在原来操作基础上添加新的操作

添加操作,发送消息给上级领导的邮箱

{ESC.HISTORY} 宏放在在自定义消息里
该宏将包含关于此升级之前执行的所有步骤的信息,例如:发送的通知和执行的命令。
自定义消息如下示例:
主题:Problem:{EVENT.NAME}
告警主机:{HOST.NAME1}
告警服务: {ITEM.NAME1}
告警Key1: {ITEM.KEY1}:{ITEM.VALUE1}
告警Key2: {ITEM.KEY2}:{ITEM.VALUE2}
严重级别: {TRIGGER.SEVERITY}
此前步骤:{ESC.HISTORY}


确认动作更新

Zabbix4.0版本如下界面


3.8.1.6.4 模拟故障测试验证分级告警
停止 nginx 服务,查看结果
[root@centos8 ~]#systemctl stop nginx


Admin收到三封告警邮件

wang用户邮件也是三封告警邮件


调整操作的持续时间如下,第一个操作为2m,第二个操作为3m

最终可以看到邮件发送的时间间隔如下

3.8.1.7 邮件告警方法2
也可以利用脚本方式进行邮件告警
3.8.1.7.1 安装邮件相关软件和配置邮件
范例: 利用 sendemail 工具实现邮件脚本
[root@zabbix-server ~]# cat /usr/lib/zabbix/alertscripts/mail.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#Date: 2020-02-31
#FileName: mail.sh
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
email_send='29308620@qq.com'
email_passwd='dgezyimkdswwbhea'
email_smtp_server='smtp.qq.com'
. /etc/os-release
msg_error() {
echo-e"\033[1;31m$1\033[0m"
}
msg_info() {
echo-e"\033[1;32m$1\033[0m"
}
msg_warn() {
echo-e"\033[1;33m$1\033[0m"
}
color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo-n"$1" && $MOVE_TO_COL
echo-n"["
if [ $2="success"-o$2="0" ] ;then
${SETCOLOR_SUCCESS}
echo-n$" OK "
elif [ $2="failure"-o$2="1" ] ;then
${SETCOLOR_FAILURE}
echo-n$"FAILED"
else
${SETCOLOR_WARNING}
echo-n$"WARNING"
fi
${SETCOLOR_NORMAL}
echo-n"]"
echo
}
install_sendemail () {
if [[ $ID=~ rhel|centos|rocky ]];then
rpm -q sendemail &> /dev/null || yum install -y sendemail
elif [ $ID='ubuntu' ];then
dpkg -l |grep -q sendemail || { apt update; apt install -y libio-
socket-ssl-perl libnet-ssleay-perl sendemail ; }
else
color "不支持此操作系统,退出!"1
exit
fi
}
send_email () {
local email_receive="$1"
local email_subject="$2"
local email_message="$3"
sendemail -f$email_send-t$email_receive-u$email_subject-m
$email_message-s$email_smtp_server-omessage-charset=utf-8 -otls=yes-xu
$email_send-xp$email_passwd
[ $?-eq0 ] && color "邮件发送成功!"0 || color "邮件发送失败!"1
}
if [ $#-ne3 ];then
color "脚本参数不正确!"1
msg_info "Usage: `basename $0` <mail_address> <subject> <message>"
exit1
fi
install_sendemail
send_email "$1""$2""$3"
[root@zabbix-server ~]# chmod +x /usr/lib/zabbix/alertscripts/mail.sh
范例: 利用 mutt工具实现邮件发送
#Ubuntu18.04系统的配置邮件信息
[root@zabbix-server ~]#apt -y install mutt msmtp
[root@zabbix-server ~]#getent passwd zabbix
zabbix:x:112:116::/var/lib/zabbix/:/usr/sbin/nologin
[root@zabbix-server ~]#mkdir /var/lib/zabbix
[root@zabbix-server ~]#vim /var/lib/zabbix/.msmtprc
account default
host smtp.163.com
from lbtooth@163.com
auth plain
user lbtooth@163.com
password QXFIOQXEJNSVSDMW
logfile ~/.msmtp.log
[root@zabbix-server ~]#chmod 600 /var/lib/zabbix/.msmtprc
[root@zabbix-server ~]#touch /var/lib/zabbix/.msmtp.log
[root@zabbix-server ~]#chown -R zabbix.zabbix /var/lib/zabbix
[root@zabbix-server ~]#vim /etc/Muttrc
source /usr/lib/mutt/source-muttrc.d|
#文件最后添加下面行
setsendmail="/usr/bin/msmtp"
setuse_from=yes
setrealname="lbtooth"
setfrom=lbtooth@163.com
setenvelope_from=yes
#邮件发送邮件的脚本
[root@zabbix-server ~]#cat /usr/lib/zabbix/alertscripts/mail.sh
#!/bin/bash
SENDTO=$1
SUBJECT=$2
MAIL=$3
echo"$MAIL" | mutt -s"$SUBJECT"$SENDTO
[root@zabbix-server ~]# chmod +x /usr/lib/zabbix/alertscripts/mail.sh
3.8.1.7.2 创建邮件报警媒介类型
脚本参数如下:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

3.8.1.7.3 将报警媒介关联用户


3.8.1.7.4 创建动作和操作


3.8.1.7.5 验证邮件告警
测试故障
[root@centos8 ~]#systemctl stop nginx

测试故障恢复
[root@centos8 ~]#systemctl start nginx

3.8.2 微信告警
3.8.2.1 注册企业微信
微信告警首先得注册一个企业微信,然后才能实现微信告警。
浏览器访问下面链接,注册企业微信
https://work.weixin.qq.com/


用浏览器进入管理后台

或者安装企业微信的PC端登录

3.8.2.2 创建部门和人员
3.8.2.2.1 创建部门

3.8.2.2.2 加入人员
方法1: 直接微信邀请,让相关人员自行扫码加入


方法2 手动添加人员


3.8.2.3 将微信应用中添加相关的部门或人员

也可以只加特定用户
3.8.2.4 将个人微信关联企业微信插件
可以使用手机号或邮箱邀请对应的员工加入此企业微信组织,之后员工用自已的微信扫下面的二维码就可用微信接收企业微信的消息
下面界面扫二维码可以将个人微信关联企业微信

如果前面还没同意加入企业,则个人微信扫码后,看到下面图示


输入相关信息,进行验证才能加入企业微信


下一步会发信邮件或短信进行验证

输入上面收到的验证码


验证成功后可以在个人微信中看到下面提示

3.8.2.5 创建微信应用并授权可信IP

上传Logo和指定应用名称,并选择范围

注意记下以下信息:
应用的 AgentId值1000003
应用的 Secret的值ga621_Y3iMMDW61gm-2iUmTia6RayBbH4gTH0CrJyD8

查看到企业ID的值为 ww644a0d95807e476b

在应用中添加企业可信IP (最近添加的功能,必须配置IP白名单才能发微信,否则会出错)

3.8.2.6 测试发送微信消息
可以给加入的员工发送微信消息



员工个人微信可以收到以下信息

企业微信也可以收到信息


3.8.2.7 测试API
访问企业微信接口调试工具,输入corpid和和corpsecret 可以测试请求参数是否正确访问下面地址
https://open.work.weixin.qq.com/wwopen/devtool/interface/combine
https://work.weixin.qq.com/api/devtools/devtool.php
.jpg)
3.8.2.8 创建发送微信脚本
官方微信教程
https://work.weixin.qq.com/api/doc/90000/90003/90487

官方微信API参考文档
https://work.weixin.qq.com/api/doc/90000/90135/91039

发送微信可以使用各种语言,下面使用shell脚本实现
#查看zabbix server的配置文件
[root@zabbix-server ~]#grep AlertScriptsPath /etc/zabbix/zabbix_server.conf
### Option: AlertScriptsPath
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts
#实现发信微信的脚本
[root@zabbix-server alertscripts]#pwd
/usr/lib/zabbix/alertscripts
[root@zabbix-server alertscripts]#cat wechat.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#FileName: wechat.sh
#URL: http://www.wangxiaochun.com
#Description: Send message from wechat for zabbix monitor
#Copyright (C): 2020 All rights reserved
#********************************************************************
CorpID="ww644a0d95807e476b"#我的企业下面的CorpID
Secret="cGp4gHUpHLL1KQZY5abM3panGp-uCrEZyrgDvOT0OZA"#创建的应用那里的Secret
agentid=1000003#改为 AgentId 在创建的应用可
以查看
#PartyID=1 #通讯录中的部门ID,可选项
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?
corpid=$CorpID&corpsecret=$Secret"
Token=$(/usr/bin/curl -s -G $GURL |awk -F\": '{print $4}'|awk -F\" '{print $2}')
#echo $Token
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Token"
function body(){
local userid=$1#脚本的第1个参数为接收微信的企业用
户帐号,在通讯录中可以查看
#local partyid=$PartyID
local subject=$2#脚本的第2个参数,表示消息主题
local msg=$(echo "$@" | cut -d" " -f3-)#脚本的第3个参数,表示消息正文
printf '{\n'
printf '\t"touser": "'"$userid"\"",\n"
#printf '\t"toparty": "'"$PartyID"\"",\n"
printf '\t"msgtype": "text",\n'
printf '\t"agentid": "'"$agentid"\"",\n"
printf '\t"text": {\n'
printf '\t\t"content": "'"$subject\n\n$msg"\""\n"
printf '\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
}
/usr/bin/curl --data-ascii"$(body $*)"$PURL
#添加执行权限
[root@zabbix-server alertscripts]#chmod +x wechat.sh
#发送测试微信,其中wangxiaochun为企业微信的帐号,并且不区分大小写,在通讯录的用户成员详情中可以
看到帐号
[root@zabbix-server alertscripts]#./wechat.sh wangxiaochun 微信告警测试标题告警测试
信息

在手机企业微信APP中可以收到下面提示

3.8.2.9 创建微信报警媒介类型

报警媒介类型为脚本,脚本参数为以下三项
{ALERT.SENDTO}--收件人媒介
{ALERT.SUBJECT}--通知主题,因为微信没有主题,此项无效,可以不填写
{ALERT.MESSAGE}--通知内容
官方宏参考:
https://www.zabbix.com/documentation/5.0/zh/manual/appendix/macros/supported_by_
location
https://www.zabbix.com/documentation/4.0/zh/manual/appendix/macros/supported_by_
location

注意: 此处可以只填写 {ALERT.SENDTO} 和 {ALERT.MESSAGE} 即可


修改 Message Templates
#可以添加两个消息类型
# 问题
主题: 告警: {EVENT.NAME}
告警主机:{HOST.NAME1}
告警服务: {ITEM.NAME1}
告警Key1: {ITEM.KEY1}:{ITEM.VALUE1}
告警Key2: {ITEM.KEY2}:{ITEM.VALUE2}
严重级别: {TRIGGER.SEVERITY}
# 恢复 Problem Recovery
主题: 恢复: {EVENT.DURATION}: {EVENT.NAME}
恢复主机:{HOST.NAME1}
恢复服务: {ITEM.NAME1}
恢复Key1:{ITEM.KEY1}:{ITEM.VALUE1}
恢复Key2: {ITEM.KEY2}:{ITEM.VALUE2}

测试发微信消息
.jpg)
发送成功可以看到下面提示信息

可以在个人微信收到下面信息

zabbix4.0版本界面如下


3.8.2.10 给Zabbix用户添加报警媒介
对现在用户Admin编辑

添加微信报警媒介
注意: 此处的收件人是一个微信帐号,但实际上发送给应用的可见范围的所有用户

zabbix4.0版本界面如下



3.8.2.11 创建动作 3.8.2.11.1 编辑已有动作
如果已经创建动作,可以修改已有动作,如下所示


3.8.2.11.2 创建动作
如果之前没有动作,新创建动作,以下为Zabbix4.0的操作界面 3.8.2.112.1 创建动作

3.8.2.11.2.2 指定操作

3.8.2.11.2.3 指定恢复操作



3.8.2.12 测试微信报警
#模拟故障
[root@centos8 ~]#systemctl stop nginx

同时个人微信可以看到下面提示

恢复服务后
[root@centos8 ~]#systemctl start nginx
个人微信可以收到下面的提示

以下为Zabbix4.0版本的界面提示

在手机企业微信APP中可以收到下面提示

#模拟故障恢复,观察微信是否收到恢复消息
[root@centos8 ~]#systemctl start nginx
在手机企业微信APP中可以收到下面提示

3.8.3 短信告警
3.8.3.1 确定短信服务商和短信服务相关信息
3.8.3.1.1 确定短信服务商
先确定一家短信服务平台,比如:阿里大于,腾讯云等
https://www.aliyun.com/product/sms
https://cloud.tencent.com/act/pro/csms
https://www.yunpian.com/
注意:一般的短信平台会需要注册用户帐号后实名认证,可能还会要求提交企业营业执照,个人身份证,网站备案信息等信息
以阿里云为例
#服务文档
https://help.aliyun.com/document_detail/59210.html?
spm=a2c4g.11174283.2.21.6b394c07W3s6kB
短信服务流程

3.8.3.1.2 购买短信服务
到注册阿里云并且购买短信服务https://www.aliyun.com/product/sms

3.8.3.1.3 创建 AccessKey
可以使用AccessKey构造一个API请求(或者使用云服务SDK)来操作资源。AccessKey包括AccessKey ID和AccessKey Secret。
AccessKey ID用于标识用户。
AccessKey Secret是用来验证用户的密钥。 AccessKey Secret必须保密
在阿里云基于安全目的,建议先创建RAM帐号(子帐号),生成AccessKey
操作步骤
-
使用云账号登录RAM控制台: https://ram.console.aliyun.com/overview
-
在左侧导航栏的 人员管理 菜单下,单击 用户 。
-
在 用户登录名称/显示名称 列表下,单击目标RAM用户名称
-
在 用户AccessKey 区域下,单击 创建AccessKey
创建用户及相关的AccessKey

对生成的RAM用户进行授权


3.8.3.1.4 创建短信签名
https://help.aliyun.com/document_detail/108072.html?
spm=a2c4g.11186623.2.20.245e4be5IFMXEF
注意:签名名称要和网站或公司名称相同,否则可能不能通过审核



3.8.3.1.5 创建短信模板
https://help.aliyun.com/document_detail/108086.html?
spm=a2c4g.11186623.6.574.3ca821f24wFBe7
创建两个模板:故障通知和恢复通知模板
注意:阿里云模板中的变量有较高的要求,比如一个变量不能存超过25个字节的内容等
创建故障通知模

创建恢复通知模板

注意模板的编号

3.8.3.2 创建发送短信脚本
参考帮助实现短信脚本
https://help.aliyun.com/document_detail/112147.html?
spm=a2c4g.11186623.6.672.2f7a5d1cf0jhs1

短信SDK
https://help.aliyun.com/document_detail/55359.html?
spm=a2c4g.11186623.2.26.464e57cfuNqIcX

#CentOS8
[root@zabbix-server ~]#yum -y install python3
#ubuntu18.04
[root@zabbix-server ~]#apt -y install python3 python3-pip
#安装相关库
[root@zabbix-server ~]#pip3 install --upgrade pip
[root@zabbix-server ~]#pip3 install aliyun-python-sdk-core-v3
[root@zabbix-server ~]#cd /usr/lib/zabbix/alertscripts
[root@zabbix-server alertscripts]#cat send_sms.py
#!/usr/bin/env python3
#coding=utf-8
import sys
import const
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
client = AcsClient(const.ACCESS_KEY_ID, const.ACCESS_KEY_SECRET, 'ap-northeast-
1')
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('dysmsapi.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https') # https | http
request.set_version('2017-05-25')
request.set_action_name('SendSms')
phone_number = sys.argv[1]
templatecode = sys.argv[2]
string = sys.argv[3]
message = string.split(";")
print(message)
#用分号将第三个短信参数分隔为多个字符串
message = string.split(";")
print(message)
sms_dict = { }
#分号分隔的第1个字符串为时间
sms_dict['time'] = message[0][0:24]
#分号分隔的第2个字符串为告警内容
sms_dict['item'] = message[1][0:24]
#分号分隔的第3个字符串为事件ID
sms_dict['item_id'] = message[2][0:24]
request.add_query_param('PhoneNumbers', phone_number)
request.add_query_param('SignName', "IT技术分享")
request.add_query_param('TemplateCode', templatecode)
request.add_query_param('TemplateParam', sms_dict)
response = client.do_action(request)
print(str(response, encoding ='utf-8'))
[root@zabbix-server alertscripts]#chmod +x send_sms.py
#将AccessKey存放在独立文件中,比较安全
[root@zabbix-server alertscripts]#cat const.py
ACCESS_KEY_ID ='xxxxxxxxxxxxxxxxx'
ACCESS_KEY_SECRET ='yyyyyyyyyyyyyyyyyy'
[root@zabbix-server alertscripts]#chmod 600 const.py
[root@zabbix-server alertscripts]#chown zabbix.zabbix const.py
#测试执行脚本实现故障通知告警,第一个参数是手机号,第二个参数是模板code,第三个参数是短信内容
[root@zabbix-server alertscripts]#./send_sms.py 18600123456 SMS_220620057
'test'
['test']
{"RequestId":"A9A1F98C-6F99-42F0-A688-
78480DD845C0","Message":"OK","BizId":"172222827010849369^0","Code":"OK"}
#测试执行脚本实现恢复通知告警
[root@zabbix-server alertscripts]#./send_sms.py 18600123456 SMS_220620137
'test'
['test']
{"RequestId":"29D0783B-CCCA-4E9B-87E3-
76FC76EC6480","Message":"OK","BizId":"768401427010885196^0","Code":"OK"}


3.8.3.3 创建短信媒介类型

脚本参数为以下两项
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

3.8.3.4 给Zabbix用户添加报警媒介



3.8.3.5 配置动作
创建新动作或修改原有动作

配置动作对应的触发条件如下

创建异常操作
示例1:加一个字段
{ITEM.NAME}

示例2:加多个字段
{EVENT.DATE} {EVENT.TIME};{TRIGGER.NAME};{EVENT.ID}



创建恢复操作

多字段
{EVENT.DATE} {EVENT.TIME};{TRIGGER.NAME};{EVENT.ID}



总体配置如下

3.8.3.6 测试短信报警
停止服务模拟故障
[root@centos8 ~]#systemctl stop nginx

查看到手机收到短信

启动服务模拟恢复故障
[root@centos8 ~]#systemctl start nginx

查看到手机收到短信

查看zabbix Serve服务器日志,可以看到下面信息
#注意需要修改日志级别才会看到下面日志
[root@zabbix-server ~]#grep ^DebugLevel /etc/zabbix/zabbix_server.conf
DebugLevel=4
[root@zabbix-server ~]#grep -A 3 sms /var/log/zabbix/zabbix_server.log
1818:20210723:120953.133 /usr/lib/zabbix/alertscripts/send_sms.py
'18600123680''SMS_220620057''Nginx: Number of processes running' output:
['Nginx: Number of processes running']
{"RequestId":"267B0BA1-0C87-4CED-8D45-
3FE03B1F6398","Message":"OK","BizId":"481300427013392932^0","Code":"OK"}
--
1817:20210723:121248.947 In zbx_popen()
command:'/usr/lib/zabbix/alertscripts/send_sms.py '18600123680' 'SMS_220620137'
'Nginx: Number of processes running''
1817:20210723:121248.947 End of zbx_popen():10
1828:20210723:121248.947 End of zbx_ipc_socket_read():SUCCEED
1828:20210723:121248.947 End of am_db_flush_results() flushed:0
3.9 实现故障自愈功能
当zabbix服务监控到指定的监控项异常时,可以通过指定的操作使故障自动恢复
以nginx服务为例,当nginx服务停止时,自动重启服务,实现故障自愈功能

3.9.1 Zabbix Agent 开启远程命令功能
配置远程命令的操作类似于发送消息,区别在于一个执行命令,一个发送消息
远程命令可以直接在ZabbixServer, ZabbixProxy和ZabbixAgent上执行。
但在Zabbix agent和Zabbix proxy上,远程命令默认是不开启的,它们可以通过以下方式启用:
在agent配置中添加AllowKey=system.run[*]、UnsafeUserParameters=1参数
在proxy配置中,将enableremotecommands参数设置为1
范例: 在故障自愈的客户端主机开启 Zabbix Agent 远程命令功能
# 编译安装路径
[root@centos8 ~]#vim /apps/zabbix_agent/etc/zabbix_agentd.conf
#包安装路径
[root@centos8 ~]#vim /etc/zabbix/zabbix_agentd.conf
AllowKey=system.run[*] #此项适合zabbix5.0版本以上,用于代替早期版本的中
EnableRemoteCommands,agent2默认没有,需手工加入
#EnableRemoteCommands=1 #开启远程执行命令,此指令在zabbix5.0版本以上淘汰
AllowRoot=1#开启此项,直接使用root进行远程管理,而无须对zabbix用户授权sudo权限
UnsafeUserParameters=1#允许远程执行命令的时候使用不安全的参数(特殊字符串,如: \ ' * ? []
{} ~ $ ! & ; ( ) < > 等 )
[root@centos8 ~]#systemctl restart zabbix-agent.service
3.9.2 Zabbix Agent 对 Zabbix 用户授权管理权限
默认zabbix agent是使用zabbix用户启动的,有些特权命令zabbix用户是没有权限执行,会导致定义好的自治愈策略因为权限拒绝为执行失败,所以需要事先对zabbix用户进行授权.
范例: 在 zabbix 用户进行 sudo 授权
[root@centos8 ~]#vim /etc/sudoers
zabbix ALL=(ALL) NOPASSWD: ALL
#检查语法
[root@centos8 ~]#visudo -c
#测试是否成功
[root@ubuntu2004 ~]#su -s /bin/bash zabbix -c "sudo systemctl restart mysql"
3.9.3 查看内置的模板及相关触发器


3.9.4 使用内置的版本关联需要监控的主机
使用内置模板 Template App Nginx by HTTP

3.9.5 创建动作

添加动作的条件,用于指定动作关联的条件,即只有特定的触发器发生才会执行动作

选中Nginx Service is down 的触发器


步骤为1和1表示只执行一次
步骤持续时间表示如果有多个步骤执行时的时间间隔,0表示使用默认步骤持续时间间隔


动作创建完成

3.9.6 停止监控主机的服务测试自愈功能
停止nginx服务
[root@centos8 ~]#systemctl stop nginx
在监测页面可以看到动作执行


#可以看到nginx服务被重新启动
[root@centos8 ~]#systemctl is-active nginx
active
-
# 可以看到 Zabbix Agent 日志中提示执行命令 , 注意需要打开 DebugLevel=4 才能看到下面信息 [root@centos8 ~]#cat /var/log/zabbix/zabbix_agentd.log 32381:20210713:003002.019 zbx_setproctitle() title:'listener #2 [processing -
request]'
32381:20210713:003002.019 Requested [system.run[sudo systemctl restart
nginx,nowait]]
32381:20210713:003002.019 Executing command 'sudo systemctl restart nginx'
3.10 Zabbix 主动与被动模式
Zabbix 有两种工作模式: 主动和被动模式
无论是模式还是被动模式,都是站在zabbix agent 角度来说的工作模式
3.10.1 Zabbix 的主动和被动模式工作原理

Zabbix 监控流程中 Agent 收集数据分为主动和被动两种模式
主动模式和被动模式都是相对 zabbix agent而言的
Zabbix默认是被动模式,如果有100个监控项,被动模式需要 Zabbix Server找 Zabbix Agent要100次
主动模式是Zabbix Server给 Zabbix Agent发送一个包括100个监控项的任务清单,Zabbix Agent根据任务清单,采集好100个监控项的值,主动汇报给 Zabbix Server这100个监控项,Zabbix Agent主动模式只需要发送一次数据,大大提高了传输效率。
-
被动模式: Server 向 Agent 请求获取监控项的数据,Agent返回数据。此为默认模式,如果有100个监控项,则需要100次交互
-
主动模式: Agent 请求 Server 获取主动的监控项列表,并主动将监控项内需要检测的数据提交给 server/proxy,如有100个监控项,只需要1次交互即可
注意: 两种模式可以在Zabbix Server上同时存在,可以将一部分监控项设为主动,其它设为被动模式
被动监测通信过程如下:
Server打开一个TCP连接
Server发送请求agent.ping
Agent接收到请求并且响应<HEADER><DATALEN>
Server处理接收到的数据
关闭TCP连接
被动模式每获取一个监控项都需要打开一个tcp连接,这样当监控项越来越多时,Zabbix Server会打开很多
端口,就会出现server端性能瓶颈问题。
主动模式监测通信过程如下:
zabbix agent 首先向ServerActive配置的IP请求获取active items,获取并提交active items数据
值给server或者proxy。
zabbix多久获取一次active items?
它会根据agent的配置文件中的RefreshActiveChecks的频率进行,如果获取失败,那么将会在60秒之后重
试。
主动模式的流程分两个部分:
获取ACTIVE ITEMS列表
Agent主动打开一个TCP连接(主动检测变成Agent打开)
Agent请求items检测列表
Server返回items列表
Agent 处理响应
关闭TCP连接
Agent开始收集数据
主动检测提交数据过程
Agent建立TCP连接
Agent批量提交items列表收集的所有监控项数据
Server处理数据,并返回响应状态
关闭TCP连接
3.10.1 被动模式
被动模式是指 zabbix agent 被动的接受zabbix server(或者Zabbix Proxy)周期性发送过来的数据收集指令
此为默认的工作方式。
在被动模式之下,zabbix server会根据主机关联的模板中的监控项和数据采集间隔时间,周期性的打开随机端口并向zabbix agent服务器的10050端口发起tcp连接,然后发送获取监控项数据的指令,即 zabbix server发送什么指令那么zabbix agent就收集什么数据,zabbix server什么时候发送指令, zabbix agent就什么时候采集,zabbix server不发送指令,zabbix agent就一直不响应,所以zabbix agent也不用关心其监控项和数据采集周期间隔时间。
被动模式的优点就是配置简单,安装后即可使用,因此也成为zabbix的默认工作模式,但是被动模式的最大问题就是会加大zabbix server的负载,在数百甚至数千台服务器的环境下会导致zabbix server需要轮训向每个zabbix agent发送数据采集指令,如果zabbix server负载过高还会导致不能及时获取到最新数据
被动模式因为性能的原因,一台 Zabbix Server 一般只能监控500台以下的主机,更多的主机建议使用主动模式
Zabbix Server 通过Poller进程实现被动模式
[root@zabbix-server ~]#grep StartPollers /etc/zabbix/zabbix_server.conf
#此数量可以适当进行调整
# StartPollers=5
[root@zabbix-server ~]#ps ax|grep poller
48 ? I< 0:00 [edac-poller]
1115 ? S 0:03 /usr/sbin/zabbix_server: http poller #1 [got 0
values in 0.000622 sec, idle 5 sec]
1246 ? S 0:01 /usr/sbin/zabbix_server: proxy poller #1 [exchanged
data with 0 proxies in 0.000036 sec, idle 5 sec]
1249 ? S 0:19 /usr/sbin/zabbix_server: poller #1 [got 0 values in
0.000020 sec, idle 1 sec]
1250 ? S 0:19 /usr/sbin/zabbix_server: poller #2 [got 1 values in
0.003333 sec, idle 1 sec]
1251 ? S 0:19 /usr/sbin/zabbix_server: poller #3 [got 1 values in
0.001767 sec, idle 1 sec]
1252 ? S 0:19 /usr/sbin/zabbix_server: poller #4 [got 3 values in
0.002736 sec, idle 1 sec]
1253 ? S 0:19 /usr/sbin/zabbix_server: poller #5 [got 0 values in
0.000043 sec, idle 1 sec]
1255 ? S 0:02 /usr/sbin/zabbix_server: unreachable poller #1 [got
0 values in 0.000048 sec, idle 5 sec]
24305 pts/2 S+0:00 grep--color=auto poller
范例: 查看被动模式下 Zabbix agent 进程和端口打开情况
|[root@cent# StartAge[root@cent
1793 ?|os8 ~]#grnts=3os8 ~]#psS|ep StartAg
ax|grep z
0:00|ents /etc/zabbix/zabbix_agentd.conf#被动模式的进程数量,默认为3个,可以适当修改abbix/usr/sbin/zabbix_agentd-c|
|---|---|---|---|
|/etc/zabbi
|x/zabbix_
|agentd.con
|f
|
|1794 ?|S|2:44|/usr/sbin/zabbix_agentd: collector [idle1 sec]|
|1795 ?|S|0:12|/usr/sbin/zabbix_agentd: listener#1 [waiting for|
|connection|]|||
|1796 ?|S|0:12|/usr/sbin/zabbix_agentd: listener#2 [waiting for|
|connection|]|||
|1797 ?|S|0:12|/usr/sbin/zabbix_agentd: listener#3 [waiting for|
|connection|]|||
|1798 ?|S|0:10|/usr/sbin/zabbix_agentd: active checks#1 [idle 1|
|sec]||||
|21213 pt|s/1 S+|0:00|vim /etc/zabbix/zabbix_agentd.conf|
|24150 pt|s/0 S+|0:00|grep --color=auto zabbix|
|[root@cent|os8 ~]#ss|-nta|grep|10050|
|LISTEN|0|128|0.0.0.0:100500.0.0.0:*|
|TIME-WAIT|0|0|10.0.0.103:1005010.0.0.100:48786|
|TIME-WAIT|0|0|10.0.0.103:1005010.0.0.100:48790|
|TIME-WAIT|0|0|10.0.0.103:1005010.0.0.100:48866|
|TIME-WAIT|0|0|10.0.0.103:1005010.0.0.100:48884|
|TIME-WAIT|0|0|10.0.0.103:1005010.0.0.100:48860|
|TIME-WAIT|0|0|10.0.0.103:1005010.0.0.100:48848|
|TIME-WAIT|0|0|10.0.0.103:1005010.0.0.100:48846|
|TIME-WAIT|0|0|10.0.0.103:1005010.0.0.100:48826|
|TIME-WAIT|0|0|10.0.0.103:1005010.0.0.100:48774|
|TIME-WAIT|0|0|10.0.0.103:1005010.0.0.100:48808|
|TIME-WAIT|0|0|10.0.0.103:1005010.0.0.100:48836|
|TIME-WAIT|0|0|10.0.0.103:1005010.0.0.100:48824|
|TIME-WAIT|0|0|10.0.0.103:1005010.0.0.100:48772|
|TIME-WAIT|0|0|10.0.0.103:1005010.0.0.100:48840|
|TIME-WAIT|0|0|10.0.0.103:1005010.0.0.100:48820|
|TIME-WAIT........|0|0|10.0.0.103:1005010.0.0.100:48886|
#被动模式下agent主机的日志中会提示以下错误
[root@centos8 ~]#tail /var/log/zabbix/zabbix_agentd.log
1414:20200830:180435.723 TLS support: YES
1414:20200830:180435.723 **************************
1414:20200830:180435.723 using configuration file:
/etc/zabbix/zabbix_agentd.conf
1414:20200830:180435.724 agent #0 started [main process]
1415:20200830:180435.724 agent #1 started [collector]
1416:20200830:180435.725 agent #2 started [listener #1]
1419:20200830:180435.725 agent #4 started [listener #3]
1420:20200830:180435.726 agent #5 started [active checks #1]
1418:20200830:180435.726 agent #3 started [listener #2]
1420:20200830:180435.727 active check configuration update from
[127.0.0.1:10051] started to fail (cannot connect to [[127.0.0.1]:10051]: [111]
Connection refused)
3.10.2 主动模式
3.10.2.1 主动模式介绍
主动模式是由每个zabbix agent 打开本机的随机端口, 主动向 Zabbix Server (或者Zabbix Proxy)的 10051端口发起tcp连接请求
主动模式下必须在zabbix agent配置文件中指定zabbix server的IP或者主机名(必须可以被解析为IP地址),在连接到zabbix server之前zabbix agent是不知道自己要采集那些数据以及间隔多久采集一次数据的,然后在连接到zabbix server以后获取到自己的监控项和数据采集间隔周期时间,然后再根据监控项采集数据并返回给zabbix server,在主动模式下不再需要zabbix serve向zabbix agent发起连接请求, 因此主动模式在一定程度上可减轻zabbix server打开的本地随机端口和进程数,在一定程度就减轻了 zabbix server的压力。经过优化后可以轻松监控2000台,甚至5000以上的主机
以下场景下生产推荐使用主动模式
Zabbix Server 出现性能瓶颈, 监控队列出现大量延迟的监控项,告警不及时
- 监控主机超过 500 台以上
3.10.2.2 Zabbix Agent 实现主动模式
注意: 下面使用Agent实现测试, 方便查看并行效果,使用Agent2看不到并行采集效果
在Zabbix Agent 实现主动模式流程
-
在 Zabbix Agent 配置主机模式相关配置
-
在 Zabbix Server 创建配置有主动模式监控项的模板关联主动模板至支持主动模式的 Agent 主机
注意: 基于原被动模板克隆生成的主动模式模板,不是所有监控项都能改为主动模式,比如agent.ping 监控项如果改为主动模式, 提示将无法变绿
3.10.2.2.1 在 Zabbix Agent 配置主动模式
Zabbix Server 主动和被动模式无需配置即可支持,还可以支持多个主动和被动模式的Zabbix Agent 同时存在
Zabbix Server 通过 trapper 进程实现主动模式
[root@zabbix-server ~]#grep StartTrappers /etc/zabbix/zabbix_server.conf
#进程数可以适当调整
# StartTrappers=5
[root@zabbix-server ~]#ps ax|grep trapper
1256 ? S 0:00 /usr/sbin/zabbix_server: trapper #1 [processed data
in 0.000558 sec, waiting for connection]
1257 ? S 0:00 /usr/sbin/zabbix_server: trapper #2 [processed data
in 0.000241 sec, waiting for connection]
1258 ? S 0:00 /usr/sbin/zabbix_server: trapper #3 [processed data
in 0.000323 sec, waiting for connection]
1259 ? S 0:00 /usr/sbin/zabbix_server: trapper #4 [processed data
in 0.000312 sec, waiting for connection]
1260 ? S 0:00 /usr/sbin/zabbix_server: trapper #5 [processed data
in 0.000211 sec, waiting for connection]
24371 pts/2 S+0:00 grep--color=auto trapper
Zabbix Agent 默认是被动模式,需要修改配置才能支持主动模式
Zabbix Agent 的关健配置有下面三项
Server=<Zabbix Server> #被动模式指向 Zabbix Server的IP或FQDN,默认模式
ServerActive=<Zabbix Server> #主动模式指向 Zabbix Server的IP或FQDN
Hostname=<当前主机IP> #当前主机的IP,此项必须和Zabbix Server中设置的主机名称相
同
范例: Zabbix Agent配置主动模式配置
[root@centos8 ~]#grep '^[^#]' /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.100 #被动模式指向 Zabbix Server的IP或FQDN
ServerActive=10.0.0.100 #主动模式指向 Zabbix Server的IP或FQDN
Hostname=10.0.0.104 #当前主机的IP,此项必须和Zabbix Server中设置的主机名称相
同
Timeout=30#建议修改
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@centos8 ~]#systemctl restart zabbix-agent.service
[root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 01280.0.0.0:22 0.0.0.0:*
LISTEN 0100127.0.0.1:25 0.0.0.0:*
LISTEN 01280.0.0.0:10050 0.0.0.0:*
LISTEN 0128 [::]:22 [::]:*
LISTEN 0100 [::1]:25 [::]:*
LISTEN 0128 [::]:10050 [::]:*
#Zabbix agent主动模式对应的进程数量只有1个,不能调整
#Zabbix agent被动模式对应的进程数量默认3个,可以调整
[root@centos8 ~]#ps ax|grep zabbix
1793 ? S 0:00 /usr/sbin/zabbix_agentd -c
/etc/zabbix/zabbix_agentd.conf
1794 ? S 2:44 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
1795 ? S 0:12 /usr/sbin/zabbix_agentd: listener #1 [waiting for
connection]
1796 ? S 0:12 /usr/sbin/zabbix_agentd: listener #2 [waiting for
connection]
1797 ? S 0:12 /usr/sbin/zabbix_agentd: listener #3 [waiting for
connection]
1798 ? S 0:10 /usr/sbin/zabbix_agentd: active checks #1 [idle 1
sec]
21213 pts/1 S+0:00 vim /etc/zabbix/zabbix_agentd.conf
24150 pts/0 S+0:00 grep--color=auto zabbix
#观察日志可以看到以下信息
[root@centos8 ~]#tail /var/log/zabbix/zabbix_agentd.log
1414:20200830:183505.571 Got signal
[signal:15(SIGTERM),sender_pid:1630,sender_uid:993,reason:0]. Exiting ...
1414:20200830:183505.572 Zabbix Agent stopped. Zabbix 4.0.24 (revision
95be642769).
1634:20200830:183505.584 Starting Zabbix Agent [10.0.0.104]. Zabbix 4.0.24
(revision 95be642769).
1634:20200830:183505.584 **** Enabled features ****
1634:20200830:183505.584 IPv6 support: YES
1634:20200830:183505.584 TLS support: YES
1634:20200830:183505.584 **************************
1634:20200830:183505.584 using configuration file:
/etc/zabbix/zabbix_agentd.conf
1634:20200830:183505.584 agent #0 started [main process]
1638:20200830:183505.586 agent #4 started [listener #3]
1637:20200830:183505.588 agent #3 started [listener #2]
1636:20200830:183505.589 agent #2 started [listener #1]
1639:20200830:183505.590 agent #5 started [active checks #1]
1635:20200830:183505.591 agent #1 started [collector]
3.10.2.2.2 基于现有模板将包含的监控项修改为主动模式的监控项
注意: Zabbix 5.0 内置了主动模式的模板 Template OS Linux by Zabbix agent active 无需修改
Zabbix4.0 之前没有主动模式的模板,需要自行修改
以下操作为Zabbix 4.0上实现


选择全克隆,包括应用集,监控项,触发器,图形,聚合图形等

指定模板的名称
.jpg)
将新生成的模板的监控项修改为主动模式

选中新模板的监控项
提示: 建议将类型为zabbix客户端的监控项进行修改,其它类型如相关项目不建议修改为主动式

批量更新所有监控项
注意:此方式只是修改了大部分监控项为主动式,还有部分监控项,比如agent.ping 仍为被动式,保留即可,否则状态会有颜色异常

修改为主动式

修改更新间隔,此步非必须

确保新生成的模板中的自动发现规则中的类型也是主动式,此步非必须


修改每一个监控项


3.10.2.2.3 将主动模板关联到需要监控的主机
可以通过克隆当前已添加的主机,实现快速添加需要监控的主机



3.10.2.2.4 验证结果和查看日志
被动模式的监控项采集时间是串行的

主动模式的监控项采集时间是并行的

注意: 观察和对比两种不同模式下最新数据中每个监控项的最近检查记录显示的时间
#打开日志debug的功能
[root@centos8 ~]#vim /etc/zabbix/zabbix_agentd.conf
### Option: DebugLevel
# Specifies debug level:
# 0 - basic information about starting and stopping of Zabbix processes
# 1 - critical information
# 2 - error information
# 3 - warnings
# 4 - for debugging (produces lots of information)
# 5 - extended debugging (produces even more information)
#
# Mandatory: no
# Range: 0-5
# Default:
# DebugLevel=3
DebugLevel=4#修改为4
[root@centos8 ~]#systemctl daemon-reload
[root@centos8 ~]#systemctl restart zabbix-agent.service
#观察日志
[root@centos8 ~]#tail /var/log/zabbix/zabbix_agentd.log
1995:20200830:190815.836 In send_buffer() host:'10.0.0.100' port:10051
entries:0/100
1995:20200830:190815.836 End of send_buffer():SUCCEED
1995:20200830:190815.836 __zbx_zbx_setproctitle() title:'active checks #1
[idle 1 sec]'
1991:20200830:190816.756 __zbx_zbx_setproctitle() title:'collector [processing
data]'
1991:20200830:190816.756 In update_cpustats()
1991:20200830:190816.756 End of update_cpustats()
1991:20200830:190816.756 __zbx_zbx_setproctitle() title:'collector [idle 1
sec]'
1995:20200830:190816.837 In send_buffer() host:'10.0.0.100' port:10051
entries:0/100
1995:20200830:190816.837 End of send_buffer():SUCCEED
1995:20200830:190816.837 __zbx_zbx_setproctitle() title:'active checks #1
[idle 1 sec]'
#利用zabbix_get测试zabbix agent是否正常
[root@zabbix-server ~]#/apps/zabbix_server/bin/zabbix_get -s 10.0.0.104 -p 10050
-k "agent.ping"
1
#同时会观察JSON相关的日志
[root@centos8 ~]#tail /var/log/zabbix/zabbix_agentd.log
1995:20200830:191801.051 In send_buffer() host:'10.0.0.100' port:10051
entries:47/100
1995:20200830:191801.052 JSON before sending [{"request":"agent
data","session":"5c6722cd2fc24994ed6464c14a97caf8","data":
[{"host":"10.0.0.104","key":"kernel.maxproc","value":"4194304","id":794,"clock":
1598786276,"ns":9997483},
{"host":"10.0.0.104","key":"net.if.in[eth0]","value":"10196965","id":795,"clock"
:1598786276,"ns":10330367},
{"host":"10.0.0.104","key":"net.if.out[eth0]","value":"2236200","id":796,"clock"
:1598786276,"ns":10582720},
{"host":"10.0.0.104","key":"proc.num[,,run]","value":"1","id":797,"clock":159878
6276,"ns":13785681},
{"host":"10.0.0.104","key":"proc.num[]","value":"151","id":798,"clock":159878627
6,"ns":15500404},
{"host":"10.0.0.104","key":"system.boottime","value":"1598780878","id":799,"cloc
k":1598786276,"ns":15819081},
{"host":"10.0.0.104","key":"system.cpu.intr","value":"649108","id":800,"clock":1
598786276,"ns":16113042},
{"host":"10.0.0.104","key":"system.cpu.load[percpu,avg15]","value":"0.000000","i
d":801,"clock":1598786276,"ns":16340118},
{"host":"10.0.0.104","key":"system.cpu.load[percpu,avg1]","value":"0.000000","id
":802,"clock":1598786276,"ns":16527639},
{"host":"10.0.0.104","key":"system.cpu.load[percpu,avg5]","value":"0.000000","id
":803,"clock":1598786276,"ns":16853309},
{"host":"10.0.0.104","key":"system.cpu.switches","value":"861417","id":804,"cloc
k":1598786276,"ns":17202784},
{"host":"10.0.0.104","key":"system.cpu.util[,guest]","value":"0.000000","id":805
,"clock":1598786276,"ns":17406626},
-
{"host":"10.0.0.104","key":"system.cpu.util[,guest_nice]","value":"0.000000","id ":806,"clock":1598786276,"ns":17579129}, -
{"host":"10.0.0.104","key":"system.cpu.util[,idle]","value":"99.708041","id":807 ,"clock":1598786276,"ns":17774064},
{"host":"10.0.0.104","key":"system.cpu.util[,interrupt]","value":"0.108442","id"
:808,"clock":1598786276,"ns":18158603},
{"host":"10.0.0.104","key":"system.cpu.util[,iowait]","value":"0.000000","id":80
9,"clock":1598786276,"ns":18216251},
{"host":"10.0.0.104","key":"system.cpu.util[,nice]","value":"0.000000","id":810,
"clock":1598786276,"ns":18298355},
{"host":"10.0.0.104","key":"system.cpu.util[,softirq]","value":"0.083417","id":8 11,"clock":1598786276,"ns":18420904},
{"host":"10.0.0.104","key":"system.cpu.util[,steal]","value":"0.000000","id":812
-
,"clock":1598786276,"ns":18491466}, -
{"host":"10.0.0.104","key":"system.cpu.util[,system]","value":"0.091758","id":81 -
3,"clock":1598786276,"ns":18597355}, -
{"host":"10.0.0.104","key":"system.cpu.util[,user]","value":"0.008342","id":814, "clock":1598786276,"ns":18645355}, -
{"host":"10.0.0.104","key":"system.hostname","value":"centos8.wangxiaochun.com", "id":815,"clock":1598786276,"ns":18751444},
{"host":"10.0.0.104","key":"system.localtime","value":"1598786276","id":816,"clo
ck":1598786276,"ns":18808601},
{"host":"10.0.0.104","key":"system.swap.size[,free]","value":"2147479552","id":8 17,"clock":1598786276,"ns":18885966},
{"host":"10.0.0.104","key":"system.swap.size[,pfree]","value":"100.000000","id":
818,"clock":1598786276,"ns":18939847},
{"host":"10.0.0.104","key":"system.swap.size[,total]","value":"2147479552","id": 819,"clock":1598786276,"ns":19011080},
{"host":"10.0.0.104","key":"system.uname","value":"Linux
centos8.wangxiaochun.com 4.18.0-193.el8.x86_64 #1 SMP Fri May 8 10:59:10 UTC 2020
x86_64","id":820,"clock":1598786276,"ns":19076923},
{"host":"10.0.0.104","key":"system.uptime","value":"5398","id":821,"clock":15987
86276,"ns":19128360},
{"host":"10.0.0.104","key":"system.users.num","value":"2","id":822,"clock":15987
86276,"ns":24191687},
{"host":"10.0.0.104","key":"vfs.file.cksum[/etc/passwd]","value":"1161985565","i
d":823,"clock":1598786276,"ns":24296664},
{"host":"10.0.0.104","key":"vfs.fs.inode[/,pfree]","value":"99.918779","id":824,
"clock":1598786276,"ns":25528872},
{"host":"10.0.0.104","key":"vfs.fs.inode[/boot,pfree]","value":"99.530029","id":
825,"clock":1598786276,"ns":27097511},
{"host":"10.0.0.104","key":"vfs.fs.inode[/data,pfree]","value":"99.999989","id":
826,"clock":1598786276,"ns":28291388},
{"host":"10.0.0.104","key":"vfs.fs.size[/,free]","value":"104925175808","id":827
,"clock":1598786276,"ns":29547041},
{"host":"10.0.0.104","key":"vfs.fs.size[/,pfree]","value":"97.766923","id":828,"
clock":1598786276,"ns":31330663},
{"host":"10.0.0.104","key":"vfs.fs.size[/,total]","value":"107321753600","id":82
9,"clock":1598786276,"ns":32918258},
{"host":"10.0.0.104","key":"vfs.fs.size[/,used]","value":"2396577792","id":830,"
clock":1598786276,"ns":34612883},
{"host":"10.0.0.104","key":"vfs.fs.size[/boot,free]","value":"829419520","id":83
1,"clock":1598786276,"ns":35912658},
{"host":"10.0.0.104","key":"vfs.fs.size[/boot,pfree]","value":"87.047075","id":8
32,"clock":1598786276,"ns":37211813},
{"host":"10.0.0.104","key":"vfs.fs.size[/boot,total]","value":"1023303680","id":
833,"clock":1598786276,"ns":38678310},
{"host":"10.0.0.104","key":"vfs.fs.size[/boot,used]","value":"123420672","id":83
4,"clock":1598786276,"ns":40022641},
{"host":"10.0.0.104","key":"vfs.fs.size[/data,free]","value":"53252915200","id":
835,"clock":1598786276,"ns":41857609},
{"host":"10.0.0.104","key":"vfs.fs.size[/data,pfree]","value":"99.239741","id":8
36,"clock":1598786276,"ns":43160549},
{"host":"10.0.0.104","key":"vfs.fs.size[/data,total]","value":"53660876800","id"
:837,"clock":1598786276,"ns":44334739},
{"host":"10.0.0.104","key":"vfs.fs.size[/data,used]","value":"407961600","id":83
8,"clock":1598786276,"ns":46074591},
{"host":"10.0.0.104","key":"vm.memory.size[available]","value":"627781632","id":
839,"clock":1598786276,"ns":46537658},
{"host":"10.0.0.104","key":"vm.memory.size[total]","value":"998305792","id":840,
"clock":1598786276,"ns":47039939}],"clock":1598786281,"ns":52146470}]
1995:20200830:191801.054 JSON back [{"response":"success","info":"processed:
47; failed: 0; total: 47; seconds spent: 0.000841"}]
1995:20200830:191801.054 In check_response()
response:'{"response":"success","info":"processed: 47; failed: 0; total: 47;
seconds spent: 0.000841"}'
1995:20200830:191801.054 info from server: 'processed: 47; failed: 0; total:
47; seconds spent: 0.000841'
1995:20200830:191801.054 End of check_response():SUCCEED
1995:20200830:191801.054 OK
3.11 监控 JAVA 程序
3.11.1 Zabbix Java Gateway 介绍
Zabbix 不支持直接监控JAVA应用
如果要监控JAVA程序比如Tomcat等,需要使用 Java gateway 做为代理,才能从JAVA应用中获取数据 Zabbix Java gateway 能过监听10052/tcp 端口实现监控JAVA应用

Zabbix 监控JVM流程
-
zabbix-server 通知 zabbix-Java-Gateway需要获取监控主机的哪些监控项 Zabbix-Java-Gateway 通过 JMX 协议请求采集 Java进程数据
-
Java程序通过 JMX 协议返回数据给 zabbix-Java-Gateway
-
zabbix-Java-Gateway 最终返回数据给 zabbix-server zabbix-server 将采集的JAVA 数据存储至数据库,然后进行 Web 展示
Zabbix Java Gateway 架构

3.11.2 实战案例: 监控 Java 应用 Tomcat 服务
3.11.2.1 部署 tomcat 服务并开启 JMX 功能
3.11.2.1.1 安装 tomcat
范例: 安装tomcat脚本
[root@tomcat ~]#cat install_tomcat.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#Date: 2021-03-15
#FileName: install_tomcat.sh
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2021 All rights reserved
#********************************************************************
DIR=`pwd`
JDK_FILE="jdk-8u291-linux-x64.tar.gz"
TOMCAT_FILE="apache-tomcat-9.0.48.tar.gz"
JDK_DIR="/usr/local"
TOMCAT_DIR="/usr/local"
color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo-n"$2" && $MOVE_TO_COL
echo-n"["
if [ $1="success"-o$1="0" ] ;then
${SETCOLOR_SUCCESS}
echo-n$" OK "
elif [ $1="failure"-o$1="1" ] ;then
${SETCOLOR_FAILURE}
echo-n$"FAILED"
else
${SETCOLOR_WARNING}
echo-n$"WARNING"
fi
${SETCOLOR_NORMAL}
echo-n"]"
echo
}
install_jdk(){
if ! [ -f"$DIR/$JDK_FILE" ];then
color 1"$JDK_FILE文件不存在"
exit;
elif [ -d$JDK_DIR/jdk ];then
color 1"JDK 已经安装"
exit
else
[ -d"$JDK_DIR" ] || mkdir-pv$JDK_DIR
fi
tar xvf $DIR/$JDK_FILE-C$JDK_DIR
cd$JDK_DIR && ln-s jdk1.8.* jdk
cat > /etc/profile.d/jdk.sh <<EOF
exportJAVA_HOME=$JDK_DIR/jdk
exportJRE_HOME=\$JAVA_HOME/jre
exportCLASSPATH=\$JAVA_HOME/lib/:\$JRE_HOME/lib/
exportPATH=\$PATH:\$JAVA_HOME/bin
EOF
. /etc/profile.d/jdk.sh
java -version && color 0"JDK 安装完成" || { color 1"JDK 安装失败" ; exit; }
}
install_tomcat(){
if ! [ -f"$DIR/$TOMCAT_FILE" ];then
color 1"$TOMCAT_FILE文件不存在"
exit;
elif [ -d$TOMCAT_DIR/tomcat ];then
color 1"TOMCAT 已经安装"
exit
else
[ -d"$TOMCAT_DIR" ] || mkdir-pv$TOMCAT_DIR
fi
tar xf $DIR/$TOMCAT_FILE-C$TOMCAT_DIR
cd$TOMCAT_DIR && ln-s apache-tomcat-*/ tomcat
echo"PATH=$TOMCAT_DIR/tomcat/bin:"'$PATH' > /etc/profile.d/tomcat.sh
id tomcat &> /dev/null || useradd -r-s /sbin/nologin tomcat
cat > $TOMCAT_DIR/tomcat/conf/tomcat.conf <<EOF
JAVA_HOME=$JDK_DIR/jdk
EOF
chown-R tomcat.tomcat $TOMCAT_DIR/tomcat/
cat > /lib/systemd/system/tomcat.service <<EOF
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=$TOMCAT_DIR/tomcat/conf/tomcat.conf
ExecStart=$TOMCAT_DIR/tomcat/bin/startup.sh
ExecStop=$TOMCAT_DIR/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now tomcat.service &> /dev/null
systemctl is-active tomcat.service &> /dev/null && color 0"TOMCAT 安装完成" || {
color 1"TOMCAT 安装失败" ; exit; }
}
install_jdk
install_tomcat
[root@tomcat ~]#bash install_tomcat.sh
[root@tomcat ~]#systemctl status tomcat
● tomcat.service - Tomcat
Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor
preset: disabled)
Active: active (running) since Thu 2021-05-2717:43:42 CST; 48s ago
Process: 1370ExecStart=/usr/local/tomcat/bin/startup.sh (code=exited,
status=0/SUCCESS)
Main PID: 1378 (java)
Tasks: 28 (limit: 5882)
Memory: 64.2M
CGroup: /system.slice/tomcat.service
└─1378 /usr/local/jdk/bin/java -
Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -
Djava.util.logging.manager=org.apache.j>
Aug 2717:43:42 tomcat.wang.org systemd[1]: Starting Tomcat...
Aug 2717:43:42 tomcat.wang.org systemd[1]: Started Tomcat.
[root@tomcat ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer
Address:Port LISTEN 01280.0.0.0:22
0.0.0.0:*
LISTEN 0100127.0.0.1:25
0.0.0.0:* LISTEN 0128 [::]:22
[::]:*
LISTEN 0100 [::1]:25
[::]:*
LISTEN 01 [::ffff:127.0.0.1]:8005
*:*
LISTEN 0100 *:8080
*:*
3.11.2.2.2 开启 JMX 监控
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等
tomcat 开启远程 JMX 环境配置
vim /usr/local/tomcat/bin/catalina.sh
CATALINA_OPTS="$CATALINA__OPTS
-Dcom.sun.management.jmxremote #启用远程监控JMX
-Djava.rmi.server.hostname=<JAVA主机IP> #是tomcat主机的IP地址,不是zabbix
服务器地址
-Dcom.sun.management.jmxremote.port=XXXXX #默认启动的JMX端口号
-Dcom.sun.management.jmxremote.authenticate=false#不使用用户名密码
-Dcom.sun.management.jmxremote.ssl=false" #不使用ssl认证
范例: Tomcat 开启 JMX 功能
[root@tomcat ~]#vim /usr/local/tomcat/bin/catalina.sh
.......
# -----------------------------------------------------------------------------
#添加下一行
CATALINA_OPTS="$CATALINA__OPTS -Dcom.sun.management.jmxremote -
Dcom.sun.management.jmxremote.port=12345 -
Dcom.sun.management.jmxremote.authenticate=false -
Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.0.0.106"
# OS specific support. $var _must_ be set to either true or false.
.......
#查看端口12345是否 |
打开 |
|
|---|---|---|
[root@tomcat ~] |
#systemctl resta |
rt tomcat |
[root@tomcat ~] |
#ss -ntl |
|
State |
Recv-Q |
Send-Q Local Address:Port Peer |
Address:Port |
||
LISTEN |
0 |
1280.0.0.0:22 |
0.0.0.0:* |
||
LISTEN |
0 |
100127.0.0.1:25 |
0.0.0.0:* |
||
LISTEN[::]:* |
0 |
128 [::]:22 |
LISTEN |
0 |
50 *:12345 |
*:* |
||
LISTEN[::]:* |
0 |
100 [::1]:25 |
LISTEN |
0 |
50 *:38563 |
*:* |
||
LISTEN*:* |
0 |
1 [::ffff:127.0.0.1]:8005 |
LISTEN*:* |
0 |
50 *:40613 |
LISTEN*:* |
0 |
100 *:8080 |
3.11.2.2.3 测试通过java工具 jconsole 进行 JMX 监控



3.11.2.2.4 使用 java 客户端获取 JMX 信息
cmdline-jmxclient-0.10.3.jar 是一个开源jar包,在zabbix 中常用于测试的一个工具,可以用来测试 jmx 是否配置正确。在监控方面后还可以对Tomcat各种属性进行监控。下面使用java客户端cmdlinejmxclient进行测试
下载链接
https://github.com/qiueer/zabbix/blob/master/Tomcat/cmdline-jmxclient-0.10.3.jar
范例: 测试能否获取到java当前线程数和最大线程数
# 先下载 cmdline-jmxclient-0.10.3.jar 文件
[root@zabbix-server ~]#ll cmdline-jmxclient-0.10.3.jar
-rw-r--r--1 root root 20124 Aug 2322:41 cmdline-jmxclient-0.10.3.jar
#测试能否获取到java当前线程数和最大线程数:
[root@zabbix-server ~]#yum -y install java
#Ubuntu安装下面包
[root@zabbix-server ~]#apt install openjdk-8-jdk -y
[root@zabbix-server ~]#java -jar cmdline-jmxclient-0.10.3.jar - 10.0.0.106:12345
'Catalina:name="http-nio-8080",type=ThreadPool' currentThreadCount
08/30/2020 13:27:07 +0800 org.archive.jmx.Client currentThreadCount: 10
# 测试能否获取到 java 最大线程数 :
[root@zabbix-server ~]#java -jar cmdline-jmxclient-0.10.3.jar - 10.0.0.106:12345
'Catalina:name="http-nio-8080",type=ThreadPool' maxThreads
08/30/2020 13:27:33 +0800 org.archive.jmx.Client maxThreads: 200
3.11.2.2 部署 Java gateway 服务器
Java gateway 是一个独立于zabbix server和 zabbix agent的组件,默认使用端口10052/tcp, 所以java gateway可以是单独的一台服务器,但是也可以和zabbix server或者zabbix agent 共用一台服务器
Java gatway 可以用两种方法安装
包安装
编译安装
注意: Java gateway和Zabbix Server都无需安装 JDK
3.11.2.2.1 包安装 Java gateway
范例: Ubuntu 安装
[root@ubuntu1804 ~]#wget
https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-
release_5.0-1+bionic_all.deb
[root@ubuntu1804 ~]#dpkg -i zabbix-release_5.0-1+bionic_all.deb
[root@ubuntu1804 ~]#sed -i
's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#'
/etc/apt/sources.list.d/zabbix.list
[root@ubuntu1804 ~]#apt update
# 安装依赖 JDK 会自动安装
[root@ubuntu1804 ~]#apt -y install zabbix-java-gateway
#可以开启自身的JMX功能实现自身的监控(可选)
[root@ubuntu1804 ~]#vim /etc/zabbix/zabbix_java_gateway.conf
# uncomment to enable remote monitoring of the standard JMX objects on the Zabbix
Java Gateway itself
JAVA_OPTIONS="$JAVA_OPTIONS -Dcom.sun.management.jmxremote -
Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false-
Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.registry.ssl=false"
#Ubuntu安装后会自动启动服务并打开监听10052/tcp端口
[root@ubuntu1804 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0128127.0.0.53%lo:53 0.0.0.0:*
LISTEN 01280.0.0.0:22 0.0.0.0:*
LISTEN 0128127.0.0.1:6010 0.0.0.0:*
LISTEN 0128 [::]:22 [::]:*
LISTEN 050 *:12345 *:*
LISTEN 0128 [::1]:6010 [::]:*
LISTEN 050 *:10052 *:*
[root@ubuntu1804 ~]#ps aux|grep java
zabbix 7911.8 4.4 313138089620 ? Sl 18:59 0:03 java -server-
Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345-
Dcom.sun.management.jmxremote.authenticate=false-
Dcom.sun.management.jmxremote.ssl=false-
Dcom.sun.management.jmxremote.registry.ssl=false-
Dlogback.configurationFile=/etc/zabbix/zabbix_java_gateway_logback.xml -
classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-
1.2.3.jar:lib/logback-core-1.2.3.jar:lib/slf4j-api-1.7.30.jar:bin/zabbix-java-
gateway-5.0.14.jar -Dzabbix.pidFile=/var/run/zabbix/zabbix_java_gateway.pid -
Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway
root 12350.0 0.0 144361120 pts/0 S+19:02 0:00 grep--
color=auto java
范例: CentOS安装
[root@centos8 ~]#rpm -Uvh
https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-
1.el8.noarch.rpm
[root@centos8 ~]#rpm -Uvh
https://repo.zabbix.com/zabbix/4.0/rhel/8/x86_64/zabbix-release-4.0-
2.el8.noarch.rpm
#修改为阿里云源
[root@centos8 ~]#vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository -$basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/8/x86_64/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
#或者sed修改
[root@centos8 ~]#sed -i.bak 's/repo.zabbix.com/mirrors.aliyun.com\/zabbix/'
/etc/yum.repos.d/zabbix.repo
#安装
[root@centos8 ~]#yum -y install zabbix-java-gateway
#查看包文件列表
[root@centos8 ~]#rpm -ql zabbix-java-gateway
/etc/zabbix/zabbix_java_gateway.conf
/etc/zabbix/zabbix_java_gateway_logback.xml
/usr/lib/systemd/system/zabbix-java-gateway.service
/usr/lib/tmpfiles.d/zabbix-java-gateway.conf
/usr/sbin/zabbix_java_gateway
/usr/share/doc/zabbix-java-gateway
/usr/share/doc/zabbix-java-gateway/AUTHORS
/usr/share/doc/zabbix-java-gateway/COPYING
/usr/share/doc/zabbix-java-gateway/ChangeLog
/usr/share/doc/zabbix-java-gateway/NEWS
/usr/share/doc/zabbix-java-gateway/README
/usr/share/zabbix-java-gateway
/usr/share/zabbix-java-gateway/bin
/usr/share/zabbix-java-gateway/bin/zabbix-java-gateway-4.0.24.jar
/usr/share/zabbix-java-gateway/lib
/usr/share/zabbix-java-gateway/lib/android-json-4.3_r3.1.jar
/usr/share/zabbix-java-gateway/lib/logback-classic-0.9.27.jar
/usr/share/zabbix-java-gateway/lib/logback-core-0.9.27.jar
/usr/share/zabbix-java-gateway/lib/slf4j-api-1.6.1.jar
/var/log/zabbix
/var/run/zabbix
#默认的配置文件可不做修改
[root@centos8 ~]#grep '^[^#]' /etc/zabbix/zabbix_java_gateway.conf
PID_FILE="/var/run/zabbix/zabbix_java.pid"
[root@centos8 ~]#cat /etc/zabbix/zabbix_java_gateway.conf
# This is a configuration file for Zabbix Java Gateway.
# It is sourced by startup.sh and shutdown.sh scripts.
### Option: zabbix.listenIP
# IP address to listen on.
#
# Mandatory: no
# Default:
# LISTEN_IP="0.0.0.0"
### Option: zabbix.listenPort
# Port to listen on.
#
# Mandatory: no
# Range: 1024-32767
# Default:
# LISTEN_PORT=10052 #默认监听端口
### Option: zabbix.pidFile
# Name of PID file.
# If omitted, Zabbix Java Gateway is started as a console application.
#
# Mandatory: no
# Default:
# PID_FILE=
PID_FILE="/var/run/zabbix/zabbix_java.pid"
### Option: zabbix.startPollers
# Number of worker threads to start.
#
# Mandatory: no
# Range: 1-1000
# Default:
START_POLLERS=5#指定线程个数,根据JAVA JXM客户端数量适当调大,比如:50
### Option: zabbix.timeout
# How long to wait for network operations.
#
# Mandatory: no
# Range: 1-30
# Default:
# TIMEOUT=3
# uncomment to enable remote monitoring of the standard JMX objects on the Zabbix
Java Gateway itself
#JAVA_OPTIONS="$JAVA_OPTIONS -Dcom.sun.management.jmxremote -
Dcom.sun.management.jmxremote.port=12345
# -Dcom.sun.management.jmxremote.authenticate=false -
Dcom.sun.management.jmxremote.ssl=false"
#启动
[root@centos8 ~]#systemctl enable --now zabbix-java-gateway.service
[root@centos8 ~]#ps -ef|grep java
zabbix 250411010:27 ? 00:00:00 java -server-
Dlogback.configurationFile=/etc/zabbix/zabbix_java_gateway_logback.xml -
classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-
0.9.27.jar:lib/logback-core-0.9.27.jar:lib/slf4j-api-1.6.1.jar:bin/zabbix-java-
gateway-4.0.24.jar -Dzabbix.pidFile=/var/run/zabbix/zabbix_java.pid -
Dzabbix.startPollers=20-Dsun.rmi.transport.tcp.responseTimeout=3000
com.zabbix.gateway.JavaGateway
root 250611593010:29 pts/1 00:00:00 grep--color=auto java
#查看是否打开端口10052/tcp
[root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 01280.0.0.0:22 0.0.0.0:*
LISTEN 0100127.0.0.1:25 0.0.0.0:*
LISTEN 0128 [::]:22 [::]:*
LISTEN 0100 [::1]:25 [::]:*
LISTEN 050 *:10052 *:*
3.11.2.2.2 编译安装 Java gateway
编译安装使用的是zabbix agent,zabbix server 是同一个源码包,只需指定相关的编译选项即可
范例: 编译安装 zabbix java gateway 5.0
[root@centos8 ~]#tar xf zabbix-5.0.13.tar.gz
[root@centos8 ~]#wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-
5.0.13.tar.gz
[root@centos8 ~]#cd zabbix-5.0.13/
[root@centos8 zabbix-5.0.13]#./configure --prefix=/apps/zabbix_java_gateway --
enable-java --with-net-snmp --with-mysql -with-ssh2
[root@centos8 zabbix-5.0.13]#make && make install
[root@centos8 zabbix-
5.0.13]#/apps/zabbix_java_gateway/sbin/zabbix_java/startup.sh
[root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0100127.0.0.1:25 0.0.0.0:*
LISTEN 01280.0.0.0:22 0.0.0.0:*
LISTEN 0100 [::1]:25 [::]:*
LISTEN 050 *:10052 *:*
LISTEN 0128 [::]:22 [::]:*
[root@centos8 ~]#ps aux|grep java
root 92532.1 2.9 257061254684 pts/1 Sl 09:29 0:00 java -server
-classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-
1.2.3.jar:lib/logback-core-1.2.3.jar:lib/slf4j-api-1.7.30.jar:bin/zabbix-java-
gateway-5.0.13.jar -Dzabbix.pidFile=/tmp/zabbix_java.pid -
Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway
root 92700.0 0.0 12112988 pts/0 S+09:29 0:00 grep--
color=auto java
范例: 编译安装 zabbix java gateway 4.0
[root@centos8 ~]#yum -y install gcc java-1.8.0-openjdk-devel
[root@centos8 ~]#wget https://cdn.zabbix.com/zabbix/sources/stable/4.0/zabbix-
4.0.24.tar.gz
cd /usr/local/src
[root@centos8 ~]#tar xf zabbix-4.0.24.tar.gz
[root@centos8 ~]#cd zabbix-4.0.24/
[root@centos8 zabbix-4.0.24]# ./configure --prefix=/usr/local/zabbix --enable-
java --with-net-snmp --with-mysql -with-ssh2
[root@centos8 zabbix-4.0.24]#make && make install
[root@centos8 ~]#tree /usr/local/zabbix/
/usr/local/zabbix/
└── sbin
└── zabbix_java
├── bin
│ └── zabbix-java-gateway-4.0.24.jar
├── lib
│ ├── android-json-4.3_r3.1.jar
│ ├── logback-classic-0.9.27.jar
│ ├── logback-console.xml
│ ├── logback-core-0.9.27.jar
│ ├── logback.xml
│ └── slf4j-api-1.6.1.jar
├── settings.sh
├── shutdown.sh
└── startup.sh
4 directories, 10 files
[root@centos8 ~]#/usr/local/zabbix/sbin/zabbix_java/startup.sh
[root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 01280.0.0.0:22 0.0.0.0:*
LISTEN 0100127.0.0.1:25 0.0.0.0:*
LISTEN 0128 [::]:22 [::]:*
LISTEN 0100 [::1]:25 [::]:*
LISTEN 050 *:10052 *:*
[root@centos8 ~]#ps -ef|grep java
root 155681310:58 pts/0 00:00:00 java -server-classpath
lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-0.9.27.jar:lib/logback-
core-0.9.27.jar:lib/slf4j-api-1.6.1.jar:bin/zabbix-java-gateway-4.0.24.jar -
Dzabbix.pidFile=/tmp/zabbix_java.pid -
Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway
root 155871165010:58 pts/0 00:00:00 grep--color=auto java
3.11.2.3 配置 Zabbix Server 支持 Java gateway
3.11.2.3.1 Zabbix Server 开启 Java gateway 功能
默认有关java的监控项是不支持的,如下图

配置下面后,上面相关监控项会支持
#包安装zabbix server
[root@zabbix-server ~]#vim /etc/zabbix/zabbix_server.conf
#编译安装zabbix server
[root@zabbix-server ~]#vim /apps/zabbix_server/etc/zabbix_server.conf
JavaGateway=10.0.0.105 #指向JAVA gateway主机
StartJavaPollers=10#指定开启的进程数,默认为0,即不开启,所以必须修改此行
JavaGatewayPort=10052#指定端口,此为默认值,可不修改
[root@zabbix-server ~]#systemctl restart zabbix-server.service
#查看进程
[root@zabbix-server ~]#ps -ef|grep java
zabbix 25292518012:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #1 [got 0 values in 0.000011
sec, idle 5 sec]
zabbix 25302518012:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #2 [got 0 values in 0.000011
sec, idle 5 sec]
zabbix 25312518012:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #3 [got 0 values in 0.000025
sec, idle 5 sec]
zabbix 25322518012:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #4 [got 0 values in 0.000026
sec, idle 5 sec]
zabbix 25332518012:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #5 [got 0 values in 0.000014
sec, idle 5 sec]
zabbix 25342518012:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #6 [got 0 values in 0.000034
sec, idle 5 sec]
zabbix 25352518012:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #7 [got 0 values in 0.000012
sec, idle 5 sec]
zabbix 25362518012:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #8 [got 0 values in 0.000020
sec, idle 5 sec]
zabbix 25372518012:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #9 [got 0 values in 0.000033
sec, idle 5 sec]
zabbix 25382518012:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #10 [got 0 values in
0.000046 sec, idle 5 sec]
root 25712334012:22 pts/1 00:00:00 grep--color=auto java
3.11.2.3.2 使用系统内置模板监控 tomcat 主机
如果 Java gateway 开启JMX功能,也可以直接监控 java gateway 自身

添加需要监控的java服务器,指定通过JMX接口实现

选中系统内置的模板:
Template App Generic Java JMX
Template App Apache Tomcat JMX
注意: Template App Apache Tomcat 只支持老版本的tomcat,所以此处不选择它


查看到 JMX 数据

3.11.2.3.3 导入自定义模板
通过自定义的 JMX 模板,可以定制生产所需的监控项和阈值



3.11.2.3.4 将自定义的模板关联到监控的tomcat主机
.jpg)

取消之前关联的模板注意: 主机的 JMX 标识正常情况下会变绿

3.11.2.3.5 验证使用自定义模板监控结果

3.12 监控网络设备 SNMP
3.12.1 SNMP 介绍和组成
3.12.1.1 SNMP 介绍

SNMP 即 Simple Network Management Protocol 简单网络管理协议,属于TCP/IP五层协议中的应用层协议,用于网络管理的协议,SNMP主要用于网络设备的管理。
SNMP的基本思想:为不同种类的设备、不同厂家生产的设备、不同型号的设备,定义为一个统一的接口和协议,使得管理员可以是使用统一的外观面对这些需要管理的网络设备进行管理。通过网络,管理员可以管理位于不同物理空间的设备,从而大大提高网络管理的效率,简化网络管理员的工作。
通常一线的网络硬件厂商的设备都支持SNMP协议,如:华为,华三,思科,锐捷等,另外 Linux,Unix,Windows,MacOS等也都支持
SNMP协议在1988年被制定,并被Internet体系结构委员会(IAB,Internet Architecture Board)采纳作为一个短期的网络管理解决方案,由于SNMP的简单性,在Internet时代得到了蓬勃的发展,1992年发布了SNMPv2版本,以增强SNMPv1的安全性和功能,SNMP的协议版本目前有SNMP v1、SNMPV 2c 和 SNMP v3三种版本,其具体差别如下:
SNMP v1采用团体名(Community Name)认证,团体名用来定义SNMP NMS和SNMP Agent的关系,如果SNMP报文携带的团体名没有得到设备的认可,该报文将被丢弃,团体名起到了类似于密码的作用, 用来限制SNMP NMS对SNMP Agent的访问
SNMP v2c也采用团体名认证,它在兼容SNMP v1的同时又扩充了SNMP v1的功能,它提供了更多的操作类型(批量获取GetBulk和通知请求InformRequest)、支持更多的数据类型(Counter64等)、提供了更丰富的错误代码且能够更细致地区分错误。此版本使用较多.
SNMP v3提供了基于用户的安全模型(USM,User-Based Security Model)的认证机制,用户可以设置认证和加密功能,认证用于验证报文发送方的合法性,避免非法用户的访问,加密则是对NMS和Agent之间的传输报文进行加密,以免被窃听。通过有无认证和有无加密等功能组合,可以为SNMP NMS和 SNMP Agent之间的通信提供更高的安全性。此版本安全性高,但效率不高.
3.12.1.2 SNMP 工作原理
SNMP网络设备分为NMS和Agent两种:
-
NMS(Network Management Station,网络管理站)是SNMP网络的管理者,NMS是运行SNMP客户端管理程序的工作站,能够提供友好的人机交互界面,方便网络管理员完成绝大多数的网络管理工作。
-
Agent是SNMP网络的被管理者。Agent是驻留在设备上的一个进程,负责接收、处理来自NMS的请求报文。在一些紧急情况下,如接口状态发生改变等,Agent也会主动通知NMS。 NMS和Agent之间通过SNMP协议来交互管理信息。
SNMP管理进程与代理进程之前为了交互信息,定义了5种报文:
get-request操作:这个操作是由管理进程发起,向代理进程处请求提取一个或多个参数值。
get-next-request操作:这个操作是由管理进程发起,向从代理进程处提取一个或多个参数的下一个参数
值。
get-response操作:这个操作是由代理进程发出的,向管理进程返回的一个或多个参数值。
set-request操作:这个操作是由管理进程发起,对代理进程设置一个或多个参数值。
trap操作:这个操作是由代理进程主动发出的报文,通知管理进程有某些事情发生。

3.12.1.3 SNMP 组成
基于TCP/IP的SNMP网络管理包含以下组成部分:
-
管理信息库MIB(Management Information Base): 管理信息库包含所有代理进程的所有可被查询和修改的参数。RFC 1213 [McCloghrie and Rose 1991]定义了第二版的MIB,叫做MIB-II。
-
OID(object identifiers): 是与对象相关联的用来无歧义地标识对象的全局唯一的值,一个OID是一个唯一的键值对,用于标识具体某一个设备的某个具体信息(对象标识),如端口信息、设备名称等。即一个OID就是网络通信中对象的身份证。
-
管理信息结构SMI(Structure of Management Information): 关于MIB的一套公用的结构和表示符号。这个在RFC 1155 [Rose and McCloghrie 1990]中定义。SMI 是一种语言,是为了确保网络管理数据的语法和语义明确和无二义性而定义的语言。它是定义被管理网络实体中特定数据的语言。
它定义了数据类型、对象模型,以及写入和修改管理信息的规则。比如: 支持INTEGER,OCTER STRING,DisplayString,IpAddress等数据类型
- SNMP(Simple Network Management Protocol): 管理进程和代理进程之间的通信协议,叫做简单网络管理协议。在RFC 1157 [Case et al.1990]中定义。SNMP包括数据报交换的格式等。尽管可以在运输层采用各种各样的协议,但是在SNMP中,用得最多的协议还是UDP。
上述三部分相互独立,每部分都定义了单独标准(RFC)。SNMP定义通信的方式和格式,但不指明具体设备上的具体数据,每种设备的数据细节在MIB中定义,这样做达到了“控制与数据相分离”的目的,能提供很好的兼容性和可扩展性。而SMI又为保持MIB的简单性和可扩展性提供了很好的支持。
3.12.1.4 MIB 和 OID
管理信息库MIB可以分为公有MIB和私有MIB两种
-
公有MIB:一般由RFC定义,主要用来对各种公有协议进行结构化设计和接口标准化处理。例如: OSPF-MIB(RFC1850)/BGP4-MIB(RFC1657)都是典型的公有MIB。大多数的设备制造商都需要按照RFC的定义来提供SNMP接口。
-
私有MIB:是公有MIB的必要补充,当公司自行开发私有协议或者特有功能时,可以利用私有MIB 来完善SNMP接口的管理功能,同时对第三方网管软件管理存在私有协议或特有功能的设备提供支持。
MIB中存放了对每个对象都指定唯一的对象标识OID, OID是一种数据类型,它指明一种“授权”命名的对象。“授权”的意思就是这些标识不是随便分配的,它是由一些权威机构进行管理和分配的。对象标识是一个整数序列,以点(“.”)分隔。这些整数构成一个树型结构,类似于DNS或Unix的文件系统。对象标识从树的顶部开始,顶部没有标识,以root表示
树上的每个结点同时还有一个文字名。例如标识 .1.3.6.1.2.1和iso.org.dod.internet.memt.mib对应。 这主要是为了人们阅读方便。在实际应用中,也就是说在管理进程和代理进程进行数据报交互时,MIB 变量名是以对象标识来标识的,都是以1.3.6.1.2.1开头的。
一般情况下(如交换机、防火墙、PC)使用的路径如图中所示,iso-->org-->dod-->internet,所以这些设备信息的oid必然以1.3.6.1开头,之后mgmt为公有库,包含了一些设备共同具备的信息,例如 1.3.6.1.2.1.1.5为主机名,而private为私有库,再根据不同的公司,MIB树继续扩展下去,最后到每一个具体值的叶子节点,例如1.3.6.1.4.1.2021.4.3.0为Linux操作系统的交换区大小
下图显示了在SNMP中用到的这种树型结构。所有的MIB变量都从 .1.3.6.1.2.1这个标识开始。

3.12.1.5 常见 OID
oid-info是一个内容丰富的网站,包含了大量公有或私有的MIB信息,在知道部分OID的情况,可以方便的进行节点具体信息的查看。但是树太过庞大,仅仅从网站上查看效率十分低下,直接从设备商处获取 mib库是最方便的做法。
参考链接:
http://www.oid-info.com/index.htm
#注意:查询时无需输入最前面的.
系统信息:
sysDescr .1.3.6.1.2.1.1.1
sysobjectID .1.3.6.1.2.1.1.2
sysUpTime .1.3.6.1.2.1.1.3
syscontact .1.3.6.1.2.1.1.4
sysName .1.3.6.1.2.1.1.5
CPU负载:
l minute Load: .1.3.6.1.4.1.2021.10.1.3.1
5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2
15minute Load: .1.3.6.1.4.1.2021.10.1.3.3
CPU信息:
percentage of user Cpu time: .1.3.6.1.4.1.2021.11.9.0
raw user cpu time: .1.3.6.1.4.1.2021.11.50.0
percentages of system Cpu time: .1.3.6.1.4.1.2021.11.10.0
raw system cpu time: .1.3.6.1.4.1.2021.11.52.0
percentages of idle Cpu time:.1.3.6.1.4.1.2021.11.11.0
raw idle cpu time:.1.3.6.1.4.1.2021.11.53.0
raw nice cpu time: .1.3.6.1.4.1.2021.11.51.0
内存使用:
Total swap size:.1.3.6.1.4.1.2021.4.3.0
Available swap Space: .1.3.6.1.4.1.2021.4.4.0
Total RAM in machine: .1.3.6.1.4.1.2021.4.5.0
Total RAM used: .1.3.6.1.4.1.2021.4.6.0
Total RAMFree: .1.3.6.1.4.1.2021.4.11.0
Total RAM Shared: .1.3.6.1.4.1.2021.4.13.0
Tota7 RAM Buffered: .1.3.6.1.4.1.2021.4.14.0
Total cached Memory: .1.3.6.1.4.1.2021.4.15.0
硬盘使用:
Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1
Path of the device for the partition: .1.3.6.1.4.1.2021.9.1.3.1
Total size of the disk/partion (kBytes): .1.3.6.1.4.1.2021.9.1.6.1
Available space on the disk: .1.3.6.1.4.1.2021.9.1.7.1
Used space on the disk: .1.3.6.1.4.1.2021.9.1.8.1
Percentage of space used on disk: .1.3.6.1.4.1.2021.9.1.9.1
Percentage of inodes used on disk: .1.3.6.1.4.1.2021.9.1.10.1
3.12.2 使用 SNMP工具监控网络设备
3.12.2.1 开启设备的SNMP
登录网络设备,找到如下图中的设备管理--SNMP类似的设置界面,开启SNMP功能,然后设置团体名称即完成

设置团体名,默认可以使用 Public


3.12.2.2 配置 Zabbix Web 监控
配置-->主机-->添加主机-->选择类型为SNMP,输入路由器设备的IP地址



关联以下三个模板
Template Module EtherLike-MIB SNMP
Template Module Generic SNMP
Template Module Interfaces SNMP
3.12.2.3 查看网络设备的监测结果
监测-->主机-->图形


3.12.3 利用 Zabbix 监控 Linux 主机
3.12.3.1 在 Zabbix Agent 安装 SNMP 协议并配置
范例: Ubuntu 系统实现 SNMP
#Ubuntu20.04
#在被监控端Ubuntu安装SNMP协议
[root@ubuntu2004 ~]#apt -y install snmpd
[root@ubuntu2004 ~]#snmpd -v
NET-SNMP version: 5.8
Web: http://www.net-snmp.org/
Email: net-snmp-coders@lists.sourceforge.net
[root@ubuntu2004 ~]#vim /etc/snmp/snmpd.conf
agentaddress 0.0.0.0 #修改此行
view systemonly included .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1
view systemonly included .1 #加此行
#如果将社区名称public修改为123456,如下即可
rocommunity 123456 default -V systemonly
rocommunity6 123456 default -V systemonly
#rocommunity public default -V systemonly
#rocommunity6 public default -V systemonly
[root@ubuntu2004 ~]#systemctl restart snmpd.service
[root@ubuntu2004 ~]#ss -ntulp|grep snmp
udp UNCONN 000.0.0.0:161 0.0.0.0:*
users:(("snmpd",pid=24871,fd=6))
#Ubuntu18.04
#在被监控端Ubuntu安装SNMP协议
[root@ubuntu1804 ~]#apt -y install snmpd
[root@ubuntu1804 ~]#snmpd -v
NET-SNMP version: 5.7.3
Web: http://www.net-snmp.org/
Email: net-snmp-coders@lists.sourceforge.net
[root@ubuntu1804 ~]#vi /etc/snmp/snmpd.conf
agentAddress udp:0.0.0.0:161
[root@ubuntu1804 ~]#systemctl restart snmpd.service
[root@ubuntu1804 ~]#ss -ntulp|grep snmp
udp UNCONN 000.0.0.0:161 0.0.0.0:*
users:(("snmpd",pid=24871,fd=6))
范例: 红帽系统实现SNMP
#在被监控端CentOS安装SNMP服务器包
[root@centos8 ~]#yum -y install net-snmp
[root@centos8 ~]#snmpd -v
NET-SNMP version: 5.8
Web: http://www.net-snmp.org/
Email: net-snmp-coders@lists.sourceforge.net
[root@centos8 ~]#vim /etc/snmp/snmpd.conf
[root@centos8 ~]#grep '^[^#]' /etc/snmp/snmpd.conf
com2sec notConfigUser default 123456#修改此行,设置团体密码,默认为public,此处
改为123456
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
view systemview included .1. #添加此行,自定义授权,否则 zabbix 无
法获取数据
access notConfigGroup "" any noauth exact systemview none none
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes
#验证开启161/UDP端口
[root@centos8 ~]#ss -uln
State Recv-Q Send-Q Local Address:Port Peer
Address:Port
UNCONN 000.0.0.0:161
0.0.0.0:*
UNCONN 00127.0.0.1:323
0.0.0.0:*
UNCONN 00 [::1]:323
[::]:*
[root@centos8 ~]#ss -ntulp|grep snmp
udp UNCONN 000.0.0.0:161 0.0.0.0:* users:
(("snmpd",pid=9962,fd=9))
tcp LISTEN 0128127.0.0.1:199 0.0.0.0:* users:
(("snmpd",pid=9962,fd=10))
3.12.3.2 测试 SNMP 是否可以访问
在 Zabbix Server (也可以在其它主机上)安装 SNMP工具 net-snmp-utils
此工具可以测试是否可以获取Zabbix Agent的SNMP数据
注意: 在实际生产环境中Zabbix Server 在进行 SNMP 监测时,无需在 Zabbix Server 安装此工具
snmpwalk 命令格式
USAGE:snmpwalk[OPTIONS]AGENT[OID]
-h:显示帮助。
-v:指定snmp的版本,1或者2c或者3。
-c:指定连接设备SNMP密码。
—r:指定重次次数.默认为0次
-l:指定安全级别: noAuthNoPriv|authNoPriv|authPriv。
-a:验证协议:MD5|SHA。只有-l指定为authNoPriv或authPriv时才需要。
-A∶验证字符串。只有-1指定为authNoPriv或authPriv时才需要
-x:加密协议:DES。只有-l指定为authPriv时才需要
-x:加密字符串。只有-l指定为authPriv时才需要
范例: snmpwalk 获取 SNMP代理端的信息
#如果是CentOS安装SNMP工具包
[root@zabbix-server ~]#yum -y install net-snmp-utils
#如果是Ubuntu安装下面包
[root@zabbix-server ~]#apt -y install snmp
#获取主机名
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 .1.3.6.1.2.1.1.5.0
SNMPv2-MIB::sysName.0 = STRING: centos8.wang.org
# 获取系统信息
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 1.3.6.1.2.1.1.1
SNMPv2-MIB::sysDescr.0 = STRING: Linux centos8.wang.org 4.18.0-240.el8.x86_64 #1
SMP Fri Sep 25 19:48:47 UTC 2020 x86_64
#获取内存
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 .1.3.6.1.4.1.2021.4.5.0
UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 1833004 kB
# 取上面 H3C 路由的器内存信息
[root@zabbix-server ~]#snmpwalk -v2c -c public 10.1.84.1 .1 |grep -i mem
[root@zabbix-server ~]#snmpwalk -v2c -c public 10.1.84.1 .1.3.6.1.2.1.25.2.2.0
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER:483316 KBytes
[root@zabbix-server ~]#snmpwalk -v2c -c public 10.1.84.1 hrMemorySize.0
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER:483316 KBytes
# 获取接口信息
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 .1.3.6.1.2.1.2.2.1.3
IF-MIB::ifType.1 = INTEGER: softwareLoopback(24)
IF-MIB::ifType.2 = INTEGER: ethernetCsmacd(6)
# 获取接口 MAC
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 .1.3.6.1.2.1.2.2.1.6
IF-MIB::ifPhysAddress.1 = STRING:
IF-MIB::ifPhysAddress.2 = STRING: 0:c:29:15:9b:83
# 获取接口当前带宽 [bps]
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 .1.3.6.1.2.1.2.2.1.5
IF-MIB::ifSpeed.1 = Gauge32: 10000000
IF-MIB::ifSpeed.2 = Gauge32: 1000000000
# 取 IP 地址
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 1.3.6.1.2.1.4.20.1.1
IP-MIB::ipAdEntAddr.10.0.0.8 = IpAddress: 10.0.0.8
IP-MIB::ipAdEntAddr.127.0.0.1 = IpAddress: 127.0.0.1
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 IP-MIB::ipAdEntAddr
IP-MIB::ipAdEntAddr.10.0.0.8 = IpAddress: 10.0.0.8
IP-MIB::ipAdEntAddr.127.0.0.1 = IpAddress: 127.0.0.1
注意: 团体密码是明文传输的,可以抓包查看到

3.12.3.3 创建主机
在配置中添加需要监控的SNMP代理端

删除默认的客户端类型

指定客户端类型为SNMP

指定SNMP代理端的地址和端口

3.12.3.4 关联 SNMP 模板
关联对应的SNMP模板 Template OS Linux SNMP

修改主机宏的值 {$SNMP_COMMUNITY}

或者修改继承以及主机的宏

添加完成

Zabbix 4.0 界面如下

关联对应的SNMP模板


3.12.3.5 验证结果
过一段时间,可以看到SNMP字体变绿

在监测项验证查看主机信息

对应主机的图形

查看主机的数据

4 Zabbix 监控实战案例
Zabbix 的监控功能强大,还支持定制的自定义监控项,可以说能做到想监控什么就可以监控什么
以下实战案例中实现了对生产环境中各种资源的监控
4.1 监控内存使用情况
4.1.1 在客户端定义监控项
[root@centos8 ~]#cat /etc/zabbix/zabbix_agentd.d/mem.conf
[root@centos8 ~]#cat /etc/zabbix/zabbix_agent2.d/mem.conf
UserParameter=mem_use_percent,free | awk'NR==2{print $3/$2*100}'
UserParameter=mem_unuse_percent,free | awk'NR==2{print 100-($3/$2*100)}'
#客户端测试
[root@centos8 ~]#zabbix_agent -t mem_use_percent
[root@centos8 ~]#zabbix_agent2 -t mem_use_percent
mem_use_percent [s|11.9297]
[root@centos8 ~]#zabbix_agent2 -t mem_unuse_percent
mem_unuse_percent [s|88.2598]
[root@centos8 ~]#systemctl restart zabbix-agent.service
[root@centos8 ~]#systemctl restart zabbix-agent2.service
#服务器端测试
[root@zabbix-server ~]#yum -y install zabbix-get
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -p 10050 -k "mem_use_percent"
11.1591
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -p 10050 -k "mem_unuse_percent"
88.7257
4.1.2 在 Zabbix Server 添加监控项


4.1.3 验证结果

4.2 监控TCP 十一种有限状态机
4.2.1 TCP 十一种有限状态机
TCP 共十一种状态
ESTABLISHED
SYN_SENT
SYN_RECV
FIN_WAIT1
FIN_WAIT2
TIME_WAIT
CLOSE
CLOSE_WAIT
LAST_ACK
LISTEN
CLOSING


[root@rocky8 ~]#man netstat
State
The state of the socket. Since there are no states in raw mode and
usually no states used in UDP and UDPLite, this column may be left
blank. Normally this can be one of several values:
ESTABLISHED
The socket has an established connection.
SYN_SENT
The socket is actively attempting to establish a connection.
SYN_RECV
A connection request has been received from the network.
FIN_WAIT1
The socket is closed, and the connection is shutting down.
FIN_WAIT2
Connection is closed, and the socket is waiting for a shutdown
from the remote end.
TIME_WAIT
The socket is waiting after close to handle packets still in the
network.
CLOSE The socket is not being used.
CLOSE_WAIT
The remote end has shut down, waiting for the socket to close.
LAST_ACK
The remote end has shut down, and the socket is closed. Waiting
for acknowledgement.
LISTEN The socket is listening for incoming connections. Such sockets
are not included in the output unless you specify the --listening
(-l) or --all (-a) option.
CLOSING
Both sockets are shut down but we still don't have all our data
sent.
UNKNOWN
The state of the socket is unknown.
[root@rocky8 ~]#netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 000.0.0.0:22 0.0.0.0:* LISTEN
tcp 00127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0010.0.0.8:22 10.0.0.1:9680 ESTABLISHED
tcp 05210.0.0.8:22 10.0.0.1:9682 ESTABLISHED
tcp 0010.0.0.8:22 10.0.0.1:9681 ESTABLISHED
tcp6 00 :::10050 :::* LISTEN
tcp6 00 :::22 :::* LISTEN
tcp6 00 ::1:25 :::* LISTEN
tcp6 0010.0.0.8:10050 10.0.0.100:55018 TIME_WAIT
4.2.2 实现自定义监控项
4.2.2.1 案例1: 自定义监控项实现监控TCP当前ESTABLISHED状态的连接数
先准备脚本实现自定义监控项实现连接数
[root@centos8 ~]#cat /etc/zabbix/zabbix_agentd.d/test.conf
UserParameter=tcp_state_estab,netstat -ant|grep -c ESTABLISHED
[root@centos8 ~]#systemctl restart zabbix-agent.service
[root@zabbix-server ~]#zabbix_get -s 10.0.0.38 -p 10050 -k "tcp_state_estab"
5
添加被控制主机



在被监控主机添加监控项

测试是否能获取到相关的值

验证结果


4.2.2.2 案例2:自定义监控项实现监控TCP 状态的连接数
修改监控项的脚本为以下形式,可以实现一个脚本实现多个自定义监控项
[root@centos8 ~]#yum -y install net-tools
[root@centos8 ~]#cat /etc/zabbix/zabbix_agentd.d/tcp_state.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#URL: http://www.wangxiaochun.com
#Description: The test script
#********************************************************************
tcp_state () {
netstat -atn|grep -c$1
}
tcp_state $1
[root@centos8 ~]#chmod +x /etc/zabbix/zabbix_agentd.d/tcp_state.sh
[root@centos8 ~]#cat /etc/zabbix/zabbix_agentd.d/test.conf
UserParameter=tcp_state[*],/etc/zabbix/zabbix_agentd.d/tcp_state.sh $1
[root@centos8 ~]#systemctl restart zabbix-agent.service
[root@zabbix-server ~]#zabbix_get -s 10.0.0.38 -p 10050 -k "tcp_state[LISTEN]"
9
[root@zabbix-server ~]#zabbix_get -s 10.0.0.38 -p 10050 -k
"tcp_state[ESTABLISHED]"
3
[root@zabbix-server ~]#zabbix_get -s 10.0.0.38 -p 10050 -k "tcp_state[TIME-
WAIT]"
8200

测试是否能取到数据




4.2.3 自定义模板实现监控
对于主机和监控项众多时,直接将监控项关联至主机的方法,是比较繁琐的
可以通过将自定义的监控项加入到自定义的模板或已有的模板中,再将此模板关联至需要监控的主机,从而提高效率



创建应用集tcp_state

在自定义的模板中创建自定义监控项或者将已有的监控项复制到模板中



查看自定义的模板中已存在自定义的应用集和监控项

在监控主机上清空前面小节已关联的监控项

在被监控主机重新关联自定义的模板

查看关联的模板及相关的监控项



导出自定义的模板

查看文件内容

4.2.4 创建自定义触发器
4.2.4.1 创建触发器
选择指定的模板中创建触发器

创建触发器




4.2.4.2 测试触发触发器
默认没有触发消息

[root@centos8 ~]#zabbix_get -s 10.0.0.7 -p 10050 -k "tcp_state[ESTAB]"
3
[root@centos8 ~]#zabbix_get -s 10.0.0.8 -p 10050 -k "tcp_state[ESTAB]"
2
多建立连接查看到下面提示信息
[root@centos8 ~]#zabbix_get -s 10.0.0.8 -p 10050 -k "tcp_state[ESTAB]"
6
[root@centos8 ~]#zabbix_get -s 10.0.0.7 -p 10050 -k "tcp_state[ESTAB]"
7


4.2.5 自定义图形
选择自定义的模板,查看"图形"
.jpg)
创建图形

在图形中添加监控项

确定创建图形

在模板中可以看到图形有一个

在主机中验证结果

验证图形和颜色

4.2.6 导出模板
将自定义的模板导出,可以在其它Zabbix Server导入进行复用


4.3 监控 Memcached 服务
4.3.1 在 Zabbinx Agent安装memcached 服务
[root@centos8 ~]#yum -y install memcached nc
[root@centos8 ~]#vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
#OPTIONS="-l 127.0.0.1,::1" #注释此行
[root@centos8 ~]#systemctl enable --now memcached
[root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 01280.0.0.0:11211 0.0.0.0:*
LISTEN 01280.0.0.0:22 0.0.0.0:*
LISTEN 0100127.0.0.1:25 0.0.0.0:*
LISTEN 01280.0.0.0:10050 0.0.0.0:*
LISTEN 0128 [::]:11211 [::]:*
LISTEN 0128 *:80 *:*
LISTEN 0128 [::]:22 [::]:*
LISTEN 0100 [::1]:25 [::]:*
4.3.2 Zabbix Agent的监控脚本
[root@centos8 ~]#cat
/apps/zabbix_agent/etc/zabbix_agentd.conf.d/memcached_state.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#Date: 2020-09-01
#FileName: memcached_state.sh
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
memcached_state(){
port=$1
echo-e'stats\nquit'| nc127.0.0.1 $port |awk -vitem=$2'$2==item{print
$3}'
}
memcached_state $1$2
#编译安装路径
[root@centos8 ~]#chmod +x
/apps/zabbix_agent/etc/zabbix_agentd.conf.d/memcached_state.sh
#如果是包安装路径如下
[root@centos8 ~]#chmod +x /etc/zabbix/zabbix_agentd.d/memcached_state.sh
[root@centos8 ~]#/apps/zabbix_agent/etc/zabbix_agentd.conf.d/memcached_state.sh
11211 version
1.5.9
#取当前连接数
[root@centos8 ~]#/apps/zabbix_agent/etc/zabbix_agentd.conf.d/memcached_state.sh
11211 curr_connections
2
#取内存使用
[root@centos8 ~]#/apps/zabbix_agent/etc/zabbix_agentd.conf.d/memcached_state.sh
11211 bytes
131
[root@centos8 ~]#/apps/zabbix_agent/etc/zabbix_agentd.conf.d/memcached_state.sh
11211 get_hits
0
[root@centos8 ~]#/apps/zabbix_agent/etc/zabbix_agentd.conf.d/memcached_state.sh
11211 get_misses
0
4.3.3 zabbix Agent 添加自定义的监控项
[root@centos8 ~]#vim /apps/zabbix_agent/etc/zabbix_agentd.conf
### Option: UserParameter
# User-defined parameter to monitor. There can be several user-defined
parameters.
# Format: UserParameter=<key>,<shell command>
# See 'zabbix_agentd' directory for examples.
#
# Mandatory: no
# Default:
# UserParameter=
UserParameter=tcp_state[*],/apps/zabbix_agent/etc/zabbix_agentd.conf.d/tcp_state
.sh "$1"
UserParameter=memcached_state[*],/apps/zabbix_agent/etc/zabbix_agentd.conf.d/mem
cached_state.sh "$1""$2"
#如果是包安装,配置文件如下
[root@centos8 ~]#cat /etc/zabbix/zabbix_agentd.d/test.conf
UserParameter=memcached_state[*],/etc/zabbix/zabbix_agentd.d/memcached_state.sh
"$1""$2"
[root@centos8 ~]#systemctl restart zabbix-agent.service
4.3.4 Zabbix Server 测试监控memcached服务的监控项数据
[root@zabbix-server ~]#zabbix_get -s 10.0.0.103 -p 10050 -
k"memcached_state[11211,version]"
1.5.9
[root@zabbix-server ~]#zabbix_get -s 10.0.0.103 -p 10050 -
k"memcached_state[11211,curr_connections]"
2
4.3.5 创建memached的监控自定义模板
4.3.5.1 创建自定义模板


4.3.4.2 创建自定义监控项
监控项实现监控当前连接数

键值: memcached_state[11211,curr_connections]

4.3.5.3 创建针对自定义模板的触发器
当前连接数大于1000时生成触发器事件



4.3.5.4 创建自定义模板版的图形
自定义的模板关联图形,一个图形可以用多个监控项,不同的监控项会自动使用不同的颜色进行区分, 也可以手动调整各监控项的颜色和图形类型。




4.3.6 将自定义的模板关联至需要监控的主机上

4.3.7 验证监控结果


4.4 监控 Redis 服务
4.4.1 客户端配置
ch[root@centos8 ~]#key1="used_memory";redis-cli info |awk -F: -v key2=$key
'$1==key2{print $2}'
[root@centos8 ~]#key1="total_system_memory";redis-cli info |awk -F: -v key2=$key
'$1==key2{print $2}'
[root@centos8 ~]#key1="connected_clients";redis-cli info |awk -F: -v key2=$key
'$1==key2{print $2}'
[root@centos8 ~]#cat /etc/zabbix/zabbix_agent2.d/redis.conf
UserParameter=redis.status[*],/etc/zabbix/zabbix_agent2.d/redis_status.sh "$1"
UserParameter=redis.config.maxclients,redis-cli -p6379 config get maxclients |
awk"NR==2"
[root@centos8 ~]#cat /etc/zabbix/zabbix_agent2.d/redis_status.sh
#!/bin/bash
KEY=$1
redis-cli -p6379 info | grep"\<${KEY}\>" | awk-F':''{print $NF}'
[root@centos8 ~]#systemctl restart zabbix-agent2
# 服务器测试
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -k redis.status[used_memory]
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -k
redis.status[total_system_memory]
[root@zabbix-server ~]##zabbix_get -s 10.0.0.8 -k
redis.status[connected_clients]
4.4.2 配置 Zabbix Web
创建自定义模板
在上面的模板中创建监控项
在模板上创建2个图形,连接状态和内存状态


注意: total_system_memory 的类型为图形总数


创建触发器
#当Redis连接数达到最大连接数的70%: 活跃连接数/最大连接数*100 >70
#宏定义: {$REDIS.CLIENTS.MAX}=70
#名称:Redis活跃连接数达到{$REDIS.CLIENTS.MAX}
#问题形式:
{ Template Redis status :redis.status[connected_clients].avg(1m)}/{Template Redis
status:redis.config.maxclients.last()}*100 >={$REDIS.CLIENTS.MAX}
#当Redis内存使用率达到50%:(used_memory/total_system_memory*100> 50 )
#宏定义: {$REDIS.MEM.MAX}=50
#名称:Redis 已用内存达到{$REDIS.MEM.MAX}
#问题形式:
{ Template Redis
status:redis.status[used_memory].last()}/{Template Redis
status:redis.status[total_system _memory].last()}*100>={$REDIS.MEM.MAX}
#测试
[root@rocky8 ~]#redis-cli
127.0.0.1:6379> debug populate 5000000
将自定模板关联主机
4.5 监控 Nginx 服务
4.5.1 自定义监控项监控 nginx 状态页
[root@rocky8 ~]#vim /etc/nginx/conf.d/default.conf
# 加入
location /nginx_status {
stub_status;
access_log off;
allow 127.0.0.1;
deny all;
}
# 重启服务
[root@rocky8 ~]#systemctl restart nginx
4.5.2 配置 agent
[root@rocky8 ~]#vim /etc/zabbix/zabbix_agentd.d/nginx_status.sh
#!/bin/bash
# Description:zabbix监控nginx性能以及进程状态
HOST="127.0.0.1"
PORT="80"
URL=nginx_status
# 检测nginx进程是否存在
case $1in
ping)
pidof nginx | wc-l
;;
# 检测nginx性能
active)
curl-s"http://$HOST:$PORT/$URL/" | awk'NR==1{print $NF}'
;;
reading)
curl-s"http://$HOST:$PORT/$URL/" | awk'NR==4{print $2}'
;;
writing)
curl-s"http://$HOST:$PORT/$URL/" | awk'NR==4{print $4}'
;;
waiting)
curl-s"http://$HOST:$PORT/$URL/" | awk'NR==4{print $6}'
;;
accepts)
curl-s"http://$HOST:$PORT/$URL/" |awk 'NR==3{print $1}'
;;
handled)
curl-s"http://$HOST:$PORT/$URL/" | awk'NR==3{print $2}'
;;
requests)
curl-s"http://$HOST:$PORT/nginx_status/" | awk'NR==3{print $3}'
;;
*)
echo"Usage `basename $0` {ping | active | reading | writing | waiting |
accepts | handled | requests }"
esac
[root@rocky8 ~]#chmod +x /etc/zabbix/zabbix_agent2.d/nginx_status.sh
[root@rocky8 ~]#/etc/zabbix/zabbix_agent2.d/nginx_status.sh active
# 成功
1
#添加监控配置
[root@rocky8 ~]#vim /etc/zabbix/zabbix_agent2.d/nginx.conf
UserParameter=nginx.status[*],/etc/zabbix/zabbix_agent2.d/nginx_status.sh $1
#agent测试
[root@rocky8 ~]#zabbix_agent2 -t nginx.status[ping]
nginx.status[ping] [s|1]
[root@rocky8 ~]#zabbix_agent2 -t nginx.status[active]
nginx.status[active] [s|1]
[root@rocky8 ~]#systemctl restart zabbix-agent2.service
#服务器测试
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -k nginx.status[ping]
1
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -k nginx.status[active]
1
4.5.4 配置 Zabbix Web
创建模板
创建8个监控项
创建触发器(为ping设定监控项)
创建图形
- 关联对应主机
4.6 监控 MySQL 服务
percona 提供了相关的监控MySQL的插件,不过此项目已经不再开发,官网访问链接已经从首页删除,只能直接从下面链接访问
注意: percona提供的最新1.1.8版本对应的模板只适配与zabbix3.0之前的版本
https://www.percona.com/downloads/percona-monitoring-plugins/

4.6.1 监控MySQL 状态
使用 MySQL 自定义模板,监控mysql性能,可以监控如下内容:OPS(增删改查)、mysql请求流量带宽,mysql响应流量带宽
[root@centos8 ~]#yum -y install mysql-server
[root@centos8 ~]#systemctl enable --now mysqld
[root@centos8 ~]#mysql -e 'create user zabbix@"localhost" identified by
"123456"'
[root@centos8 ~]#grep "^Include" /etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@centos8 ~]#cat /etc/zabbix/zabbix_agentd.d/mysql.conf
UserParameter=mysql.version,mysql -V
UserParameter=mysql.status[*],/etc/zabbix/zabbix_agentd.d/check_mysql.sh $12>
/dev/null
UserParameter=mysql.ping,mysqladmin -uzabbix-p123456-P3306-h127.0.0.1 ping
2>/dev/null | grep-c alive
[root@centos8 ~]#cat /etc/zabbix/zabbix_agentd.d/check_mysql.sh
#!/bin/bash
#
MYSQL_USER='zabbix'
MYSQL_PWD='123456'
MYSQL_HOST='127.0.0.1'
MYSQL_PORT='3306'
MYSQL_CONN="/usr/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -
P${MYSQL_PORT}"
#MYSQL_CONN=mysql -e "show global status" | awk -v s=$1 '$1 ~ "^"s"$"{print $2}'
if [ $#-ne"1" ];then
echo"arg error!"
fi
case $1in
Threads)
result=`${MYSQL_CONN} status |awk '{print $4}'`
;;
Uptime)
result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"`
;;
Com_update)
result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -
f3`
;;
Slow_queries)
result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"`
;;
Com_select)
result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -
f3`
;;
Com_rollback)
result=`${MYSQL_CONN} extended-status |grep -w "Com_rollback"|cut -d"|"
-f3`
;;
Questions)
result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"`
;;
Com_insert)
result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -
f3`
;;
Com_delete)
result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -
f3`
;;
Com_commit)
result=`${MYSQL_CONN} extended-status |grep -w "Com_commit"|cut -d"|" -
f3`
;;
Bytes_sent)
result=`${MYSQL_CONN} extended-status |grep -w "Bytes_sent" |cut -d"|" -
f3`
;;
Bytes_received)
result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut -
d"|" -f3`
;;
Com_begin)
result=`${MYSQL_CONN} extended-status |grep -w "Com_begin"|cut -d"|" -
f3`
;;
*)
echo
"Usage:$0(Threads|Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questio
ns|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
;;
esac
echo$result
[root@centos8 ~]#chmod +x /etc/zabbix/zabbix_agentd.d/check_mysql.sh
[root@centos8 ~]#systemctl restart zabbix-agent.service
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -p 10050 -k 'mysql.version'
mysql Ver 8.0.21 for Linux on x86_64 (Source distribution)
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -p 10050 -k
'mysql.status[Uptime]'
1141
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -p 10050 -k
'mysql.status[Slow_queries]'
0
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -p 10050 -k 'mysql.ping'
1
#停止MySQL服务后再测试看到下面结果
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -p 10050 -k 'mysql.ping'
0
#按下面操作导入自定义模板



4.6.2 监控 MySQL 主从复制
4.6.2.1 Agent 端配置
[root@centos8 ~]#cat/etc/zabbix/zabbix_agent2.d/mysql_repl_status.sh
#!/bin/bash
KEY=$1
PASS='123456'
mysql -uroot-p$PASS-e"show slave status\G"|grep "${KEY}"|awk '{print $NF}'
[root@centos8 ~]#cat /etc/zabbix/zabbix_agentd.d/mysql.conf
UserParameter=mysql.repl.status[*],
/etc/zabbix/zabbix_agent2.d/mysql_repl_status.sh "$1"
#服务器取值测试
[root@zabbix ~]#zabbix_get -s 10.0.0.8 -k mysql.repl.status[Slave_SQL_Running]
[root@zabbix ~]#zabbix_get -s 10.0.0.8 -k mysql.repl.status[Slave_IO_Running]
[root@zabbix ~]#zabbix_get -s 10.0.0.8 -k
mysql.repl.status[Second_Behind_Master]
4.6.2.2 配置 Zabbix Web
创建模板
创建监控项(添加三个监控项)
注意: 线程状态的监控项的信息类型为字符,复制延时的监控项为数字
创建触发器(添加两个触发器)
#触发器1:名称:复制线程异常, 两个复制线程状态都要为 Yes
{Template MysQL slave {Temp1ate MySQL repl
status:mysql.repl.status[Slave_IO_Running].str(Yes)}=0 or {Template MySQL repli
status :mysql.repl.status[Slave_SQL_Running].str(Yes)}=0
#触发器2: 名称:复制延时不超过100s
{Template MysQL repl
status:mysql.repl.status[Second_Behind_Master].last()]}>=100
关联对应主机
4.7 监控 Keepalived 集群的脑裂问题
生产中使用的 Keepalive集群 ,偶尔会出现两台 Keepalive 上都有 VIP 的情况,即经常所说的“脑裂”问题,为避免对线上业务造成不可估量的损失,利用Zabbix 监控及时发现和解决这一问题
#自定义报警的key
[root@ubuntu1804 ~]# cat
/apps/zabbix/etc/zabbix_agentd.conf.d/check_keepalived.conf
UserParameter=check_keepalived[*],/bin/bash
/apps/zabbix/etc/zabbix_agentd.conf.d/check_vip.sh
#自定义监控项脚本
[root@ubuntu1804 ~]# cat /apps/zabbix/etc/zabbix_agentd.conf.d/check_vip.sh
#!/bin/bash
#
VIP="10.0.0.10"
NET="eth0"
CHECK_MAC=$(arping -c 1 -I $NET$VIP|awk -F"[][]" '/Unicast/{print $2}'|wc -l)
if [[ $CHECK_MAC-gt1 ]]
then
result=1
else
result=0
fi
echo$result
5 Zabbix 利用 Grafana 进行图形展示

虽然Zabbix自身带有图形功能,但是并不美观,而利用grafana可以实现美轮美奂的 Web 图形显示
grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的 时序数据展示 工具,目前已经支持绝大部分常用的时序数据库
Grafana支持许多不同的数据源。每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。 官方支持以下数据源:Graphite,Elasticsearch,InfluxDB,Prometheus, Cloudwatch,MySQL和OpenTSDB等。
官方站点: https://grafana.com/
使用 grafana 显示Zabbix的监控数据过程
安装grafana
-
安装 zabbix 插件
-
新建zabbix 数据源
-
导入 dashboard 模板
注意: 如果浏览器无法正常显示grafana的图形,可能是浏览器版本问题,建议更换浏览器再尝试
5.1 安装 Grafana 包
CentOS8 系统AppStream源带有 grafana,CentOS7 则无此包
[root@zabbix-server ~]#yum info grafana
Last metadata expiration check: 0:58:43 ago on Tue 13 Jul 202108:40:31 AM CST.
Available Packages
Name : grafana
Version : 6.7.4
Release : 3.el8
Architecture : x86_64
Size : 28 M
Source : grafana-6.7.4-3.el8.src.rpm
Repository : AppStream
Summary : Metrics dashboard and graph editor
URL : https://grafana.org
License : ASL 2.0
Description : Grafana is an open source, feature rich metrics dashboard and
graph editor for
: Graphite, InfluxDB & OpenTSDB.
包下载链接:
https://grafana.com/grafana/download
https://mirrors.tuna.tsinghua.edu.cn/grafana/

最新版本下载安装
#新版
#Ubuntu安装
[root@zabbix-server ~]#wget
https://mirrors.tuna.tsinghua.edu.cn/grafana/apt/pool/main/g/grafana/grafana_8.0
.3_amd64.deb
[root@zabbix-server ~]#dpkg -i grafana_8.0.3_amd64.deb
#CentOS安装
[root@zabbix-server ~]#wget
https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/grafana-8.0.3-1.x86_64.rpm
[root@zabbix-server ~]#yum -y install grafana-8.0.3-1.x86_64.rpm
#旧版
[root@zabbix-server ~]#wget https://dl.grafana.com/oss/release/grafana-7.1.5-
1.x86_64.rpm
[root@zabbix-server ~]#yum -y install grafana-7.1.5-1.x86_64.rpm
5.2 开启 Grafana 服务
#无需修改配置文件,即可启动,默认监听3000/tcp端口
[root@zabbix-grafana ~]#systemctl enable --now grafana-server.service
[root@zabbix-grafana ~]#ss -ntlp|grep 3000
LISTEN 0128 *:3000 *:* users:(("grafana-
server",pid=1957,fd=8))
5.3 首次登录 Grafana 的 Web 界面
首次浏览器访问 grafana的 web 界面
http://grafana-server:3000/
使用默认用户名和密码都是admin登录

首次登录修改密码,也可以选择skip仍使用原初始密码

登录成功

登录用户等信息保存在下面数据文件中
[root@zabbix-server ~]#file /var/lib/grafana/grafana.db
/var/lib/grafana/grafana.db: SQLite 3.x database, last written using SQLite
version 3035004
以下是grafana-7.1.5版本界面
初始登录界面

修改初始密码

登录成功

5.4 在 Grafana 安装 Zabbix 插件
关于zabbix的插件官网地址
https://grafana.com/grafana/plugins


https://grafana.com/grafana/plugins/alexanderzobnin-zabbix-app
#zabbix插件官方安装说明
https://alexanderzobnin.github.io/grafana-zabbix/installation/
范例: 使用 grafana-cli 命令管理工具安装插件
#列出远程的可用插件
[root@zabbix-server ~]#grafana-cli plugins list-remote
id: abhisant-druid-datasource version: 0.0.6
id: aceiot-svg-panel version: 0.0.10
id: ae3e-plotly-panel version: 0.4.0
id: agenty-flowcharting-panel version: 0.9.1
id: aidanmountford-html-panel version: 0.0.2
id: akumuli-datasource version: 1.3.12
......
#查看zabbix相关插件
[root@zabbix-server ~]#grafana-cli plugins list-remote|grep zabbix
id: alexanderzobnin-zabbix-app version: 4.1.5
#列出插件的版本
[root@zabbix-server ~]#grafana-cli plugins list-versions alexanderzobnin-
zabbix-app
4.1.5
4.1.4
4.1.3
4.1.2
4.1.1
4.1.0
4.0.2
.......
# 安装 zabbix 插件,可指定版本 , 下载安装插件至 /var/lib/grafana/plugins/ 目录 # 如果在线下载比较慢 , 可以先下载相关插件的 zip 文件 , 复制到 /var/lib/grafana/plugins/ 目录下 , 再解压缩也可以 # 下链链接 https://github.com/alexanderzobnin/grafana-zabbix/releases [root@zabbix-server ~]#grafana-cli plugins install alexanderzobnin-zabbix-app 4.1.5 ✔ Downloaded alexanderzobnin-zabbix-app v4.1.5 zip successfully
Please restart Grafana after installing plugins. Refer to Grafana documentation
for instructions if necessary.
#查看已安装的插件
[root@zabbix-server ~]#grafana-cli plugins ls
installed plugins:
alexanderzobnin-zabbix-app @ 4.1.5
Please restart Grafana after installing plugins. Refer to Grafana documentation
for instructions if necessary.
#查看安装的插件的目录
[root@zabbix-server ~]#ls /var/lib/grafana/plugins/
alexanderzobnin-zabbix-app
[root@zabbix-server ~]#ls /var/lib/grafana/plugins/alexanderzobnin-zabbix-app/
app_config_ctrl img plugin.json zabbix-
plugin_linux_arm64
CHANGELOG.md MANIFEST.txt README.md zabbix-
plugin_windows_amd64.exe
css module.js zabbix-plugin_darwin_amd64
dashboards module.js.map zabbix-plugin_linux_amd64
datasource-zabbix panel-triggers zabbix-plugin_linux_arm
#重新启动服务生效
[root@zabbix-server ~]#systemctl restart grafana-server.service
针对Zabbix4.0
#列出远程的可用插件
[root@zabbix-grafana ~]#grafana-cli plugins list-remote
id: abhisant-druid-datasource version: 0.0.5
id: aceiot-svg-panel version: 0.0.8
id: agenty-flowcharting-panel version: 0.9.0
id: aidanmountford-html-panel version: 0.0.1
id: akumuli-datasource version: 1.3.11
id: alexanderzobnin-zabbix-app version: 4.0.1
id: alexandra-trackmap-panel version: 1.2.5
id: andig-darksky-datasource version: 1.0.1
id: aquaqanalytics-kdbadaptor-datasource version: 1.0.1
id: ayoungprogrammer-finance-datasource version: 1.0.0
#选择安装版本3.12.4插件,4.0.1版本有问题
[root@zabbix-grafana ~]#grafana-cli plugins install alexanderzobnin-zabbix-app
3.12.4
installing alexanderzobnin-zabbix-app @ 3.12.4
from: https://grafana.com/api/plugins/alexanderzobnin-zabbix-
app/versions/3.12.4/download
into: /var/lib/grafana/plugins
✔ Installed alexanderzobnin-zabbix-app successfully
Restart grafana after installing plugins . <service grafana-server restart>
#查看安装的插件文件
[root@zabbix-grafana ~]#ls /var/lib/grafana/plugins
alexanderzobnin-zabbix-app
#重新启动脬务
[root@zabbix-grafana ~]#systemctl restart grafana-server.service
5.5 在 Grafana 中启用 Zabbix 插件

可以看到zabbix插件已安装成功,点zabbix插件

启用插件

启用插件成功

以下是3.12.4版本




5.6 添加 Zabbix 数据源

选中zabbix
在URL填写以下信息
http://zabbix-server/zabbix/api_jsonrpc.php
输入Zabbix的用户和密码

测试连接

老版本界面如下

在URL填写以下信息
http://zabbix-server/zabbix/api_jsonrpc.php


5.7 导入自带的 Grafana 模板
上面界面---Dashboards



可以看到三个导入的dashboard,其中第二个Zabbix System Status 常用于观察告警信息

第一个dashboard

查看第三个dashboard

System load 无数据

编辑System load

默认的监控项有问题,修改对应的监控项的名称(注意:不是监控项的key)

查看到数据出现

模板只有CPU,system load和network,可以修改模板再加其它项目的图形显示





再添加一个文件系统的监控




拖动图形,放在合适的位置,并保存

5.8 导入官网的其它 Grafana 模板
grafana官网提供了很多图形显示的模板,可以从下面地址查看
https://grafana.com/grafana/dashboards

搜索合适的模板, 一般推荐使用下载量较大的模板

查看模板信息和ID

导入5363模板


导入模板

可以选择其它模板 7877


5.9 调整模板显示信息
当前导入的模板不一定都符合要求,可以进一步调整显示信息默认导入的dashboard无法编辑

先将此dashboard设为允许编辑





保存修改后模板


5.10 查看生成的 Dashboard


5.11 删除不需要的模板
如果导入的模板不适合,可以删除

选择不需要的模板





5.12 自定义 Dashboard
先创建文件夹,然后在文件夹中创建各种图形
创建后记得save,否则刷新页面会导致数据丢失
5.12.1 创建文件夹
Dashboards -> Manage -> New folder ->填写名称(Zabbix) -> Create Dashboard
5.12.2 创建CPU图形
Add an empty panel -> Data source -> 选择 zabbix
Query (数据查询)
Group: Zabbix servers Host: Zabbix server Application: CPU
Item: 获取负载的监控项,写入正则表达式 /Load/ ,注意大小写敏感
Item: 获取时间的监控项 (/time/),再创建另一个Panel 取时间的监控项
图形美化
-
Title:CPU 平均负载
-
Tooltip mode:ALL(展示所有指标的数据)、Single(展示选中的单个指标数据)
-
Unit:CPU负载图形不需要单位(Misc-none)、CPU时间要显示为百分比(Misc-Percent 0- 100)

5.12.3 创建内存图形
Query A
-
Group: Zabbix servers Host: Zabbix server Application: Memory
-
Item: Total memory
Query B
- Group: Zabbix servers Host: Zabbix server Application: Memory Item: Available memory
图形美化
选择 Pie chart 图形
-
Title:内存使用百分比 unit:单位选择:data -> bytes(IEC)
-
Lable: 标签选择(Name、Value)
-
Legend values:数据使用展示选择(Value、Percent)
5.12.4 创建流量图形
Query A
Group: Zabbix servers Host: Zabbix server Application: Interface eth0 Item: /Bits/
图形美化
Title:网卡eth0流量 unit:单位选择:data -> Unit/sec(SI) Legend values:数据使用展示选择(Last、Min、Max)

5.12.5 创建告警面板
将Zabbix的 Web 仪表板的告警加加入Grafana进行展示
Query Mode:Problems
Visualizations:Zabbix Problems
Title:Zabbix 告警信息

5.12.6 导出 Dashboard
导出上面自定义的dashboard 为Json文件, 以方便以后使用



5.13 自定义变量实现自定义 Dashboard
以上都是单台Zabbix Server 服务器的图形比较容易展现,但需要展示多台服务器的图形就需要在从头到位创建一次,过程比较繁琐
可以使用变量的方式获取对应的主机组,以及主机,然后基于变量来完成图形创建
5.13.1 创建变量
打开指定Dashboard --> Dashboard Settings --> Variables

设置主机组变量:

Name:定义名称Group
Data source:选择zabbix
Refresh:跟随时间而变化 on time range
Query Type:选择Group
Group:提取所有组的正则表达式:/.*/
Selection Options:全部打开
Preview of values:会自动显示当前所有的主机组
设置主机变量:

Name:定义名称Host
Data source:选择zabbix
Refresh:跟随时间而变化 on time range
Query Type:选择Host
Group:提取所有组的正则表达式:/.*/
Host:提取所有主机的正则表达式:/.*/
Selection Options:全部打开
Preview of values:会自动显示当前所有的主机
设置完成后记得Save保存
5.13.2 使用变量
将此前创建的CPU负载图形,修改为变量方式,这样就会更加灵活

Query A
Group: $Group
Host:$Host
Application:CPU
Item: /Load/
Title:
$Group$Host CPU 平均负载
参考上面的,将CPU时间,内存使用百分比,网卡eth0流量都改为使用变量


5.13.3 将上面自定义的 Dashborad 导出至文件
导出为json文件

5.13.4 将上面自定义的 Dashborad 文件导入
将来在另一台主机上导入上面的json文件即可



6 Zabbix 分布式实现 Proxy
6.1 Zabbix Proxy 工作原理
6.1.1 Zabbix Proxy 概述
zabbix作为一个分布式监控系统(分布式监控解决方案),支持通过代理(proxy)收集zabbix agent的监控数据,然后由zabbix proxy再把数据发送给zabbix server,也就是zabbix proxy 可以代替zabbix server 收集监控数据,然后把数据汇报给zabbix server,所以zabbix proxy可以在一定程度上分担了zabbix server的数据收集压力,从而降低了数据的采集时间、也相应的增加了zabbix server的监控能力。
官方文档:
https://www.zabbix.com/documentation/5.0/zh/manual/distributed_monitoring
https://www.zabbix.com/documentation/4.0/zh/manual/distributed_monitoring
6.1.2 Zabbix Proxy 使用场景
-
监控远程区域设备,尤其是多机房和多个云环境时
-
监控网络不稳定区域,避免跨网段监控的告警不及时
-
当需要监控设备众多时,使用它来减轻 Zabbix Server 的压力
-
简化分布式监控的维护,无需各位创建 Zabbix Server,统一管理策略
6.1.3 Zabbix Proxy 架构

6.1.4 Zabbix proxy 功能列表
官方文档:
https://www.zabbix.com/documentation/5.0/zh/manual/distributed_monitoring/proxie
s
https://www.zabbix.com/documentation/4.0/zh/manual/distributed_monitoring/proxie
s
zabbix proxy 是一个数据收集器,它不计算触发器、不处理事件、不发送报警。有关proxy功能的概述, 如下表:
| 功能 | proxy支持状态 |
|---|---|
| 监控项(Items) | |
| Zabbix agent checks | Yes |
| Zabbix agent checks (active) | Yes |
| Simple checks | Yes |
| Trapper items | Yes |
| SNMP checks | Yes |
| SNMP traps | Yes |
| IPMI checks | Yes |
| JMX checks | Yes |
| Log file monitoring | Yes |
| Internal checks | Yes |
| SSH checks | Yes |
| Telnet checks | Yes |
| External checks | Yes |
| 内置web监控(Built-in web monitoring) | Yes |
| 网络发现(Network discovery) | Yes |
| 自动发现(Low-level discovery) | Yes |
| 触发器计算(Calculating triggers) | No |
| 处理事件(Processing events) | No |
| 发送报警(Sending alerts) | No |
| 远程命令(Remote commands) | No |
6.1.5 Zabbix Server 和 Zabbix Proxy 区别
Zabbix Proxy 只执行数据收集,不运行触发器,无处理事件,也不发送告警,无Web管理界面所以最终导致告警延时可能会比较长
| zabbix server | zabbix proxy | |
|---|---|---|
| 轻量级 | 否 | 是 |
| 图形化 | 有 | 无 |
| 独立工作 | 是,可实现数据采集,存储,分析,展示 | 是,可实现数据采集和存储 |
| 维护 | 容易 | 很容易,配置完成后基本无需管理 |
| 独立数据 | 有独立数据库,保留指定时间内的所有数 | 每个Proxy都有独立数据库,保留部分数 |
| 库 | 据 | 据 |
| 告警通知 | 支持邮件,短信,微信等告警机制 | 不支持 |
6.2 Zabbix Proxy 安装和配置
Zabbix Proxy 也分主动模式和被动模式,通信方式与zabbix server主动模式和被动模式一样
Zabbix Proxy的模式是从Zabbix Proxy 角度来说的
zabbix proxy在主动模式下要主动地向zabbix server周期性的申请获取zabbix agent的监控项信息,此模式可以大幅降低Zabbix Server的压力,生产推荐使用
Zabbix Proxy在被动模式下要被动地等待zabbix server的连接,并接受zabbix server发送的监控项指令,然后再由zabbix proxy向zabbix agent发起请求获取数据。
注意: Zabbix Proxy的大版本必须要和zabbix server版本相同,否则很可能会导致出现 zabbix server与 zabbix proxy不兼容问题
安装环境准备

| 地址 | 角色 | 安装方法 | 系统 |
|---|---|---|---|
| 10.0.0.100 | Zabbix Server,MySQL | CentOS 8,Ubuntu18.04 | |
| 10.0.0.101 | Zabbix Proxy主动模式,MySQL | 包安装 | CentOS 8,Ubuntu18.04 |
| 10.0.0.102 | Zabbix Proxy被动模式,MySQL | 编译安装 | CentOS 8,Ubuntu18.04 |
官方安装文档
https://www.zabbix.com/documentation/5.0/zh/manual/installation/install_from_pac
kages/debian_ubuntu
https://www.zabbix.com/documentation/5.0/zh/manual/installation/install_from_pac
kages/rhel_centos
6.2.1 安装 Zabbix Proxy
可以通过包和编译两种方式进行安装
6.2.1.1 二进制包安装
范例: Ubuntu 安装 Zabbix Proxy
#Ubuntu20.04
[root@zabbix-proxy]#wget
https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-
release_5.0-1%2Bfocal_all.deb
#Ubuntu18.04
[root@zabbix-proxy]#wget
https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-
release_5.0-1+bionic_all.deb
[root@zabbix-proxy]#dpkg -i zabbix-release_5.0-1+bionic_all.deb
[root@zabbix-proxy]#sed -i
's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#'
/etc/apt/sources.list.d/zabbix.list
[root@zabbix-proxy]#apt update
[root@zabbix-proxy]#apt -y install zabbix-proxy-mysql zabbix-agent
[root@zabbix-proxy]#systemctl enable zabbix-proxy.service zabbix-agent.service
范例: CentOS 安装 Zabbix Proxy
[root@zabbix-proxy-active ~]#rpm -Uvh
https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-
1.el8.noarch.rpm
[root@zabbix-proxy-active ~]#rpm -Uvh
https://repo.zabbix.com/zabbix/4.0/rhel/8/x86_64/zabbix-release-4.0-
2.el8.noarch.rpm
#修改为阿里云源
[root@zabbix-proxy-active ~]#vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository -$basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/8/x86_64/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
#或者sed修改
[root@zabbix-proxy-active ~]#sed -i.bak
's/repo.zabbix.com/mirrors.aliyun.com\/zabbix/' /etc/yum.repos.d/zabbix.repo
[root@zabbix-proxy-active ~]#yum -y install zabbix-proxy-mysql zabbix-agent
[root@zabbix-proxy-active ~]#rpm -ql zabbix-proxy-mysql
/etc/logrotate.d/zabbix-proxy
/etc/zabbix/zabbix_proxy.conf
/usr/lib/.build-id
/usr/lib/.build-id/a1
/usr/lib/.build-id/a1/03f07446a72d32dcfc88cbff0f5d8317b65fac
/usr/lib/systemd/system/zabbix-proxy.service
/usr/lib/tmpfiles.d/zabbix-proxy.conf
/usr/lib/zabbix/externalscripts
/usr/sbin/zabbix_proxy_mysql
/usr/share/doc/zabbix-proxy-mysql
/usr/share/doc/zabbix-proxy-mysql/AUTHORS
/usr/share/doc/zabbix-proxy-mysql/COPYING
/usr/share/doc/zabbix-proxy-mysql/ChangeLog
/usr/share/doc/zabbix-proxy-mysql/NEWS
/usr/share/doc/zabbix-proxy-mysql/README
/usr/share/doc/zabbix-proxy-mysql/schema.sql.gz
/usr/share/man/man8/zabbix_proxy.8.gz
/var/log/zabbix
/var/run/zabbix
6.2.1.2 源码编译安装
#CentOS8安装
[root@zabbix-proxy-passive ~]#yum -y install gcc mysql-devel libxml2-devel net-
snmp-devel libssh2-devel curl-devel pcre-devel libevent-devel
#Ubuntu18.04安装
[root@zabbix-proxy-passive ~]#apt -y install gcc make libxml2-dev libevent-dev
libmysqlclient-dev libsnmp-dev libssh2-1-dev libcurl4-openssl-dev
[root@zabbix-proxy-passive ~]#useradd zabbix
[root@zabbix-proxy-passive ~]#wget
https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.13.tar.gz
#旧版
[root@zabbix-proxy-passive ~]#wget
https://cdn.zabbix.com/zabbix/sources/stable/4.0/zabbix-4.0.24.tar.gz
[root@zabbix-proxy-passive ~]#tar xf zabbix-5.0.13.tar.gz
[root@zabbix-proxy-passive ~]#tar xf zabbix-4.0.24.tar.gz
[root@zabbix-proxy-passive ~]#cd zabbix-5.0.13/
[root@zabbix-proxy-passive ~]#cd zabbix-4.0.24/
[root@zabbix-proxy-passive zabbix-5.0.13]#./configure --
prefix=/apps/zabbix_proxy --enable-proxy --with-agent --with-net-snmp --with-
mysql --with-ssh2 --with-libcurl --with-libxml2
[root@zabbix-proxy-passive zabbix-4.0.24]#./configure --
prefix=/apps/zabbix_proxy --enable-proxy --with-agent --with-net-snmp --with-
mysql --with-ssh2 --with-libcurl --with-libxml2
[root@zabbix-proxy-passive zabbix-4.0.24]#make && make install
#创建service文件
[root@zabbix-proxy-passive ~]#cat /lib/systemd/system/zabbix-proxy.service
[Unit]
Description=Zabbix Proxy
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/apps/zabbix_proxy/etc/zabbix_proxy.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-proxy
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_proxy.pid
KillMode=control-group
ExecStart=/apps/zabbix_proxy/sbin/zabbix_proxy -c$CONFFILE
ExecStop=/bin/kill -SIGTERM$MAINPID
RestartSec=10s
TimeoutSec=0
[Install]
WantedBy=multi-user.target
[root@zabbix-proxy-passive ~]#systemctl daemon-reload
6.2.2 准备数据库
为Zabbix Proxy 创建一个单独的数据库
注意:Zabbix server和Zabbix proxy不能使用相同的数据库。 如果它们安装在同一主机上,则proxy数据库必须具有不同的名称
6.2.2.1 为主动模式的 Proxy 准备独立的数据库
在MySQL 服务器上创建数据库和用户授权
[root@zabbix-proxy-active ~]#apt -y install mysql-server
[root@zabbix-proxy-active ~]#mysql
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.17 |
+-----------+
1rowinset (0.00 sec)
mysql> createdatabase zabbix_proxy_active characterset utf8 collate utf8_bin;
mysql> createuser proxy@'localhost' identified by '123456';
mysql> grantallon zabbix_proxy_active.* to proxy@'localhost' ;
#从Proxy主机导入和zabbix Server不同的数据库和表
[root@zabbix-proxy-active ~]#yum -y install mysql
[root@zabbix-proxy-active ~]#apt -y install mysql
#包安装的路径
[root@zabbix-proxy-active ~]#zcat /usr/share/doc/zabbix-proxy-
mysql/schema.sql.gz | mysql -uproxy -p123456 -h10.0.0.101 zabbix_proxy_active
6.2.2.2 为被动模式的 proxy 准备独立的数据库
[root@zabbix-proxy-passive ~]#apt -y install mysql-server
[root@zabbix-proxy-passive ~]#mysql
mysql> createdatabase zabbix_proxy_passive characterset utf8 collate utf8_bin;
mysql> grantallon zabbix_proxy_passive.* to proxy@'10.0.0.%' identified by
'123456' ;
#创建被动模式使用的数据库和表
[root@zabbix-proxy-passive zabbix-5.0.13]#pwd
/root/zabbix-5.0.13
#源码编译的路径
[root@zabbix-proxy-passive zabbix-5.0.13]#mysql -uproxy -p123456
zabbix_proxy_passive < database/mysql/schema.sql
6.2.2.3 MySQL 8.0 特殊配置
MySQL 8.0 出现下面错误
[root@zabbix-proxy-active ~]#tail /var/log/zabbix/zabbix_proxy.log
6606:20200830:223952.519 using configuration file:
/etc/zabbix/zabbix_proxy.conf
6606:20200830:223952.520 [Z3001] connection to database 'zabbix_proxy_active'
failed: [2059] Plugin caching_sha2_password could not be loaded:
lib64/mariadb/plugin/caching_sha2_password.so: cannot open shared object file: No
such file or directory
6606:20200830:223952.520 Cannot connect to the database. Exiting...
错误原因:
MySQL8.0 默认使用caching_sha2_password作为身份验证插件,而旧版是使用
mysql_native_password。当连接MySQL时报错“plugin caching_sha2_password could not be
loaded”时,可换回旧版插件。
解决方法:
#方法1
[root@zabbix-mysql-master ~]#mysql
mysql>ALTER USER 'proxy'@'localhost' IDENTIFIED WITH mysql_native_password BY
'123456'; #修改密码加密策略
mysql>FLUSH PRIVILEGES;
#下面步骤可选
mysql>grant SUPER on *.* to proxy@'localhost' ;
mysql>ALTER USER 'proxy'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE
NEVER;
#方法2
#Ubuntu20.04
[root@ubuntu2004 ~]#echo 'default-authentication-plugin=mysql_native_password'
>> /etc/mysql/mysql.conf.d/mysqld.cnf
[root@ubuntu2004 ~]#systemctl restart mysql
#Rocky和CentOS
[root@zabbix-mysql-master ~]#echo 'default-authentication-
plugin=mysql_native_password' >> /etc/my.cnf.d/mysql-server.cnf
[root@zabbix-mysql-master ~]#systemctl restart mysqld
6.2.3 主动模式配置
6.2.3.1 修改proxy配置文件
[root@zabbix-proxy-active ~]#grep '^[^#]' /etc/zabbix/zabbix_proxy.conf
ProxyMode=0#主动模式为0,被动模式为1,默认为0即主动模式
Server=10.0.0.100 #指向Zabbix Server
Hostname=zabbix-proxy-active #此名称必须和后面Web管理页的agent代理程序名称相同
DBHost=localhost #MySQL服务器地址
DBName=zabbix_proxy_active #MySQL 数据库名
DBUser=proxy #连接MySQL的用户
DBPassword=123456#连接MySQL的用户密码
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
DebugLevel=4#指定日志级别,默认为3,值越大日志越详细
EnableRemoteCommands=1#开启远程命令,允许server到proxy上执行命令,在故障
自愈时使用
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
ProxyLocalBuffer=360#当proxy将数据发送给server后将数据仍在本地保存多少时间,
默认不保留
ProxyOfflineBuffer=720#当proxy和server无法连接时将数据在本地保存多长时间,默认
1小时
HeartbeatFrequency=60#server端用来检测proxy可用性的心跳信息的时间间隔,被动模
式无效
ConfigFrequency=60#每间隔多少时间到server获取监控项,在agent更新端监控
项,只在主动模式有效,默认3600s
DataSenderFrequency=60#数据发送的间隔时间,只在主动模式有效,默认1s,建议加长
JavaGateway=10.0.0.101 #指向JAVA gateway主机
StartJavaPollers=10#指定开启的进程数,默认为0,即不开启
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
CacheSize=8M #当主机数量很多时,会将获取的监控项存放在缓存中,生产中
设置2G
StartDBSyncers=4#启动多少个线程和数据库连接
HistoryCacheSize=16M #保存agent发送过来的监控数据的内存空间大小,生产中设置
2G
HistoryIndexCacheSize=4M #历史数据的索引
Timeout=30#获取数据的最长等待时间
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000#慢查询时长
[root@zabbix-proxy-active ~]#systemctl restart zabbix-proxy.service
#Zabbix Proxy 监听10051/tcp端口
[root@zabbix-proxy-active ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 01280.0.0.0:22 0.0.0.0:*
LISTEN 0100127.0.0.1:25 0.0.0.0:*
LISTEN01280.0.0.0:100500.0.0.0:* |
|---|
LISTEN01280.0.0.0:100510.0.0.0:* |
LISTEN0128 [::]:22 [::]:* |
LISTEN0100 [::1]:25 [::]:* |
LISTEN0128 [::]:10050 [::]:* |
LISTEN0128 [::]:10051 [::]:* |
LISTEN070 *:33060 *:* |
LISTEN0128 *:3306 *:* |
[root@zabbix-proxy-active ~]#tail /var/log/zabbix/zabbix_proxy.log -f
6832:20200830:225242.864 cannot send proxy data to server at "10.0.0.100":
proxy "zabbix-proxy-active" not found
6832:20200830:225243.867 cannot send proxy data to server at "10.0.0.100":
proxy "zabbix-proxy-active" not found
6832:20200830:225244.870 cannot send proxy data to server at "10.0.0.100":
proxy "zabbix-proxy-active" not found
6832:20200830:225245.875 cannot send proxy data to server at "10.0.0.100":
proxy "zabbix-proxy-active" not found
|[root@zabbix-proxy-active ~]#pstree -p|grep zabbix|
|---|
||-zabbix_agentd(5530)-+-zabbix_agentd(5532)|
|| |-zabbix_agentd(5533)
|
|| |-zabbix_agentd(5534)|
|| |-zabbix_agentd(5535)|
||-zabbix_agentd(5536)| |``-zabbix_proxy(6822)-+-zabbix_proxy(6825)|
||-zabbix_proxy(6826)|
||-zabbix_proxy(6827)|
||-zabbix_proxy(6828)|
||-zabbix_proxy(6829)|
||-zabbix_proxy(6830)|
||-zabbix_proxy(6831)|
||-zabbix_proxy(6832)|
||-zabbix_proxy(6833)|
||-zabbix_proxy(6834)|
||-zabbix_proxy(6835)|
||-zabbix_proxy(6836)|
||-zabbix_proxy(6837)|
||-zabbix_proxy(6838)|
||-zabbix_proxy(6839)|
||-zabbix_proxy(6840)|
||-zabbix_proxy(6841)|
||-zabbix_proxy(6842)|
||-zabbix_proxy(6843)|
||-zabbix_proxy(6844)|
||-zabbix_proxy(6845)|
||-zabbix_proxy(6846)|
||-zabbix_proxy(6847)|
|-zabbix_proxy(6848)
|-zabbix_proxy(6849)
|-zabbix_proxy(6850)
|-zabbix_proxy(6851)
|-zabbix_proxy(6852)
|-zabbix_proxy(6853)
|-zabbix_proxy(6854)
|-zabbix_proxy(6855)
|-zabbix_proxy(6856)
|-zabbix_proxy(6857)
`-zabbix_proxy(6858)
[root@zabbix-proxy-active ~]#ps -ef|grep zabbix
zabbix 55301022:07 ? 00:00:00 /usr/sbin/zabbix_agentd -c
/etc/zabbix/zabbix_agentd.conf
zabbix 55325530022:07 ? 00:00:00 /usr/sbin/zabbix_agentd:
collector [idle 1 sec]
zabbix 55335530022:07 ? 00:00:00 /usr/sbin/zabbix_agentd:
listener #1 [waiting for connection]
zabbix 55345530022:07 ? 00:00:00 /usr/sbin/zabbix_agentd:
listener #2 [waiting for connection]
zabbix 55355530022:07 ? 00:00:00 /usr/sbin/zabbix_agentd:
listener #3 [waiting for connection]
zabbix 55365530022:07 ? 00:00:00 /usr/sbin/zabbix_agentd:
active checks #1 [idle 1 sec]
zabbix 68221022:41 ? 00:00:00 /usr/sbin/zabbix_proxy -c
/etc/zabbix/zabbix_proxy.conf
zabbix 68256822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
configuration syncer [synced config 0 bytes in0.001128 sec, idle 60 sec]
zabbix 68266822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
trapper #1 [processed data in 0.002948 sec, waiting for connection]
zabbix 68276822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
trapper #2 [processed data in 0.000000 sec, waiting for connection]
zabbix 68286822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
trapper #3 [processed data in 0.000000 sec, waiting for connection]
zabbix 68296822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
trapper #4 [processed data in 0.005543 sec, waiting for connection]
zabbix 68306822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
trapper #5 [processed data in 0.000000 sec, waiting for connection]
zabbix 68316822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
heartbeat sender [sending heartbeat message failed in0.001199 sec, idle 60 sec]
zabbix 68326822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy: data
sender [sent 0 values in0.003744 sec, idle 1 sec]
zabbix 68336822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
housekeeper [startup idle for30 minutes]
zabbix 68346822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy: http
poller #1 [got 0 values in 0.001055 sec, idle 5 sec]
zabbix 68356822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
discoverer #1 [processed 0 rules in 0.000625 sec, idle 60 sec]
zabbix 68366822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
history syncer #1 [processed 0 values in 0.000034 sec, idle 1 sec]
zabbix 68376822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
history syncer #2 [processed 0 values in 0.000031 sec, idle 1 sec]
zabbix 68386822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
history syncer #3 [processed 0 values in 0.000046 sec, idle 1 sec]
zabbix 68396822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
history syncer #4 [processed 0 values in 0.000013 sec, idle 1 sec]
zabbix 68406822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy: java
poller #1 [got 0 values in 0.000012 sec, idle 5 sec]
zabbix 68416822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy: java
poller #2 [got 0 values in 0.000017 sec, idle 5 sec]
zabbix 68426822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy: java
poller #3 [got 0 values in 0.000043 sec, idle 5 sec]
zabbix 68436822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy: java
poller #4 [got 0 values in 0.000051 sec, idle 5 sec]
zabbix 68446822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy: java
poller #5 [got 0 values in 0.000103 sec, idle 5 sec]
zabbix 68456822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy: java
poller #6 [got 0 values in 0.000026 sec, idle 5 sec]
zabbix 68466822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy: java
poller #7 [got 0 values in 0.000012 sec, idle 5 sec]
zabbix 68476822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy: java
poller #8 [got 0 values in 0.000015 sec, idle 5 sec]
zabbix 68486822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy: java
poller #9 [got 0 values in 0.000034 sec, idle 5 sec]
zabbix 68496822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy: java
poller #10 [got 0 values in 0.000005 sec, idle 5 sec]
zabbix 68506822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
self-monitoring [processed data in0.000015 sec, idle 1 sec]
zabbix 68516822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy: task
manager [processed 0 task(s) in0.000400 sec, idle 5 sec]
zabbix 68526822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
poller #1 [got 0 values in 0.000069 sec, idle 5 sec]
zabbix 68536822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
poller #2 [got 0 values in 0.000044 sec, idle 5 sec]
zabbix 68546822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
poller #3 [got 0 values in 0.000051 sec, idle 5 sec]
zabbix 68556822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
poller #4 [got 0 values in 0.000012 sec, idle 5 sec]
zabbix 68566822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
poller #5 [got 0 values in 0.000010 sec, idle 5 sec]
zabbix 68576822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy:
unreachable poller #1 [got 0 values in 0.000012 sec, idle 5 sec]
zabbix 68586822022:41 ? 00:00:00 /usr/sbin/zabbix_proxy: icmp
pinger #1 [got 0 values in 0.000027 sec, idle 5 sec]
root 69224589022:50 pts/0 00:00:00 grep--color=auto zabbix
6.2.3.2 在 Zabbix Server 上添加代理 Proxies
管理-- agent 代理程序(英文环境为Proxies,汉化翻译不准确)
注意:agent代理程序名称要和proxy 配置文件中Hostname指定的名称相同,否则会现 proxy "zabbixproxy-active" not found的日志提示


中文界面



6.2.3.3 修改Zabbix Agent 配置文件为主动模式的 Zabbix Proxy
[root@centos8 ~]#vim /apps/zabbix_agent/etc/zabbix_agentd.conf
[root@centos8 ~]#grep '^[^#]' /apps/zabbix_agent/etc/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
Server=10.0.0.100,10.0.0.101 #指向Zabbix Server(可选)和Zabbix Proxy(必
选)
ServerActive=10.0.0.101 #指向Zabbix Proxy
Hostname=10.0.0.103
[root@centos8 ~]#systemctl restart zabbix-agent.service
[root@centos8 ~]#tail /tmp/zabbix_agentd.log
24239:20200830:233105.235 IPv6 support: NO
24239:20200830:233105.235 TLS support: NO
24239:20200830:233105.235 **************************
24239:20200830:233105.235 using configuration file:
/apps/zabbix_agent/etc/zabbix_agentd.conf
24239:20200830:233105.235 agent #0 started [main process]
24241:20200830:233105.236 agent #2 started [listener #1]
24242:20200830:233105.236 agent #3 started [listener #2]
24244:20200830:233105.236 agent #5 started [active checks #1]
24240:20200830:233105.239 agent #1 started [collector]
24243:20200830:233105.239 agent #4 started [listener #3]
#查看proxy的日志
[root@zabbix-proxy-active ~]#tail /var/log/zabbix/zabbix_proxy.log -f
6825:20200830:232931.970 received configuration data from server at
"10.0.0.100", datalen 13700
6830:20200830:233014.074 cannot send list of active checks to "127.0.0.1":
host [Zabbix server] not found
6825:20200830:233032.035 received configuration data from server at
"10.0.0.100", datalen 13700
6857:20200830:233117.070 enabling Zabbix agent checks on host "10.0.0.103":
host became available
6825:20200830:233132.101 received configuration data from server at
"10.0.0.100", datalen 13700
6826:20200830:233214.152 cannot send list of active checks to "127.0.0.1":
host [Zabbix server] not found
6825:20200830:233232.159 received configuration data from server at
"10.0.0.100", datalen 13700
6825:20200830:233332.231 received configuration data from server at
"10.0.0.100", datalen 13700
6828:20200830:233414.228 cannot send list of active checks to "127.0.0.1":
host [Zabbix server] not found
6825:20200830:233432.291 received configuration data from server at
"10.0.0.100", datalen 13700
6825:20200830:233532.356 received configuration data from server at
"10.0.0.100", datalen 13700
6828:20200830:233614.299 cannot send list of active checks to "127.0.0.1":
host [Zabbix server] not found
6825:20200830:233632.412 received configuration data from server at
"10.0.0.100", datalen 13700
6.2.3.4 在Zabbix Server 上配置 Zabbix Agent 使用主动代理


6.2.3.5 验证主机状态
注意: 如果不成功,可以删除后再重新添加监控的主机或者重启动 proxy 服务


6.2.4 被动模式配置
配置文件说明
# vim /apps/zabbix_proxy/etc/zabbix_proxy.conf
ProxyMode=1#0为主动,1为被动,此为默认
server=10.0.0.100 #zabbix server服务器的地址
Hostname=zabbix-proxy-passive-wang #代理服务器名称,需要与zabbix server添加代理时候的
proxy
DBHost=10.0.0.101 #数据库服务器地址
DBName=zabbix_proxy_passive #数据库库名称
DBUser=proxy #连接数据库的用户名称
DBPassword=123456#数据库用户密码
DBPort=3306#数据库端口
ListenPort=10051#zabbix proxy监听端口
LogFile=/tmp/zabbix_proxy.log
Enab1eRemoteCommands=1#允许zabbix server执行远程命令
ProxyLocalBuffer=720#已经提交到zabbix server的数据保留时间
ProxyofflineBuffer=720#未提交到zabbix server的时间保留时间
ConfigFrequency=5#间隔多少秒从zabbix server获取监控项信息,此横在被动模式无效
startPo1lers=20#启动的数据采集器数量
javaGatewayPort=10052#Java gateway服务端口
startJavaPollers=20#启动多少个线程采集数据
cachesize=2G #保存监控项而占用的最大内存
Historycachesize=2G #保存监控历史数据占用的最大内存
HistoryIndexcachesize=128M #历史索引缓存的大小
Timeout=30#监控项超时时间,单位为秒
LogslowQueries=3000#毫秒,多久的数据库查询会被记录到日志
HeartbeatFrequency=60#心跳间隔检测时间,默认60秒,范围0-3600秒,被动模式不使用
DatasenderFrequency=5#数据发送时间间隔,默认为1秒,范围为1-3600秒,被动模式不使用
JavaGateway=10.0.0.102 #java gateway服务器地址,当需要监控java的时候必须配置否则监控不到
数据
6.2.4.1 修改proxy配置文件
范例:
[root@zabbix-proxy-passive ~]#grep '^[^#]'
/apps/zabbix_proxy/etc/zabbix_proxy.conf
ProxyMode=1#被动模式为1
Server=10.0.0.100 #指向zabbix server的地址
Hostname=zabbix-proxy-passvie-wang
LogFile=/tmp/zabbix_proxy.log
DBHost=localhost #指定MySQL的地址
DBName=zabbix_proxy_passive #指定MySQL数据库名称
DBUser=proxy #指定MySQL的用户
DBPassword=123456#指定MySQL的用户密码
ProxyLocalBuffer=360
ProxyOfflineBuffer=720
JavaGateway=10.0.0.102
StartJavaPollers=10
CacheSize=8M
StartDBSyncers=4
HistoryCacheSize=16M
HistoryIndexCacheSize=4M
Timeout=30
LogSlowQueries=3000
[root@zabbix-proxy-passive zabbix-5.0.14]#grep -Ev '^$|#'
/apps/zabbix_proxy/etc/zabbix_proxy.conf
ProxyMode=1
Server=10.0.0.100
Hostname=Zabbix proxy passive
LogFile=/tmp/zabbix_proxy.log
DBName=zabbix_proxy_passive
DBUser=proxy
DBPassword=123456
HeartbeatFrequency=10
ConfigFrequency=10
DataSenderFrequency=1
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
[root@zabbix-proxy-passive ~]#systemctl enable --now zabbix-proxy.service
#查看是否打开10051/tcp端口,如果没有打开检查是否能连接MySQL
[root@zabbix-proxy-passive ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 01280.0.0.0:22 0.0.0.0:*
LISTEN 0100127.0.0.1:25 0.0.0.0:*
LISTEN 01280.0.0.0:10051 0.0.0.0:*
LISTEN 0128 [::]:22 [::]:*
LISTEN 0100 [::1]:25 [::]:*
# 查看日志
[root@zabbix-proxy-passive ~]#tail -f /tmp/zabbix_proxy.log
44417:20200830:225813.637 proxy #19 started [java poller #7]
44419:20200830:225813.637 proxy #21 started [java poller #9]
44429:20200830:225813.638 proxy #31 started [icmp pinger #1]
44421:20200830:225813.639 proxy #23 started [self-monitoring #1]
44427:20200830:225813.640 proxy #29 started [poller #5]
44423:20200830:225813.644 proxy #25 started [poller #1]
44426:20200830:225813.651 proxy #28 started [poller #4]
44425:20200830:225813.655 proxy #27 started [poller #3]
44424:20200830:225813.662 proxy #26 started [poller #2]
44428:20200830:225813.666 proxy #30 started [unreachable poller #1]
44398:20200830:225926.043 Got signal
[signal:15(SIGTERM),sender_pid:44446,sender_uid:0,reason:0]. Exiting ...
44407:20200830:225926.043 syncing history data in progress...
44407:20200830:225926.043 syncing history data done
44398:20200830:225926.055 Zabbix Proxy stopped. Zabbix 4.0.24 (revision
5d83af7935).
44450:20200830:225926.067 Starting Zabbix Proxy (passive) [zabbix-proxy-
passvie-wang]. Zabbix 4.0.24 (revision 5d83af7935).
44450:20200830:225926.067 **** Enabled features ****
44450:20200830:225926.067 SNMP monitoring: YES
44450:20200830:225926.067 IPMI monitoring: NO
44450:20200830:225926.067 Web monitoring: YES
44450:20200830:225926.068 VMware monitoring: YES
44450:20200830:225926.068 ODBC: NO
44450:20200830:225926.068 SSH support: YES
44450:20200830:225926.068 IPv6 support: NO
44450:20200830:225926.068 TLS support: NO
44450:20200830:225926.068 **************************
44450:20200830:225926.068 using configuration file:
/apps/zabbix_proxy/etc/zabbix_proxy.conf
44450:20200830:225926.078 current database version (mandatory/optional):
04000000/04000006
44450:20200830:225926.079 required mandatory version: 04000000
44450:20200830:225926.087 proxy #0 started [main process]
44452:20200830:225926.087 proxy #1 started [trapper #1]
44454:20200830:225926.189 proxy #3 started [trapper #3]
44456:20200830:225926.190 proxy #5 started [trapper #5]
6.2.4.2 在 Zabbix Server 上添加代理 Proxies
注意:选中被动模式和端口10051


注意: 模板也要使用被动模板

6.2.4.3 在Zabbix Server 上配置Zabbix Agent 使用被动代理


.jpg)
6.2.4.4 修改Zabbix Agent 配置文件为被动模式的 Zabbix Proxy
[root@centos8 ~]#grep '^[^#]' /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.100,10.0.0.102#必须指向Proxy代理地址,否则Proxy无法监控,Zabbix Server地
址则是可选项
#ServerActive=10.0.0.100 #注释此行
Hostname=10.0.0.104
Timeout=30
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@centos8 ~]#systemctl restart zabbix-agent.service
6.2.4.5 验证主机状态
注意: 被动模式下变成绿色比较慢,有时需要等30分钟才能看到结果,但是最新数据可能比较快就能采集到, 如果不成功,可以删除后再重新添加监控的主机


7 Zabbix 实现自动化运维
7.1 Zabbix 网络发现
7.1.1 Zabbix 网络发现介绍
之前都是手动一台一台主机的添加到 Zabbix 中进行监控,很是繁琐,可以利用自动发现功能,自动添加被监控的主机
当众多的服务器都已经安装了agent或者snmp后,利用自动发现功能,Zabbix server 可以自动扫描预先配置好的ip段,自动添加主机,自动关联模板,自动加到主机组里等等。
网络发现功能更快速的部署zabbix、简化zabbix管理、并且在经常变动的环境里面也不需要花太多的精力,毕竟网络发现也能随时发现变化。
当然网络发现也不是万能的,虽然网络发现能干很多事情,但是它无法发现网络拓扑的变化。
由于自动发现效率比较低,严重消耗Zabbix Server资源和网络带宽,大规模环境中较少使用
自动发现虽然能自动完成发现并添加主机,但仍然存在一些问题
发现时间长,效率较低
扫描过程中容易漏扫
当IP地址不固定难以实现无法实现不同类型主机关联不同模板
官方帮助
https://www.zabbix.com/documentation/5.0/zh/manual/discovery/network_discovery
7.1.2 实现 Zabbix 网络发现
自动发现由两个步骤组成:
发现discovery: Zabbix周期性地扫描在"网络发现规则"中定义的IP段,发现满足规则的主机动作action: 对这些主机完成动作,包括添加主机、添加模板、发送通知等等。
案例: 自动发现需求
发现有Zabbix agent运行的主机
每10分钟执行一次
如果主机正常运行时间超过2分钟,添加主机
将Linux主机添加到“Linux servers”组
链接模板Template OS Linux 到Linux主机
如果主机停机时间超过24小时,删除主机
7.1.2.1 创建自动发现指定需要监控的网段
配置-- 自动发现-- 创建发现规则

指定名称,IP范围和逢动发现检查等信息

可见名称为IP地址


7.1.2.2 创建添加主机的自动发现动作
创建新的动作



系统默认内置动作,也可以修改已有的被禁用自动发现动作

启用此动作

操作增加三个操作: 添加主机,添加群组,添加模板
也可以添加发送消息给Admin等操作

7.1.2.3 创建删除主机的自动发现动作


7.1.2.4 验证自动发现的结果
一段时间后,可以观察到下面结果,自动添加两台主机并关联相应的模板

将客户端关机后,过一天后,再观察是否自动删除此主机

监测 -- 自动发现, 可以看到下面的删除的主机

7.2 Zabbix 自动注册
7.2.1 Zabbix 自动注册介绍
当客户端众多时,将每台主机手动添加到Zabbix,还手动添加关联模板,无疑是低效的.
但是利用网络发现实现,Zabbix Server 资源消耗又比较严重
利用Zabbix的自动注册功能,实现添加主机的自动化,可以大幅减少运维的工作量,减少Zabbix Server 的资源消耗
此方式和自动发现不同,是由Active agent主动发起请求zabbix server将这些agent加到主机里。
注意: Agent 必须使用主动模式才支持自动注册
自动注册由于比自动发现效率更好,Zabbix Server资源消耗更少,更适合大规模及云环境IP地址不固定的场景使用
官方帮助
https://www.zabbix.com/documentation/5.0/zh/manual/discovery/auto_registration
在Zabbix agent 端的配置文件修改以下项目
Server=<Zabbix Server IP>
ServerActive=<Zabbix Server IP> #客户端主动模式是实现自动注册的前提条件
Hostname=<agent IP>
#HostnameItem=system.hostname
HostMetadata==<key> #非必须项,可以做为添加主机的验证标识和分类,或者实现加入主机
的验证功能
HostMetadataItem=<监控项Item> #非必须项,监控项的值可以做为添加主机的验证标识和分类
7.2.2 案例: 实现 Linux 主机自动注册
7.2.2.1 修改 Zabbix agent 的配置
范例:
[root@centos8 ~]#vim /etc/zabbix/zabbix_agentd.conf
Server=zabbix.wang.org
ServerActive=zabbix.wang.org
Hostname=web-10.0.0.18 #指定主机名,如果不指定,则服务器将使用agent的系统主机名
#HostnameItem=system.hostname #指定主机名
HostMetadata=123456
#HostMetadataItem=system.uname
[root@centos8 ~]#systemctl restart zabbix-agent.service
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -k system.uname
Linux rocky8.wang.org 4.18.0-348.el8.0.2.x86_64 #1 SMP Sun Nov 14 00:51:12 UTC
2021 x86_64
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -k system.hostname
rocky8.wang.org
7.2.2.2 在 Zabbix Server 配置动作
在配置---动作---选择自动注册动作

创建新动作

指定动作中条件的主机名的值

或者使用元数据添加

指定操作

指定操作,添加主机,添加主机到主机群组,关系相关模板



7.2.2.3 验证结果
稍过一会儿,再观察可以看到下面显示添加主机成功


7.2.3 案例: 将 Windows 主动自动注册
7.2.4.1 修改Agent 配置

重启服务

7.2.3.2 创建自动注册动作
配置--动作-- 自动创建动作 -- 创建动作


7.2.4.3 验证结果


7.2.4 基于 Ansible 实现批量的自动注册
略
7.3 Zabbix API 实现自动化运维
7.3.1 Zabbix API 介绍
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组功能的能力,而又无需直接使用源代码,或理解内部工作机制的细节。
Zabbix API允许你以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问。它广泛用于:
-
创建新的应用程序以使用Zabbix
-
将Zabbix与第三方软件集成自动执行常规任务
Zabbix API是基于Web的API,作为Web前端的一部分提供。它使用JSON-RPC 2.0协议,这意味着:
- 该API包含一组独立的方法
客户端和API之间的请求和响应使用JSON格式进行编码
官方参考文档:
https://www.zabbix.com/documentation/5.0/zh/manual/api
https://www.zabbix.com/documentation/4.0/zh/manual/api
https://www.zabbix.com/documentation/5.0/zh/manual/api/reference
https://www.zabbix.com/documentation/4.0/zh/manual/api/reference
Zabbix 支持各种语言的开发库
https://zabbix.org/wiki/Docs/api/libraries
Zabbix API 开始扮演着越来越重要的角色,尤其是在集成第三方软件和自动化日常任务时。很难想象管理数千台服务器而没有自动化是多么的困难。Zabbix API 为批量操作、第三方软件集成以及其他作用提供可编程接口。Zabbix API 是在 1.8 版本中开始引进并且已经被广泛应用。所有的 Zabbix 移动客户端都是基于 API,甚至原生的 WEB 前端部分也是建立在它之上。Zabbix API 中间件使得架构更加模块化也避免直接对数据库进行操作。
API 采用 JSON-RPC 实现。这意味着调用任何函数,都需要发送 POST 请求,输入输出数据都是以 JSON 格式。
Zabbix API由许多名义上分组的独立API方法组成。每个方法执行一个特定任务。
例如,方法 host.create 隶属于 host 这个API分组 ,用于创建新主机。API分组有时被称为“类”。
大多数API至少包含四种方法: get, create, update 和 delete ,分别是检索,创建,更新和删除数据,但是某些API提供一套完全不同的一组方法。
Zabbix 常用API
user.login#用户登录 |
|---|
| `host.get(create |
| `hostgroup.get(create |
| `item.get(create |
history.get#历史数据查询 |
event.get#事件查询 |
trigger.get#触发器查询 |
7.3.2 API 使用案例
7.3.2.1 获取 Token
在访问Zabbix内部的任何数据之前,需要登录并获得身份验证令牌。这可以使用user.login方法来完成。
假设以Zabbix的Admin用户登录。那么JSON请求将是这样的:
[root@zabbix-server ~]#cat zabbix-api-token.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#Date: 2020-09-08
#FileName: zabbix-api-token.sh
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
ZABBIX_SERVER=zabbix.wang.org
curl-s-XPOST-H"Content-Type: application/json-rpc"-d'
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php
[root@zabbix-server ~]#yum -y install jq
[root@zabbix-server ~]#./zabbix-api-token.sh | jq
{
"jsonrpc": "2.0",
"result": "6e936114704269310d372a19c409e93d", #此为获取的Token
"id": 1
}
[root@zabbix-server ~]#yum -y install python3
[root@zabbix-server ~]#./zabbix-api-token.sh | python3 -m json.tool
{
"jsonrpc": "2.0",
"result": "6e936114704269310d372a19c409e93d", #此为获取的Token
"id": 1
}
7.3.2.2 使用以上令牌获取所有主机列表
[root@zabbix-server ~]#cat zabbix-api-gethostlist.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#Date: 2020-09-08
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
curl-s-XPOST-H"Content-Type: application/json-rpc"-d'
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [ "host" ]
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool
[root@zabbix-server ~]#./zabbix-api-gethostlist.sh
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Zabbix server"
},
{
"hostid": "10270",
"host": "10.0.0.105"
},
{
"hostid": "10272",
"host": "10.0.0.106"
}
],
"id": 1
}
7.3.2.3 使用以上令牌获取所有主机信息
[root@zabbix-server ~]#cat zabbix-api-gethostinfo.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#FileName: zabbix-api-gethostinfo.sh
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
curl-s-XPOST-H"Content-Type: application/json-rpc"-d'
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [ "hostid", "host" ],
"selectInterfaces": [ "interfaceid", "ip" ]
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool
[root@zabbix-server ~]#chmod +x zabbix-api-gethostinfo.sh
[root@zabbix-server ~]#./zabbix-api-gethostinfo.sh
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Zabbix server",
"interfaces": [
{
"interfaceid": "1",
"ip": "127.0.0.1"
}
]
},
{
"hostid": "10270",
"host": "10.0.0.105",
"interfaces": [
{
"interfaceid": "2",
"ip": "10.0.0.105"
}
]
},
{
"hostid": "10272",
"host": "10.0.0.106",
"interfaces": [
{
"interfaceid": "3",
"ip": "10.0.0.106"
}
]
}
],
"id": 1
}
7.3.2.4 获取指定主机信息
[root@zabbix-server ~]#cat ./zabbix-api-gethost.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
HOST=10.0.0.105
curl-s-XPOST-H"Content-Type: application/json-rpc"-d'
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"filter": {
"host": [ "'$HOST'" ]
}
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool
[root@zabbix-server ~]#./zabbix-api-gethost.sh
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10270",
"proxy_hostid": "0",
"host": "10.0.0.105",
"status": "0",
"disable_until": "0",
"error": "",
"available": "1",
"errors_from": "0",
"lastaccess": "0",
"ipmi_authtype": "-1",
"ipmi_privilege": "2",
"ipmi_username": "",
"ipmi_password": "",
"ipmi_disable_until": "0",
"ipmi_available": "0",
"snmp_disable_until": "0",
"snmp_available": "0",
"maintenanceid": "0",
"maintenance_status": "0",
"maintenance_type": "0",
"maintenance_from": "0",
"ipmi_errors_from": "0",
"snmp_errors_from": "0",
"ipmi_error": "",
"snmp_error": "",
"jmx_disable_until": "0",
"jmx_available": "0",
"jmx_errors_from": "0",
"jmx_error": "",
"name": "10.0.0.105-wang-web5",
"flags": "0",
"templateid": "0",
"description": "",
"tls_connect": "1",
"tls_accept": "1",
"tls_issuer": "",
"tls_subject": "",
"tls_psk_identity": "",
"tls_psk": "",
"proxy_address": "",
"auto_compress": "1"
}
],
"id": 1
}
7.3.2.5 获取所有用户信息
[root@zabbix-server ~]#cat ./zabbix-api-getusers.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
curl-s-XPOST-H"Content-Type: application/json-rpc"-d'
{
"jsonrpc": "2.0",
"method": "user.get",
"params": {
"output": "extend"
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool
[root@zabbix-server ~]#./zabbix-api-getusers.sh
{
"jsonrpc": "2.0",
"result": [
{
"userid": "1",
"alias": "Admin",
"name": "Zabbix",
"surname": "Administrator",
"url": "",
"autologin": "1",
"autologout": "0",
"lang": "zh_CN",
"refresh": "30s",
"type": "3",
"theme": "default",
"attempt_failed": "0",
"attempt_ip": "",
"attempt_clock": "0",
"rows_per_page": "50"
},
{
"userid": "2",
"alias": "guest",
"name": "",
"surname": "",
"url": "",
"autologin": "0",
"autologout": "15m",
"lang": "en_GB",
"refresh": "30s",
"type": "1",
"theme": "default",
"attempt_failed": "0",
"attempt_ip": "",
"attempt_clock": "0",
"rows_per_page": "50"
},
{
"userid": "3",
"alias": "wangxiaochun",
"name": "xiaochun",
"surname": "wang",
"url": "",
"autologin": "0",
"autologout": "0",
"lang": "zh_CN",
"refresh": "30s",
"type": "2",
"theme": "default",
"attempt_failed": "0",
"attempt_ip": "",
"attempt_clock": "0",
"rows_per_page": "50"
}
],
"id": 1
}
7.3.2.6 获取所有模板
[root@zabbix-server ~]#cat ./zabbix-api-gettemplates.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
curl-s-XPOST-H"Content-Type: application/json-rpc"-d'
{
"jsonrpc": "2.0",
"method": "template.get",
"params": {
"output": "extend"
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool
[root@zabbix-server ~]#./zabbix-api-gettemplates.sh
{
"jsonrpc": "2.0",
"result": [
{
"proxy_hostid": "0",
"host": "Template OS Linux",
"status": "3",
"disable_until": "0",
"error": "",
"available": "0",
"errors_from": "0",
"lastaccess": "0",
"ipmi_authtype": "-1",
"ipmi_privilege": "2",
"ipmi_username": "",
"ipmi_password": "",
"ipmi_disable_until": "0",
"ipmi_available": "0",
"snmp_disable_until": "0",
"snmp_available": "0",
"maintenanceid": "0",
"maintenance_status": "0",
"maintenance_type": "0",
"maintenance_from": "0",
"ipmi_errors_from": "0",
"snmp_errors_from": "0",
"ipmi_error": "",
"snmp_error": "",
"jmx_disable_until": "0",
"jmx_available": "0",
"jmx_errors_from": "0",
"jmx_error": "",
"name": "Template OS Linux",
"flags": "0",
"templateid": "10001",
"description": "",
"tls_connect": "1",
"tls_accept": "1",
"tls_issuer": "",
"tls_subject": "",
"tls_psk_identity": "",
"tls_psk": "",
"proxy_address": "",
"auto_compress": "1"
},
{
"proxy_hostid": "0",
"host": "Template App Zabbix Server",
"status": "3",
"disable_until": "0",
"error": "",
"available": "0",
"errors_from": "0",
"lastaccess": "0",
"ipmi_authtype": "-1",
"ipmi_privilege": "2",
"ipmi_username": "",
"ipmi_password": "",
"ipmi_disable_until": "0",
"ipmi_available": "0",
"snmp_disable_until": "0",
"snmp_available": "0",
"maintenanceid": "0",
"maintenance_status": "0",
"maintenance_type": "0",
"maintenance_from": "0",
"ipmi_errors_from": "0",
"snmp_errors_from": "0",
"ipmi_error": "",
"snmp_error": "",
"jmx_disable_until": "0",
"jmx_available": "0",
"jmx_errors_from": "0",
"jmx_error": "",
"name": "Template App Zabbix Server",
"flags": "0",
"templateid": "10047",
"description": "",
"tls_connect": "1",
"tls_accept": "1",
"tls_issuer": "",
"tls_subject": "",
"tls_psk_identity": "",
"tls_psk": "",
"proxy_address": "",
"auto_compress": "1"
},
{
"proxy_hostid": "0",
"host": "Template App Zabbix Proxy",
"status": "3",
.....
7.3.2.7 获取指定的模板
[root@zabbix-server ~]#cat zabbix-api-gettemplate.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
curl-s-XPOST-H"Content-Type: application/json-rpc"-d'
{
"jsonrpc": "2.0",
"method": "template.get",
"params": {
"output": "extend",
"filter": {
"host": [ "Template OS Linux SNMP", "Template OS Linux by Zabbix
agent" ] #指定模板名称
}
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool
[root@zabbix-server ~]#./zabbix-api-gettemplate.sh
{
"jsonrpc": "2.0",
"result": [
{
"proxy_hostid": "0",
"host": "Template OS Linux",
"status": "3",
"disable_until": "0",
"error": "",
"available": "0",
"errors_from": "0",
"lastaccess": "0",
"ipmi_authtype": "-1",
"ipmi_privilege": "2",
"ipmi_username": "",
"ipmi_password": "",
"ipmi_disable_until": "0",
"ipmi_available": "0",
"snmp_disable_until": "0",
"snmp_available": "0",
"maintenanceid": "0",
"maintenance_status": "0",
"maintenance_type": "0",
"maintenance_from": "0",
"ipmi_errors_from": "0",
"snmp_errors_from": "0",
"ipmi_error": "",
"snmp_error": "",
"jmx_disable_until": "0",
"jmx_available": "0",
"jmx_errors_from": "0",
"jmx_error": "",
"name": "Template OS Linux",
"flags": "0",
"templateid": "10001",
"description": "",
"tls_connect": "1",
"tls_accept": "1",
"tls_issuer": "",
"tls_subject": "",
"tls_psk_identity": "",
"tls_psk": "",
"proxy_address": "",
"auto_compress": "1"
},
{
"proxy_hostid": "0",
"host": "Template OS Linux SNMPv2",
"status": "3",
"disable_until": "0",
"error": "",
"available": "0",
"errors_from": "0",
"lastaccess": "0",
"ipmi_authtype": "-1",
"ipmi_privilege": "2",
"ipmi_username": "",
"ipmi_password": "",
"ipmi_disable_until": "0",
"ipmi_available": "0",
"snmp_disable_until": "0",
"snmp_available": "0",
"maintenanceid": "0",
"maintenance_status": "0",
"maintenance_type": "0",
"maintenance_from": "0",
"ipmi_errors_from": "0",
"snmp_errors_from": "0",
"ipmi_error": "",
"snmp_error": "",
"jmx_disable_until": "0",
"jmx_available": "0",
"jmx_errors_from": "0",
"jmx_error": "",
"name": "Template OS Linux SNMPv2",
"flags": "0",
"templateid": "10248",
"description": "Template OS Linux version: 0.15",
"tls_connect": "1",
"tls_accept": "1",
"tls_issuer": "",
"tls_subject": "",
"tls_psk_identity": "",
"tls_psk": "",
"proxy_address": "",
"auto_compress": "1"
}
],
"id": 1
}
7.3.2.8 更新指定主机
[root@zabbix-server ~]#cat zabbix-api-disablehost.sh #!/bin/bash # #******************************************************************** #Author: wangxiaochun #QQ: 29308620 #URL: http://www.wangxiaochun.com #Description: The test script #Copyright (C): 2020 All rights reserved #******************************************************************** ZABBIX_SERVER=10.0.0.100 TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}') curl -s -XPOST -H "Content-Type: application/json-rpc" -d ' { "jsonrpc": "2.0", "method": "host.update", "params": { "hostid": "10272", # 指定要禁用的主机 ID "status": 1 #0 表示启用 ,1 表示禁用 }, "id": 1, "auth": "'$TOKEN'" }' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool 7.3.2.9 删除指定主机删除指定主机 [root@zabbix-server ~]#cat zabbix-api-delhost.sh #!/bin/bash # #******************************************************************** #Author: wangxiaochun #QQ: 29308620 #URL: http://www.wangxiaochun.com #Description: The test script #Copyright (C): 2020 All rights reserved #******************************************************************** ZABBIX_SERVER=10.0.0.100 TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}') curl -s -XPOST -H "Content-Type: application/json-rpc" -d ' { "jsonrpc": "2.0", "method": "host.delete", "params": ["10272"], # 指定要删除的主机 ID "id": 1, "auth": "'$TOKEN'" }' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool
7.3.2.9 删除指定主机删除指定主机
[root@zabbix-server ~]#./zabbix-api-delhost.sh
{
"jsonrpc": "2.0",
"result": {
"hostids": [
"10272"
]
},
"id": 1
}
#验证是否删除
[root@zabbix-server ~]#./zabbix-api-gethostlist.sh
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Zabbix server"
},
{
"hostid": "10270",
"host": "10.0.0.105"
}
],
"id": 1
}
7.3.2.10 批量创建新主机
API添加主机前,需要预先知道要添加的主机IP、此主机预先安装并配置好zabbix agent、预先知道要关联的模板ID/组ID等信息,然后同API提交请求添加
参考链接
https://www.zabbix.com/documentation/5.0/zh/manual/api/reference/hostinterface/o
bject#host-interface
范例:
[root@zabbix-server ~]#cat ./zabbix-api-addhost.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#Date: 2020-09-08
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
HOST=10.0.0.106
curl-s-XPOST-H"Content-Type: application/json-rpc"-d'
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "'web-api-$HOST'", #创建主机名称
"name": "'web-api-$HOST'", #可见的名称
"interfaces": [
{
"type": 1, #类型为1表示agent,2是SNMP,3是IPMI,4是JMX
"main": 1, #主要接口
"useip": 1, #0是使用DNS,1是使用IP地址
"ip": "'$HOST'", #添加的zabbix agent的IP地址
"dns": "",
"port": "10050"#agent使用的端口
}
],
"groups": [
{
"groupid": "2"#添加到的组的ID
}
],
"templates": [
{
"templateid": "10001"#关联的模板的ID
}
]
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool
[root@zabbix-server ~]#./zabbix-api-addhost.sh
{
"jsonrpc": "2.0",
"result": {
"hostids": [
"10273"
]
},
"id": 1
}
[root@zabbix-server ~]#./zabbix-api-gethostlist.sh
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Zabbix server"
},
{
"hostid": "10270",
"host": "10.0.0.105"
},
{
"hostid": "10273",
"host": "10.0.0.106"
}
],
"id": 1
}
Zabbix WEB管理页面验证结果

范例: 批量添加主机
[root@zabbix-server ~]#cat ./zabbix-api-addhosts.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#Date: 2020-09-08
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
NET=10.0.0
for HOST in$NET.{200..210};do
curl-s-XPOST-H"Content-Type: application/json-rpc"-d'
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "'$HOST'",
"name": "'web-$HOST'",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "'$HOST'",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php
done
[root@zabbix-server ~]#bash ./zabbix-api-addhosts.sh

7.3.2.11 查看代理proxy主机
[root@zabbix-server ~]#cat ./zabbix-api-getproxy.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
curl-s-XPOST-H"Content-Type: application/json-rpc"-d'
{
"jsonrpc": "2.0",
"method": "proxy.get",
"params": {
"output": "extend"
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool
[root@zabbix-server ~]#./zabbix-api-getproxy.sh
{
"jsonrpc": "2.0",
"result": [
{
"proxy_hostid": "0",
"host": "10.0.0.101",
"status": "5",
"disable_until": "0",
"error": "",
"available": "0",
"errors_from": "0",
"lastaccess": "0",
"ipmi_authtype": "-1",
"ipmi_privilege": "2",
"ipmi_username": "",
"ipmi_password": "",
"ipmi_disable_until": "0",
"ipmi_available": "0",
"snmp_disable_until": "0",
"snmp_available": "0",
"maintenanceid": "0",
"maintenance_status": "0",
"maintenance_type": "0",
"maintenance_from": "0",
"ipmi_errors_from": "0",
"snmp_errors_from": "0",
"ipmi_error": "",
"snmp_error": "",
"jmx_disable_until": "0",
"jmx_available": "0",
"jmx_errors_from": "0",
"jmx_error": "",
"name": "",
"flags": "0",
"templateid": "0",
"description": "",
"tls_connect": "1",
"tls_accept": "1",
"tls_issuer": "",
"tls_subject": "",
"tls_psk_identity": "",
"tls_psk": "",
"proxy_address": "10.0.0.101",
"auto_compress": "1",
"proxyid": "10276"
}
],
"id": 1
}
7.3.2.12 添加指定代理的主机
[root@zabbix-server ~]#cat zabbix-api-addhost_proxy.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#Date: 2020-09-08
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
HOST=10.0.0.107
curl-s-XPOST-H"Content-Type: application/json-rpc"-d'
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "'web-api-$HOST'",
"name": "'web-api-$HOST'",
"proxy_hostid": "10276", #指定代理的ID
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "'$HOST'",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool
[root@zabbix-server ~]#./zabbix-api-addhost_proxy.sh
{
"jsonrpc": "2.0",
"result": {
"hostids": [
"10277"
]
},
"id": 1
}
7.3.2.13 批量添加指定代理的主机
[root@zabbix-server ~]#cat ./zabbix-api-addhosts_proxy.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#Date: 2020-09-08
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
IPLIST="
10.0.0.1
10.0.0.3
10.0.0.5
"
for i in$IPLIST ;do
curl-s-XPOST-H"Content-Type: application/json-rpc"-d'
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "'${i}'",
"name": "'web-proxy-api-${i}'",
"proxy_hostid": "10276",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "'${i}'",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool
done
[root@zabbix-server ~]#./zabbix-api-addhosts_proxy.sh
{
"jsonrpc": "2.0",
"result": {
"hostids": [
"10279"
]
},
"id": 1
}
{
"jsonrpc": "2.0",
"result": {
"hostids": [
"10280"
]
},
"id": 1
}
{
"jsonrpc": "2.0",
"result": {
"hostids": [
"10281"
]
},
"id": 1
}
Zabbix WEB管理页面验证结果

8 Zabbix 优化
zabbix 监控主机和监控项比较少的时候,无需过度优化!
8.1 优化方法
官方文档:
https://www.zabbix.com/documentation/5.0/zh/manual/appendix/performance_tuning
https://blog.zabbix.com/monitoring-how-busy-zabbix-processes-are/457/
如果主机和监控项众多, Zabbix Server 有可能会出现的性能问题,主要表现如下:
-
Web操作很卡,容易出现502错误
-
监控图形中图层断裂
-
监控告警不及时
可以查看队列了解 Zabbix 性能状态
管理-- 队列



优化方法
数据库: 写多读少,数据采集比较频繁,可以考虑 PostgreSQL
-
使用主动模式,减轻Zabbix Server压力
-
如果需要监控远程主机,使用 Zabbix Proxy
-
删除无用监控项,建议使用自定义的模板和监控项
-
适当增加监控项的取值间隔,减少历史数据保存周期,此工作由housekeeper进程定时清理针对zabbix历史数据和趋势图的数据表,进行周期性分表保存
-
对 Zabbix Server 进程调优,发现性能瓶颈的进程,加大它的进程数量
-
对 Zabbix Server 缓存调优,发现哪种缓存的剩余内存少,就加大它的缓存值
8.2 数据库空间估算
监控项的保留时长,历史数据默认90天,趋势数据1年

占用的数据库磁盘空间可能会很大,如何估算空间占用?官方给出相关的公式官方公式:
https://www.zabbix.com/documentation/6.0/zh/manual/installation/requirements
https://www.zabbix.com/documentation/5.0/zh/manual/installation/requirements
下表包含可用于计算 Zabbix 系统所需磁盘空间的公式:
| 参数所 | 磁盘空间的计算公式 (单位:字节) |
|---|---|
| 配置文件 | 通常为10MB或更少 |
| History | days*(items/refresh rate)243600*bytes items:监控项数量。 days:保留历史数据的天数。 refresh rate:监控项的更新间隔。 bytes:保留单个值所需要占用的字节数,依赖于数据库引擎,通常为~90字节。 |
| Trends | days*(items/3600)243600*bytes items:监控项数量。 days:保留历史数据的天数。 bytes:保留单个趋势数据所需要占用的字节数,依赖于数据库引擎,通常为~90字节。 |
| Events | daysevents243600bytes events: 每秒产生的事件数量。假设最糟糕的情况下,每秒产生1个事件。 days:保留历史数据的天数。bytes:保留单个趋势数据所需的字节数,取决于数据库引擎,通常为~170字节。 |
根据使用 MySQL 后端数据库的实际统计数据中收集到的平均值,例如监控项为数值类型的值约 90 个字节,事件约 170 个字节。
因此,所需要的磁盘总空间按下列方法计算:
配置文件数据+ 历史数据+ 趋势数据+ 事件数据
范例: 假设 100台主机,每个主机约有100个监控项,每个监控项每间隔60s获取一次数值
# 历史数据:
days*(items/refresh rate)*24*3600*bytes
90*(10000/60)*24*3600*90=116173440000字节约共116GB
#趋势:
days*(items/3600)*24*3600*bytes
365*(10000/3600)*24*3600*90=5676480000字节约共5G
#事件:
days*events*24*3600*bytes
365*1*24*3600*170=5361120000约5G
#合计:126GB
8.3 Zabbix Server 配置文件解析
AlertScriptsPath
默认值:/usr/local/share/zabbix/alertscripts
说明:告警脚本目录
AllowRoot
默认值:0 说明:是否允许使用root启动,0:不允许,1:允许,默认情况下她会使用zabbix用户来启动
zabbix进程,不推荐使用root
CacheSize
取值范围: 128K-8G
默认值:8M
说明:配置缓存,用于存储host,item,trigger数据,2.2.3版本之前最大支持2G,目前最大支持
8G,zabbix5.0最大支持64G
CacheUpdateFrequency
取值范围:1-3600
默认值:60
说明:多少秒更新一次配置缓存
DBHost
默认值:localhost
说明:数据库主机地址
DBName
默认值:无
必填:是
DBPassword:
默认值:无
说明:数据库密码
DBPort
取值范围:1024-65535
默认值:3306
说明:SQLite作为DB,这个选项请忽略,如果使用socket链接,也请忽略。
DBSchema
说明:Schema名称. 用于 IBM DB2 、 PostgreSQL.
DBSocket
默认值:/tmp/mysql.sock
说明:mysql sock文件路径
DebugLevel
取值范围:0-5
默认值:3
说明: 指定debug级别
0-基本信息
1- critical信息
2- error信息
3- warnings信息
4-调试日志,日志内容很多,慎重使用
5-用于调试web和vmware监控
ExternalScripts
默认值: /usr/local/share/zabbix/externalscripts
说明:外部脚本目录
Fping6Location
默认值:/usr/sbin/fping6
说明:fping6路径,如果zabbix非root启动,请给fping6 SUID
FpingLocation
默认值:/usr/sbin/fping
说明:和上面的一样
HistoryCacheSize
取值范围:128K-2G
默认值:8M
说明:
历史记录缓存大小,用于存储历史记录
HistoryTextCacheSize
取值范围:128K-2G
默认值:16M
说明:文本类型历史记录的缓存大小,存储character, text 、log历史记录.
HousekeepingFrequency
取值范围:0-24
默认值:1
说明:housekeep执行频率,默认每小时回去删除一些过期数据。如果server重启,那么30分钟之后才执行
一次,接下来,每隔一小时在执行一次。
Include
说明:include配置文件,可以使用正则表达式,例如:/usr/local/zabbix-
2.4.4/conf/ttlsa.com/*.conf
JavaGateway
说明:Zabbix Java gateway的主机名,需要启动Java pollers
JavaGatewayPort
取值范围:1024-32767
默认值:10052
Zabbix Java gateway监听端口
ListenIP
默认值:0.0.0.0
说明:监听地址,留空则会在所有的地址上监听,可以监听多个IP地址,ip之间使用逗号分隔,例如:
127.0.0.1,10.10.0.2
ListenPort
取值范围:1024-32767
默认值:10051
说明:监听端口
LoadModule
说明:加载模块,格式: LoadModule=,文件必须在指定的LoadModulePath目录下,如果需要加载多个模
块,那么写多个即可。
LoadModulePath
模块目录,参考上面
LogFile
日志文件,例如:/data/logs/zabbix/zabbix-server.log
LogFileSize
取值范围:0-1024
默认值:1
0表示禁用日志自动rotation,如果日志达到了限制,并且rotation失败,老日志文件将会被清空掉,重新
生成一个新日志。
LogSlowQueries
取值范围:0-3600000
默认值:0
多慢的数据库查询将会被记录,单位:毫秒,0表示不记录慢查询。只有在DebugLevel=3时,这个配置才有
效。
MaxHousekeeperDelete
取值范围:0-1000000
默认值:5000
housekeeping一次删除的数据不能大于MaxHousekeeperDelete
PidFile
默认值:/tmp/zabbix_server.pid
PID文件
ProxyConfigFrequency
取值范围:1-604800
默认值:3600
proxy被动模式下,server多少秒同步配置文件至proxy。
ProxyDataFrequency
取值范围:1-3600
默认值:1
被动模式下,zabbix server间隔多少秒向proxy请求历史数据
SenderFrequency
取值范围:5-3600
默认值:30
间隔多少秒,再尝试发送为发送的报警
SNMPTrapperFile
默认值:/tmp/zabbix_traps.tmp
SNMP trap发送到server的数据临时存放文件。
SourceIP
出口IP地址
SSHKeyLocation
SSH公钥私钥路径
SSLCertLocation
SSL证书目录,用于web监控
SSLKeyLocation
SSL认证私钥路径、用于web监控
SSLCALocation
SSL认证,CA路径,如果为空,将会使用系统默认的CA
StartDBSyncers
取值范围:1-100
默认值:4
预先foke DB Syncers的数量,1.8.5以前最大值为64
StartDiscoverers
取值范围:0-250
默认值:1
pre-forked discoverers的数量,1.8.5版本以前最大可为255
StartPollers
# Mandatory: no
取值范围:0-1000
默认值:5
Number of pre-forked instances of pollers.
StartHTTPPollers
取值范围:0-1000
默认值:1
pre-forked HTTP pollers的数量,1.8.5以前最大255
StartIPMIPollers
取值范围:0-1000
默认值:0
pre-forked IPMI pollers的数量,1.8.5之前,最大为255
StartPollersUnreachable
取值范围:0-1000
默认值:1
pre-forked instances of pollers for unreachable hosts (including IPMI and Java)
Timeout
取值范围:1-30
默认值:3
agent,snmp,external check的超时时间,单位为秒
TmpDir
默认值:/tmp
TrapperTimeout
取值范围:1-300
默认值:300
处理trapper数据的超时时间
TrendCacheSize
取值范围:128K-2G
默认值:4M
历史数据缓存大小
UnavailableDelay
取值范围:1-3600
默认值:60
间隔多少秒再次检测主机是否可用
UnreachableDelay
取值范围:1-3600
默认值:15
间隔多少秒再次检测主机是否可达。
UnreachablePeriod
取值范围:1-3600
默认值:45
检测到主机不可用,多久将它置为不可达
User
默认值:zabbix
启动zabbix server的用户,在配置禁止root启动,并且当前shell用户是root得情况下有效。如果当前用
户是ttlsa,那么zabbix server的运行用户是ttlsa
ValueCacheSize
取值范围:0,128K-64G
默认值:8M
0表示禁用,history value缓存大小,当缓存超标了,将会每隔5分钟往server日志里面记录。养成看日志
的好习惯。
8.4 实战优化案例
8.4.1 案例
下图为 Zabbix 数据采集进程的繁忙度

修改自动发现规则

再次观察监控项,可以看到繁忙度大幅提高

修改 Zabbix Server 配置
[root@zabbix-server ~]#vim /etc/zabbix/zabbix_server.conf
StartDiscoverers=100# StartDiscoverers=1 默认值为1,加大此值
[root@zabbix-server ~]#systemctl restart zabbix-agent.service

Zabbix Server 还有其它相关进程


8.4.2 案例
缓存使用情况如下图

Zabbix Server 相关缓存的配置项
[root@zabbix-server ~]#grep -i cache /etc/zabbix/zabbix_server.conf
### Option: VMwareCacheSize
# Size of VMware cache, in bytes.
# VMwareCacheSize=8M
### Option: CacheSize
# Size of configuration cache, in bytes.
# CacheSize=8M #此值不能太小,否则Zabbix Server 可能无法启动
### Option: CacheUpdateFrequency
# How often Zabbix will perform update of configuration cache, in seconds.
# CacheUpdateFrequency=60
### Option: HistoryCacheSize
# Size of history cache, in bytes.
# HistoryCacheSize=16M
### Option: HistoryIndexCacheSize
# Size of history index cache, in bytes.
# Shared memory size for indexing history cache.
# HistoryIndexCacheSize=4M
### Option: TrendCacheSize
# Size of trend cache, in bytes.
# TrendCacheSize=4M
### Option: ValueCacheSize
# Size of history value cache, in bytes.
# Setting to 0 disables value cache.
# ValueCacheSize=8M
8.4.3 案例
利用API添加几百台监控的主机,因为默认值8M太小 ,会造成Zabbix Server 不断的重启,可以看到如下日志信息
root@zabbix-server ~]#tail -f /var/log/zabbix/zabbix_server.log
......
8588:20220617:213218.764 syncing trend data done
8588:20220617:213218.764 Zabbix Server stopped. Zabbix 5.0.24 (revision
313ff6504e3).
8611:20220617:213228.800 Starting Zabbix Server. Zabbix 5.0.24 (revision
313ff6504e3).
8611:20220617:213228.800 ****** Enabled features ******
8611:20220617:213228.800 SNMP monitoring: YES
8611:20220617:213228.800 IPMI monitoring: YES
8611:20220617:213228.800 Web monitoring: YES
8611:20220617:213228.800 VMware monitoring: YES
8611:20220617:213228.800 SMTP authentication: YES
8611:20220617:213228.800 ODBC: YES
8611:20220617:213228.800 SSH support: YES
8611:20220617:213228.800 IPv6 support: YES
8611:20220617:213228.800 TLS support: YES
8636:20220617:213239.302 ******************************
8636:20220617:213239.302 using configuration file:
/etc/zabbix/zabbix_server.conf
8636:20220617:213239.306 current database version (mandatory/optional):
05000000/05000005
8636:20220617:213239.306 required mandatory version: 05000000
8636:20220617:213239.315 server #0 started [main process]
8637:20220617:213239.316 server #1 started [configuration syncer #1]
8637:20220617:213239.535 __mem_malloc: skipped 0 asked 72 skip_min
18446744073709551615 skip_max 0
8637:20220617:213239.535 [file:dbconfig.c,line:96] __zbx_mem_malloc(): out of
memory (requested 72 bytes)
8637:20220617:213239.535 [file:dbconfig.c,line:96] __zbx_mem_malloc(): please
increase CacheSize configuration parameter
8637:20220617:213239.535 === memory statistics for configuration cache ===
8637:20220617:213239.535 free chunks of size 24 bytes: 55
8637:20220617:213239.535 free chunks of size 32 bytes: 11
8637:20220617:213239.535 free chunks of size 40 bytes: 6
8637:20220617:213239.535 free chunks of size 48 bytes: 5
8637:20220617:213239.535 free chunks of size 56 bytes: 3
8637:20220617:213239.535 min chunk size: 24 bytes
8637:20220617:213239.535 max chunk size: 56 bytes
8637:20220617:213239.535 memory of total size 7264040 bytes fragmented into
70263 chunks
8637:20220617:213239.535 of those, 2320 bytes are in80 free
chunks
8637:20220617:213239.535 of those, 7261720 bytes are in70183 used
chunks
8637:20220617:213239.535 of those, 1124192 bytes are used by allocation
overhead
8637:20220617:213239.535 ================================
[root@zabbix-server ~]#cat /var/log/syslog
Jun 1721:37:18 zabbix-server systemd[1]: zabbix-server.service: Scheduled
restart job, restart counter is at 31.
Jun 1721:37:18 zabbix-server systemd[1]: Stopped Zabbix Server.
Jun 1721:37:18 zabbix-server systemd[1]: Starting Zabbix Server...
Jun 1721:37:18 zabbix-server systemd[1]: Started Zabbix Server.
Jun 1721:37:18 zabbix-server kill[9306]: 用法:
Jun 1721:37:18 zabbix-server kill[9306]: kill [options] <pid> [...]
Jun 1721:37:18 zabbix-server kill[9306]: 选项:
Jun 1721:37:18 zabbix-server kill[9306]: <pid> [...] send signal to
every <pid> listed
Jun 1721:37:18 zabbix-server kill[9306]: -<signal>, -s, --signal <signal>
Jun 1721:37:18 zabbix-server kill[9306]: specify the
<signal> to be sent
Jun 1721:37:18 zabbix-server kill[9306]: -l, --list=[<signal>] list all
signal names, or convert one to a name
Jun 1721:37:18 zabbix-server kill[9306]: -L, --table list all
signal names in a nice table
Jun 1721:37:18 zabbix-server kill[9306]: -h, --help显示此帮助然后离开
Jun 1721:37:18 zabbix-server kill[9306]: -V, --version显示程序版本然后离开
Jun 1721:37:18 zabbix-server kill[9306]: 欲了解更多详细信息,请参见kill(1)。
Jun 1721:37:18 zabbix-server systemd[1]: zabbix-server.service: Control process
exited, code=exited, status=1/FAILURE
Jun 1721:37:18 zabbix-server systemd[1]: zabbix-server.service: Failed with
result 'exit-code'.
[root@zabbix-server ~]#systemctl status zabbix-server.service
● zabbix-server.service - Zabbix Server
Loaded: loaded (/lib/systemd/system/zabbix-server.service; enabled; vendor
preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Fri 2021-06-17
21:38:51 CST; 8s ago
Process: 9509ExecStart=/usr/sbin/zabbix_server -c$CONFFILE(code=exited,
status=0/SUCCESS)
Process: 9528ExecStop=/bin/kill -SIGTERM$MAINPID(code=exited,
status=1/FAILURE)
Main PID: 9526(code=exited, status=0/SUCCESS)
6月1721:38:51 zabbix-server.wang.org systemd[1]: zabbix-server.service: Control
process exited, code=exited, status=1/FAILURE
6月1721:38:51 zabbix-server.wang.org systemd[1]: zabbix-server.service: Failed
with result 'exit-code'.
#加大缓存
[root@zabbix-server ~]#vim /etc/zabbix/zabbix_server.conf
# CacheSize=8M
CacheSize=256M
#观察结果,发现Zabbix Server 服务启动成功
[root@zabbix-server ~]#systemctl is-active zabbix-server.service
active
8.4.4 案例
由于添加了很多不可访问的主机,会出现unreachable poller进程繁忙的情况,原因是此进程只有一个
[root@zabbix-server ~]#ps aux|grep unreachable
zabbix 98200.0 0.6 36576812308 ? S 21:40 0:00
/usr/sbin/zabbix_server: unreachable poller #1 [got 2 values in 8.005057 sec,
getting values]
root 116420.0 0.0 9524720 pts/3 S+22:06 0:00 grep--
color=auto unreachable
告警



修改配置,加大进程数
[root@zabbix-server ~]#vi /etc/zabbix/zabbix_server.conf
# StartPollersUnreachable=1
StartPollersUnreachable=100
[root@zabbix-server ~]#systemctl restart zabbix-server.service
[root@zabbix-server ~]#ps aux|grep unreachable |wc -l
101
再次观察数据和图形,可以看到繁忙度大幅下降

8.4.5 案例
自动发现的进程只有一个
#默认进程是一个
[root@zabbix-server ~]#ps aux|grep discoverer
zabbix 121410.0 0.5 36609610876 ? S 22:09 0:00
/usr/sbin/zabbix_server: discoverer #1 [processed 2 rules in 251.928169 sec,
performing discovery]
root 135530.0 0.1 95242620 pts/3 S+22:25 0:00 grep--
color=auto discoverer
多创建几个自动发现场景,缩短发现时间,配置如下

观察进程繁忙程度


出现告警

修改配置,加大进程数
[root@zabbix-server ~]#vi /etc/zabbix/zabbix_server.conf
# StartDiscoverers=1
StartDiscoverers=100
[root@zabbix-server ~]#systemctl restart zabbix-server.service
[root@zabbix-server ~]#ps aux|grep discoverer|wc -l
101
观察进程状态繁忙度大幅下降

8.4.6 案例
进程数加大,可能会导致数据库连接过多,超过最大值,导致Zabbix 无法启动,解决方案,加大数据库的连接数
#注意:如果无法启动,可能是数据库连接数不足
[root@zabbix-server ~]#tail /var/log/zabbix/zabbix_server.log
......
20383:20220617:223102.021 server #162 started [unreachable poller #34]
20386:20220617:223102.022 server #163 started [unreachable poller #35]
20386:20220617:223102.023 [Z3001] connection to database 'zabbix' failed:
[1040] Too many connections
20386:20220617:223102.023 Cannot connect to the database. Exiting...
20081:20220617:223102.024 One child process died (PID:20386,exitcode/signal:1).
Exiting ......
[root@zabbix-server ~]#vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
max_connections=1000
[root@zabbix-server ~]#systemctl restart mysql
9 Zabbix 高可用
9.1 Zabbix 高可用性实现
在前面的部署架构中,Zabbix Server 和MySQL都有只有一台主机,存在单点问题
可以使用Keepalived 实现 Zabbix Server的高可用
基础架构为LAMP或LNMP环境,采用keepalived实现zabbix服务器高可用,保证主服务器或者Httpd宕掉后能切换到从服务器
MySQL数据库做主主同步,保证两边服务器数据的一致性,实现数据库的高可用。
注意: 从 Zabbix 6.0 官方提供了高可用解决方案官方链接
https://www.zabbix.com/documentation/6.0/zh/manual/concepts/server/ha#implementa
tion-details

9.2 实战案例:实现 Zabbix Server 的高可用

#在两个Zabbix Server 使用下面相同的配置
[root@ka1 ~]#grep -i SourceIP= /etc/zabbix/zabbix_server.conf
SourceIP=10.0.0.10
[root@ka1 ~]#grep -i '^server=' /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1,10.0.0.10
[root@ka1 ~]#systemctl enable zabbix-server.service
[root@ka2 ~]#systemctl disable zabbix-server.service
#keepalived相关配置
#ka1节点配置
[root@ka1 ~]#cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@wangxiaochun.com
}
notification_email_from 29308620@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ka1.wang.org
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
vrrp_mcast_group4 230.6.6.6
}
#指定检测脚本
vrrp_script check_zabbix_server{
script "/usr/bin/killall -0 zabbix_server"
interval 1
weight -30
fall 2
rise 2
timeout 2
}
include /etc/keepalived/conf.d/*.conf
[root@ka1 ~]#cat /etc/keepalived/conf.d/vip_zabbix.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 66
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.10/24 dev eth0 label eth0:1
}
#notify_master "systemctl start zabbix-server"
#notify_backup "systemctl stop zabbix-server"
track_script {
check_zabbix_server
}
}
#ka2节点框配置
[root@ka2 ~]#cat /etc/keepalived/conf.d/vip_zabbix.conf
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 66
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.10/24 dev eth0 label eth0:1
}
notify_master "systemctl start zabbix-server"
notify_backup "systemctl stop zabbix-server"
track_script {
# check_zabbix_server #在ka2节点不能启用脚本,否则会导致ka2节点也降低优先级,从而切
换失败
}
}
10 常见面试题
添加1台需要监控的主机流程是什么?
-
添加100台需要监控的主机如何实现?
-
简述zabbix的部署架构和工作原理(或者其他监控报警系统)
-
有100个内存大小不一致的机器,想获取内存监控项,然后超过某个指标将报警,如何操作 Zabbix 如何添加自定义监控项,有哪些告警方式,如何实现
-
Zabbix监控哪些指标?
-
Zabbix有过哪些报警,你怎么处理的?
-
Zabbix都监控那些服务,监控项都有那些?
-
Zabbix主动和被动模式什么区别?
-
Zabbix监控脚本怎么写?
-
Zabbix出现 0ut Of Memory,将原本2G内存加到8G还是Out 0f Memory