Zabbix 介绍和架构 为什么需要监控 运维行业有句话:“无监控、不运维”,监控俗称“第三只眼”。没了监控,基础运维,业务运维都是“瞎子”。所以说监控是运维这个职业的根本。
尤其当前 DevOps 大行其道,用监控数据给自己撑腰,这显得更加必要,有人说运维是背锅侠,那么有了监控,就有了充足的数据,一切以数据说话
所以作为一个运维工程师,如何构建一套监控系统是你的第一件工作。
监控功能
在需要的时刻,提前预警即将出问题,避免故障发生
实时监控系统和业务,当出问题之后,通过发出告警,提醒相关人员,快速可以找到问题的根源,从而及时处理问题
可以实现网站,应用或者服务器的故障自愈,保证高可用性
以图形或易观察的方式呈现当前以及过往的状态,便于分析和预测系统发展趋势
需要监控什么 监控一切需要监控的资源,包括:服务器,网络设备,业务应用,云服务等
分类
实例内容
硬件监控
通过远程控制卡: 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
监控工具 开源工具: cacti、nagios、zabbix、Prometheus、open-falcon 等,还有一些商业的监控方案
Cacti
Cacti是基于LAMP平台展现的网络流量监测及分析工具
通过SNMP技术或自定义脚本从目标设备/主机获取监控指标信息
其次还可以进行数据存储,调用模板将数据存到数据库,使用rrdtool存储和更新数据,通过rrdtoo1绘制结果图形
最后进行数据展现,通过web方式将监控结果呈现出来,常用于在数据中心监控网络设备,比如交换机和路由器
cacti是很老的一款监控工具,其实说它是一款流量监控工具更合适,对流量监控比较精准,但缺点很多,出图不好看,不支持分布式,也没有告警功能,所以当前使用的用户越来越少。
缺点:告警不及时
官网: https://www.cacti.net
github: https://github.com/Cacti/cacti
二次开发版: https://cactifans.org/
Nagios
Nagios是一款开源的免费监控工具,可以有效地监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
nagios主要的特征是监控告警,最强大的就是告警功能,可支持多种告警方式,但缺点是没有强大的数据收集机制,并且数据出图也很简陋,当监控的主机越来越多时,添加主机也非常麻烦,配置文件都是基于文本配置的,不支持web方式管理和配置,这样很容易出错,不易维护。
分层告警机制及自定义监控相对薄弱。
监控主机数量有限,承载能力较低
官网: https://www.nagios.org/
猎鹰 Open-falcon
open-falcon(猎鹰)是一款用golang和python写的监控系统,由小米公司启动了这个项目
相对zabbix在性能、扩展性、和用户的使用效率方面,都有较大优势
发布时间较短不支持很多基础的服务监控插件,如lTomcat、 apache等
功能不完善,更新较缓慢
无专门运维支撑,社区运营有欠缺。
官网: http://www.open-falcon.org/
github: https://github.com/open-falcon
夜莺 Nightingale
夜莺(Nightingale)是滴滴基础平台联合滴滴云研发和开源的企业级监控解决方案。旨在满足云原生时代企业级的监控需求。
Nightingale 在Open-Falcon 的基础上,结合滴滴的最佳实践,在性能、可维护性、易用性方面做了大量的改进
Nightingale 在产品完成度、系统高可用、以及用户体验方面,达到了企业级的要求,可满足不同规模用户的场景,小到几台机器,大到数十万都可以完美支撑。兼顾云原生和裸金属,支持应用监控和系统监控,插件机制灵活,插件丰富完善,具有高度的灵活性和可扩展性。
Nightingale 作为集团统一的监控解决方案,支撑了滴滴内部数十亿监控指标,覆盖了从系统、容器、到应用等各层面的监控需求,周活跃用户数千。五年磨一剑,取之开源,回馈开源。
夜莺监控的核心开发团队,也是Open-Falcon项目原核心研发人员。
当前社区比较活跃,升级较频繁
官网:
1 2 https://n9e.github.io/ http://n9e.didiyun.com/
Zabbix
zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。功能强大,成熟可靠,使用者众多
官网: https://www.zabbix.com/
Prometheus
Prometheus 是一个开源的服务监控系统和时间序列数据库,主要在监控容器领域使用,可以实现容器的动态发现和监控
官网: https://prometheus.io/
商业监控方案 商业监控的方案,可以实现从外部网络,如全国的不同运营商的网络访问指定服务,贴近实际用户的访问感受,了解实现的访问情况.
1 2 3 4 http://ping.chinaz.com/ 站长之家 https://www.jiankongbao.com/ 监控宝 https://www.toushibao.com/ 透视宝 https://www.tingyun.com/ 听云
1 2 #监控宝 https://www.jiankongbao.com/pic1.html
云监控 云监控为云上用户提供开箱即用的企业级开放型一站式监控解决方案。云监控涵盖IT设施基础监控和外网网络质量拨测监控,是基于事件、自定义指标和日志的业务监控,为您全方位提供更高效、全面、省钱的监控服务。使用云监控,不但可以帮助您提升系统服务可用时长,还可以降低企业IT运维监控成本。
云监控通过提供跨云服务和跨地域的应用分组管理模型和报警模板,帮助您快速构建支持几十种云服务、管理数万实例的高效监控报警管理体系。
云监控用于监控各云服务资源的监控指标,探测云服务ECS和运营商站点的可用性,并针对指定监控指标设置报警。使您全面了解阿里云上资源的使用情况和业务运行状况,并及时对故障资源进行处理,保证业务正常运行。
1 2 https://help.aliyun.com/document_detail/35170.html https://cloud.tencent.com/document/product/248/13466
Zabbix 概述和架构 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公司还为全球用户提供专业的技术支持服务。
Zabbix 功能
Zabbix 是一个高度成熟完善的网络监控解决方案,包含了多种功能。
官方链接:
1 2 https://www.zabbix.com/documentation/5.0/zh/manual/introduction/features https://www.zabbix.com/documentation/7.0/zh/manual/introduction/features
数据收集
可用性和性能检查
支持 SNMP(trapping 和 polling)、IPMI、JMX、VMware监控
自定义检查
以自定义间隔收集所需数据
由 server/proxy 和 agents 执行
灵活的阈值定义
可以定义非常灵活的问题阈值,称为触发器,从后端数据库引用值
高度可配置的告警
可以针对升级计划、收件人、媒体类型自定义发送通知
使用宏可以使通知变得有意义和友好
自动化操作包括执行远程命令
实时图形
网络监控功能
Zabbix 可以跟踪网站上的模拟鼠标点击的路径并检查功能和响应时间
丰富的可视化选项
创建自定义图形的能力,可以将多个监控项组合成一个聚合图形
网络拓扑图
在仪表盘中显示幻灯片
报表
被监控资源的高级(业务)视图
历史数据存储
存储在数据库中的数据
可配置的历史数据(保留趋势)
内置管家程序
轻松配置
将受监控的设备添加为主机
一旦主机添加到被数据库,就会开始进行数据采集
将模板应用于受监控的设备
模板的使用
网络发现
网络设备自动发现
agent 自动注册
发现文件系统、网络接口和 SNMP OID
便捷的 web 界面
基于web的PHP前端
可从任何地方访问
可以通过你的方式点击(到任何页面)
审计日志
Zabbix API
Zabbix API 为 Zabbix 提供可编程接口,用于批量操作、第三方软件集成和其他用途。
权限系统
功能齐全且易于扩展的 agent
部署在被监控目标上
Linux 和 Windows 操作系统都适用于
二进制守护进程
用 C 编写,用于提高性能和减少内存占用
轻量级、便携
为复杂环境做好准备
Zabbix 架构 Zabbix 由如下主要的功能组件组成
SERVER
Zabbix server 是 Zabbix 软件的核心组件
Zabbix Agent 向其报告可用性、系统完整性信息和统计信息。
Zabbix server也是存储所有配置信息、统计信息和操作信息的核心存储库。
Zabbix server也是Zabbix监控系统的告警中心。在监控的系统中出现任何异常,将发出通知给管理员。
基本的 Zabbix Server 的功能分解成为三个不同的组件。他们是:Zabbix server、Web前端和数据库。
Zabbix 的所有配置信息都存储在 Server和Web前端进行交互的数据库中。例如,当你通过Web前端(或者API)新增一个监控项时,它会被添加到数据库的监控项表里。然后,Zabbix server 以每分钟一次的频率查询监控项表中的有效项,接着将它存储在 Zabbix server 中的缓存里。这就是为什么 Zabbix前端所做的任何更改需要花费两分钟左右才能显示在最新的数据段的原因。
数据库
所有配置信息以及 Zabbix 采集到的数据都被持久存储在数据库中
可以支持MySQL,PostgreSQL,Oracle 等多种数据库
WEB 界面
WEB 界面是 Zabbix server 的一部分,用于实现展示和配置的界面
通常(但不一定)和 Zabbix server 运行在同一台物理机器上
基于 Apache(Nginx)+PHP 实现,早期只支持LAMP架构,从Zabbix5.0开始支持LNMP
AGENT
Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给Zabbix server。从Zabbix5.0开始支技Zabbix Agent2 PROXY Zabbix
Proxy
可以代替 Zabbix Server 采集性能和可用性数据
Zabbix Proxy 在 Zabbix 的部署是可选部分
Zabbix Proxy 的部署可以很好的分担单个Zabbix server的负载
Java 网关
Zabbix 要监控 tomcat 服务器和其它JAVA程序,需要使用 Java gateway 做为代理,才能从JAVA程序中获取数据
内部配置的数据流程
Zabbix 内部的数据流对Zabbix的使用也很重要。首先,为了创建一个采集数据的监控项,就必须先创建主机。其次,在任务的另外一端,必须要有监控项才能创建触发器(trigger),必须要有触发器来创建动作(action)。因此,如果您想要收到类似“X个server上CPU负载过高”这样的告警,您必须首先为 Server X 创建一个主机条目,其次创建一个用于监控其 CPU的监控项,最后创建一个触发器,用来触发 CPU负载过高这个动作,并将其发送到您的邮箱里。虽然这些步骤看起来很繁琐,但是使用模板的话,实际操作非常简单。也正是由于这种设计,使得 Zabbix 的配置变得更加灵活易用。
Zabbix Server 启动进程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 zabbix server 进程说明 Zabbix服务器端进程有多达二十多种 当在操作系统下用ps aux命令来查看时,往往看到很多zabbix系统进程,而这些系统进程在zabbix内部称 为实例。这些实例各处负责不同的工作,就形成了不同种类型的进程),各种类型进程的说明如下: 报警器(alerter)——该类型的进程是用来发送报警通知的 配置同步器(configuration syncer)——用于将配置文件中的配置信息同步到内存中缓存 数据发送器(data sender)——服务器代理节点用于发送数据的进程(服务器端没有这类进程) 数据库看门狗(db watchdog)——该进程用于监视zabbix系统的数据库状态,当数据库状态变为不可用时,发送警告信息(服务器代理端不支持这类型进程)。 自动发现器(discoverer)——用于自动发现设备的进程 步骤(escalator)——用于处理动作中的步骤的进程 心跳发送器(heartbeat sender)——服务器代理端用于发送心跳信息(服务器端没有这类型的进程) 历史数据同步器(history syncer)——用于写历史数据表 管家(housekeeper)——用于清理过期的历史数据的进程 HTTP 轮询器(http poller)——用于轮询web类的监控项目 Ping检查器(icmp pinger)——用于定期的进行ICMP PING检查 ipmi 轮询器(ipmi poller)——用于定期进行ipmi监控项目的检查 java 轮询器(java poller)——用于轮询java 监控项目 分布式节点看守器(node watcher)——用于在不同的分布式节点发送历史数据和配置信息更新的进程 轮询器(poller)——用于普通的被动监控项目的轮询 服务器代理轮询(proxy poller)——用于服务器代理的被动轮询 自我监控(self-monitoring)——用于收集Zabbix系统内部的监控信息 定时器(timer)——用于处理触发器中也时间相关的函数和维护模式的进程 陷入器(trapper)——用于处理主动采集、陷入以及分布式节点间或服务器代理的通信 不可到达轮询器(unreachable poller)——用于轮询不可到达到的设备 vmware 收集器(vmware collector)——负责从vmware服务进程中收集数据(服务器代理端不支持这种类型的进程); 可用的mode参数包括: avg——指定类型所有进程的平均值 count——返回创建的指定类型进程的数量 max——最大值 min——最小值 ——进程号,含义参见“描述”中所述的; 可用的state参数包括: 繁忙(busy)——表示处于繁忙状态的进程; 空闲(idle)——表示处于空闲状态的进程;
Zabbix 术语
被监控:即 Zabbix 监控的主机或设备
监控项item:即 Zabbix 监控的相关指标,比如:CPU利用率,内存使用率,TCP连接数等
应用集Application:为方便管理众多的监控项,可将多个同类型的监控项进行归类,纳入一个集合中,即应用集
触发器Trigger:是一个表达式,或者说一个条件,如磁盘利用率超过80%等,当触发条件后,会导致一个触发事件,这个事件会执行一个或多个动作
动作Action:动作是触发器的条件被触发后的行为,可以是发送一条短信,微信或邮件,或是重启某个服务
告警:当触发器和动作二者结合起来时,就构成了的告警机制,比如cpu的使用率达到80%以上,触发了报警动作,系统将自动发送一封邮件到指定的邮箱。然后运维可以及时的去处理此错误。
Web 监测:对WEB服务进行检测,比如:访问指定网站是否可正常访问
模板 Template: 可以方便地应用于多个主机的一组实体的集合。而这些实体包括:
items(监控项)
applications(应用集)
triggers(触发器)
graphs(图形)
screens (聚合图形,自Zabbix 2.0起)
low-level discovery rules (自动发现规则,自Zabbix 2.0起)
web scenarios (web场景,自Zabbix 2.0起)。
由于现实中的许多主机是相同或类似的,所以,为一个主机创建的一组实体(项目,触发器,图形,…)可能对许多人有用。虽然可以将它们复制到每个新的主机上,但过程很繁琐。可以将需要的实体都复制到一个模板,然后根据需要将模板应用于尽可能多的主机。
当模板链接到主机时,模板的所有实体(项目,触发器,图形,…)都将添加到主机。
模板通常用于为特定服务或应用程序(如Apache,MySQL,PostgreSQL,Postfix …)分组实体,然后应用于运行这些服务的主机。
使用模板的另一个好处是当所有主机都需要更改时。只需要在模板上更改某些内容将会将更改应用到所有链接的主机。
创建新模板时,链接的模板选项卡允许将一个或多个“嵌套”模板链接到此模板。所有实体(项目,触发器,图表等)将从链接的模板继承。
因此,使用模板是减少工作量并简化Zabbix配置的好方法。
模板分为内置模板和自定义模板
内置模板参看: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates
Zabbix 各种组件的关系
Zabbix 部署 Zabbix 部署环境准备 Zabbix 版本选择 Zabbix 历史版本
1 https://en.wikipedia.org/wiki/Zabbix
Zabbix 产品周期
1 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迭代更新
令人期待的高质量更新以及全新的功能点
快速更新,可适用于多变的复杂环境
在版本升级方面,更容易规划管理
Zabbix 部署架构
Zabbix 安装要求 安装官方要求
1 2 3 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
安装 Zabbix Server Zabbix Server 安装方法介绍 Zabbix Server 提供了三种安装方法
二进制包安装: 官方提供了二进制包安装的方法,可以支持CentOS和Debian/Ubuntu的安装
源码编译安装: 部署繁琐,生产环境定制安装可以使用
基于容器安装: 测试环境使用,参考链接如下
1 2 3 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
二进制包安装 Zabbix Server 官方提供对多种OS版本的Zabbix 安装
可以从 ZABBIX 官方的软件仓库或镜像网站安装Zabbix SIA 提供了官方的 RPM 和 DEB 发行包
注意:Ubuntu22.04 不支持 Zabbix Server 5.0,只支持 Zabbix Server 6.0以上版本
二进制包安装Zabbix官方参考文档:
1 2 3 4 5 6 7 8 9 10 #Zabbix6.0 https://www.zabbix.com/documentation/6.0/zh/manual/installation/install_from_packages/ #Zabbix5.0 https://www.zabbix.com/documentation/5.0/zh/manual/installation/install_from_packages https://www.zabbix.com/documentation/5.0/zh/manual/installation/install_from_packages/rhel_centos https://www.zabbix.com/documentation/5.0/zh/manual/installation/install_from_packages/debian_ubuntu #Zabbix4.0 https://www.zabbix.com/documentation/4.0/zh/manual/installation/install_from_packages https://www.zabbix.com/documentation/4.0/zh/manual/installation/install_from_packages/rhel_centos https://www.zabbix.com/documentation/4.0/manual/installation/install_from_packages/debian_ubuntu
官方和镜像仓库
1 2 3 4 5 #官方包仓库: https://repo.zabbix.com/ #镜像源 https://mirrors.aliyun.com/zabbix/ https://mirrors.tuna.tsinghua.edu.cn/zabbix/
Zabbix 相关二进制包介绍
1 2 3 4 5 6 zabbix-server-mysql zabbix-frontend-php abbix-apache-conf zabbix-agent zabbix-agent2 zabbix-get
安装 Zabbix Server 包 访问链接: https://www.zabbix.com/download 找到仓库的源
1 2 3 4 5 6 7 8 #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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] /. /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 ~] 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 ~] [root@zabbix-server ~] 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 ~] [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] bind-address = 0.0.0.0 [root@zabbix-server ~] [root@zabbix-server ~] 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 ~] [root@zabbix-server ~] DBPassword=123456 [root@zabbix-server ~] php_value date.timezone Asia/Shanghai [root@zabbix-server ~] [root@zabbix-server ~] active active active [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] http://server_ip_or_name/zabbix
范例:在 CentOS 8上实现安装Zabbix Server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] [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 [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] zabbix_server (Zabbix) 5.0.14 Revision 892ce506db 16 July 2021, compilation time: Jul 16 2021 14: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
准备数据库和数据表 准备数据库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] 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> create user zabbix@'10.0.0.%' identified by '123456' ; mysql> grant all privileges on zabbix.* to zabbix@'10.0.0.%' ; mysql>ALTER USER zabbix@'10.0.0.%' IDENTIFIED WITH mysql_native_password BY '123456' ; [root@zabbix-server ~] [root@zabbix-server ~]
导入数据表 1 2 3 4 5 6 7 8 9 10 11 12 [root@zabbix-server ~] [root@zabbix-server ~] +----------------------------+ | Tables_in_zabbix | +----------------------------+ | acknowledges | | actions | | alerts | | application_discovery | | application_prototype | | application_template | | applications |
修改 zabbix 的配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@zabbix-server ~] [root@zabbix-server ~] 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
修改 php 相关配置文件 修改正确的时区信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [root@zabbix-server ~] [root@zabbix-server ~] [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
启动 Zabbix 相关服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@zabbix-server ~] [root@zabbix-server ~] State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:10050 0.0.0.0:* LISTEN 0 128 0.0.0.0:10051 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 100 127.0.0.1:25 0.0.0.0:* LISTEN 0 128 [::]:10050 [::]:* LISTEN 0 128 [::]:10051 [::]:* LISTEN 0 70 *:33060 *:* LISTEN 0 128 *:3306 *:* LISTEN 0 128 *:80 *:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 100 [::1]:25 [::]:* [root@zabbix-server ~] abbix 767 1 0 15:32 ? 00:00:00 /usr/sbin/zabbix_server -c /apps/zabbix-server/etc/zabbix_server.conf zabbix 2791 1 0 17:14 ? 00:00:00 zabbix_server -c /apps/zabbix-server/etc/zabbix_server.conf
访问 Zabbix 的 Web 管理页面完成配置向导 访问下面链接
1 http://server_ip_or_name/zabbix
输入数据库信息
上面所填写的内容保存在下面文件中
1 2 3 4 #如果是CentOS下面文件 /etc/zabbix/web/zabbix.conf.php #如果是Ubuntu则下面文件 /usr/share/zabbix/conf/zabbix.conf.php 实质也是/etc/zabbix/web/zabbix.conf.php软链接
完成安装
Zabbix 前端已经就绪!第一次登录, 默认的用户名是 Admin
,密码是zabbix
中文及乱码 默认为英文,可修改为中文
1 2 3 4 5 [root@zabbix-server ~] [root@zabbix-server ~]
因为字体兼容性的原因,在显示中文时可能会有乱码出现
注意:乱码和语言环境无关,英语环境也支持中文显示,但会有乱码
将中文字体上传到 Zabbix Server 的目录 /usr/share/zabbix/assets/fonts 下
1 2 #开源字体网站 http://fonts.top/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@zabbix-server fonts] /usr/share/zabbix/assets/fonts [root@zabbix-server fonts] [root@zabbix-server fonts] [root@zabbix-server fonts] graphfont.ttf graphfont.ttf.bak [root@zabbix-server ~] define('ZBX_GRAPH_FONT_NAME' , 'graphfont' ); // font file name define('ZBX_FONT_NAME' , 'graphfont' );
再次刷新页面,乱码问题解决
案例: 在Ubuntu20.04 安装 Zabbix Server 6.0 官方链接
1 https://www.zabbix.com/cn/download?zabbix=6.0&os_distribution=ubuntu&os_version=20.04_focal&db=mysql&ws=nginx
 [root@ubuntu2004 ~] PHP 7.4.3 (fpm-fcgi) (built: May 6 2022 00: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 [root@ubuntu2004 ~] zabbix_agent2 (Zabbix) 6.0.5 ....... [root@ubuntu2004 ~] [root@ubuntu2004 ~] 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 ~] [root@ubuntu2004 ~] 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 [root@ubuntu2004 ~] DBPassword=123456 [root@ubuntu2004 ~] DBName=zabbix DBUser=zabbix DBPassword=123456 [root@ubuntu2004 ~] listen 80; server_name zabbix.wang.org; [root@ubuntu2004 ~] [root@ubuntu2004 ~] [root@ubuntu2004 ~] [root@ubuntu2004 ~] State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 127.0.0.1:6010 0.0.0.0:* LISTEN 0 128 127.0.0.1:6011 0.0.0.0:* LISTEN 0 4096 0.0.0.0:10051 0.0.0.0:* LISTEN 0 70 127.0.0.1:33060 0.0.0.0:* LISTEN 0 151 127.0.0.1:3306 0.0.0.0:* LISTEN 0 511 0.0.0.0:80 0.0.0.0:* LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 128 [::1]:6010 [::]:* LISTEN 0 128 [::1]:6011 [::]:* LISTEN 0 4096 *:10050 *:* LISTEN 0 4096 [::]:10051 [::]:* LISTEN 0 511 [::]:80 [::]:*
