Zabbix企业级系统及业务监控平台


 

Zabbix是一种广泛使用的开源网络监控和报警系统,主要用于实时监测网络设备、服务器、应用程序以及各种IT基础设施的性能和可用性。从运维的角度来看,Zabbix在监控、警报、数据收集和分析等方面提供了丰富的功能,帮助运维团队及时发现和解决问题,提升系统稳定性和性能。

以下是从运维角度描述的关键功能和特点:

  1. 监控配置和数据收集: 运维团队可以通过Zabbix配置监控项,监控对象可以是服务器资源(CPU、内存、磁盘)、网络设备(路由器、交换机)、应用程序(数据库、Web服务器)等。Zabbix能够周期性地收集监控数据,支持多种监控方式,如SNMP、Agent、JMX等。

  2. 灵活的触发器和警报: 运维人员可以设置触发器来定义问题的条件,一旦某个监控项满足触发器的条件,Zabbix会产生警报。这可以帮助运维人员及时发现问题,采取措施解决。警报通知可以通过电子邮件、短信、Slack等渠道发送。

  3. 图形化的数据展示: Zabbix可以生成各种图表,展示监控数据的历史和趋势。这有助于运维人员分析性能问题、容量规划和资源利用率等。

  4. 自动发现: Zabbix支持自动发现新设备和服务。这在动态环境中特别有用,避免了手动添加新设备的繁琐过程。

  5. 模板和应用程序: 运维人员可以创建模板,将一组监控项、触发器和图表打包,然后应用于多个设备。这样可以节省配置时间,并保持一致性。

  6. 性能分析和报告: Zabbix提供性能分析工具,可以帮助识别瓶颈、资源消耗和性能下降的原因。它还支持创建定制化的报告,用于向团队或上级汇报监控数据和趋势。

  7. 高度可定制化: Zabbix允许用户根据需要进行扩展和自定义,可以编写自定义的监控脚本、触发器逻辑和报警方案。

  8. 安全性: Zabbix提供了用户认证和权限控制,可以确保只有授权人员能够访问监控数据和配置。

  9. 分布式监控: 对于大规模的基础设施,Zabbix支持分布式监控,可以减轻中心服务器的负担并提高扩展性。

总的来说,Zabbix作为一款全面的监控系统,从运维的角度提供了许多有价值的功能,帮助运维人员及时发现问题、分析数据并做出明智的决策,从而提高系统的可靠性和性能。

 

第一章 zabbix部署及配置

Zabbix是一个复杂的监控系统,由多个组件组成,每个组件都有特定的作用。以下是Zabbix的主要组件及其作用的简要概述:

截屏2023-08-28 10.03.09

  1. Zabbix Server: Zabbix的核心组件,负责处理监控数据、触发警报、存储历史数据以及生成图表和报告。它还管理配置信息,如监控项、触发器、模板等。

  2. Zabbix Database: 这是Zabbix服务器使用的数据库,用于存储监控数据、配置信息和历史数据。通常可以使用MySQL、PostgreSQL等数据库管理系统。

  3. Zabbix Frontend: 这是Web界面,用于与Zabbix系统交互。运维人员可以通过Web界面配置监控项、查看监控数据、设置触发器和生成报告。

  4. Zabbix Agents: Agent是安装在被监控设备上的轻量级软件,负责收集本地系统的性能和状态数据。Agent可以主动向Zabbix Server报告数据,也可以被动地接受Zabbix Server的请求。

  5. Zabbix Proxy: 代理用于分布式监控环境,可以减轻Zabbix Server的负担。代理收集监控数据并将其转发给Zabbix Server。代理还可以缓存数据以供断线时使用。

    1. Zabbix Agents Active Checks: 这是Zabbix Agent的一种工作模式,它允许Agent主动向Zabbix Server发送监控数据,而不是等待Server的请求。这有助于更及时地收集数据。

    2. Zabbix Templates: 模板是一组预定义的监控项、触发器和图表的集合,可以应用于多个设备。模板有助于保持监控配置的一致性和可重用性。

      1. Triggers: 触发器定义了问题发生的条件,当监控项的值满足触发器定义的条件时,Zabbix会触发警报

      2. Items: 监控项是需要监控的特定指标,如CPU利用率、内存使用量等。它们可以通过不同的方式进行收集

      3. Graphs: 图表用于展示监控数据的历史和趋势,可以帮助运维人员分析性能问题和变化

      4. Screens: 屏幕是自定义的仪表板,允许用户将图表、触发器和其他信息组织在一个界面上,以便一目了然地查看监控状态

    3. Actions: 行动定义了当触发器触发时要执行的操作,如发送警报通知、执行远程命令等。

