持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
前言
Zabbix 是一款出色的、可以免费使用的、企业级的分布式监控解决方案。
Zabbix 的功能足够强大(数据采集、阈值告警、实时图例、历史数据等等),同时它也足够复杂,找到适合的应用场景很重要。对于具有一定规模的服务器集群,对于实时监控、实时告警有较高要求的环境,对于想要通过分析历史性能指标来合理调配服务器资源这样的需求, Zabbix 就有其用武之地。
笔者有幸在一个大型项目中使用 Zabbix 对应用服务器进行监控管理,该项目采用微服务架构,部署所用服务器(虚拟机)资源达 60 余台。《Zabbix 5.0 监控实战》这个小系列的文章,就是基于这样一个项目中 Zabbix 的使用经验整理而成的。这个系列偏向对 Zabbix 的实际使用, Zabbix 的安装过程可以参考笔者的另一篇文章:《超详细!中标麒麟7下源码安装Zabbix 5.0(同样适用CentOS/RedHat)》。
1 Zabbix 基本配置项
Zabbix 提供了一个 Web 管理界面,我们就是通过这个界面进行监控项的配置及实时图例的展示。
Zabbix 足够复杂,即使它提供了相当多的开箱即用的模板,其繁杂的配置项也一定会给新接触它的人带来或多或少的疑问与困扰。
我们将 Web 管理界面中最基本的配置项及它们之间的关系梳理如下:
-
Host(主机):即 Zabbix Server 要监控的设备。
-
Host group(主机群组):可以理解为对主机的逻辑分组, Zabbix 要求一个主机、一个模板都必须至少隶属于一个主机群组。
-
Template(模板):模板可以应用于多台主机(一个主机也可以链接到多个模板),是减少 Zabbix 配置的有效有段。模板包含了应用集、监控项、触发器、图形、聚合图形等配置,当然,这些配置也可以不通过模板直接添加在具体的某一个主机上,但对于多台主机,不通过模板配置,即费时费力,又无法统一管理,因此这种做法极不推荐。
-
Item(监控项):从主机收集的某一类数据,是能够体现出主机的某一类性能的独立的指标,可以设置数据收集的频率(比如一分钟收集一次指标数据)、详细的历史数据保存周期(如 7 天)、趋势数据(基于历史数据生成,但没有历史数据那么详细,以较少的数据体量记录过往趋势)的保存周期(如 1 年):
- Application(应用集):可以理解为对监控项的逻辑分组,一个监控项最多设置其隶属于一个应用集(当然也可以不设置任何应用集):
- Trigger(触发器):触发器通过一个或多个监控项,来评估主机某一方面的状态(普通信息、警告、一般严重、十分严重、灾难等),触发器本质上是一个逻辑表达式:
-
Graph(图形):通过一个或多个监控项的收集数据形成的趋势图或状态图。
-
Screen(聚合图形):聚合图形可以将多个图形放在一屏中进行展示,布局可以根据需求设置为 m 行 * n 列。
2 使用 Zabbix 监控什么?
从笔者所在项目的实际情况出发,梳理出如下想要实时监控的信息:
-
每一台虚拟机的基本指标:CPU、网络流量、内存、硬盘空间;
-
Nginx 服务器:连接数、请求数;
-
Redis 服务器:连接数、业务 key 数量、内存使用、碎片率;
-
Oracle 服务器:连接数、业务数据(用户注册量、业务办理量);
-
Java 服务器:内存、 GC 活动。
本篇将主要记录 CPU、网络流量、内存、硬盘空间这四个基本指标的监控方法,对于其它特定服务器的监控,则需要借助不同的“外力”(如 shell 脚本)才能实现,后续的文章我们再逐一介绍。
3 添加主机
在想要监控的虚拟机上完成 Zabbix Agent 的安装后,下一步就是在 Zabbix Web 页面中将这些虚拟机添加为主机。
3.1 创建主机群组
Zabbix 要求一个主机、一个模板都必须至少隶属于一个主机群组,因此在创建主机之前,需要先创建主机群组。
进入菜单:【Configuration】 -> 【Host groups】,再点击右上角的【Create Group】,输入一个群组名称,即可创建主机群组。
主机群组就是对主机的一种逻辑分类,可以从服务器用途、业务归属等角度划分。对于后续的监控来讲,这个分类其实没有太大的实际作用,因此也可以只创建一个群组,给后续所有的主机使用。
3.2 创建主机
进入菜单:【Configuration】 -> 【Hosts】,再点击右上角的【Create Host】:
-
Host name :主机名。官方文档上特别强调了,如果是 Zabbix Agent 此处的主机名应与 Zabbix Agent 配置文件中的
Hostname
一致,不过笔者在实际应用中,配置文件中的Hostname
配置的是 Linux 通过hostname
命令取到的主机名,而 Zabbix Web 页面中使用的是服务器 IP ,也是没有问题的。 -
Visible name :在 Zabbix Web 监控页面中显示的名称,比起单纯的主机名或 IP ,我们可以在主机名或 IP 后面追加一个具有业务属性的名称,使其含义更为具体清晰。
-
Groups :选择一个或多个已创建的群组。
-
Interface :监控主机的类型,一般情况下,我们都是使用
Agent
,再配置一下 Agent 的 IP 和端口即可(默认为 10050 )。
切换到下一个标签页【Templates】:
在这个页面中,可以将主机链接到多个已有的模板上(推荐使用开箱即用的【Template OS Linux by Zabbix agent】,可以快速看到丰富的监控效果)。
完成前两个标签页的配置,就可以达到基础的监控效果了,后面 5 个标签页实际中暂未使用。
3.3 批量添加主机(自动注册)
当我们有大量主机需要监控时,在 Zabbix Web 页面上一个个配置显然是会令人崩溃的。此时,我们可以通过 Discovery (发现)配合 Action (动作)来完成大量主机的自动注册。
3.3.1 创建发现规则
进入菜单:【Configuration】 -> 【Discovery】,再点击右上角的【Create discovery rule】,创建发现规则:
-
Name :为发现规则起一个名字。
-
IP range :发现的 IP 范围,常用的配置格式如:
192.168.2.1-100, 192.168.2.200
。 -
Update interval : 执行发现的时间间隔。
-
Checks :检查规则,维护界面见下图:
这里我们使用 Zabbix agent
类型、 10050 端口作为关键的发现检查条件, Key 代表的是在执行发现时, Zabbix Server 会使用 Key 从发现设备上获取相应的信息,这个信息可以为下面的 Device uniqueness criteria 、 Host name 、 Visible name 提供额外的配置选项,还可以为后续的 Action 配置提供条件支持。
这里我们简单使用 system.uname
作为 Key ,而 Device uniqueness criteria 、 Host name 、 Visible name 三个选项都使用 IP 。
配置完成,启用发现规则稍等片刻,进入菜单:【Monitoring】 -> 【Discovery】,可以看到已经自动发现了相应的主机(此时仅仅是被发现,还没有真正注册为主机):
3.3.2 使用动作完成主机的自动注册
进入菜单:【Configuration】 -> 【Action】,左上角切换为【Discovery actions】( Discovery actions 就是发现后可以执行的一些列动作), Zabbix 默认提供“ Auto discovery Linux servers ” 这样一个动作给我们使用,点击它进行编辑:
这是编辑页面:
在第一个标签页【Action】中,我们可以看到已经默认有三个条件了:
-
Received value contains Linux :发现的返回值(也就是根据上一小节我们配置的 Key :
system.uname
所得到的被监控设备的信息)包含Linux
关键字。 -
Discovery status equals Up :发现状态为
Up
。 -
Serice type equals Zabbix agent : 服务类型等于
Zabbix agent
。
这三个规则不用修改,都符合,我们还可以增加额外的规则,比如限制 IP 地址的范围。
【Action】标签页主要配置的是条件,而下一个【Operations】标签页,配置的才是要执行的操作:
这里默认的配置也已经有两条了:
-
Add to host groups :为主机添加主机群组。
-
Link to templates :为主机链接模板。
这两条配置我们按照实际的需要,进行修改。然后再添加一条 Add host
将新发现的设备添加为主机,这样就完成了自动注册的效果。
配置完成后,启用动作配置,稍等片刻,进入菜单:【Configuration】 -> 【Hosts】,可以看到已经自动注册了相应的主机:
我们目前配置的主机,都是 Zabbix agent 类型,在 Availability 这一列上,可以看到 ZBX 图标亮起(没有任何监控项的主机,这个图标是不会亮的)。
注意
完成了自动注册后,就可以将相关的 Discovery 和 Action 禁用了,它们的任务已经完成了,没有必要持续运行。
4 开始监控
4.1 使用开箱即用的模板
开箱即用的模板能够让我们跳过繁杂的监控项、图形等配置的过程,而直接进入到监控阶段。
我们简单看一下【Template OS Linux by Zabbix agent】这个模板:
它聚合了另外 7 个开箱即用的模板,聚合后,包含 11 类共 42 个监控项, 14 个触发器, 8 个图形, 1 个聚合图形。
进入菜单:【Monitoring】 -> 【Hosts】,就可以看到模板的使用效果了:
- 告警信息:告警信息是由触发器通过监控项数据评估出的系统状态,下图中我们可以看到该主机的两个问题,一个是与 Zabbix Server 的时间不同步,一个是长时间的高内存占用率:
- 图形:点击【Graphs】链接,可以看到所选主机所配置的所有图形,部分效果如下图:
- 聚合图形:点击【Screen】链接,可以对所选主机的聚合图形进行展示,多个聚合图形通过右上角的下拉选项进行切换:
4.2 自定义聚合图形
开箱即用的模板功能其实已经很丰富了,不过我们肯定还是有着自己独特的需求、习惯、甚至审美,下面我们来看如何利用模板中已有的图形,来自定义聚合图形。
进入菜单:【Monitoring】 -> 【Hosts】,点击右上角的【Create screen】,创建聚合图形:
这里的列和行的值只是初始值,在实际编辑聚合图形的布局时可以随时调整。创建完成后,通过点击【Constructor】链接,进入布局编辑页面:
页面中的加、减号,可以增加、删减行或列,点击【Change】链接,可以编辑单元格想要放置的图形:
这里需要注意的是【Dynamic item】这个选项,如果有图形勾选了这个选项,则当前聚合图形在展示时,右上角会出现切换主机的功能选项,即可以使用同一个聚合图形,方便的切换不同的主机,效果如下:
当然,我们完全可以将不同主机的相同图形,放在一个聚合图形内,这样会有直观的对比效果:
以上,我们对 Zabbix Web 页面的使用有了基本的掌握。还是那句话, Zabbix 足够强大,也足够复杂,还有更多的功能待我们去发现,去实践。