初始页面,可以修改语言
条件检测
输入MySQL数据库相关连接信息
指定主机名称和时区
汇总信息
最后完成
登录Web 管理页面,第一次登录, 默认的用户名是Admin
,密码是zabbix
上面所填写的内容保存在下面文件中
1 2 3 4 #如果是CentOS下面文件 /etc/zabbix/web/zabbix.conf.php #如果是Ubuntu则下面文件 /usr/share/zabbix/conf/zabbix.conf.php 实质也是/etc/zabbix/web/zabbix.conf.php软链接
因为字体的原因乱码
在Windows中找一个中文字体
将字体上传到 Zabbix Server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [root@ubuntu2004 ~] MSYHBD.TTC MSYHL.TTC MSYH.TTC [root@ubuntu2004 ~] /usr/share/zabbix/assets/fonts /usr/share/zabbix/fonts [root@ubuntu2004 ~] lrwxrwxrwx 1 root root 38 6月 9 21:13 /usr/share/zabbix/assets/fonts/graphfont.ttf -> /etc/alternatives/zabbix-frontend-font [root@ubuntu2004 ~] lrwxrwxrwx 1 root root 47 6月 9 21:13 /etc/alternatives/zabbix-frontend-font -> /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf [root@ubuntu2004 ~] -rw-r--r-- 1 root root 757076 7月 30 2016 /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf [root@ubuntu2004 ~] [root@ubuntu2004 ~] [root@ubuntu2004 ~] MSYHBD.TTC MSYHL.TTC MSYH.TTC root@ubuntu2004 ~]
再次查看Web 显示正常
编译安装 Zabbix Server 官方源码编译安装参考文档:
1 2 3 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
安装相关包 CentOS 安装相关包
1 2 3 [root@zabbix-server ~] 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 安装相关包
1 2 3 4 5 6 7 8 9 [root@ubuntu1804 ~] [root@ubuntu1804 ~] 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
创建用户和组 1 2 [root@zabbix-server ~] [root@zabbix-server ~]
下载源码包 下载链接:
1 https://www.zabbix.com/download_sources
1 2 3 4 5 6 [root@zabbix-server ~] [root@zabbix-server src] [root@zabbix-server src] [root@zabbix-server src] [root@zabbix-server src] -rw-r--r-- 1 root root 17M Aug 24 15:47 zabbix-4.0.24.tar.gz
编译安装 官方链接
1 2 3 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
范例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 [root@zabbix-server src] zabbix-4.0.24.tar.gz [root@zabbix-server src] [root@zabbix-server zabbix-4.0.24] --enable-server --enable-agent --enable-java --with-mysql --with-net-snmp \ --with-libcurl --with-libxml --prefix=/apps/zabbix --enab1e-server --enab1e-agent --enable-agent2 --enab1e-proxy --enable-java --with-mysql --with-net-snmp --with-libcurl --with-libxml ...... 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] [root@zabbix-server zabbix-4.0.24] [root@zabbix-server ~] bin etc lib sbin share [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] zabbix_agentd zabbix_get zabbix_sender zabbix_server [root@zabbix-server ~] [root@zabbix-server ~]
准备数据库和相关表 注意: 生产环境监控数据比较多,占用空间可能会达到T级别以上,数据库的磁盘需要预留足够的空间
安装MySQL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@zabbix-mysql-master ~] [root@zabbix-mysql-master ~] [root@zabbix-mysql-server ~] 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.%' ; mysql>ALTER USER zabbix@'10.0.0.%' IDENTIFIED WITH mysql_native_password BY '123456' ; [root@zabbix-mysql-master ~] [root@zabbix-mysql-master ~]
初始化数据库 1 2 3 4 5 6 7 8 [root@zabbix-server ~] /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 ~] [root@zabbix-server ~] [root@zabbix-server ~]
注意: 在CentOS8 安装Mariadb-10.3在导入schema.sql 出下面提示错误,而在CentOS7 安装Mariadb-5.5 无错误
1 2 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
验证数据库和相关表 1 2 3 4 5 6 7 8 9 10 [root@zabbix-server ~] +----------------------------+ | Tables_in_zabbix | +----------------------------+ | acknowledges | | actions | | alerts | | application_discovery | | application_prototype | | application_template |
修改 Zabbix Server 配置文件 1 2 3 4 5 6 7 8 9 10 [root@zabbix-server ~] [root@zabbix-server ~] LogFile=/tmp/zabbix_server.log DBHost=10.0.0.101 DBName=zabbix DBUser=zabbix DBPassword=123456 DBPort=3306
启动相关服务 1 2 3 4 5 6 7 8 9 10 11 12 13 [root@zabbix-server ~] [root@zabbix-server ~] State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 100 127.0.0.1:25 0.0.0.0:* LISTEN 0 128 0.0.0.0:10051 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 100 [::1]:25 [::]:* [root@zabbix-server ~] 31096:20200825:144614.763 server 31098:20200825:144614.764 server 31097:20200825:144614.771 server
启动httpd服务
查看进程
1 2 3 4 5 6 7 8 9 10 11 12 [root@zabbix-server ~] zabbix 765 1 0 19:33 ? 00:00:00 /apps/zabbix-server/sbin/zabbix_server -c /apps/zabbix-server/etc/zabbix_server.conf ...... [root@zabbix-server ~] `-zabbix_server(765)-+-zabbix_server(1173) |-zabbix_server(1174) |-zabbix_server(1175) |-zabbix_server(1176) |-zabbix_server(1177) |-zabbix_server(1178) ...... ......
配置php和初始化登录WEB页面 1 2 3 4 5 [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] actionconf.php assets correlation.php image.php overview.php srv_status.php
缺失相关包和配置,提示下面失败
安装配置后再访问
1 2 3 4 5 6 7 [root@zabbix-server ~] [root@zabbix-server ~] post_max_size = 16M max_execution_time = 300 max_input_time = 300 date.timezone = Asia/Shanghai [root@zabbix-server ~]
连接数据库信息
创建配置文件
下载配置文件并上传至目录/var/www/html/zabbix/conf/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@zabbix-server ~] <?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文件,防止重复安装
1 2 3 4 [root@zabbix-server zabbix] /var/www/html/zabbix [root@zabbix-server zabbix]
启动zabbix agent 1 2 3 4 5 6 7 8 9 10 11 12 [root@zabbix-server ~] [root@zabbix-server ~] LISTEN 0 128 0.0.0.0:10050 0.0.0.0:* [root@zabbix-server ~] 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)
验证监控数据
创建 service 文件 Zabbix Server 的 service 文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [root@zabbix-server ~] [root@zabbix-server ~] [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 ~] [root@zabbix-server ~]
Zabbix agent 的 service 文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@zabbix-server ~] [root@zabbix-server ~] [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 ~] [root@zabbix-server ~]
实现中文界面 默认是英文界面,不支持中文
安装相关中文包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] 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 .......
再次刷新页面可以选择中文
解决乱码问题 当前系统有些监控项部分显示有乱码,是由于web界面显示为中文但是系统没有相关字体,因此需要准备相关字体文件才能正常显示,
1 2 3 4 5 6 7 8 9 10 11 12 [root@zabbix-server ~] total 66276 -rw-r--r-- 1 wang wang 756072 Aug 24 15:46 DejaVuSans.ttf -rw-r--r-- 1 root root 11787328 Mar 2 2019 simkai.ttf -rw-r--r-- 1 root root 6700204 May 17 13:28 simyou.ttf [root@zabbix-server ~] define('ZBX_GRAPH_FONT_NAME' , 'simyou' ); // font file name define('ZBX_FONT_NAME' , 'simyou' );
再次刷新页面,乱码消失
容器安装 Zabbix Server 官方文档:
1 2 https://www.zabbix.com/documentation/5.0/zh/manual/installation/containers 注意:官方文档有bug
范例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 [root@ubuntu1804 ~] [root@ubuntu1804 ~] --restart=unless-stopped \ -e MYSQL_DATABASE="zabbix" \ -e MYSQL_USER="zabbix" \ -e MYSQL_PASSWORD="zabbix_pwd" \ -e MYSQL_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 [root@ubuntu1804 ~] --network=zabbix-net \ --restart=unless-stopped \ -d zabbix/zabbix-java-gateway:alpine-5.0-latest [root@ubuntu1804 ~] -e DB_SERVER_HOST="mysql-server" \ -e MYSQL_DATABASE="zabbix" \ -e MYSQL_USER="zabbix" \ -e MYSQL_PASSWORD="zabbix_pwd" \ -e MYSQL_ROOT_PASSWORD="root_pwd" \ -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \ --network=zabbix-net \ -p 10051:10051 \ --restart=unless-stopped \ -d zabbix/zabbix-server-mysql:alpine-5.0-latest [root@ubuntu1804 ~] -e ZBX_SERVER_HOST="zabbix-server-mysql" \ -e DB_SERVER_HOST="mysql-server" \ -e MYSQL_DATABASE="zabbix" \ -e MYSQL_USER="zabbix" \ -e MYSQL_PASSWORD="zabbix_pwd" \ -e MYSQL_ROOT_PASSWORD="root_pwd" \ --network=zabbix-net \ -p 80:8080 \ --restart=unless-stopped \ -d zabbix/zabbix-web-nginx-mysql:alpine-5.0-latest [root@ubuntu1804 ~] 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 ~] zabbix/zabbix-web-nginx-mysql alpine-5.0-latest a3fb50be95b6 zabbix/zabbix-java-gateway alpine-5.0-latest 0814670cd5ac mysql 8.0 c60d96bd2b77 zabbix/zabbix-server-mysql alpine-5.0-latest 6c3836e6aa39 docker run --name zabbix-agent \ -e ZBX_HOSTNAME="Zabbix server" \ -e ZBX_SERVER_HOST="127.0.0.1" \ --network container:zabbix-server-mysql \ --restart=unless-stopped \ -d zabbix/zabbix-agent:${TAG} http://zabbix-server-ip/
安装 Zabbix Agent Zabbix Agent 需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,
zabbix server将数据存储到数据库中,zabbix web 访问数据库在前端进行展现和绘图。
安装Zabbix Agent 有三种方式
包安装 Zabbix Agent Linux 安装 Zabbix Agent 可以从官方或国内镜像站点下载
1 2 3 https://repo.zabbix.com/zabbix/ https://mirrors.aliyun.com/zabbix/zabbix/ https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/
范例:在ubuntu22.04 安装 Zabbix Agent2 6.0
1 2 3 4 5 6 7 8 9 10 11 [root@ubuntu2204 ~] [root@ubuntu2204 ~] [root@ubuntu2204 ~] [root@ubuntu2204 ~] [root@ubuntu2204 ~] Server=zabbix.wang.org [root@ubuntu2204 ~] [root@ubuntu2204 ~]
范例: 在ubuntu20.04 安装 Zabbix Agent2 6.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@ubuntu2004 ~] [root@ubuntu2004 ~] [root@ubuntu2004 ~] [root@ubuntu2004 ~] [root@ubuntu2004 ~] Server=zabbix.wang.org [root@ubuntu2004 ~] [root@ubuntu2004 ~] LISTEN 0 128 *:10050 *:* users :(("zabbix_agent2",pid=1317 ,fd=8 ))
范例: 在Rocky8上安装直接安装Zabbix agent 2包
1 2 3 4 5 6 7 8 9 10 11 12 [root@rocky8 ~] [root@rocky8 ~] Server=zabbix.wang.org [root@rocky8 ~] [root@rocky8 ~] LISTEN 0 128 *:10050 *:* users :(("zabbix_agent2",pid=1317 ,fd=8 ))
范例: Rocky8 通过配置仓库进行安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 [root@rocky8 ~] [root@centos8 ~] [root@centos8 ~] [root@zabbix-server ~] [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 [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] /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 ~] [root@centos8 ~] PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server=10.0.0.100 ServerActive=127.0.0.1 Hostname=10.0.0.104 Timeout=30 Include=/etc/zabbix/zabbix_agentd.d/*.conf [root@centos8 ~] [root@centos8 ~] State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 100 127.0.0.1:25 0.0.0.0:* LISTEN 0 128 0.0.0.0:10050 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 100 [::1]:25 [::]:* LISTEN 0 128 [::]:10050 [::]:* [root@centos8 ~] zabbix_agentd (daemon) (Zabbix) 5.0.14 Revision 892ce506db 16 July 2021, compilation time: Jul 19 2021 10:33:38
Windows 上安装 Agent2 官方下载链接
1 https://www.zabbix.com/cn/download_agents?version=6.0+LTS&release=6.0.5&os=Windows&os_version=Any&hardware=amd64&encryption=OpenSSL&packaging=MSI&show_legacy=0
验证端口
1 2 3 C:\Users\lbtoo>netstat -an| find "10050" TCP 0.0.0.0:10050 0.0.0.0:0 LISTENING TCP [::]:10050 [::]:0 LISTENING
二进制安装 Zabbix Agent 官方提供了针对不同的OS编译好的程序,进行配置后即可直接使用
注意: 此方式在CentOS 8 上存在问题
官方下载链接:
1 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 [root@centos7 ~] [root@centos7 ~] [root@centos7 ~] [root@centos7 ~] [root@centos7 ~] /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 ~] [root@centos7 ~] [root@centos7 ~] [root@centos7 ~] -e "s/Hostname=Zabbix server/Hostname=$HOST /" /apps/zabbix_agent/etc/zabbix_agentd.conf [root@centos7 ~] zabbix_agentd [1370]: user zabbix does not exist zabbix_agentd [1370]: cannot run as root! [root@centos7 ~] [wang@centos7 ~]$ /apps/zabbix_agent/sbin/zabbix_agentd -c /apps/zabbix_agent/conf/zabbix_agentd.conf [root@centos7 ~] State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10050 *:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 100 [::1]:25 [::]:* [root@centos7 ~] [root@centos7 ~] [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 ~] [root@zabbix-server ~]
编译安装 Zabbix Agent 编译安装 zabbix agent 和 zabbix server 是同一个源码包,只需指定不同的编译选项即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] [root@centos8 zabbix-4.0.24] [root@centos8 zabbix-4.0.24] [root@centos8 zabbix-4.0.24] /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 ~] [root@centos8 ~] -e "s/Hostname=Zabbix server/Hostname=$HOST /" /apps/zabbix_agent/etc/zabbix_agentd.conf [root@centos8 ~] [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 ~] [root@centos8 ~] [root@centos8 ~] State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 100 127.0.0.1:25 0.0.0.0:* LISTEN 0 128 0.0.0.0:10050 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 100 [::1]:25 [::]:*
一键编译安装 Zabbix Agent 脚本 范例1: CentOS和Ubuntu 通用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 [root@ubuntu1804 ~] 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 ; exit 1; } } prepare (){ if [ $ID = "centos" $ID = "rocky" ];then yum -y install gcc make pcre-devel || { color "zabbix agent 相关包安装失败,请检查" 1 ;exit ; } else apt -y install gcc make || { 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系统
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 [root@centos8 ~] . /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 ; exit 1; } } 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
利用 Ansible 批量部署 Zabbix Agent 范例: 部署Zabbix agent2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 [root@ubuntu2004 ~ ] --- - name: install zabbix_agent2 hosts: all serial: 2 vars: - ZX_SERVER: "zabbix.wang.org" - ZX_VER: "5.0" - ZX_URL: "https://mirror.tuna.tsinghua.edu.cn/zabbix" tasks: - name: rocky8 block: - name: rocky repo shell: "rpm -Uvh {{ ZX_URL }} /zabbix/{{ ZX_VER }} /rhel/8/x86_64/zabbix-release-{{ ZX_VER }} -1.el8.noarch.rpm" ignore_errors: yes - name: replace uri replace: path: /etc/yum.repos.d/zabbix.repo regexp: "http://repo.zabbix.com" replace: "{{ ZX_URL }} " - name: rocky install yum: name: zabbix-agent2 state: present when: ansible_distribution_file_variety == "RedHat" - name: ubuntu2004 block: - name: ubuntu apt shell: "wget {{ ZX_URL }} /zabbix/{{ ZX_VER }} /ubuntu/pool/main/z/zabbix-release/zabbix-release_{{ ZX_VER }} -1+focal_all.deb" - name: dpkg shell: "dpkg -i zabbix-release_{{ ZX_VER }} -1+focal_all.deb" - name: replace uri replace: path: /etc/apt/sources.list.d/zabbix.list regexp: "http://repo.zabbix.com" replace: "{{ ZX_URL }} " - name: apt apt: update_cache: yes name: zabbix-agent2 state: present when: ansible_distribution_file_variety == "Debian" - name: config hostname replace: path: /etc/zabbix/zabbix_agent2.conf regexp: "Hostname=Zabbix server" replace: "Hostname={{ ansible_eth0.ipv4.address }} " notify: - restart agent2 - name: config Server replace: path: /etc/zabbix/zabbix_agent2.conf regexp: "Server=127.0.0.1" replace: "Server={{ ZX_SERVER }} " notify: - restart agent2 - name: service service: name: zabbix-agent2.service state: started enabled: yes handlers: - name: restart agent2 service: name: zabbix-agent2.service state: restarted
范例: 部署Zabbix agent
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 [root@ubuntu1804 ~] [root@centos8 ~] [root@zabbix-server ~] [root@zabbix-server ~] [web] 10.0.0.[7:9] [root@zabbix-server ~] 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 ~] install_zabbix_agent.yml templates [root@zabbix-server ~] 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 ~] --- - 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 ~] [root@ubuntu1804 ~] zabbix_agentd (daemon) (Zabbix) 5.0.14 Revision 892ce506db 16 July 2021, compilation time: Jul 16 2021 14:45:07 [root@ubuntu1804 ~] active
利用 zabbix_get 工具测试 Zabbix Agent 是否正常 利用 zabbix_get 工具可以测试 Zabbix Agent 是否正常
Zabbix Agent 内置的监控项
1 https://www.zabbix.com/documentation/5.0/zh/manual/config/items/itemtypes/zabbix_agent
不同平台支持 Zabbix agent监控项:
1 https://www.zabbix.com/documentation/5.0/zh/manual/appendix/items/supported_by_platform
范例: Ubuntu20.04安装 Zabbix_get
1 2 3 4 5 6 7 [root@ubuntu2004 ~] [root@ubuntu2004 ~] [root@ubuntu2004 ~] [root@ubuntu2004 ~] [root@ubuntu2004 ~] zabbix_get (Zabbix) 6.0.5 Revision 8da3e1f8419 30 May 2022, compilation time: May 30 2022 06:40:36
范例: Rocky8 安装 zabbix_get
1 2 3 4 [root@rocky8 ~] [root@rocky8 ~] zabbix_get (Zabbix) 6.0.5 Revision 8da3e1f8419 30 May 2022, compilation time: May 30 2022 13:41:39
范例: 使用zabbix_get 工具查看验证agent是否正常
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@zabbix-server ~] 1 [root@zabbix-server ~] 1 [root@zabbix-server ~] zabbix_get [9147]: Get value error: cannot connect to [[10.0.0.102]:10050]: [113] No route to host [root@zabbix-server ~] zabbix_get [19982]: Get value error: cannot connect to [[10.0.0.7]:10050]: [111] Connection refused [root@zabbix-server ~] zabbix_get [9162]: Check access restrictions in Zabbix agent configuration
范例: 利用zabbix_get 获取指定的监控项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@zabbix-server ~] centos8.magedu.org [root@zabbix-server ~] Linux centos8.magedu.org 4.18.0-240.el8.x86_64 [root@zabbix-server ~] 2 [root@zabbix-server ~] 1 [root@zabbix-server ~] 3 [root@zabbix-server ~] 6
范例: 使用Zabbix WEB 测试是否agent 正常
Zabbix Agent2 安装和配置 Zabbix agent 2 是新一代的 Zabbix agent,在Zabbix 4.4的版本时已经推出. 未来可能会代替 Zabbix agent
官方说明
1 https://www.zabbix.com/documentation/5.0/manual/concepts/agent2
Zabbix Agent2 特点
减少 TCP 连接的数量
基于 go 开发,支持更大的并发性检查
插件易于扩展。插件应该能够:
提供琐碎的检查,包括只有几个简单的代码行
提供复杂的检查,包括长期运行的脚本和独立的数据收集,并定期发回数据
是 Zabbix agent 的替代版版本(因为它支持所有以前的功能)
agent2是多线程模式,agent是多进程模式
对比 Agent和Agent2 官方链接
1 https://www.zabbix.com/documentation/5.0/zh/manual/appendix/agent_comparison
Agent2 使用说明
1 https://www.zabbix.com/documentation/5.0/zh/manpages/zabbix_agent2
范例: Rocky8 安装Zabbix Agent2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 [root@rocky8 ~] [root@rocky8 ~] 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 ~] Server=zabbix.wang.org [root@rocky8 ~] [root@rocky8 ~] LISTEN 0 128 *:10050 *:* users :(("zabbix_agent2",pid=22792 ,fd=8 )) [root@zabbix-server ~] 1
过一会儿会变绿
范例: 安装和配置Zabbix agent2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 [root@ubuntu1804 ~] [root@ubuntu1804 ~] [root@centos8 ~] [root@ubuntu1804 ~] 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 ~] [root@zabbix-server ~] 1 [root@rocky8 ~] `-zabbix_agent2(1825)-+-{zabbix_agent2}(1826) |-{zabbix_agent2}(1827) |-{zabbix_agent2}(1828) |-{zabbix_agent2}(1829) |-{zabbix_agent2}(1830) |-{zabbix_agent2}(1831) `-{zabbix_agent2}(1833) [root@rocky8 ~] `-zabbix_agentd(1448)-+-zabbix_agentd(1449) |-zabbix_agentd(1450) |-zabbix_agentd(1451) |-zabbix_agentd(1452) `-zabbix_agentd(1453)
案例: 将Zabbix Server的MySQL 数据库迁移到独立的MySQL服务器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] [root@mysql-server ~] [root@mysql-server ~] [root@mysql-server ~] [root@mysql-server ~] [root@mysql-server ~] mysql>create user zabbix@'10.0.0.%' identified by '123456' ; mysql>grant all privileges on zabbix.* to zabbix@'10.0.0.%' ; [root@zabbix-server ~] $DB ['SERVER' ] = '10.0.0.101' ;[root@zabbix-server ~] DBHost=10.0.0.101 DBPort=3306 [root@zabbix-server ~]
Zabbix 核心功能 使用现有模板和监控项监控主机和应用 内置模板参考链接:
1 https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates
使用现有模板和监控项监控主机流程
在被监控的主机上安装Zabbix Agent ,建议和 Zabbix Server 同一个版本
配置 Zabbix agent的配置文件关键两项,并重启服务生效
1 2 Server = <Zabbix_Server_IP> Hostname=<本机IP>
在Zabbix Server 上使用 zabbix_get 工具测试是否正常连接被监控主机
在Zabbix Server 添加被监控主机
在Zabbix WEB 添加已有的模板至被监控的主机
在Zabbix WEB 观察是否有新数据生成
监控 Linux 主机 监控前先确保被监控主机已经安装好 Zabbix agent 并启动
LInux 主机模板参考链接:
1 2 监控前先确保被监控主机已经安装好 Zabbix agent 并启动 LInux 主机模板参考链接:
添加主机 Zabbix Server 5.0 以上版本
Zabbix Server 4.0 以上版本
关联内置模板 模板是一些事先定义好的相关监控项的集合,直接关联模板,比一个一个加入监控项要方便很多
模板分为内置模板和自定义模板
内置模板参看:
1 https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates
内置的监控项
1 https://www.zabbix.com/documentation/5.0/zh/manual/config/items/itemtypes/zabbix_agent
关联内置模板: Template OS linux
确认成功 等一会儿可以看到下面 ZBX 变绿色,表示成功
查看监控数据
修改自动发现的时间间隔 默认分区和网络的监控间隔较长,修改间隔到合适时长
通常生产中一个主机的监控项可能有100个左右,为了控制监控压力,在实现高可用的情况下,时间间隔也不宜太短,一般使用5分钟的时间间隔较常见
过一会可以看到磁盘的数据
可以观察到网卡的流量
监控 Windows 主机 注意: 要监控 Windows 需要提前关掉 Windows 防火墙和其它防火墙软件,如火绒等,否则可能会失败
安装 Zabbix Agent2 1 https://www.zabbix.com/cn/download_agents?version=6.0+LTS&release=6.0.5&os=Windows&os_version=Any&hardware=amd64&encryption=OpenSSL&packaging=Archive&show_legacy=0
下载链接
1 2 3 4 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
验证端口
1 2 3 C:\Users\lbtoo>netstat -an| find "10050" TCP 0.0.0.0:10050 0.0.0.0:0 LISTENING TCP [::]:10050 [::]:0 LISTENING
如果下载的 Archive 包,解压缩,修改zabbix_agent2.conf
1 2 3 4 5 6 7 8 9 10 11 12 ... Server=zabbix.wang.org ServerActive=zabbix.wang.org Hostname=windows10 c:\zabbix_agent2\bin\zabbix_agentd.exe -c c:\zabbix_agent2\conf\zabbix_agent2.conf --install netstat -an|find "10050"
在Zabbix Server 测试连接agent
1 2 [root@zabbix-server ~] 1
通过Web 配置 Zabbix Server 监控 Windows 主机
关联内置模板 windows by Zabbix agent
稍等一分钟, ZBX字体变绿
查看最新数据
查看图形显示
监控 Nginx 服务 nginx 模板参考:
1 https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/app/nginx_http
查看 nginx 内置模板和修改宏定义 使用内置模板: Template App Nginx by HTTP 或者 Nginx by Zabbix agent
修改模板中的宏定义值status页面的URL
修改模板的时间间隔 为方便观察结果,修改模板中监控项的更新的时间间隔为1m
安装和配置nginx服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@centos8 ~] [root@centos8 ~] http { server { location / { } location = /status { stub_status; } } } [root@centos8 ~]
添加监控的主机并关联模板 使用内置模板: Template App Nginx by HTTP
查看监控数据
监控 Php-fpm 服务 php-fpm 模板参考:
1 https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/app/php-fpm_agent
在前面nginx基础上实现php-fpm服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [root@centos8 ~] [root@centos8 ~] listen=127.0.0.1:9000 pm.status_path = /php_status ping.path = /ping [root@centos8 ~] [root@centos8 ~] ..... location / { } location = /status { stub_status; } location ~ ^/(ping|php_status)$ { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ; } ....... [root@centos8 ~]
修改内置模板 注意: 选择正确的模板
使用 Zabbix 内置模板 Template App PHP-FPM by Zabbix agent
修改内置模板的监控间隔
修改内置模板的宏定义,注意要和前面php-fpm的路径相匹配
关联内置模板到监控的主机 使用 Zabbix 内置模板 Template App PHP-FPM by Zabbix agent
查看监控结果
自定义模板 Templates 和监控项 Items 上面对Linux系统的监控是使用系统内置模板的监控项,虽然 Zabbix 内置的模板及其包括的监控项已经很丰富
但是内置的监控项可能不一定适合当前环境,或者有些不需要的监控项,或者需要的监控项并没有提供
因此实际生产中仍可能需要通过自定义监控项来满足当前环境的监控需求
自定义模板和监控项实现过程
在Zabbix 被监控主机上编写自定义监控项的取值的脚本,并加执行权限
在Zabbix 被监控主机上的配置文件中添加自定义监控项,指定 key 和 对 key 赋值的脚本及参数
在Zabbix Server 上使用 zabbix_get 工具测试是否能取到自定义监控项信息
在Zabbix Web 创建模板,在模板中添加自定义监控项
在Zabbix Web 将模板关联至被监控的主机
导出自定义模板可以在其它 Zabbix Server 复用
除了自定义模板,也可以从zabbix网站查找适合自已的模板
1 https://share.zabbix.com/
自定义监控项 系统内置的监控项如下
1 https://www.zabbix.com/documentation/5.0/zh/manual/config/items/itemtypes/zabbix_agent
内置的监控项无法满足要求,可以自定义监控项
自定义监控项配置 监控项键值的格式
1 https://www.zabbix.com/documentation/5.0/zh/manual/config/items/item/key
客户端可以自定义监控项,在Zabbix Agent 配置文件添加内容,格式如下
1 2 3 4 5 6 7 8 9 UserParameter=<key>,<shell command > Include=/etc/zabbix/zabbix_agentd.d/*.conf UserParameter=<key>,<shell command >
说明:
key 必须整个系统唯一。注意大小写是敏感的, Key名允许的字符如下
key使用 [*] 用于定义该key接受括号内的参数。参数需在配置监控项时给出;参数禁止使用下列字符:\ ’ ” ` * ? [ ] { } ~ $ ! & ; ( ) <>
Command:命令用于生成key对应的值。可以在命令中使用位置引用$1 … $9来引用监控项Key中的相应参数。Zabbix解析监控项Key的[]中包含的参数,并相应地替换$1,…,$9。$0会替换为完整的原始命令(在对$0,…,$9执行替换之前的命令)运行。不管位置参数($0,…,$9)是用双引号( “ )还是单引号( ’ )括起来,都会解析位置引用
测试监控项
在Zabbix Agent 上执行测试
1 2 3 zabbix_agent -t "在客户端定义的key名[arg1,arg2,...]" zabbix_agent2 -t "在客户端定义的key名[arg1,arg2,...]"
在Zabbix Server上可以使用zabbix_get工具获取自定义监控项
1 2 zabbix_get -s 客户端IP -p 10050 -k "在客户端定义的key名[arg1,arg2,...]"
注意:
如果用脚本实现首行必须加shebang机制
如果编译安装的程序,需要写程序的完整路径
宏Macros 另外Zabbix 支持用户自定义宏,即支持变量定义
自定义宏格式为: {$macrosz_name}
官方文档
1 https://www.zabbix.com/documentation/5.0/zh/manual/appendix/macros
自定义监控项配置案例 范例:取根文件系统的空间利用率
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@centos8 ~] [root@centos8 ~] UserParameter=root_filesystem_use,df |awk -F' +|%' '$7 == "/" {print $5 }' [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~]
范例:自定义监控项实现连接数
1 2 3 4 5 6 [root@centos8 ~] UserParameter=tcp_state_estab,ss -ant|grep -c ESTAB [root@centos8 ~] [root@zabbix-server ~] 5
范例:实现自定义监控项的参数
1 2 3 4 5 6 [root@centos8 ~] UserParameter=test [*],echo $1 [root@centos8 ~] [root@zabbix-server ~] This is a test item
范例:利用自定义监控项的参数功能监控MySQL的存活状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] mysql> create user test @'localhost' identified by '123456' ; [root@centos8 ~] mysqladmin: [Warning] Using a password on the command line interface can be insecure. mysqld is alive [root@centos8 ~] UserParameter=mysql.ping[*],mysqladmin -u$1 -p$2 ping 2>/dev/null| grep -c alive [root@centos8 ~] [root@zabbix-server ~] 1 [root@centos8 ~] [root@zabbix-server ~] 0
自定义模板 什么是模板 所谓模板,就是一些相关的监控项的集合,还可以在模板中包括图形,触发器等
为什么需要模板?
为每个主机单独添加相同的一组监控项比较麻烦,例如:100台主机增加一个tcp80的监控项
修改监控项比较麻烦,例如:100台服务器的监控项将80改成8080
删除每个主机的同一组监控项,例如:100台服务器的监控项删除
删除主机会连同主机的监控项一起被删除;不能复用监控项
所以可以使用模板的方式,来解决上述的一些问题
自定义模板使用流程
创建模板,模板必须属于某个主机组(一般属于主机组Templates)
在模板中创建监控项、图形、触发器
创建需要监控的主机,然后关联对应的模板
更改模板的监控项目,所以使用模板的都会自动更改
导出模板,后期可以至其他系统继续使用
监控项的值映射 Value mapping 1 2 https://www.zabbix.com/documentation/6.0/zh/manual/config/items/mapping?hl=%E5%80%BC%E6%98%A0%E5%B0%84 https://www.zabbix.com/documentation/5.0/zh/manual/config/items/mapping?hl=%E5%80%BC%E6%98%A0%E5%B0%84
什么是值映射 为了接收到的值能更“人性化”的显示,可以通过值映射方式,将数值与字符串之间进行关系绑定
示例:
http 响应码
‘200’ → ‘OK’
‘403’ → ‘Forbidden’
‘404’ → ‘Not Found’
创建值映射 Zabbix 6.0 配置
要定义一个值映射:
打开主机或者模板配置表单
前往 值映射 标签
点击 增加 来增加一个新映射
点击一个已存在的值映射名字来进行编辑
要定义值映射: 管理 — 一般 — 界面设置的从下拉列表中选择— 值映射
点击右上角的创建值映射
使用值映射 添加监控项时,在查看值处选中上面创建的值映射名称
查看结果
触发器 Triggers 触发器介绍 触发器是条件的定义,一个触发器是根据一个监控项的返回值,将之对比预先设置的阈值,当监控项返回了不符合预定义的值范围后,就进行触发下一步操作的警戒线,一般要对创建的监控项设置触发器以及触发方式和值的大小
可以在指定主机上创建触发器,只是针对指定主机有效
也可以在指定模板上创建触发器,则使用此模板的所有主机都有效,一个模板中可以有多触发器
触发器中使用的表达式是非常灵活的。你可以使用它们去创建关于监控统计的复杂逻辑测试。
触发器严重性 触发器严重性表示触发器的重要程度
Zabbix支持下列6种触发器的严重程度:
严重性
颜色
未分类
灰色
信息
浅蓝色
警告
黄色
一般严重
橙色
严重
浅红色
灾难
红色
严重性功能
通过不同的颜色区分不同的严重程度
报警音频,不同的音频代表不同的严重程度
用户媒介,不同的用户媒介(通知渠道)代表不同的严重程度。例如,短信 - 高严重性,email - 其他。
不同的严重性通过触发器执行对应的条件动作
触发器表达式格式 一个简单的表达式格式:
1 {<server|template>:<key>.<function>(<parameter>)}<operator><constant>
触发器官方文档
1 https://www.zabbix.com/documentation/5.0/zh/manual/config/triggers/expression
函数官方文档
1 2 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 - 其它
官方触发器示例
1 https://www.zabbix.com/documentation/5.0/zh/manual/config/triggers/expression
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 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[{ 如果剩余存储量下降到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,触发器将触发。
滞后 有时我们需要一个OK和问题状态之间的区间值,而不是一个简单的阈值。
例如,我们希望定义一个触发器,当机房温度超过20C时,触发器会出现异常,我们希望它保持在那种状态,直到温度下降到15C以下。
为了做到这一点,我们首先定义问题事件的触发器表达式。然后在事件成功迭代中选择‘恢复表达式’,并为OK事件输入恢复表达式。
注意,只有首先解决问题事件才会评估恢复表达式。如果问题条件仍然存在,则不能通过恢复表达式来解决问题。
示例 1
机房温度过高。
问题表达式:
恢复表达式:
1 {server:temp.last()}<=15
示例 2
磁盘剩余空间过低。
问题表达式: it is less than 10GB for last 5 minutes
1 {server:vfs.fs.size[/,free].max(5m)}<10G
恢复表达式: it is more than 40GB for last 10 minutes
1 {server:vfs.fs.size[/,free].min(10m)}>40G
开启 Zabbix Server的声音提示
自定义触发器 配置单条件触发器 自定义单条件触发器:设置内存低于 30% 进行告警,点击对应主机→ 创建触发器获取内存还剩余的百分比:
剩余 30% 可用,则需要告警通知;剩余 50% 可用,就算恢复;
编辑触发器表达式
1 2 3 4 5 6 7 8 {Webserverb:mem_use_percent.last()}<30 {Webserver:mem.use_percent.last()}>60 dd if =/dev/zero of=/dev/null bs=1000M count=1024
配置多条件触发器 自定义多条件触发器:设置空闲内存低于 30%并且swap使用大于1% 进行告警
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 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=1024dd if =/dev/zero of=/dev/null bs=1000M count=1024
触发器依赖关系 什么是触发器依赖 有时候一台主机的可用性依赖于另一台主机。如果一台路由器宕机,则路由器后端的服务器将变得不可用。
如果这两者都设置了触发器,你可能会收到关于两个主机宕机的通知,然而只有路由器是真正故障的。
这就是主机之间某些依赖关系可能有用的地方,设置依赖关系的通知会被抑制,而只发送根本问题的通知。
触发器依赖关系示例
例如,主机位于路由器2后面,路由器2在路由器1后面。
1 Zabbix - 路由器1 - 路由器2 - 主机
如果路由器1宕机,显然主机和路由器2也不可达,然而我们不想收到主机、路由器1和路由器2都宕机的3条通知。
因此,在这种情况下我们定义了两个依赖关系:
1 2 '主机宕机' 触发器依赖于 '路由器2宕机' 触发器'路由器2宕机' 触发器依赖于 '路由器1宕机' 触发器
触发器依赖案例 依赖场景环境说明 假设:充当R 路由节点,H 充当主机节点
模拟当H节点的80端口如果不存活,需要检查R节点的80端口是否存活
如果R路由节点的80端口存活,则触发H主机节点的80端口不存活警告
如果R路由节点的80端口不存活,则仅触发路由节点的警告,而不触发主机节点的警告
定义触发器表达式 R路由节点:定义监控项,配置触发器
H主机节点:定义监控项,配置触发器
模拟路由与主机故障 模拟R路由器、H主机节点同时障时,会同时收到两个告警,显然不符合预期效果
配置触发器依赖关系 在H服务器节点上对应的触发器上配置依赖关系,依赖R路由节点对应的触发器
再次模拟路由与节点故障
关闭 “路由器” 80端口,以及主机节点80端口;此时只有路由节点会警告
启用 “路由器” 80端口,关闭主机节点80端口,此时只有主机节点会警告
图形 Graphs 什么是图形 随着时间的推移,Zabbix采集到大量监控数据,对于用户而言,如果可以通过可视化图形方式查看历史数据,而不仅仅是看到当前数字,那会更容易了解发生了什么事情以及发展的趋势.
自定义图形 Zabbix 本身提供了一些图形,但用户也可以自定义图形
自定义图表,顾名思义,就是提供自定义定制的功能。
自定义图表需要人为配置,可以为某台主机、多台主机、某个模板创建自定义图表。
案例 在模板中创建图形
创建图形
选中所有监控项
模板关联至主机
查看图形
过滤图形只显示自定义的图形
聚合图形 Screens Zabbix中一个图形只是包括相关监控项的一张图
如果想在一个界面里显示包含多组监控项的多个图形可以使用聚合图形
默认Zabbix 中已有的聚合图形如下
用户也可以自定义聚合图形
创建聚合图形 方法1 如果想将多个主机或不同模板的相关图形放在同一个聚合图形中,则执行下面执行操作
监测–聚合图形–创建聚合图形,此方式比更灵活
方法2 如果想将同一个主机的多个监控项图形放在一个聚合图形,则执行下面操作
配置–模板–在指定的模板–聚合图形,此方式比较有局限性
创建聚合图形
指定名称和图形的个数
添加监控项相关的图形 选择构造函数
添加多个图形到此聚合图形中
查看聚合图形 监测–模板关联的主机–聚合图形
右上角选中创建的聚合图形
创建多个聚合图形 复重上面过程,创建多个聚合图形
利用多个聚合图形实现幻灯片功能(轮播图) 创建幻灯片 Slide shows 监测–聚合图形 –Zabbix 5.0 版在左上角的幻灯片演示
Zabbix 4.0 版在右上角
添加聚合图形 5.0 版本界面
4.0版本界面
验证幻灯片 Zabbix 5.0版本如下
选择上面创建的幻灯片名称
可以观察到每隔3s就会轮播各个聚合图形
Zabbix 4.0版本如下
用户 Users 和组 Groups 管理 用户管理 系统默认有Admin和guest两个用户,其中guest,密码为空,默认被禁用
创建新用户
管理 — 用户
创建新用户,指定群组
组管理 管理 — 用户组群
告警通知 生产环境中,通常当达到一定的指标,比如硬盘使用率为80%左右时,会触发触发器的条件,而触发器可以再触发动作,实现事件通知告警或执行指定命令等.要实现事件通知告警,就需要一个中间介质来发送告警消息给运维
Zabbix 有如下常见报警介质:
邮件告警 邮箱开启 SMTP 功能 在邮箱上开启SMTP功能,利用此邮箱实现发送报警邮件
QQ邮箱开启邮件通知功能
获取授权码
网易邮箱开启邮件通知功能
创建报警媒介类型实现发信人功能 报警媒介类型是一种给运维工程师发送消息通知的渠道,即当zabbix的触发器触发一个事件后,怎么才能把这个事件通过某些方式通知给运维工程师呢? 媒介类型就起到此作用,如果想要实现邮件告警功能,那么对应的媒介类型就是配置用来发送告警邮件的发件人邮箱。
管理–>报警媒介类型–>创建报警媒介类型
结合上一小节邮箱的配置输入以下内容
QQ 邮箱配置
添加消息模板用于发送信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 主题: 告警: {EVENT.NAME} 告警主机:{HOST.NAME1} 告警服务: {ITEM.NAME1} 告警Key1: {ITEM.KEY1}:{ITEM.VALUE1} 告警Key2: {ITEM.KEY2}:{ITEM.VALUE2} 严重级别: {TRIGGER.SEVERITY} 主题: 恢复: {EVENT.DURATION}: {EVENT.NAME} 恢复主机:{HOST.NAME1} 恢复服务: {ITEM.NAME1} 恢复Key1:{ITEM.KEY1}:{ITEM.VALUE1} 恢复Key2: {ITEM.KEY2}:{ITEM.VALUE2}
创建完成,可以看到下面信息
测试是否邮件正常,有时QQ邮箱不成功,可以尝试其它邮箱,如163邮箱
成功可以收下邮件和提示
zabbix4.0版本界面如下:
网易邮箱配置
Zabbix 4.0 界面
给指定用户添加报警媒介实现收件人功能 媒介类型创建好之后,还需要在每个zabbix账户里面添加相应的收件配置,比如邮件类型的媒介类型要给zabbix账户添加邮箱,如果是微信类型的媒介类型那么就要在zabbix账户设置微信号,短信类型的媒介类型那就得给zabbix账户设置手机号用于接收报警消息内容。
在zabbix用户中添加报警媒介时,需要指定告警信息的收件人的邮件地址
zabbix 4.0 界面如下
注意:下面图中一定要点击“更新”才能生效
创建和配置动作 动作可以实现当触发器被触发后可以执行哪些操作,一般可以是发送告警或执行命令
关于宏,即一些在Zabbix 中可以调用的变量
宏分为三种
系统内置的宏变量: {MACRO}
用户自定义的宏变量: {$MACRO}
低级别自动发现宏变量: {#MACRO}
创建动作 指定动作即条件为事件的严重度为信息时就触发动作
Zabbix 4.0 界面如下
配置操作 官方宏参考:
1 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
范例: 操作和恢复操作的定制消息主题和和内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 故障:{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}
故障邮件内容
恢复邮件内容
范例 : 配置操作
操作内容
1 2 默认标题:业务报警 {EVENT.NAME} 消息内容:业务报警服务器:{HOST.NAME},IP:{HOST.IP},详情:{ITEM.NAME}:{ITEM.VALUE}
步骤设为0时 ,表示会不停的持续发送警报,一般建议1到3表示执行三次。
步骤持续时间 表示如果有后续步骤执行时的间隔时长,默认为0表示使用默认时间1h后才会执行后续步骤,此值最低不能低于60s,最大不能超过604800s,可以设为1到5m(分钟)比较合适
zabbix 4.0 界面如下
配置故障恢复信息 恢复操作内容
1 2 默认标题:业务恢复 信息内容:业务恢复服务器:{HOST.NAME},IP:{HOSTNAME1},详情:{ITEM.NAME}:{ITEM.VALUE}
zabbix4.0 版本如下界面
模拟故障验证邮件通知 利用之前创建的触发器实现邮件通知
停止nginx服务,触发邮件报警
恢复nginx服务也会触发邮件报警
在报表中可以看到动作日志如下面信息
zabbix 4.0 界面如下
分级告警 当出现报警后,一般会根据组织的重要级别,按时间逐级分层向上报警,如下面常见分层报警
1 初级运维/指定运维组--高级运维工程师/业务运维-—->架构师--->总监/CTO
要实现分级告警,必须确保有多个用户,并分别指定不同的邮箱
配置Admin用户的邮箱
另一个用户wang使用不同的邮箱
Zabbix4.0版本界面如下
配置操作指定不同的步骤发邮件给不同的用户 在原来操作基础上添加新的操作
添加操作,发送消息给上级领导的邮箱
1 2 3 4 5 6 7 8 9 10 {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版本如下界面
模拟故障测试验证分级告警 停止 nginx 服务,查看结果
Admin收到三封告警邮件
wang用户邮件也是三封告警邮件
调整操作的持续时间如下,第一个操作为2m,第二个操作为3m
最终可以看到邮件发送的时间间隔如下
邮件告警方法2 也可以利用脚本方式进行邮件告警
安装邮件相关软件和配置邮件 范例: 利用 sendemail 工具实现邮件脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 [root@zabbix-server ~] 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 -o message-charset=utf-8 -o tls=yes -xu $email_send -xp $email_passwd [ $? -eq 0 ] && color "邮件发送成功!" 0 || color "邮件发送失败!" 1 } if [ $# -ne 3 ];then color "脚本参数不正确!" 1 msg_info "Usage: `basename $0 ` <mail_address> <subject> <message>" exit 1 fi install_sendemail send_email "$1 " "$2 " "$3 " [root@zabbix-server ~]
范例: 利用 mutt工具实现邮件发送
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [root@zabbix-server ~] [root@zabbix-server ~] zabbix:x:112:116::/var/lib/zabbix/:/usr/sbin/nologin [root@zabbix-server ~] [root@zabbix-server ~] account default host smtp.163.com from lbtooth@163.com auth plain user lbtooth@163.com password QXFIOQXEJNSVSDMW logfile ~/.msmtp.log [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] source /usr/lib/mutt/source-muttrc.d|set sendmail="/usr/bin/msmtp" set use_from=yes set realname="lbtooth" set from=lbtooth@163.comset envelope_from=yes [root@zabbix-server ~] SENDTO=$1 SUBJECT=$2 MAIL=$3 echo "$MAIL " | mutt -s "$SUBJECT " $SENDTO [root@zabbix-server ~]
创建邮件报警媒介类型 脚本参数如下:
1 2 3 {ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE}
将报警媒介关联用户
创建动作和操作
验证邮件告警 测试故障
测试故障恢复
微信告警 注册企业微信 微信告警首先得注册一个企业微信,然后才能实现微信告警。
浏览器访问下面链接,注册企业微信
1 https://work.weixin.qq.com/
用浏览器进入管理后台
或者安装企业微信的PC端登录
创建部门和人员 创建部门
加入人员 方法1: 直接微信邀请,让相关人员自行扫码加入
方法2 手动添加人员
将微信应用中添加相关的部门或人员
也可以只加特定用户
将个人微信关联企业微信插件 可以使用手机号或邮箱邀请对应的员工加入此企业微信组织,之后员工用自已的微信扫下面的二维码就
可用微信接收企业微信的消息
下面界面扫二维码可以将个人微信关联企业微信
如果前面还没同意加入企业,则个人微信扫码后,看到下面图示
输入相关信息,进行验证才能加入企业微信
输入相关信息,进行验证才能加入企业微信
下一步会发信邮件或短信进行验证
输入上面收到的验证码
验证成功后可以在个人微信中看到下面提示
创建微信应用并授权可信IP
上传Logo和指定应用名称,并选择范围
注意记下以下信息:
1 2 应用的 AgentId值1000003 应用的 Secret的值ga621_Y3iMMDW61gm-2iUmTia6RayBbH4gTH0CrJyD8
1 查看到企业ID的值为 ww644a0d95807e476b
在应用中添加 企业可信IP (最近添加的功能,必须配置IP白名单才能发微信,否则会出错)
测试发送微信消息 可以给加入的员工发送微信消息
员工个人微信可以收到以下信息
企业微信也可以收到信息
测试API 访问企业微信接口调试工具,输入corpid和和corpsecret 可以测试请求参数是否正确
访问下面地址
1 2 https://open.work.weixin.qq.com/wwopen/devtool/interface/combine https://work.weixin.qq.com/api/devtools/devtool.php
创建发送微信脚本 官方微信教程
1 https://work.weixin.qq.com/api/doc/90000/90003/90487
官方微信API参考文档
1 https://work.weixin.qq.com/api/doc/90000/90135/91039
发送微信可以使用各种语言,下面使用shell脚本实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 [root@zabbix-server ~] AlertScriptsPath=/usr/lib/zabbix/alertscripts [root@zabbix-server alertscripts] /usr/lib/zabbix/alertscripts [root@zabbix-server alertscripts] CorpID="ww644a0d95807e476b" Secret="cGp4gHUpHLL1KQZY5abM3panGp-uCrEZyrgDvOT0OZA" agentid=1000003 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}' ) PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Token " function body (){ local userid=$1 local subject=$2 local msg=$(echo "$@ " | cut -d" " -f3-) printf '{\n' printf '\t"touser": "' "$userid " \"",\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] [root@zabbix-server alertscripts]
在手机企业微信APP中可以收到下面提示
创建微信报警媒介类型
报警媒介类型为脚本,脚本参数为以下三项
1 2 3 {ALERT.SENDTO}--收件人媒介 {ALERT.SUBJECT}--通知主题,因为微信没有主题,此项无效,可以不填写 {ALERT.MESSAGE}--通知内容
官方宏参考:
1 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
注意: 此处可以只填写 {ALERT.SENDTO} 和 {ALERT.MESSAGE} 即可
修改 Message Templates
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 主题: 告警: {EVENT.NAME} 告警主机:{HOST.NAME1} 告警服务: {ITEM.NAME1} 告警Key1: {ITEM.KEY1}:{ITEM.VALUE1} 告警Key2: {ITEM.KEY2}:{ITEM.VALUE2} 严重级别: {TRIGGER.SEVERITY} 主题: 恢复: {EVENT.DURATION}: {EVENT.NAME} 恢复主机:{HOST.NAME1} 恢复服务: {ITEM.NAME1} 恢复Key1:{ITEM.KEY1}:{ITEM.VALUE1} 恢复Key2: {ITEM.KEY2}:{ITEM.VALUE2}
测试发微信消息
发送成功可以看到下面提示信息
可以在个人微信收到下面信息
zabbix4.0版本界面如下
给Zabbix用户添加报警媒介 对现在用户Admin编辑
添加微信报警媒介
注意: 此处的收件人是一个微信帐号,但实际上发送给应用的可见范围的所有用户
zabbix4.0版本界面如下
创建动作 编辑已有动作 如果已经创建动作,可以修改已有动作,如下所
创建动作 如果之前没有动作,新创建动作,以下为Zabbix4.0的操作界面
测试微信报警
同时个人微信可以看到下面提示
恢复服务后
个人微信可以收到下面的提示
以下为Zabbix4.0版本的界面提示
在手机企业微信APP中可以收到下面提示
在手机企业微信APP中可以收到下面提示
短信告警 确定短信服务商和短信服务相关信息 确定短信服务商 先确定一家短信服务平台,比如:阿里大于,腾讯云等
1 2 3 https://www.aliyun.com/product/sms https://cloud.tencent.com/act/pro/csms https://www.yunpian.com/
注意:一般的短信平台会需要注册用户帐号后实名认证,可能还会要求提交企业营业执照,个人身份证,网站备案信息等信息
以阿里云为例
1 2 #服务文档 https://help.aliyun.com/document_detail/59210.html?spm=a2c4g.11174283.2.21.6b394c07W3s6kB
短信服务流程
购买短信服务 到注册阿里云并且购买短信服务https://www.aliyun.com/product/sms
创建 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用户进行授权
创建短信签名 1 https://help.aliyun.com/document_detail/108072.html?spm=a2c4g.11186623.2.20.245e4be5IFMXEF
注意:签名名称要和网站或公司名称相同,否则可能不能通过审核
创建短信模板 1 https://help.aliyun.com/document_detail/108086.html?spm=a2c4g.11186623.6.574.3ca821f24wFBe7
创建两个模板:故障通知和恢复通知模板
注意:阿里云模板中的变量有较高的要求,比如一个变量不能存超过25个字节的内容等
创建故障通知模
创建恢复通知模板
创建发送短信脚本 参考帮助实现短信脚本
1 https://help.aliyun.com/document_detail/112147.html?spm=a2c4g.11186623.6.672.2f7a5d1cf0jhs1
短信SDK
1 https://help.aliyun.com/document_detail/55359.html?spm=a2c4g.11186623.2.26.464e57cfuNqIcX
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server alertscripts] 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' ) 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 = { } sms_dict['time' ] = message[0][0:24] sms_dict['item' ] = message[1][0:24] 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] [root@zabbix-server alertscripts] ACCESS_KEY_ID = 'xxxxxxxxxxxxxxxxx' ACCESS_KEY_SECRET ='yyyyyyyyyyyyyyyyyy' [root@zabbix-server alertscripts] [root@zabbix-server alertscripts] [root@zabbix-server alertscripts] 'test' ['test' ] {"RequestId" :"A9A1F98C-6F99-42F0-A688-78480DD845C0" ,"Message" :"OK" ,"BizId" :"172222827010849369^0" ,"Code" :"OK" } [root@zabbix-server alertscripts] 'test' ['test' ] {"RequestId" :"29D0783B-CCCA-4E9B-87E3-76FC76EC6480" ,"Message" :"OK" ,"BizId" :"768401427010885196^0" ,"Code" :"OK" }
创建短信媒介类型
脚本参数为以下两项
1 2 3 {ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE}
给Zabbix用户添加报警媒介
配置动作 创建新动作或修改原有动作
配置动作对应的触发条件如下
创建异常操作
示例1:加一个字段
示例2:加多个字段
1 {EVENT.DATE} {EVENT.TIME};{TRIGGER.NAME};{EVENT.ID}
创建恢复操作
多字段
1 {EVENT.DATE} {EVENT.TIME};{TRIGGER.NAME};{EVENT.ID}
总体配置如下
测试短信报警 停止服务 模拟故障
查看到手机收到短信
启动服务 模拟恢复故障
查看到手机收到短信
查看zabbix Serve服务器日志,可以看到下面信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@zabbix-server ~] DebugLevel=4 [root@zabbix-server ~] -- 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
实现故障自愈功能 当zabbix服务监控到指定的监控项异常时,可以通过指定的操作使故障自动恢复
以nginx服务为例,当nginx服务停止时,自动重启服务,实现故障自愈功能
Zabbix Agent 开启远程命令功能 配置远程命令的操作类似于发送消息,区别在于一个执行命令,一个发送消息
远程命令可以直接在ZabbixServer, ZabbixProxy和ZabbixAgent上执行。
但在Zabbix agent和Zabbix proxy上,远程命令默认是不开启的,它们可以通过以下方式启用:
1 2 在agent配置中添加AllowKey=system.run[*]、UnsafeUserParameters=1参数 在proxy配置中,将enableremotecommands参数设置为1
范例: 在故障自愈的客户端主机开启 Zabbix Agent 远程命令功能
1 2 3 4 5 6 7 8 9 10 11 12 [root@centos8 ~] [root@centos8 ~] AllowKey=system.run[*] AllowRoot=1 UnsafeUserParameters=1 [root@centos8 ~]
Zabbix Agent 对 Zabbix 用户授权管理权限 默认zabbix agent是使用zabbix用户启动的,有些特权命令zabbix用户是没有权限执行,会导致定义好的自治愈策略因为权限拒绝为执行失败,所以需要事先对zabbix用户进行授权.
范例: 在 zabbix 用户进行 sudo 授权
1 2 3 4 5 6 7 8 [root@centos8 ~] zabbix ALL=(ALL) NOPASSWD: ALL [root@centos8 ~] [root@ubuntu2004 ~]
查看内置的模板及相关触发器
使用内置的版本关联需要监控的主机 使用内置模板 Template App Nginx by HTTP
创建动作
添加动作的条件,用于指定动作关联的条件,即只有特定的触发器发生才会执行动作
选中Nginx Service is down 的触发器
步骤为1和1表示只执行一次
步骤持续时间表示如果有多个步骤执行时的时间间隔,0表示使用默认步骤持续时间间隔
动作创建完成
停止监控主机的服务测试自愈功能 停止nginx服务
在监测页面可以看到动作执行
1 2 3 4 5 6 7 8 9 [root@centos8 ~] active [root@centos8 ~] 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'
Zabbix 主动与被动模式 Zabbix 有两种工作模式: 主动和被动模式
无论是模式还是被动模式,都是站在zabbix agent 角度来说的工作模式
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上同时存在,可以将一部分监控项设为主动,其它设为被动模式
被动监测通信过程如下:
1 2 3 4 5 6 Server打开一个TCP连接 Server发送请求agent.ping Agent接收到请求并且响应<HEADER><DATALEN> Server处理接收到的数据 关闭TCP连接 被动模式每获取一个监控项都需要打开一个tcp连接,这样当监控项越来越多时,Zabbix Server会打开很多端口,就会出现server端性能瓶颈问题。
主动模式监测通信过程如下:
1 2 3 zabbix agent 首先向ServerActive配置的IP请求获取active items,获取并提交active items数据值给server或者proxy。 zabbix多久获取一次active items? 它会根据agent的配置文件中的RefreshActiveChecks的频率进行,如果获取失败,那么将会在60秒之后重试。
主动模式的流程分两个部分:
1 2 3 4 5 6 Agent主动打开一个TCP连接(主动检测变成Agent打开) Agent请求items检测列表 Server返回items列表 Agent 处理响应 关闭TCP连接 Agent开始收集数据
1 2 3 4 Agent建立TCP连接 Agent批量提交items列表收集的所有监控项数据 Server处理数据,并返回响应状态 关闭TCP连接
被动模式 被动模式是指 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进程实现被动模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@zabbix-server ~] [root@zabbix-server ~] 48 ? I< 0:00 [edac-poller] 1115 ? S 0:03 /usr/sbin/zabbix_server: http poller 1246 ? S 0:01 /usr/sbin/zabbix_server: proxy poller 1249 ? S 0:19 /usr/sbin/zabbix_server: poller 1250 ? S 0:19 /usr/sbin/zabbix_server: poller 1251 ? S 0:19 /usr/sbin/zabbix_server: poller 1252 ? S 0:19 /usr/sbin/zabbix_server: poller 1253 ? S 0:19 /usr/sbin/zabbix_server: poller 1255 ? S 0:02 /usr/sbin/zabbix_server: unreachable poller 24305 pts/2 S+ 0:00 grep --color=auto poller
范例: 查看被动模式下 Zabbix agent 进程和端口打开情况
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 [root@centos8 ~] [root@centos8 ~] 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 1796 ? S 0:12 /usr/sbin/zabbix_agentd: listener 1797 ? S 0:12 /usr/sbin/zabbix_agentd: listener 1798 ? S 0:10 /usr/sbin/zabbix_agentd: active checks 21213 pts/1 S+ 0:00 vim /etc/zabbix/zabbix_agentd.conf 24150 pts/0 S+ 0:00 grep --color=auto zabbix [root@centos8 ~] LISTEN 0 128 0.0.0.0:10050 0.0.0.0:* TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48786 TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48790 TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48866 TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48884 TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48860 TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48848 TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48846 TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48826 TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48774 TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48808 TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48836 TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48824 TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48772 TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48840 TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48820 TIME-WAIT 0 0 10.0.0.103:10050 10.0.0.100:48886 ........ [root@centos8 ~] 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 1415:20200830:180435.724 agent 1416:20200830:180435.725 agent 1419:20200830:180435.725 agent 1420:20200830:180435.726 agent 1418:20200830:180435.726 agent 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)
主动模式 主动模式介绍 主动模式是由每个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 台以上
Zabbix Agent 实现主动模式 注意: 下面使用Agent实现测试, 方便查看并行效果,使用Agent2看不到并行采集效果
在Zabbix Agent 实现主动模式流程
在 Zabbix Agent 配置主机模式相关配置
在 Zabbix Server 创建配置有主动模式监控项的模板
关联主动模板至支持主动模式的 Agent 主机
注意: 基于原被动模板克隆生成的主动模式模板,不是所有监控项都能改为主动模式,比如agent.ping 监控项如果改为主动模式, ZBX 提示将无法变绿
在 Zabbix Agent 配置主动模式 Zabbix Server 主动和被动模式无需配置即可支持,还可以支持多个主动和被动模式的Zabbix Agent 同时存在
Zabbix Server 通过 trapper 进程实现主动模式
1 2 3 4 5 6 7 8 9 10 11 [root@zabbix-server ~] [root@zabbix-server ~] 1256 ? S 0:00 /usr/sbin/zabbix_server: trapper 1257 ? S 0:00 /usr/sbin/zabbix_server: trapper 1258 ? S 0:00 /usr/sbin/zabbix_server: trapper 1259 ? S 0:00 /usr/sbin/zabbix_server: trapper 1260 ? S 0:00 /usr/sbin/zabbix_server: trapper 24371 pts/2 S+ 0:00 grep --color=auto trapper
Zabbix Agent 默认是被动模式,需要修改配置才能支持主动模式
Zabbix Agent 的关健配置有下面三项
1 2 3 Server=<Zabbix Server> ServerActive=<Zabbix Server> Hostname=<当前主机IP>
范例: Zabbix Agent配置主动模式配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 [root@centos8 ~] PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server=10.0.0.100 ServerActive=10.0.0.100 Hostname=10.0.0.104 Timeout=30 Include=/etc/zabbix/zabbix_agentd.d/*.conf [root@centos8 ~] [root@centos8 ~] State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 100 127.0.0.1:25 0.0.0.0:* LISTEN 0 128 0.0.0.0:10050 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 100 [::1]:25 [::]:* LISTEN 0 128 [::]:10050 [::]:* [root@centos8 ~] 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 1796 ? S 0:12 /usr/sbin/zabbix_agentd: listener 1797 ? S 0:12 /usr/sbin/zabbix_agentd: listener 1798 ? S 0:10 /usr/sbin/zabbix_agentd: active checks 21213 pts/1 S+ 0:00 vim /etc/zabbix/zabbix_agentd.conf 24150 pts/0 S+ 0:00 grep --color=auto zabbix [root@centos8 ~] 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 1638:20200830:183505.586 agent 1637:20200830:183505.588 agent 1636:20200830:183505.589 agent 1639:20200830:183505.590 agent 1635:20200830:183505.591 agent
基于现有模板将包含的监控项修改为主动模式的监控项 注意: Zabbix 5.0 内置了主动模式的模板 Template OS Linux by Zabbix agent active 无需修改
Zabbix4.0 之前没有主动模式的模板,需要自行修改
以下操作为Zabbix 4.0上实现
选择全克隆,包括应用集,监控项,触发器,图形,聚合图形等
指定模板的名称
将新生成的模板的监控项修改为主动模式
选中新模板的监控项
提示: 建议将类型为zabbix客户端的监控项进行修改,其它类型如相关项目不建议修改为主动式
批量更新所有监控项
注意:此方式只是修改了大部分监控项为主动式,还有部分监控项,比如agent.ping 仍为被动式,保留即可,否则状态会有颜色异常
修改为主动式
修改更新间隔,此步非必须
确保新生成的模板中的自动发现规则中的类型也是主动式,此步非必须
修改每一个监控项
将主动模板关联到需要监控的主机 可以通过克隆当前已添加的主机,实现快速添加需要监控的主机
验证结果和查看日志 被动模式的监控项采集时间是串行的
主动模式的监控项采集时间是并行的
注意: 观察和对比两种不同模式下最新数据中每个监控项的最近检查记录显示的时间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 [root@centos8 ~] DebugLevel=4 [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] 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]' [root@zabbix-server ~] 1 [root@centos8 ~] 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" :1598786276,"ns" :13785681}, {"host" :"10.0.0.104" ,"key" :"proc.num[]" ,"value" :"151" ,"id" :798,"clock" :1598786276,"ns" :15500404}, {"host" :"10.0.0.104" ,"key" :"system.boottime" ,"value" :"1598780878" ,"id" :799,"clock" :1598786276,"ns" :15819081}, {"host" :"10.0.0.104" ,"key" :"system.cpu.intr" ,"value" :"649108" ,"id" :800,"clock" :1598786276,"ns" :16113042}, {"host" :"10.0.0.104" ,"key" :"system.cpu.load[percpu,avg15]" ,"value" :"0.000000" ,"id" :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}, ......
监控 JAVA 程序 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 架构
实战案例: 监控 Java 应用 Tomcat 服务 部署 tomcat 服务并开启 JMX 功能 安装 tomcat 范例: 安装tomcat脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 [root@tomcat ~] 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 export JAVA_HOME=$JDK_DIR/jdk export JRE_HOME=\$JAVA_HOME/jre export CLASSPATH=\$JAVA_HOME/lib/:\$JRE_HOME/lib/ export PATH=\$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-*/ tomcatecho "PATH=$TOMCAT_DIR /tomcat/bin:" '$PATH' > etc/profile.d/tomcat.shid tomcat &> /dev/null || useradd -r -s /sbin/nologin tomcatcat > $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 ~] [root@tomcat ~] ● tomcat.service - Tomcat Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2021-05-27 17:43:42 CST; 48s ago [root@tomcat ~] LISTEN 0 1 ::ffff:127.0.0.1]:8005 *:* LISTEN 0 100 *:8080 *:*
开启 JMX 监控 JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等
tomcat 开启远程 JMX 环境配置
1 2 3 4 5 6 7 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"
范例: Tomcat 开启 JMX 功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [root@tomcat ~] ....... 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" ....... [root@tomcat ~] [root@tomcat ~] State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 100 127.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 *:*
测试通过java工具 jconsole 进行 JMX 监控
使用 java 客户端获取 JMX 信息 cmdline-jmxclient-0.10.3.jar 是一个开源jar包,在zabbix 中常用于测试的一个工具,可以用来测试 jmx 是否配置正确。在监控方面后还可以对Tomcat各种属性进行监控。下面使用java客户端cmdline-jmxclient进行测试
下载链接
1 https://github.com/qiueer/zabbix/blob/master/Tomcat/cmdline-jmxclient-0.10.3.jar
范例: 测试能否获取到java当前线程数和最大线程数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@zabbix-server ~] -rw-r--r-- 1 root root 20124 Aug 23 22:41 cmdline-jmxclient-0.10.3.jar [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] 08/30/2020 13:27:07 +0800 org.archive.jmx.Client currentThreadCount: 10 [root@zabbix-server ~] 08/30/2020 13:27:33 +0800 org.archive.jmx.Client maxThreads: 200
部署 Java gateway 服务器 Java gateway 是一个独立于zabbix server和 zabbix agent的组件,默认使用端口10052/tcp, 所以java gateway可以是单独的一台服务器,但是也可以和zabbix server或者zabbix agent 共用一台服务器
Java gatway 可以用两种方法安装
注意: Java gateway和Zabbix Server都无需安装 JDK
包安装 Java gateway 范例: Ubuntu 安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 [root@ubuntu1804 ~] [root@ubuntu1804 ~] [root@ubuntu1804 ~] [root@ubuntu1804 ~] [root@ubuntu1804 ~] [root@ubuntu1804 ~] 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" [root@ubuntu1804 ~] State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 127.0.0.1:6010 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 50 *:12345 *:* LISTEN 0 128 [::1]:6010 [::]:* LISTEN 0 50 *:10052 *:* [root@ubuntu1804 ~] zabbix 791 1.8 4.4 3131380 89620 ? 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 1235 0.0 0.0 14436 1120 pts/0 S+ 19:02 0:00 grep --color=auto java
范例: CentOS安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] [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 [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] /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 [root@centos8 ~] PID_FILE="/var/run/zabbix/zabbix_java.pid" START_POLLERS=5 [root@centos8 ~] [root@centos8 ~] zabbix 25041 1 0 10:27 ? 00:00:00 java ...... [root@centos8 ~] State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 100 127.0.0.1:25 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 100 [::1]:25 [::]:* LISTEN 0 50 *:10052 *:*
编译安装 Java gateway 编译安装使用的是zabbix agent,zabbix server 是同一个源码包,只需指定相关的编译选项即可
范例: 编译安装 zabbix java gateway 5.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] [root@centos8 zabbix-5.0.13] [root@centos8 zabbix-5.0.13] [root@centos8 zabbix-5.0.13] [root@centos8 ~] State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 100 127.0.0.1:25 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 100 [::1]:25 [::]:* LISTEN 0 50 *:10052 *:* LISTEN 0 128 [::]:22 [::]:* [root@centos8 ~] root 9253 2.1 2.9 2570612 54684 pts/1 Sl 09:29 0:00 java -server -classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic ......
范例: 编译安装 zabbix java gateway 4.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] [root@centos8 zabbix-4.0.24] [root@centos8 zabbix-4.0.24] [root@centos8 ~] /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 ~] [root@centos8 ~] LISTEN 0 50 *:10052 *:* [root@centos8 ~]
配置 Zabbix Server 支持 Java gateway Zabbix Server 开启 Java gateway 功能 默认有关java的监控项是不支持的,如下图
配置下面后,上面相关监控项会支持
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@zabbix-server ~] [root@zabbix-server ~] JavaGateway=10.0.0.105 StartJavaPollers=10 JavaGatewayPort=10052 [root@zabbix-server ~] [root@zabbix-server ~] zabbix 2529 2518 0 12:21 ? 00:00:00 /apps/zabbix_server/sbin/zabbix_server: java poller zabbix 2530 2518 0 12:21 ? 00:00:00 /apps/zabbix_server/sbin/zabbix_server: java poller zabbix 2531 2518 0 12:21 ? 00:00:00 /apps/zabbix_server/sbin/zabbix_server: java poller zabbix 2532 2518 0 12:21 ? 00:00:00 /apps/zabbix_server/sbin/zabbix_server: java poller zabbix 2533 2518 0 12:21 ? 00:00:00 /apps/zabbix_server/sbin/zabbix_server: java poller zabbix 2534 2518 0 12:21 ? 00:00:00 /apps/zabbix_server/sbin/zabbix_server: java poller zabbix 2535 2518 0 12:21 ? 00:00:00 /apps/zabbix_server/sbin/zabbix_server: java poller zabbix 2536 2518 0 12:21 ? 00:00:00 /apps/zabbix_server/sbin/zabbix_server: java poller zabbix 2537 2518 0 12:21 ? 00:00:00 /apps/zabbix_server/sbin/zabbix_server: java poller zabbix 2538 2518 0 12:21 ? 00:00:00 /apps/zabbix_server/sbin/zabbix_server: java poller root 2571 2334 0 12:22 pts/1 00:00:00 grep --color=auto java
使用系统内置模板监控 tomcat 主机 如果 Java gateway 开启JMX功能,也可以直接监控 java gateway 自身
添加需要监控的java服务器,指定通过JMX接口实现
**选中系统内置的模板: **
**Template App Generic Java JMX **
**Template App Apache Tomcat JMX **
注意: Template App Apache Tomcat 只支持老版本的tomcat,所以此处不选择它
查看到 JMX 数据
导入自定义模板 通过自定义的 JMX 模板,可以定制生产所需的监控项和阈值
将自定义的模板关联到监控的tomcat主机
取消之前关联的模板
注意: 主机的 JMX 标识正常情况下会变绿
验证使用自定义模板监控结果
监控网络设备 SNMP SNMP 介绍和组成 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之间的通信提供更高的安全性。此版本安全性高,但效率不高.
SNMP 工作原理 SNMP网络设备分为NMS和Agent两种:
NMS(Network Management Station,网络管理站)是SNMP网络的管理者,NMS是运行SNMP客户端管理程序的工作站,能够提供友好的人机交互界面,方便网络管理员完成绝大多数的网络管理工作。
Agent是SNMP网络的被管理者。Agent是驻留在设备上的一个进程,负责接收、处理来自NMS的请求报文。在一些紧急情况下,如接口状态发生改变等,Agent也会主动通知NMS。
NMS和Agent之间通过SNMP协议来交互管理信息。
SNMP管理进程与代理进程之前为了交互信息,定义了5种报文:
1 2 3 4 5 get-request操作:这个操作是由管理进程发起,向代理进程处请求提取一个或多个参数值。 get-next-request操作:这个操作是由管理进程发起,向从代理进程处提取一个或多个参数的下一个参数值。 get-response操作:这个操作是由代理进程发出的,向管理进程返回的一个或多个参数值。 set-request操作:这个操作是由管理进程发起,对代理进程设置一个或多个参数值。 trap操作:这个操作是由代理进程主动发出的报文,通知管理进程有某些事情发生。
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的简单性和可扩展性提供了很好的支持。
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这个标识开始。
常见 OID oid-info是一个内容丰富的网站,包含了大量公有或私有的MIB信息,在知道部分OID的情况,可以方便的进行节点具体信息的查看。但是树太过庞大,仅仅从网站上查看效率十分低下,直接从设备商处获取mib库是最方便的做法。
参考链接:
1 2 http://www.oid-info.com/index.htm #注意:查询时无需输入最前面的.
系统信息:
1 2 3 4 5 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负载:
1 2 3 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信息:
1 2 3 4 5 6 7 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
内存使用:
1 2 3 4 5 6 7 8 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
硬盘使用:
1 2 3 4 5 6 7 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
使用 SNMP工具监控网络设备 开启设备的SNMP
设置团体名,默认可以使用 Public
配置 Zabbix Web 监控 配置–>主机–>添加主机–>选择类型为SNMP,输入路由器设备的IP地址
关联以下三个模板
1 2 3 Template Module EtherLike-MIB SNMP Template Module Generic SNMP Template Module Interfaces SNMP
查看网络设备的监测结果 监测–>主机–>图形
利用 Zabbix 监控 Linux 主机 在 Zabbix Agent 安装 SNMP 协议并配置 范例: Ubuntu 系统实现 SNMP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [root@ubuntu2004 ~] [root@ubuntu2004 ~] NET-SNMP version: 5.8 Web: http://www.net-snmp.org/ Email: net-snmp-coders@lists.sourceforge.net [root@ubuntu2004 ~] 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 rocommunity 123456 default -V systemonly rocommunity6 123456 default -V systemonly [root@ubuntu2004 ~] [root@ubuntu2004 ~] udp UNCONN 0 0 0.0.0.0:161 0.0.0.0:* users :(("snmpd",pid=24871 ,fd=6 )) [root@ubuntu1804 ~] [root@ubuntu1804 ~] NET-SNMP version: 5.7.3 Web: http://www.net-snmp.org/ Email: net-snmp-coders@lists.sourceforge.net [root@ubuntu1804 ~] agentAddress udp:0.0.0.0:161 [root@ubuntu1804 ~] [root@ubuntu1804 ~] udp UNCONN 0 0 0.0.0.0:161 0.0.0.0:* users :(("snmpd",pid=24871 ,fd=6 ))
范例: 红帽系统实现SNMP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [root@centos8 ~] [root@centos8 ~] NET-SNMP version: 5.8 Web: http://www.net-snmp.org/ Email: net-snmp-coders@lists.sourceforge.net [root@centos8 ~] [root@centos8 ~] com2sec notConfigUser default 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. 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 [root@centos8 ~] State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 0.0.0.0:161 0.0.0.0:* UNCONN 0 0 127.0.0.1:323 0.0.0.0:* UNCONN 0 0 [::1]:323 [::]:* [root@centos8 ~] udp UNCONN 0 0 0.0.0.0:161 0.0.0.0:* users :(("snmpd",pid=9962 ,fd=9 )) tcp LISTEN 0 128 127.0.0.1:199 0.0.0.0:* users :(("snmpd",pid=9962 ,fd=10 ))
测试 SNMP 是否可以访问 在 Zabbix Server (也可以在其它主机上)安装 SNMP工具 net-snmp-utils
此工具可以测试是否可以获取Zabbix Agent的SNMP数据
注意: 在实际生产环境中Zabbix Server 在进行 SNMP 监测时,无需在 Zabbix Server 安装此工具
snmpwalk 命令格式
1 2 3 4 5 6 7 8 9 10 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代理端的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] SNMPv2-MIB::sysName.0 = STRING: centos8.wang.org [root@zabbix-server ~] SNMPv2-MIB::sysDescr.0 = STRING: Linux centos8.wang.org 4.18.0-240.el8.x86_64 SMP Fri Sep 25 19:48:47 UTC 2020 x86_64 [root@zabbix-server ~] UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 1833004 kB [root@zabbix-server ~] [root@zabbix-server ~] HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER:483316 KBytes [root@zabbix-server ~] HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER:483316 KBytes [root@zabbix-server ~] IF-MIB::ifType.1 = INTEGER: softwareLoopback(24) IF-MIB::ifType.2 = INTEGER: ethernetCsmacd(6) [root@zabbix-server ~] IF-MIB::ifPhysAddress.1 = STRING: IF-MIB::ifPhysAddress.2 = STRING: 0:c:29:15:9b:83 [root@zabbix-server ~] IF-MIB::ifSpeed.1 = Gauge32: 10000000 IF-MIB::ifSpeed.2 = Gauge32: 1000000000 [root@zabbix-server ~] 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 ~] IP-MIB::ipAdEntAddr.10.0.0.8 = IpAddress: 10.0.0.8 IP-MIB::ipAdEntAddr.127.0.0.1 = IpAddress: 127.0.0.1
注意: 团体密码是明文传输的,可以抓包查看到
创建主机 在配置中添加需要监控的SNMP代理端
删除默认的客户端类型
指定客户端类型为SNMP
指定SNMP代理端的地址和端口
关联 SNMP 模板 关联对应的SNMP模板 Template OS Linux SNMP
修改主机宏的值 {$SNMP_COMMUNITY}
或者修改继承以及主机的宏
添加完成
Zabbix 4.0 界面如下
关联对应的SNMP模板
验证结果 过一段时间,可以看到SNMP字体变绿
在监测项验证查看主机信息
对应主机的图形
查看主机的数据
Zabbix 监控实战案例 Zabbix 的监控功能强大,还支持定制的自定义监控项,可以说能做到想监控什么就可以监控什么
以下实战案例中实现了对生产环境中各种资源的监控
监控内存使用情况 在客户端定义监控项 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@centos8 ~] [root@centos8 ~] 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 ~] [root@centos8 ~] mem_use_percent [s|11.9297] [root@centos8 ~] mem_unuse_percent [s|88.2598] [root@centos8 ~] [root@centos8 ~] [root@zabbix-server ~] [root@zabbix-server ~] 11.1591 [root@zabbix-server ~] 88.7257
在 Zabbix Server 添加监控项
验证结果
监控TCP 十一种有限状态机 TCP 十一种有限状态机 TCP 共十一种状态
1 2 3 4 5 6 7 8 9 10 11 ESTABLISHED SYN_SENT SYN_RECV FIN_WAIT1 FIN_WAIT2 TIME_WAIT CLOSE CLOSE_WAIT LAST_ACK LISTEN CLOSING
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 [root@rocky8 ~] 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 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 10.0.0.8:22 10.0.0.1:9680 ESTABLISHED tcp 0 52 10.0.0.8:22 10.0.0.1:9682 ESTABLISHED tcp 0 0 10.0.0.8:22 10.0.0.1:9681 ESTABLISHED tcp6 0 0 :::10050 :::* LISTEN tcp6 0 0 :::22 :::* LISTEN tcp6 0 0 ::1:25 :::* LISTEN tcp6 0 0 10.0.0.8:10050 10.0.0.100:55018 TIME_WAIT
实现自定义监控项 案例1: 自定义监控项实现监控TCP当前ESTABLISHED状态的连接数 先准备脚本实现自定义监控项实现连接数
1 2 3 4 5 6 [root@centos8 ~] UserParameter=tcp_state_estab,netstat -ant|grep -c STABLISHED [root@centos8 ~] [root@zabbix-server ~] 5
添加被控制主机
在被监控主机添加监控项
测试是否能获取到相关的值
验证结果
案例2:自定义监控项实现监控TCP 状态的连接数 修改监控项的脚本为以下形式,可以实现一个脚本实现多个自定义监控项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@centos8 ~] [root@centos8 ~] tcp_state () { netstat -atn|grep -c $1 } tcp_state $1 [root@centos8 ~] [root@centos8 ~] UserParameter=tcp_state[*],/etc/zabbix/zabbix_agentd.d/tcp_state.sh $1 [root@centos8 ~] [root@zabbix-server ~] 9 [root@zabbix-server ~] 3 [root@zabbix-server ~] 8200
测试是否能取到数据
自定义模板实现监控 对于主机和监控项众多时,直接将监控项关联至主机的方法,是比较繁琐的
可以通过将自定义的监控项加入到自定义的模板或已有的模板中,再将此模板关联至需要监控的主机,从而提高效率
创建应用集tcp_state
在自定义的模板中创建自定义监控项或者将已有的监控项复制到模板中
查看自定义的模板中已存在自定义的应用集和监控项
在监控主机上清空前面小节已关联的监控项
在被监控主机重新关联自定义的模板
查看关联的模板及相关的监控项
导出自定义的模板
查看文件内容
创建自定义触发器 创建触发器 选择指定的模板中创建触发器
创建触发器
测试触发触发器 默认没有触发消息
1 2 3 4 5 [root@centos8 ~] 3 [root@centos8 ~] 2
多建立连接查看到下面提示信息
1 2 3 4 [root@centos8 ~] 6 [root@centos8 ~] 7
自定义图形 选择自定义的模板,查看”图形”
创建图形
在图形中添加监控项
确定创建图形
在模板中可以看到图形有一个
在主机中验证结果
验证图形和颜色
导出模板 将自定义的模板导出,可以在其它Zabbix Server导入进行复用
监控 Memcached 服务 在 Zabbinx Agent安装memcached 服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@centos8 ~] [root@centos8 ~] PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" [root@centos8 ~] [root@centos8 ~] State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:11211 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 100 127.0.0.1:25 0.0.0.0:* LISTEN 0 128 0.0.0.0:10050 0.0.0.0:* LISTEN 0 128 [::]:11211 [::]:* LISTEN 0 128 *:80 *:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 100 [::1]:25 [::]:*
Zabbix Agent的监控脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [root@centos8 ~] memcached_state (){ port=$1 echo -e 'stats\nquit' | nc 127.0.0.1 $port |awk -v item=$2 '$2==item{print $3}' } memcached_state $1 $2 [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] 1.5.9 [root@centos8 ~] 2 [root@centos8 ~] 131 [root@centos8 ~] 0 [root@centos8 ~] 0
zabbix Agent 添加自定义的监控项 1 2 3 4 5 6 7 8 9 [root@centos8 ~] 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/memcached_state.sh "$1 " "$2 " [root@centos8 ~] UserParameter=memcached_state[*],/etc/zabbix/zabbix_agentd.d/memcached_state.sh "$1 " "$2 " [root@centos8 ~]
Zabbix Server 测试监控memcached服务的监控项数据 1 2 3 4 5 [root@zabbix-server ~] 1.5.9 [root@zabbix-server ~] 2
创建memached的监控自定义模板 创建自定义模板
创建自定义监控项 监控项实现监控当前连接数
键值: memcached_state[11211,curr_connections]
创建针对自定义模板的触发器 当前连接数大于1000时生成触发器事件
创建自定义模板版的图形 自定义的模板关联图形,一个图形可以用多个监控项,不同的监控项会自动使用不同的颜色进行区分,也可以手动调整各监控项的颜色和图形类型。
将自定义的模板关联至需要监控的主机上
验证监控结果
监控 Redis 服务 客户端配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] UserParameter=redis.status[*],/etc/zabbix/zabbix_agent2.d/redis_status.sh "$1 " UserParameter=redis.config.maxclients,redis-cli -p 6379 config get maxclients | awk "NR==2" [root@centos8 ~] KEY=$1 redis-cli -p 6379 info | grep "\<${KEY} \>" | awk -F ':' '{print $NF}' [root@centos8 ~] [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~]
配置 Zabbix Web
创建自定义模板
在上面的模板中创建监控项
在模板上创建2个图形,连接状态和内存状态
注意: total_system_memory 的类型为图形总数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 { Template Redis status :redis.status[connected_clients].avg(1m)}/{Template Redis status:redis.config.maxclients.last()}*100 >={$REDIS .CLIENTS.MAX} { Template Redis status:redis.status[used_memory].last()}/{Template Redis status:redis.status[total_system _memory].last()}*100>={$REDIS .MEM.MAX} [root@rocky8 ~] 127.0.0.1:6379> debug populate 5000000
监控 Nginx 服务 自定义监控项监控 nginx 状态页 1 2 3 4 5 6 7 8 9 10 11 [root@rocky8 ~] location /nginx_status { stub_status; access_log off; allow 127.0.0.1; deny all; } [root@rocky8 ~]
配置 agent 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 [root@rocky8 ~] HOST="127.0.0.1" PORT="80" URL=nginx_status case $1 in ping) pidof nginx | wc -l ;; 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 ~] [root@rocky8 ~] 1 [root@rocky8 ~] UserParameter=nginx.status[*],/etc/zabbix/zabbix_agent2.d/nginx_status.sh $1 [root@rocky8 ~] nginx.status[ping] [s|1] [root@rocky8 ~] nginx.status[active] [s|1] [root@rocky8 ~] [root@zabbix-server ~] 1 [root@zabbix-server ~] 1
配置 Zabbix Web
创建模板
创建8个监控项
创建触发器(为ping设定监控项)
创建图形
关联对应主机
监控 MySQL 服务 percona 提供了相关的监控MySQL的插件,不过此项目已经不再开发,官网访问链接已经从首页删除,只能直接从下面链接访问
注意: percona提供的最新1.1.8版本对应的模板只适配与zabbix3.0之前的版本
1 https://www.percona.com/downloads/percona-monitoring-plugins/
监控MySQL 状态 使用 MySQL 自定义模板,监控mysql性能,可以监控如下内容:OPS(增删改查)、mysql请求流量带宽,mysql响应流量带宽
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] [root@centos8 ~] Include=/etc/zabbix/zabbix_agentd.d/*.conf [root@centos8 ~] UserParameter=mysql.version,mysql -V UserParameter=mysql.status[*],/etc/zabbix/zabbix_agentd.d/check_mysql.sh $1 2> /dev/null UserParameter=mysql.ping,mysqladmin -uzabbix -p123456 -P3306 -h127.0.0.1 ping 2>/dev/null | grep -c alive [root@centos8 ~] 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} " if [ $# -ne "1" ];then echo "arg error!" fi case $1 in 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|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)" ;; esac echo $result [root@centos8 ~] [root@centos8 ~] [root@zabbix-server ~] mysql Ver 8.0.21 for Linux on x86_64 (Source distribution) [root@zabbix-server ~] 1141 [root@zabbix-server ~] 0 [root@zabbix-server ~] 1 [root@zabbix-server ~] 0
监控 MySQL 主从复制 Agent 端配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@centos8 ~] KEY=$1 PASS='123456' mysql -uroot -p$PASS -e "show slave status\G" |grep "${KEY} " |awk '{print $NF}' [root@centos8 ~] UserParameter=mysql.repl.status[*], /etc/zabbix/zabbix_agent2.d/mysql_repl_status.sh "$1 " [root@zabbix ~] [root@zabbix ~] [root@zabbix ~]
配置 Zabbix Web
1 2 3 4 5 6 7 8 {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 {Template MysQL repl status:mysql.repl.status[Second_Behind_Master].last()]}>=100
监控 Keepalived 集群的脑裂问题 生产中使用的 Keepalive集群 ,偶尔会出现两台 Keepalive 上都有 VIP 的情况,即经常所说的“脑裂”问题,为避免对线上业务造成不可估量的损失,利用Zabbix 监控及时发现和解决这一问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@ubuntu1804 ~] UserParameter=check_keepalived[*],/bin/bash /apps/zabbix/etc/zabbix_agentd.conf.d/check_vip.sh [root@ubuntu1804 ~] 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 -gt 1 ]]then result=1 else result=0 fi echo $result
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的图形,可能是浏览器版本问题,建议更换浏览器再尝试
安装 Grafana 包 CentOS8 系统AppStream源带有 grafana,CentOS7 则无此包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@zabbix-server ~] Last metadata expiration check: 0:58:43 ago on Tue 13 Jul 2021 08: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.
包下载链接:
1 2 https://grafana.com/grafana/download https://mirrors.tuna.tsinghua.edu.cn/grafana/
最新版本下载安装
1 2 3 4 5 6 7 8 9 10 11 12 [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~] [root@zabbix-server ~]
开启 Grafana 服务 1 2 3 4 [root@zabbix-grafana ~] [root@zabbix-grafana ~] LISTEN 0 128 *:3000 *:* users :(("grafana-server",pid=1957 ,fd=8 ))
首次登录 Grafana 的 Web 界面 首次浏览器访问 grafana的 web 界面
1 http://grafana-server:3000/
使用默认用户名和密码都是admin
登录
首次登录修改密码,也可以选择skip仍使用原初始密码
登录成功
登录用户等信息保存在下面数据文件中
1 2 [root@zabbix-server ~] /var/lib/grafana/grafana.db: SQLite 3.x database, last written using SQLite version 3035004
以下是grafana-7.1.5版本界面
初始登录界面
修改初始密码
登录成功
在 Grafana 安装 Zabbix 插件 关于zabbix的插件官网地址
1 https://grafana.com/grafana/plugins
1 2 3 4 https://grafana.com/grafana/plugins/alexanderzobnin-zabbix-app https://alexanderzobnin.github.io/grafana-zabbix/installation/
范例: 使用 grafana-cli 命令管理工具安装插件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 [root@zabbix-server ~] id : abhisant-druid-datasource version: 0.0.6id : aceiot-svg-panel version: 0.0.10id : ae3e-plotly-panel version: 0.4.0id : agenty-flowcharting-panel version: 0.9.1id : aidanmountford-html-panel version: 0.0.2id : akumuli-datasource version: 1.3.12...... [root@zabbix-server ~] id : alexanderzobnin-zabbix-app version: 4.1.5[root@zabbix-server ~] 4.1.5 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.0.2 ....... [root@zabbix-server ~] ✔ 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 ~] 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 ~] alexanderzobnin-zabbix-app [root@zabbix-server ~] 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 ~]
针对Zabbix4.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [root@zabbix-grafana ~] id : abhisant-druid-datasource version: 0.0.5id : aceiot-svg-panel version: 0.0.8id : agenty-flowcharting-panel version: 0.9.0id : aidanmountford-html-panel version: 0.0.1id : akumuli-datasource version: 1.3.11id : alexanderzobnin-zabbix-app version: 4.0.1id : alexandra-trackmap-panel version: 1.2.5id : andig-darksky-datasource version: 1.0.1id : aquaqanalytics-kdbadaptor-datasource version: 1.0.1id : ayoungprogrammer-finance-datasource version: 1.0.0[root@zabbix-grafana ~] 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 ~] alexanderzobnin-zabbix-app [root@zabbix-grafana ~]
在 Grafana 中启用 Zabbix 插件
可以看到zabbix插件已安装成功,点zabbix插件
启用插件
启用插件成功
以下是3.12.4版本
添加 Zabbix 数据源
选中zabbix
在URL填写以下信息
1 2 基于HTTP:http://zabbix-server/zabbix/api_jsonrpc.php 基于NGINX:http://zabbix-server/api_jsonrpc.php
输入Zabbix的用户和密码
测试连接
老版本界面如下
在URL填写以下信息
1 http://zabbix-server/zabbix/api_jsonrpc.php
导入自带的 Grafana 模板 上面界面—Dashboards
可以看到三个导入的dashboard,其中第二个Zabbix System Status 常用于观察告警信息
第一个dashboard
查看第三个dashboard
System load 无数据
编辑System load
默认的监控项有问题,修改对应的监控项的名称(注意:不是监控项的key)
查看到数据出现
模板只有CPU,system load和network,可以修改模板再加其它项目的图形显示
再添加一个文件系统的监控
拖动图形,放在合适的位置,并保存
导入官网的其它 Grafana 模板 grafana官网提供了很多图形显示的模板,可以从下面地址查看
1 https://grafana.com/grafana/dashboards
搜索合适的模板, 一般推荐使用下载量较大的模板
查看模板信息和ID
导入5363模板
导入模板
可以选择其它模板 7877
调整模板显示信息 当前导入的模板不一定都符合要求,可以进一步调整显示信息
默认导入的dashboard无法编辑
先将此dashboard设为允许编辑
保存修改后模板
查看生成的 Dashboard
删除不需要的模板 如果导入的模板不适合,可以删除
选择不需要的模板
自定义 Dashboard 先创建文件夹,然后在文件夹中创建各种图形
创建后记得save,否则刷新页面会导致数据丢失
创建文件夹 Dashboards -> Manage -> New folder ->填写名称(Zabbix) -> Create Dashboard
创建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)
创建内存图形 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)
创建流量图形 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)
创建告警面板 将Zabbix的 Web 仪表板的告警加加入Grafana进行展示
Query Mode:Problems
Visualizations:Zabbix Problems
Title:Zabbix 告警信息
导出 Dashboard 导出上面自定义的dashboard 为Json文件, 以方便以后使用
自定义变量实现自定义 Dashboard 以上都是单台Zabbix Server 服务器的图形比较容易展现,但需要展示多台服务器的图形就需要在从头到尾创建一次,过程比较繁琐
可以使用变量的方式获取对应的主机组,以及主机,然后基于变量来完成图形创建
创建变量 打开指定Dashboard –> Dashboard Settings –> Variables
设置主机组变量:
1 2 3 4 5 6 7 Name:定义名称Group Data source :选择zabbix Refresh: 跟随时间而变化 on time range Query Type:选择Group Group: 提取所有组的正则表达式:/.*/ Selection Options:全部打开 Preview of values:会自动显示当前所有的主机组
设置主机变量:
1 2 3 4 5 6 7 8 Name:定义名称Host Data source :选择zabbix Refresh: 跟随时间而变化 on time range Query Type:选择Host Group: 提取所有组的正则表达式:/.*/ Host: 提取所有主机的正则表达式:/.*/ Selection Options:全部打开 Preview of values:会自动显示当前所有的主机
设置完成后记得Save保存
使用变量 将此前创建的CPU负载图形,修改为变量方式,这样就会更加灵活
Query A
1 2 3 4 Group: $Group Host: $Host Application:CPU Item: /Load/
Title:
参考上面的,将CPU时间,内存使用百分比,网卡eth0流量都改为使用变量
将上面自定义的 Dashborad 导出至文件 导出为json文件
将上面自定义的 Dashborad 文件导入 将来在另一台主机上导入上面的json文件即可
Zabbix 分布式实现 Proxy Zabbix Proxy 工作原理 Zabbix Proxy 概述 zabbix作为一个分布式监控系统(分布式监控解决方案),支持通过代理(proxy)收集zabbix agent的监控数据,然后由zabbix proxy再把数据发送给zabbix server,也就是zabbix proxy 可以代替zabbix server收集监控数据,然后把数据汇报给zabbix server,所以zabbix proxy可以在一定程度上分担了zabbix server的数据收集压力,从而降低了数据的采集时间、也相应的增加了zabbix server的监控能力。
官方文档:
1 2 https://www.zabbix.com/documentation/5.0/zh/manual/distributed_monitoring https://www.zabbix.com/documentation/4.0/zh/manual/distributed_monitoring
Zabbix Proxy 使用场景
监控远程区域设备,尤其是多机房和多个云环境时
监控网络不稳定区域,避免跨网段监控的告警不及时
当需要监控设备众多时,使用它来减轻 Zabbix Server 的压力
简化分布式监控的维护,无需各位创建 Zabbix Server,统一管理策略
Zabbix Proxy 架构
Zabbix proxy 功能列表 官方文档:
1 2 https://www.zabbix.com/documentation/5.0/zh/manual/distributed_monitoring/proxies https://www.zabbix.com/documentation/4.0/zh/manual/distributed_monitoring/proxies
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
Dependent items
Yes
Script items
Yes
内置web监控Built-in web monitoring
Yes
Item value preprocessing
Yes
网络发现Network discovery
Yes
Active agent autoregistration
Yes
自动发现Low-level discovery
Yes
远程命令Remote commands
Yes
触发器计算Calculating triggers
No
处理事件Processing events
No
Event correlation
No
发送报警Sending alerts
No
Zabbix Server 和 Zabbix Proxy 区别 Zabbix Proxy 只执行数据收集,不运行触发器,无处理事件,也不发送告警,无Web管理界面
所以最终导致告警延时可能会比较长
zabbix server
zabbix proxy
轻量级
否
是
图形化
有
无
独立工作
是,可实现数据采集,存储,分析,展示
是,可实现数据采集和存储
维护
容易
很容易,配置完成后基本无需管理
独立数据库
有独立数据库,保留指定时间内的所有数据
每个Proxy都有独立数据库,保留部分数据
告警通知
支持邮件,短信,微信等告警机制
不支持
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
官方安装文档
1 2 https://www.zabbix.com/documentation/5.0/zh/manual/installation/install_from_packages/debian_ubuntu https://www.zabbix.com/documentation/5.0/zh/manual/installation/install_from_packages/rhel_centos
安装 Zabbix Proxy 可以通过包和编译两种方式进行安装
二进制包安装 范例: Ubuntu 安装 Zabbix Proxy
1 2 3 4 5 6 7 8 9 10 11 12 [root@zabbix-proxy] [root@zabbix-proxy] [root@zabbix-proxy] [root@zabbix-proxy] [root@zabbix-proxy] [root@zabbix-proxy] [root@zabbix-proxy]
范例: CentOS 安装 Zabbix Proxy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [root@zabbix-proxy-active ~] [root@zabbix-proxy-active ~] [root@zabbix-proxy-active ~] [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 [root@zabbix-proxy-active ~] [root@zabbix-proxy-active ~] [root@zabbix-proxy-active ~] /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
源码编译安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 [root@zabbix-proxy-passive ~] [root@zabbix-proxy-passive ~] [root@zabbix-proxy-passive ~] [root@zabbix-proxy-passive ~] [root@zabbix-proxy-passive ~] [root@zabbix-proxy-passive ~] [root@zabbix-proxy-passive ~] [root@zabbix-proxy-passive ~] [root@zabbix-proxy-passive ~] [root@zabbix-proxy-passive zabbix-5.0.13] --enable-proxy --with-agent --with-net-snmp --with-mysql --with-ssh2 --with-libcurl \ --with-libxml2 [root@zabbix-proxy-passive zabbix-4.0.24] --enable-proxy --with-agent --with-net-snmp --with-mysql --with-ssh2 --with-libcurl \ --with-libxml2 [root@zabbix-proxy-passive zabbix-4.0.24] [root@zabbix-proxy-passive ~] [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 ~]
准备数据库 为Zabbix Proxy 创建一个单独的数据库
注意:Zabbix server和Zabbix proxy不能使用相同的数据库。 如果它们安装在同一主机上,则proxy数据库必须具有不同的名称
为主动模式的 Proxy 准备独立的数据库 在MySQL 服务器上创建数据库和用户授权
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@zabbix-proxy-active ~]# apt -y install mysql-server [root@zabbix-proxy-active ~]# mysql mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.17 | +-----------+ 1 row in set (0.00 sec) mysql> create database zabbix_proxy_active character set utf8 collate utf8_bin; mysql> create user proxy@'localhost' identified by '123456'; mysql> grant all on 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
为被动模式的 proxy 准备独立的数据库 1 2 3 4 5 6 7 8 9 10 11 [root@zabbix-proxy-passive ~] [root@zabbix-proxy-passive ~] mysql> create database zabbix_proxy_passive character set utf8 collate utf8_bin; mysql> grant all on zabbix_proxy_passive.* to proxy@'10.0.0.%' identified by '123456' ; [root@zabbix-proxy-passive zabbix-5.0.13] /root/zabbix-5.0.13 [root@zabbix-proxy-passive zabbix-5.0.13]
MySQL 8.0 特殊配置 MySQL 8.0 出现下面错误
1 2 3 4 5 6 7 [root@zabbix-proxy-active ~] 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...
错误原因:
1 2 MySQL8.0 默认使用caching_sha2_password作为身份验证插件,而旧版是使用mysql_native_password。 当连接MySQL时报错“plugin caching_sha2_password could not be loaded”时,可换回旧版插件。
解决方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@zabbix-mysql-master ~] 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; [root@ubuntu2004 ~] [root@ubuntu2004 ~] [root@zabbix-mysql-master ~] [root@zabbix-mysql-master ~]
主动模式配置 修改proxy配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 [root@zabbix-proxy-active ~] ProxyMode=0 Server=10.0.0.100 Hostname=zabbix-proxy-active DBHost=localhost DBName=zabbix_proxy_active DBUser=proxy DBPassword=123456 LogFile=/var/log/zabbix/zabbix_proxy.log LogFileSize=0 DebugLevel=4 EnableRemoteCommands=1 PidFile=/var/run/zabbix/zabbix_proxy.pid SocketDir=/var/run/zabbix ProxyLocalBuffer=360 ProxyOfflineBuffer=720 HeartbeatFrequency=60 ConfigFrequency=60 DataSenderFrequency=60 JavaGateway=10.0.0.101 StartJavaPollers=10 SNMPTrapperFile=/var/log/snmptrap/snmptrap.log CacheSize=8M StartDBSyncers=4 HistoryCacheSize=16M HistoryIndexCacheSize=4M Timeout=30 ExternalScripts=/usr/lib/zabbix/externalscripts LogSlowQueries=3000 [root@zabbix-proxy-active ~] [root@zabbix-proxy-active ~] State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 100 127.0.0.1:25 0.0.0.0:* LISTEN 0 128 0.0.0.0:10050 0.0.0.0:* LISTEN 0 128 0.0.0.0:10051 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 100 [::1]:25 [::]:* LISTEN 0 128 [::]:10050 [::]:* LISTEN 0 128 [::]:10051 [::]:* LISTEN 0 70 *:33060 *:* LISTEN 0 128 *:3306 *:* [root@zabbix-proxy-active ~] 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 ~] |-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 ~] zabbix 5530 1 0 22:07 ? 00:00:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf zabbix 5532 5530 0 22:07 ? 00:00:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec] zabbix 5533 5530 0 22:07 ? 00:00:00 /usr/sbin/zabbix_agentd: listener zabbix 5534 5530 0 22:07 ? 00:00:00 /usr/sbin/zabbix_agentd: listener zabbix 5535 5530 0 22:07 ? 00:00:00 /usr/sbin/zabbix_agentd: listener zabbix 5536 5530 0 22:07 ? 00:00:00 /usr/sbin/zabbix_agentd: active checks ......
修改Zabbix Agent 配置文件为主动模式的 Zabbix Proxy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 [root@centos8 ~] [root@centos8 ~] LogFile=/tmp/zabbix_agentd.log Server=10.0.0.100,10.0.0.101 ServerActive=10.0.0.101 Hostname=10.0.0.103 [root@centos8 ~] [root@centos8 ~] 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 24241:20200830:233105.236 agent 24242:20200830:233105.236 agent 24244:20200830:233105.236 agent 24240:20200830:233105.239 agent 24243:20200830:233105.239 agent [root@zabbix-proxy-active ~] 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
在 Zabbix Server 上添加代理 Proxies 管理– agent 代理程序(英文环境为Proxies,汉化翻译不准确)
注意:agent代理程序名称要和proxy 配置文件中Hostname指定的名称相同,否则会现 proxy “zabbix-proxy-active” not found的日志提
中文界面
在Zabbix Server 上配置 Zabbix Agent 使用主动代理
验证主机状态 注意: 如果不成功,可以删除后再重新添加监控的主机或者重启动 proxy 服务
被动模式配置 配置文件说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ProxyMode=1 server=10.0.0.100 Hostname=zabbix-proxy-passive-wang proxy DBHost=10.0.0.101 DBName=zabbix_proxy_passive DBUser=proxy DBPassword=123456 DBPort=3306 ListenPort=10051 LogFile=/tmp/zabbix_proxy.log Enab1eRemoteCommands=1 ProxyLocalBuffer=720 ProxyofflineBuffer=720 ConfigFrequency=5 startPo1lers=20 javaGatewayPort=10052 startJavaPollers=20 cachesize=2G Historycachesize=2G HistoryIndexcachesize=128M Timeout=30 LogslowQueries=3000 HeartbeatFrequency=60 DatasenderFrequency=5 JavaGateway=10.0.0.102
修改proxy配置文件 范例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 [root@zabbix-proxy-passive ~] ProxyMode=1 Server=10.0.0.100 Hostname=zabbix-proxy-passvie-wang LogFile=/tmp/zabbix_proxy.log DBHost=localhost DBName=zabbix_proxy_passive DBUser=proxy DBPassword=123456 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] 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 ~] [root@zabbix-proxy-passive ~] State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 100 127.0.0.1:25 0.0.0.0:* LISTEN 0 128 0.0.0.0:10051 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 100 [::1]:25 [::]:* [root@zabbix-proxy-passive ~] 44417:20200830:225813.637 proxy 44419:20200830:225813.637 proxy 44429:20200830:225813.638 proxy 44421:20200830:225813.639 proxy 44427:20200830:225813.640 proxy 44423:20200830:225813.644 proxy 44426:20200830:225813.651 proxy 44425:20200830:225813.655 proxy 44424:20200830:225813.662 proxy 44428:20200830:225813.666 proxy 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 44452:20200830:225926.087 proxy 44454:20200830:225926.189 proxy 44456:20200830:225926.190 proxy
在 Zabbix Server 上添加代理 Proxies 注意:选中被动模式和端口10051
注意: 模板也要使用被动模板
在Zabbix Server 上配置Zabbix Agent 使用被动代理
修改Zabbix Agent 配置文件为被动模式的 Zabbix Proxy 1 2 3 4 5 6 7 8 9 10 11 [root@centos8 ~] 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 Hostname=10.0.0.104 Timeout=30 Include=/etc/zabbix/zabbix_agentd.d/*.conf [root@centos8 ~]
验证主机状态 注意: 被动模式下变成绿色比较慢,有时需要等30分钟才能看到结果,但是最新数据可能比较快就能采集到
如果不成功,可以删除后再重新添加监控的主机
Zabbix 实现自动化运维 Zabbix 网络发现 Zabbix 网络发现介绍 之前都是手动一台一台主机的添加到 Zabbix 中进行监控,很是繁琐,可以利用自动发现功能,自动添加被监控的主机
当众多的服务器都已经安装了agent或者snmp后,利用自动发现功能,Zabbix server 可以自动扫描预先配置好的ip段,自动添加主机,自动关联模板,自动加到主机组里等等。
网络发现功能更快速的部署zabbix、简化zabbix管理、并且在经常变动的环境里面也不需要花太多的精力,毕竟网络发现也能随时发现变化。
当然网络发现也不是万能的,虽然网络发现能干很多事情,但是它无法发现网络拓扑的变化。
由于自动发现效率比较低,严重消耗Zabbix Server资源和网络带宽,大规模环境中较少使用
自动发现虽然能自动完成发现并添加主机,但仍然存在一些问题
发现时间长,效率较低
扫描过程中容易漏扫
当IP地址不固定难以实现
无法实现不同类型主机关联不同模板
官方帮助
1 https://www.zabbix.com/documentation/5.0/zh/manual/discovery/network_discovery
实现 Zabbix 网络发现 自动发现由两个步骤组成:
发现discovery: Zabbix周期性地扫描在”网络发现规则”中定义的IP段,发现满足规则的主机
动作action: 对这些主机完成动作,包括添加主机、添加模板、发送通知等等。
案例: 自动发现需求
1 2 3 4 5 6 发现有Zabbix agent运行的主机 每10分钟执行一次 如果主机正常运行时间超过2分钟,添加主机 将Linux主机添加到“Linux servers”组 链接模板Template OS Linux 到Linux主机 如果主机停机时间超过24小时,删除主机
创建自动发现指定需要监控的网段 配置– 自动发现– 创建发现规则
指定名称,IP范围和逢动发现检查等信息
可见名称为IP地址
创建添加主机的自动发现动作 创建新的动作
系统默认内置动作,也可以修改已有的被禁用自动发现动作
启用此动作
操作增加三个操作: 添加主机,添加群组,添加模板
也可以添加发送消息给Admin等操作
创建删除主机的自动发现动作
验证自动发现的结果 一段时间后,可以观察到下面结果,自动添加两台主机并关联相应的模板
将客户端关机后,过一天后,再观察是否自动删除此主机
监测 – 自动发现, 可以看到下面的删除的主机
Zabbix 自动注册 Zabbix 自动注册介绍 当客户端众多时,将每台主机手动添加到Zabbix,还手动添加关联模板,无疑是低效的.
但是利用网络发现实现,Zabbix Server 资源消耗又比较严重
利用Zabbix的自动注册功能,实现添加主机的自动化,可以大幅减少运维的工作量,减少Zabbix Server 的资源消耗
此方式和自动发现不同,是由Active agent主动发起请求zabbix server将这些agent加到主机里。
注意: Agent 必须使用主动模式才支持自动注册
自动注册由于比自动发现效率更好,Zabbix Server资源消耗更少,更适合大规模及云环境IP地址不固定的场景使用
官方帮助
1 https://www.zabbix.com/documentation/5.0/zh/manual/discovery/auto_registration
在Zabbix agent 端的配置文件修改以下项目
1 2 3 4 5 6 Server=<Zabbix Server IP> ServerActive=<Zabbix Server IP> #客户端主动模式是实现自动注册的前提条件 Hostname=<agent IP> #HostnameItem=system.hostname HostMetadata==<key> #非必须项,可以做为添加主机的验证标识和分类,或者实现加入主机的验证功能 HostMetadataItem=<监控项Item> #非必须项,监控项的值可以做为添加主机的验证标识和分类
案例: 实现 Linux 主机自动注册 修改 Zabbix agent 的配置 范例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@centos8 ~] Server=zabbix.wang.org ServerActive=zabbix.wang.org Hostname=web-10.0.0.18 HostMetadata=123456 [root@centos8 ~] [root@zabbix-server ~] Linux rocky8.wang.org 4.18.0-348.el8.0.2.x86_64 2021 x86_64 [root@zabbix-server ~] rocky8.wang.org
在 Zabbix Server 配置动作 在配置—动作—选择自动注册动作
创建新动作
指定动作中条件的主机名的值
或者使用元数据添加
指定操作
指定操作,添加主机,添加主机到主机群组,关系相关模板
验证结果 稍过一会儿,再观察可以看到下面显示添加主机成功
案例: 将 Windows 主动自动注册 修改Agent 配置
重启服务
创建自动注册动作 配置–动作– 自动创建动作 – 创建动作
验证结果
基于 Ansible 实现批量的自动注册 略
Zabbix API 实现自动化运维 Zabbix API 介绍 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组功能的能力,而又无需直接使用源代码,或理解内部工作机制的细节。
Zabbix API允许你以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问。它广泛用于:
创建新的应用程序以使用Zabbix
将Zabbix与第三方软件集成
自动执行常规任务
Zabbix API是基于Web的API,作为Web前端的一部分提供。它使用JSON-RPC 2.0协议,这意味着:
该API包含一组独立的方法
客户端和API之间的请求和响应使用JSON格式进行编码
官方参考文档:
1 2 3 4 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 支持各种语言的开发库
1 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
1 2 3 4 5 6 7 user.login host.get(create|delete|update) hostgroup.get(create|delete|update) item.get(create|delete|update) history.get event.get trigger.get
API 使用案例 获取 Token 在访问Zabbix内部的任何数据之前,需要登录并获得身份验证令牌。这可以使用user.login方法来完成。
假设以Zabbix的Admin用户登录。那么JSON请求将是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [root@zabbix-server ~] 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 ~] [root@zabbix-server ~] { "jsonrpc" : "2.0" , "result" : "6e936114704269310d372a19c409e93d" , "id" : 1 } [root@zabbix-server ~] [root@zabbix-server ~] { "jsonrpc" : "2.0" , "result" : "6e936114704269310d372a19c409e93d" , "id" : 1 }
使用以上令牌获取所有主机列表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 [root@zabbix-server ~] 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 ~] { "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 }
使用以上令牌获取所有主机信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 [root@zabbix-server ~] 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 ~] [root@zabbix-server ~] { "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 }
获取指定主机信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 [root@zabbix-server ~] 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 ~] { "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 }
获取所有用户信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 [root@zabbix-server ~] 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 ~] { "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 }
获取所有模板 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 [root@zabbix-server ~] 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 ~] { "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" , ......
获取指定的模板 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 [root@zabbix-server ~] 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 ~] { "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 }
更新指定主机 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@zabbix-server ~] 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
删除指定主机 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 [root@zabbix-server ~] 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[root@zabbix-server ~] { "jsonrpc" : "2.0" , "result" : { "hostids" : [ "10272" ] }, "id" : 1 } [root@zabbix-server ~] { "jsonrpc" : "2.0" , "result" : [ { "hostid" : "10084" , "host" : "Zabbix server" }, { "hostid" : "10270" , "host" : "10.0.0.105" } ], "id" : 1 }
批量创建新主机 API添加主机前,需要预先知道要添加的主机IP、此主机预先安装并配置好zabbix agent、预先知道要关联的模板ID/组ID等信息,然后同API提交请求添加
参考链接
1 https://www.zabbix.com/documentation/5.0/zh/manual/api/reference/hostinterface/object#host-interface
范例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 [root@zabbix-server ~] 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 ~] { "jsonrpc" : "2.0" , "result" : { "hostids" : [ "10273" ] }, "id" : 1 } [root@zabbix-server ~] { "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管理页面验证结果
范例: 批量添加主机
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 [root@zabbix-server ~] 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.phpdone [root@zabbix-server ~]
查看代理proxy主机 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 [root@zabbix-server ~] 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 ~] { "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 }
添加指定代理的主机 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 [root@zabbix-server ~] 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 ~] { "jsonrpc" : "2.0" , "result" : { "hostids" : [ "10277" ] }, "id" : 1 }
批量添加指定代理的主机 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 [root@zabbix-server ~] 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.tooldone [root@zabbix-server ~] { "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管理页面验证结果
Zabbix 优化 zabbix 监控主机和监控项比较少的时候,无需过度优化!
优化方法 1 2 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 缓存调优,发现哪种缓存的剩余内存少,就加大它的缓存值
数据库空间估算 监控项的保留时长,历史数据默认90天,趋势数据1年
占用的数据库磁盘空间可能会很大,如何估算空间占用?官方给出相关的公式
官方公式:
1 2 https://www.zabbix.com/documentation/6.0/zh/manual/installation/requirements https://www.zabbix.com/documentation/5.0/zh/manual/installation/requirements
下表包含可用于计算 Zabbix 系统所需磁盘空间的公式:
参数 所
磁盘空间的计算公式 (单位:字节)
Zabbix 配置文件 固定大小
通常为 10MB 或更少。
History
days*(items/refresh rate)*24*3600*bytes items:监控项数量。 days:保留历史数据的天数。 refresh rate:监控项的更新间隔。 bytes:保留单个值所需要占用的字节数,依赖于数据库引擎,通常为 ~90 字节。
Trends
days*(items/3600)*24*3600*bytes items:监控项数量。 days:保留历史数据的天数。 bytes:保留单个趋势数据所需要占用的字节数,依赖于数据库引擎,通常为 ~90 字节。
Events
days*events*24*3600*bytes events:每秒产生的事件数量。假设最糟糕的情况下,每秒产生 1 个事件。 days:保留历史数据的天数。 bytes:保留单个趋势数据所需的字节数,取决于数据库引擎,通常为 ~170 字节。
根据使用 MySQL 后端数据库的实际统计数据中收集到的平均值,例如监控项为数值类型的值约 90 个字节,事件约 170 个字节。
因此,所需要的磁盘总空间按下列方法计算:
配置文件数据+ 历史数据+ 趋势数据+ 事件数据
范例: 假设 100台主机,每个主机约有100个监控项,每个监控项每间隔60s获取一次数值
1 2 3 4 5 6 7 8 9 10 11 12 13 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
Zabbix Server 配置文件解析 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 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 取值范围: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日志里面记录。养成看日志的好习惯。
实战优化案例 案例 下图为 Zabbix 数据采集进程的繁忙度
修改自动发现规则
再次观察监控项,可以看到繁忙度大幅提高
修改 Zabbix Server 配置
1 2 3 [root@zabbix-server ~] StartDiscoverers=100 [root@zabbix-server ~]
Zabbix Server 还有其它相关进程
案例 缓存使用情况如下图
Zabbix Server 相关缓存的配置项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [root@zabbix-server ~]
案例 利用API添加几百台监控的主机,因为默认值8M太小 ,会造成Zabbix Server 不断的重启,可以看到如下日志信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 root@zabbix-server ~] ...... 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 8637:20220617:213239.316 server 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 in 80 free chunks 8637:20220617:213239.535 of those, 7261720 bytes are in 70183 used chunks 8637:20220617:213239.535 of those, 1124192 bytes are used by allocation overhead 8637:20220617:213239.535 ================================ [root@zabbix-server ~] Jun 17 21:37:18 zabbix-server systemd[1]: zabbix-server.service: Scheduled restart job, restart counter is at 31. Jun 17 21:37:18 zabbix-server systemd[1]: Stopped Zabbix Server. Jun 17 21:37:18 zabbix-server systemd[1]: Starting Zabbix Server... Jun 17 21:37:18 zabbix-server systemd[1]: Started Zabbix Server. Jun 17 21:37:18 zabbix-server kill [9306]: 用法: Jun 17 21:37:18 zabbix-server kill [9306]: kill [options] <pid> [...] Jun 17 21:37:18 zabbix-server kill [9306]: 选项: Jun 17 21:37:18 zabbix-server kill [9306]: <pid> [...] send signal to every <pid> listed Jun 17 21:37:18 zabbix-server kill [9306]: -<signal>, -s, --signal <signal> Jun 17 21:37:18 zabbix-server kill [9306]: specify the <signal> to be sent Jun 17 21:37:18 zabbix-server kill [9306]: -l, --list=[<signal>] list all signal names, or convert one to a name Jun 17 21:37:18 zabbix-server kill [9306]: -L, --table list all signal names in a nice table Jun 17 21:37:18 zabbix-server kill [9306]: -h, --help 显示此帮助然后离开 Jun 17 21:37:18 zabbix-server kill [9306]: -V, --version 显示程序版本然后离开 Jun 17 21:37:18 zabbix-server kill [9306]: 欲了解更多详细信息,请参见 kill (1)。 Jun 17 21:37:18 zabbix-server systemd[1]: zabbix-server.service: Control process exited, code=exited, status=1/FAILURE Jun 17 21:37:18 zabbix-server systemd[1]: zabbix-server.service: Failed with result 'exit-code' . [root@zabbix-server ~] ● 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: 9509 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS) Process: 9528 ExecStop=/bin/kill -SIGTERM $MAINPID (code=exited, status=1/FAILURE) Main PID: 9526 (code=exited, status=0/SUCCESS) 6月 17 21:38:51 zabbix-server.wang.org systemd[1]: zabbix-server.service: Control process exited, code=exited, status=1/FAILURE 6月 17 21:38:51 zabbix-server.wang.org systemd[1]: zabbix-server.service: Failed with result 'exit-code' . [root@zabbix-server ~] CacheSize=256M [root@zabbix-server ~] active
案例 由于添加了很多不可访问的主机,会出现unreachable poller进程繁忙的情况,原因是此进程只有一个
1 2 3 [root@zabbix-server ~] zabbix 9820 0.0 0.6 365768 12308 ? S 21:40 0:00 /usr/sbin/zabbix_server: unreachable poller root 11642 0.0 0.0 9524 720 pts/3 S+ 22:06 0:00 grep --color=auto unreachable
告警
修改配置,加大进程数
1 2 3 4 5 6 7 [root@zabbix-server ~] StartPollersUnreachable=100 [root@zabbix-server ~] [root@zabbix-server ~] 101
再次观察数据和图形,可以看到繁忙度大幅下降
案例 自动发现的进程只有一个
1 2 3 4 [root@zabbix-server ~] zabbix 12141 0.0 0.5 366096 10876 ? S 22:09 0:00 /usr/sbin/zabbix_server: discoverer root 13553 0.0 0.1 9524 2620 pts/3 S+ 22:25 0:00 grep --color=auto discoverer
多创建几个自动发现场景,缩短发现时间,配置如下
观察进程繁忙程度
出现告警
修改配置,加大进程数
1 2 3 4 5 6 7 [root@zabbix-server ~] StartDiscoverers=100 [root@zabbix-server ~] [root@zabbix-server ~] 101
观察进程状态繁忙度大幅下降
案例 进程数加大,可能会导致数据库连接过多,超过最大值,导致Zabbix 无法启动,解决方案,加大数据库的连接数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@zabbix-server ~] ...... 20383:20220617:223102.021 server 20386:20220617:223102.022 server 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 ~] [mysqld] max_connections=1000 [root@zabbix-server ~]
Zabbix 高可用 Zabbix 高可用性实现 在前面的部署架构中,Zabbix Server 和MySQL都有只有一台主机,存在单点问题
可以使用Keepalived 实现 Zabbix Server的高可用
基础架构为LAMP或LNMP环境,采用keepalived实现zabbix服务器高可用,保证主服务器或者Httpd宕掉后能切换到从服务器
MySQL数据库做主主同步,保证两边服务器数据的一致性,实现数据库的高可用。
注意: 从 Zabbix 6.0 官方提供了高可用解决方案
官方链接
1 https://www.zabbix.com/documentation/6.0/zh/manual/concepts/server/ha#implementation-details
实战案例:实现 Zabbix Server 的高可用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 [root@ka1 ~] SourceIP=10.0.0.10 [root@ka1 ~] Server=127.0.0.1,10.0.0.10 [root@ka1 ~] [root@ka2 ~] [root@ka1 ~] ! 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_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 ~] 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 } track_script { check_zabbix_server } } [root@ka2 ~] 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 { } }