总的来说,Zabbix的这些组件共同协作,构建了一个强大的监控和报警系统,帮助运维团队实时监控系统状态、及时发现问题并采取相应的措施,从而提高IT基础设施的可用性和性能。

 

1.1 zabbix-server部署方案

部署zabbix-server到CentOS系统中可以参考官方文档, zabbix-server部署文档 来进行安装。

 

1.2 配置zabbix访问协议为https

虽然zabbix作为企业的内部平台, 但是也要为了安全去配置https来进行服务。从而提供更加安全的监控服务。如下方式可将https配置到zabbix的frontend服务上;

 

1.3 zabbix-agent部署方案

部署zabbix-agent到CentOS系统中可以参考官方文档, zabbix-agent部署文档来进行安装。

 

1.4 zabbix-agent自动注册

Zabbix Agent 自动注册是 Zabbix 监控系统中的两个重要功能,它们可以帮助简化监控设备和服务的添加与管理过程。

自动注册(Auto Registration): 自动注册是指允许新设备自动注册到 Zabbix Server,无需手动配置。它常用于云环境或动态变化的网络中,可以帮助迅速添加新主机。

自动注册的步骤如下:

  1. 定义自动注册动作: 在 Zabbix 中,你可以配置自动注册动作。这个动作定义了如何处理自动注册请求。

  2. 主机发现和注册: 新设备启动 Zabbix Agent 后,它可以发起自动注册请求。Zabbix Server 会检查这些请求,并根据定义的自动注册动作,自动将新设备添加为监控主机。

这两个功能的结合可以使设备的添加和管理变得更加自动化和便捷。它们适用于大规模、动态变化的环境,如云计算、容器化环境等,有助于降低运维工作负担,提高监控系统的灵活性和扩展性。

 

第二章 zabbix监控指标采集

Zabbix监控系统通过采集各种监控指标来实现对设备、应用程序和网络的实时监控。这些指标可以是服务器的性能数据、应用程序的运行状态、网络设备的状态等。Zabbix通过多种方式进行指标采集,具体的原理和方式如下:

不同的指标采集方式适用于不同的场景和监控对象。Zabbix的灵活性使其可以适应各种复杂的监控需求,从而实现对整个IT基础设施的全面监控。

 

2.1 zabbix中的术语

  1. Host(主机): 要监控的设备、服务器、应用程序等的逻辑实体。它可以是物理服务器、虚拟机、网络设备等

  2. Template(模板): 一组预定义的监控项、触发器、图表等配置,可以应用于多个主机,以确保一致性和重用性

    • Item(监控项): 用于收集特定指标数据的配置单元,例如CPU使用率、内存消耗等

    • Trigger(触发器): 定义了触发警报的条件,基于监控项的数据。当条件满足时,Zabbix会产生警报

    • Graph(图表): 用于显示监控数据的图形表示,可以展示时间趋势和性能数据变化

  3. Action(动作): 当触发器被触发时,执行的操作。可以是发送警报通知、执行命令等

  4. Agent(采集端): 在监控目标设备上运行的轻量级软件,用于主动采集本地性能数据并发送给Zabbix Server

  5. Proxy(代理服务器): 用于分布式监控的中间服务器,可以减轻Zabbix Server的负担,同时支持缓存数据

  6. Screen(屏幕): 一个自定义的仪表板,可以将多个图表、触发器和其他信息组织在一个界面上,以方便查看

  7. User(用户): 可以访问Zabbix前端的用户,具有不同的权限和角色,如管理员、用户等

  8. Media Type(通知方式): 定义警报通知如何发送的配置,可以包括电子邮件、短信、Slack等

  9. Host Group(主机组): 将多个主机组织到一起的逻辑集合,可以用于更好地管理和组织主机

  10. User Group(用户组): 将多个用户组织到一起的逻辑集合,可以用于分配权限和角色

 

2.2 监控指标分类

对于系统层而言:

 

对于中间件层而言:

 

对于业务进程而言:

 

2.3 监控指标采集设置

添加自定义key监控指标的步骤:

  1. 在 “Configuration” 创建 “host groups” 主机组,例如: qfcc.online、qfcc.online_system_basic_monitor ......

  2. 在 “Configuration” 创建 “Templates” 监控模版,例如: qfcc.online_system_basic_by_cpu

  3. 在 “qfcc.online_system_basic_by_cpu” 模版中,依次创建监控项(items)、触发器(triggers)、图像(graphs)

    • 监控项:根据 “key” 中所提供的 键函数进行选择,并将其中的参数进行修改【自定义key方式】

    • 触发器:根据 “监控项(items)” 对其设定阈值,当超过阈值时进行报警,后续会与 “Action” 配合达成即时通讯软件的报警作业

    • 图形:用于展示随着时间而变化的监控指标数据趋势走向图,用于观察机器或者服务的走向

  4. 在 “Configuration” 将 “Hosts” 中的主机增加监控模版

 

添加自定义Scripts监控指标的步骤:

  1. 在 “Configuration” 创建 “host groups” 主机组,例如:qfcc.online_scripts_service_monitor ......

  2. 在 ”Configuration“ 创建 “Templates” 监控模版,例如:qfcc.online_scripts_service_by_nginx

  3. 在 “qfcc.online_scripts_service_by_nginx” 模版中,依次创建监控项(items)、触发器(triggers)、图像(graphs)

    • 在zabbix-agent机器中的 /etc/zabbix/zabbix_agentd.d/ 增加监控脚本(shell、python编写均可)

    • 在zabbix-agent机器中测试脚本是否可用、增加执行权限

    • /etc/zabbix/zabbix_agentd.conf 中增加自定义脚本的key值,并重新启动zabbix-agent服务:

      UserParameter=KEY_NAME[*],/bin/bash /etc/zabbix/zabbix_agentd.d/SCRIPT_NAME.sh "$1" "$2"

    • 在 zabbix-server中使用zabbix-get命令进行测试:

      zabbix_get -s IPADDRESS -p 10050 -k "KEY_NAME['参数1', '参数2']"

  4. 在 “Configuration” 将 “Hosts” 中的主机增加监控模版

 

2.4 监控指标阈值设定规范

在设定阈值时,你应该参考历史数据,所谓的监控并不是在一开始就要去设定阈值,而是根据监控了一段时间后,得到的历史数据进行设定。在得到的历史数据中一定会有指标的高峰值,也一定会有指标的平均值。如果指标的监控数据始终贴近高峰值, 那么在设定阈值时还要去参考在这些监控数据的时刻上,系统层面的监控数据:

如果指标的监控数据始终贴近平均值,那么在设定阈值的时候可以将高峰值和平均值进行相加除以2, 所得数据为阈值。在后续的运维工作中可以根据图形的变化而去修改阈值的设定,或者按照业务的流量增长比率去提高阈值的设定,或从架构层面进行优化且平摊流量压力后保持该设定的阈值不变亦可。

 

第三章 监控报警

Zabbix的报警机制是一个关键的功能,它可以帮助你在出现问题或异常时及时获得通知,以便你可以采取适当的措施来处理问题。

截屏2023-08-29 10.24.38

Zabbix的报警机制包括以下几个主要组件和步骤:

  1. 触发器(Triggers): 触发器定义了在满足特定条件时触发警报的规则。这些条件通常是监控项的状态或值。例如,当CPU利用率超过阈值时,可以触发一个CPU利用率过高的触发器

  2. 动作(Actions): 动作是指在触发器状态变化时执行的操作。动作可以包括发送通知、执行命令和脚本等。每个动作可以定义多种通知方式,如电子邮件、短信、Slack通知等

  3. 通知方式(Media Types): Zabbix支持多种通知方式,称为媒介类型,如电子邮件、短信、脚本等。你可以为每种媒介类型配置相关参数,以便Zabbix可以通过这些方式发送通知

  4. 通知: 当触发器状态变化时,Zabbix会根据定义的动作发送通知。通知可以包含问题的详细信息,以及建议的解决方法

报警机制的工作流程如下:

  1. 触发器检测状态: Zabbix定期检查触发器的条件是否满足,例如,监控项的值是否超过了阈值

  2. 触发器状态变化: 当触发器的条件从“OK”状态变为“PROBLEM”状态(或反之),Zabbix会触发相应的动作

  3. 动作执行: 执行与触发器关联的动作。动作可以配置为发送通知、执行脚本等

  4. 通知发送: Zabbix根据动作的配置使用相应的媒介类型发送通知,通知内容包括问题的详细信息和解决方法

  5. 通知接收和处理: 接收通知的用户或团队可以根据通知的内容采取适当的措施来解决问题

 

邮件报警的配置流程:

  1. 在 “administration” 找到 “user groups” 在其中创建 “ops” 组

  2. 在 “administration” 找到 “users” 在其中创建用户并将其加入到 “ops” 组内

  3. 在 “administration” 找到 “media types” 中点击 “create media type” 创建报警媒介

    • 输入报警媒介的名字,smtp的服务器地址(smtp.163.com)、smtp的后缀(163.com)、smtp发送标识(你邮件的地址@163.com)

    • 认证方式选择 “username and password” 在其中输入 username:"你邮件的地址" password:“授权码”

    • 在上方菜单中的 “message template” 中添加 problem、problem recovery、problem update三个信息模版

    • 选择刚刚创建的用户, 在其 media 中增加 这个报警媒介的接收, 并配置自己的邮件地址

  4. 在 “Configuration” 中找到 “Actions” 在其中点击 “Trigger actions” 创建触发器的关联动作

    • 输入关联动作的名称

    • 增加与触发器的关联条件

    • 在上方的第二个菜单"operations"中, 增加操作

 

脚本报警的配置流程:

  1. 在 “administration” 找到 “user groups” 在其中创建 “ops” 组

  2. 在 “administration” 找到 “users” 在其中创建用户并将其加入到 “ops” 组内

  3. 在 “administration” 找到 “media types” 中点击 “create media type” 创建报警媒介

    • 给定名称

    • 设置脚本类型

    • 设置脚本名称

    • 增加 “{ALERT.MESSAGE}” 作为报警信息

    • 在上方菜单中的 “message template” 中添加 problem、problem recovery、problem update三个信息模版

    • 在添加信息模版的时候,要记得发送报警的关键字写入到报警信息中

  4. 在 zabbix-server 机器中的 /usr/lib/zabbix/alertscripts/ 中编写上方设定的脚本

  5. 增加脚本的执行权限,并进行报警信息的测试

  6. 在 “Configuration” 中找到 “Actions” 在其中点击 “Trigger actions” 创建触发器的关联动作

    • 输入关联动作的名称

    • 增加与触发器的关联条件

    • 在上方的第二个菜单"operations"中, 增加操作

 

 

第四章 zabbix优化方法

4.1 架构层面优化

  1. 分布式架构: 将Zabbix系统分成多个组件,如Zabbix Server、Zabbix Proxy和数据库服务器,以分担负载并提高性能。使用Zabbix Proxy可以减轻Zabbix Server的负担,还可以将监控数据汇总到一个中心数据库

  2. 负载均衡: 在分布式环境中,使用负载均衡器将请求分发到多个Zabbix Server或Proxy实例,以平衡负载并提高可用性

  3. 数据库优化: 使用高性能数据库,如MySQL或PostgreSQL,优化数据库配置、索引和查询,以提高数据存储和检索效率

  4. 合理的数据保留策略: 设定合适的历史数据保留期限,避免过多的历史数据影响性能

  5. 分层级监控: 将监控对象按照重要性进行分级,只对关键对象进行实时监控,其他对象采用较慢的监控频率

  6. 合理的监控项和触发器: 避免创建过多的监控项和触发器,只关注关键指标和问题

  7. 合理的通知策略: 配置适当的通知策略,避免过多的警报和通知

  8. 缓存和代理: 使用Zabbix代理来缓存数据,减少对目标设备的直接查询,提高性能

  9. 监控项和触发器模板: 使用模板来集中管理监控项和触发器的配置,确保一致性和重用性

  10. 监控数据压缩: 启用Zabbix的数据压缩功能,减小数据库存储和网络传输开销

  11. 定期维护: 定期检查Zabbix系统的各个组件,清理无用的配置、数据和对象

  12. 监控Zabbix本身: 监控Zabbix Server和Proxy自身的性能和状态,确保它们正常运行

 

4.2 系统层面优化

  1. 文件系统优化: 使用XFS或其他适合大文件和高写入负载的文件系统

  2. 内核参数优化: 根据服务器硬件和用途,调整内核参数,例如TCP连接数、文件句柄限制等

  3. 定期备份: 定期备份Zabbix配置和数据,以防止数据丢失

  4. 日志和日志轮转: 配置日志轮转,确保Zabbix日志不会占用过多的磁盘空间

  5. 关闭不必要的服务: 禁用不必要的系统服务,以减少资源消耗和安全风险