Author: liuchao
email: mirschao@gmail.com
github: https://github.com/mirschao
gitee: https://gitee.com/mirschao
Zabbix是一种广泛使用的开源网络监控和报警系统,主要用于实时监测网络设备、服务器、应用程序以及各种IT基础设施的性能和可用性。从运维的角度来看,Zabbix在监控、警报、数据收集和分析等方面提供了丰富的功能,帮助运维团队及时发现和解决问题,提升系统稳定性和性能。
以下是从运维角度描述的关键功能和特点:
监控配置和数据收集: 运维团队可以通过Zabbix配置监控项,监控对象可以是服务器资源(CPU、内存、磁盘)、网络设备(路由器、交换机)、应用程序(数据库、Web服务器)等。Zabbix能够周期性地收集监控数据,支持多种监控方式,如SNMP、Agent、JMX等。
灵活的触发器和警报: 运维人员可以设置触发器来定义问题的条件,一旦某个监控项满足触发器的条件,Zabbix会产生警报。这可以帮助运维人员及时发现问题,采取措施解决。警报通知可以通过电子邮件、短信、Slack等渠道发送。
图形化的数据展示: Zabbix可以生成各种图表,展示监控数据的历史和趋势。这有助于运维人员分析性能问题、容量规划和资源利用率等。
自动发现: Zabbix支持自动发现新设备和服务。这在动态环境中特别有用,避免了手动添加新设备的繁琐过程。
模板和应用程序: 运维人员可以创建模板,将一组监控项、触发器和图表打包,然后应用于多个设备。这样可以节省配置时间,并保持一致性。
性能分析和报告: Zabbix提供性能分析工具,可以帮助识别瓶颈、资源消耗和性能下降的原因。它还支持创建定制化的报告,用于向团队或上级汇报监控数据和趋势。
高度可定制化: Zabbix允许用户根据需要进行扩展和自定义,可以编写自定义的监控脚本、触发器逻辑和报警方案。
安全性: Zabbix提供了用户认证和权限控制,可以确保只有授权人员能够访问监控数据和配置。
分布式监控: 对于大规模的基础设施,Zabbix支持分布式监控,可以减轻中心服务器的负担并提高扩展性。
总的来说,Zabbix作为一款全面的监控系统,从运维的角度提供了许多有价值的功能,帮助运维人员及时发现问题、分析数据并做出明智的决策,从而提高系统的可靠性和性能。
Zabbix企业级系统及业务监控平台第一章 zabbix部署及配置1.1 zabbix-server部署方案1.2 配置zabbix访问协议为https1.3 zabbix-agent部署方案1.4 zabbix-agent自动注册第二章 zabbix监控指标采集2.1 zabbix中的术语2.2 监控指标分类2.3 监控指标采集设置2.4 监控指标阈值设定规范第三章 监控报警第四章 zabbix优化方法4.1 架构层面优化4.2 系统层面优化
Zabbix是一个复杂的监控系统,由多个组件组成,每个组件都有特定的作用。以下是Zabbix的主要组件及其作用的简要概述:
Zabbix Server: Zabbix的核心组件,负责处理监控数据、触发警报、存储历史数据以及生成图表和报告。它还管理配置信息,如监控项、触发器、模板等。
Zabbix Database: 这是Zabbix服务器使用的数据库,用于存储监控数据、配置信息和历史数据。通常可以使用MySQL、PostgreSQL等数据库管理系统。
Zabbix Frontend: 这是Web界面,用于与Zabbix系统交互。运维人员可以通过Web界面配置监控项、查看监控数据、设置触发器和生成报告。
Zabbix Agents: Agent是安装在被监控设备上的轻量级软件,负责收集本地系统的性能和状态数据。Agent可以主动向Zabbix Server报告数据,也可以被动地接受Zabbix Server的请求。
Zabbix Proxy: 代理用于分布式监控环境,可以减轻Zabbix Server的负担。代理收集监控数据并将其转发给Zabbix Server。代理还可以缓存数据以供断线时使用。
Zabbix Agents Active Checks: 这是Zabbix Agent的一种工作模式,它允许Agent主动向Zabbix Server发送监控数据,而不是等待Server的请求。这有助于更及时地收集数据。
Zabbix Templates: 模板是一组预定义的监控项、触发器和图表的集合,可以应用于多个设备。模板有助于保持监控配置的一致性和可重用性。
Triggers: 触发器定义了问题发生的条件,当监控项的值满足触发器定义的条件时,Zabbix会触发警报
Items: 监控项是需要监控的特定指标,如CPU利用率、内存使用量等。它们可以通过不同的方式进行收集
Graphs: 图表用于展示监控数据的历史和趋势,可以帮助运维人员分析性能问题和变化
Screens: 屏幕是自定义的仪表板,允许用户将图表、触发器和其他信息组织在一个界面上,以便一目了然地查看监控状态
Actions: 行动定义了当触发器触发时要执行的操作,如发送警报通知、执行远程命令等。
总的来说,Zabbix的这些组件共同协作,构建了一个强大的监控和报警系统,帮助运维团队实时监控系统状态、及时发现问题并采取相应的措施,从而提高IT基础设施的可用性和性能。
部署zabbix-server到CentOS系统中可以参考官方文档, zabbix-server部署文档 来进行安装。
虽然zabbix作为企业的内部平台, 但是也要为了安全去配置https来进行服务。从而提供更加安全的监控服务。如下方式可将https配置到zabbix的frontend服务上;
xserver {
listen 80;
server_name zabbix.qfcc.online;
location / {
rewrite ^(.*)$ https://zabbix.qfcc.online$1 permanent;
}
}
server {
listen 443 ssl;
server_name zabbix.qfcc.online;
ssl_certificate /etc/opt/rh/rh-nginx116/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/opt/rh/rh-nginx116/nginx/certs/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
root /usr/share/zabbix;
..........
..........
..........
部署zabbix-agent到CentOS系统中可以参考官方文档, zabbix-agent部署文档来进行安装。
Zabbix Agent 自动注册是 Zabbix 监控系统中的两个重要功能,它们可以帮助简化监控设备和服务的添加与管理过程。
自动注册(Auto Registration): 自动注册是指允许新设备自动注册到 Zabbix Server,无需手动配置。它常用于云环境或动态变化的网络中,可以帮助迅速添加新主机。
自动注册的步骤如下:
定义自动注册动作: 在 Zabbix 中,你可以配置自动注册动作。这个动作定义了如何处理自动注册请求。
主机发现和注册: 新设备启动 Zabbix Agent 后,它可以发起自动注册请求。Zabbix Server 会检查这些请求,并根据定义的自动注册动作,自动将新设备添加为监控主机。
这两个功能的结合可以使设备的添加和管理变得更加自动化和便捷。它们适用于大规模、动态变化的环境,如云计算、容器化环境等,有助于降低运维工作负担,提高监控系统的灵活性和扩展性。
Zabbix监控系统通过采集各种监控指标来实现对设备、应用程序和网络的实时监控。这些指标可以是服务器的性能数据、应用程序的运行状态、网络设备的状态等。Zabbix通过多种方式进行指标采集,具体的原理和方式如下:
Zabbix Agent: 这是一种在监控目标设备上运行的轻量级代理程序。Zabbix Agent主动地收集本地设备的性能和状态数据,并定期将这些数据发送给Zabbix Server。这种方式可以实时地获得各种性能数据,如CPU利用率、内存使用量、磁盘空间等。
SNMP(Simple Network Management Protocol): Zabbix支持使用SNMP协议监控网络设备。SNMP是一种用于管理和监控网络设备的标准协议,它允许Zabbix Server通过查询设备的MIB(管理信息库)来获取设备的状态和性能数据。
JMX(Java Management Extensions): 对于Java应用程序,Zabbix可以使用JMX来监控应用程序的性能。JMX是一种Java平台的管理和监控技术,它允许Zabbix收集Java应用程序的运行时数据。
IPMI(Intelligent Platform Management Interface): Zabbix支持使用IPMI来监控服务器的硬件状态。IPMI是一种硬件管理接口,可以用于远程监控和管理服务器的各种硬件指标,如温度、风扇速度等。
自定义脚本和外部检查: Zabbix允许用户编写自定义的监控脚本,通过运行这些脚本来收集特定的性能数据。这种方式适用于一些特殊的应用程序或指标,无法通过其他方式直接获取。
不同的指标采集方式适用于不同的场景和监控对象。Zabbix的灵活性使其可以适应各种复杂的监控需求,从而实现对整个IT基础设施的全面监控。
Host(主机): 要监控的设备、服务器、应用程序等的逻辑实体。它可以是物理服务器、虚拟机、网络设备等
Template(模板): 一组预定义的监控项、触发器、图表等配置,可以应用于多个主机,以确保一致性和重用性
Item(监控项): 用于收集特定指标数据的配置单元,例如CPU使用率、内存消耗等
Trigger(触发器): 定义了触发警报的条件,基于监控项的数据。当条件满足时,Zabbix会产生警报
Graph(图表): 用于显示监控数据的图形表示,可以展示时间趋势和性能数据变化
Action(动作): 当触发器被触发时,执行的操作。可以是发送警报通知、执行命令等
Agent(采集端): 在监控目标设备上运行的轻量级软件,用于主动采集本地性能数据并发送给Zabbix Server
Proxy(代理服务器): 用于分布式监控的中间服务器,可以减轻Zabbix Server的负担,同时支持缓存数据
Screen(屏幕): 一个自定义的仪表板,可以将多个图表、触发器和其他信息组织在一个界面上,以方便查看
User(用户): 可以访问Zabbix前端的用户,具有不同的权限和角色,如管理员、用户等
Media Type(通知方式): 定义警报通知如何发送的配置,可以包括电子邮件、短信、Slack等
Host Group(主机组): 将多个主机组织到一起的逻辑集合,可以用于更好地管理和组织主机
User Group(用户组): 将多个用户组织到一起的逻辑集合,可以用于分配权限和角色
对于系统层而言:
CPU利用率: 系统中CPU的整体使用率
内存使用率: 系统内存的使用百分比
磁盘空间使用率: 磁盘存储空间的使用百分比
磁盘读写速率: 磁盘读取和写入数据的速率
网络流量: 系统网络接口的数据传输速率
系统负载(Load Average): 运行队列的平均长度,表示系统忙碌程度
运行中的进程数: 当前系统中正在运行的进程数量
可用文件描述符数: 系统可用的文件描述符(用于打开文件和网络连接)数量
平均响应时间: 系统对请求的平均响应时间
网络连接数: 系统中的活动网络连接数量
TCP连接状态: 每种TCP连接状态的数量
磁盘I/O等待时间: 磁盘I/O操作等待的平均时间
内存交换空间使用率: 交换空间的使用百分比
系统启动时间: 系统启动的时间戳
文件系统使用率: 每个文件系统的使用百分比
对于中间件层而言:
Nginx进程数: 当前Nginx进程的数量,可以检查进程是否处于正常运行状态
请求处理速率: 请求的平均处理速率,以及每秒请求数量
连接数: 当前活动连接的数量,包括活动连接和空闲连接
并发连接数: 同一时刻的最大并发连接数
请求响应时间: 请求的平均响应时间,用于监测请求处理效率
请求处理时间: 每个请求的平均处理时间,包括请求的读取和响应
请求状态码分布: 不同状态码(如200、404、500等)的请求数量分布情况
请求数量分布: 不同请求URL的请求数量分布情况
每个虚拟主机的请求数量: 每个虚拟主机处理的请求数量
Nginx错误日志: 监控Nginx错误日志,发现潜在问题或错误
内存使用率: Nginx进程使用的内存的百分比
CPU使用率: Nginx进程使用的CPU的百分比
网络流量: Nginx服务器的入站和出站网络流量
连接超时率: 连接超时的百分比,用于检测连接问题
请求超时率: 请求超时的百分比,用于检测性能问题
数据库连接数: 当前活动的数据库连接数量
查询执行速率: 每秒执行的查询数量
查询响应时间: 查询的平均响应时间,包括查询解析、执行和返回结果等
慢查询数量: 执行时间超过阈值的慢查询数量
数据库事务数: 每秒执行的事务数量
表空间使用情况: 各个数据库表空间的使用情况
日志文件使用情况: 监控日志文件的使用情况,如二进制日志和错误日志
数据库备份状态: 监控数据库备份的状态和完成情况
主从复制状态: 如果存在主从复制,监控复制的延迟和状态
CPU使用率: MySQL进程使用的CPU的百分比
内存使用率: MySQL进程使用的内存的百分比
磁盘空间使用率: 数据库存储文件的存储空间使用率
网络流量: 数据库服务器的入站和出站网络流量
连接错误率: 连接错误的百分比,用于检测连接问题
数据库错误日志: 监控数据库错误日志,发现潜在问题或错误
数据库性能日志: 监控数据库性能日志,获取有关执行计划、索引使用等的信息
主键冲突率: 插入数据时主键冲突的百分比,用于检测数据一致性问题
数据库表碎片情况: 监控数据库表的碎片情况,进行优化和维护
对于业务进程而言:
请求数量: 每秒处理的请求数量
请求响应时间: 请求的平均响应时间,包括请求的处理、数据库查询等时间
错误请求率: 错误请求的百分比,如HTTP 500错误
并发连接数: 同一时刻的最大并发连接数
数据库查询执行速率: 每秒执行的数据库查询数量
数据库查询响应时间: 数据库查询的平均响应时间
缓存命中率: 缓存命中的百分比,如果应用程序使用了缓存
CPU使用率: 应用程序进程使用的CPU的百分比
内存使用率: 应用程序进程使用的内存的百分比
磁盘空间使用率: 应用程序产生的日志文件和临时文件的存储空间使用率
网络流量: 应用程序的入站和出站网络流量
HTTP请求方法分布: 不同HTTP请求方法(GET、POST等)的请求数量分布情况
HTTP状态码分布: 不同HTTP状态码(如200、404、500等)的请求数量分布情况
URL请求数量分布: 不同URL请求的请求数量分布情况
日志分析: 分析应用程序的日志,获取有关请求、错误、警告等的信息
队列处理情况: 如果应用程序使用消息队列,监控队列中的消息数量和处理速率
外部服务调用情况: 监控调用外部服务的响应时间和成功率
任务调度情况: 如果应用程序使用定时任务,监控任务的执行情况
API性能: 如果应用程序提供API,监控API的响应时间和成功率
并发用户数: 同一时刻的最大并发用户数
添加自定义key监控指标的步骤:
在 “Configuration” 创建 “host groups” 主机组,例如: qfcc.online、qfcc.online_system_basic_monitor ......
在 “Configuration” 创建 “Templates” 监控模版,例如: qfcc.online_system_basic_by_cpu
在 “qfcc.online_system_basic_by_cpu” 模版中,依次创建监控项(items)、触发器(triggers)、图像(graphs)
监控项:根据 “key” 中所提供的 键函数进行选择,并将其中的参数进行修改【自定义key方式】
触发器:根据 “监控项(items)” 对其设定阈值,当超过阈值时进行报警,后续会与 “Action” 配合达成即时通讯软件的报警作业
图形:用于展示随着时间而变化的监控指标数据趋势走向图,用于观察机器或者服务的走向
在 “Configuration” 将 “Hosts” 中的主机增加监控模版
添加自定义Scripts监控指标的步骤:
在 “Configuration” 创建 “host groups” 主机组,例如:qfcc.online_scripts_service_monitor ......
在 ”Configuration“ 创建 “Templates” 监控模版,例如:qfcc.online_scripts_service_by_nginx
在 “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']"
在 “Configuration” 将 “Hosts” 中的主机增加监控模版
在设定阈值时,你应该参考历史数据,所谓的监控并不是在一开始就要去设定阈值,而是根据监控了一段时间后,得到的历史数据进行设定。在得到的历史数据中一定会有指标的高峰值,也一定会有指标的平均值。如果指标的监控数据始终贴近高峰值, 那么在设定阈值时还要去参考在这些监控数据的时刻上,系统层面的监控数据:
第一种 监控的业务指标数据贴近高峰值,此时系统层面的监控数据忽高忽低,表示不稳定,有可能会造成故障或宕机,那么此时如果想要设定监控的阈值,那么就需要将其设定为高峰值
第二种 监控的业务指标数据贴近高峰值,此时系统层面的监控数据趋向稳定,表示业务很稳定,此时设定的阈值,可以为高峰值与业务指标数据中的最大值,进行相加,除以2则为阈值的设定
如果指标的监控数据始终贴近平均值,那么在设定阈值的时候可以将高峰值和平均值进行相加除以2, 所得数据为阈值。在后续的运维工作中可以根据图形的变化而去修改阈值的设定,或者按照业务的流量增长比率去提高阈值的设定,或从架构层面进行优化且平摊流量压力后保持该设定的阈值不变亦可。
Zabbix的报警机制是一个关键的功能,它可以帮助你在出现问题或异常时及时获得通知,以便你可以采取适当的措施来处理问题。
Zabbix的报警机制包括以下几个主要组件和步骤:
触发器(Triggers): 触发器定义了在满足特定条件时触发警报的规则。这些条件通常是监控项的状态或值。例如,当CPU利用率超过阈值时,可以触发一个CPU利用率过高的触发器
动作(Actions): 动作是指在触发器状态变化时执行的操作。动作可以包括发送通知、执行命令和脚本等。每个动作可以定义多种通知方式,如电子邮件、短信、Slack通知等
通知方式(Media Types): Zabbix支持多种通知方式,称为媒介类型,如电子邮件、短信、脚本等。你可以为每种媒介类型配置相关参数,以便Zabbix可以通过这些方式发送通知
通知: 当触发器状态变化时,Zabbix会根据定义的动作发送通知。通知可以包含问题的详细信息,以及建议的解决方法
报警机制的工作流程如下:
触发器检测状态: Zabbix定期检查触发器的条件是否满足,例如,监控项的值是否超过了阈值
触发器状态变化: 当触发器的条件从“OK”状态变为“PROBLEM”状态(或反之),Zabbix会触发相应的动作
动作执行: 执行与触发器关联的动作。动作可以配置为发送通知、执行脚本等
通知发送: Zabbix根据动作的配置使用相应的媒介类型发送通知,通知内容包括问题的详细信息和解决方法
通知接收和处理: 接收通知的用户或团队可以根据通知的内容采取适当的措施来解决问题
邮件报警的配置流程:
在 “administration” 找到 “user groups” 在其中创建 “ops” 组
在 “administration” 找到 “users” 在其中创建用户并将其加入到 “ops” 组内
在 “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 中增加 这个报警媒介的接收, 并配置自己的邮件地址
在 “Configuration” 中找到 “Actions” 在其中点击 “Trigger actions” 创建触发器的关联动作
输入关联动作的名称
增加与触发器的关联条件
在上方的第二个菜单"operations"中, 增加操作
脚本报警的配置流程:
在 “administration” 找到 “user groups” 在其中创建 “ops” 组
在 “administration” 找到 “users” 在其中创建用户并将其加入到 “ops” 组内
在 “administration” 找到 “media types” 中点击 “create media type” 创建报警媒介
给定名称
设置脚本类型
设置脚本名称
增加 “{ALERT.MESSAGE}” 作为报警信息
在上方菜单中的 “message template” 中添加 problem、problem recovery、problem update三个信息模版
在添加信息模版的时候,要记得发送报警的关键字写入到报警信息中
在 zabbix-server 机器中的 /usr/lib/zabbix/alertscripts/
中编写上方设定的脚本
增加脚本的执行权限,并进行报警信息的测试
在 “Configuration” 中找到 “Actions” 在其中点击 “Trigger actions” 创建触发器的关联动作
输入关联动作的名称
增加与触发器的关联条件
在上方的第二个菜单"operations"中, 增加操作
分布式架构: 将Zabbix系统分成多个组件,如Zabbix Server、Zabbix Proxy和数据库服务器,以分担负载并提高性能。使用Zabbix Proxy可以减轻Zabbix Server的负担,还可以将监控数据汇总到一个中心数据库
负载均衡: 在分布式环境中,使用负载均衡器将请求分发到多个Zabbix Server或Proxy实例,以平衡负载并提高可用性
数据库优化: 使用高性能数据库,如MySQL或PostgreSQL,优化数据库配置、索引和查询,以提高数据存储和检索效率
合理的数据保留策略: 设定合适的历史数据保留期限,避免过多的历史数据影响性能
分层级监控: 将监控对象按照重要性进行分级,只对关键对象进行实时监控,其他对象采用较慢的监控频率
合理的监控项和触发器: 避免创建过多的监控项和触发器,只关注关键指标和问题
合理的通知策略: 配置适当的通知策略,避免过多的警报和通知
缓存和代理: 使用Zabbix代理来缓存数据,减少对目标设备的直接查询,提高性能
监控项和触发器模板: 使用模板来集中管理监控项和触发器的配置,确保一致性和重用性
监控数据压缩: 启用Zabbix的数据压缩功能,减小数据库存储和网络传输开销
定期维护: 定期检查Zabbix系统的各个组件,清理无用的配置、数据和对象
监控Zabbix本身: 监控Zabbix Server和Proxy自身的性能和状态,确保它们正常运行
文件系统优化: 使用XFS或其他适合大文件和高写入负载的文件系统
内核参数优化: 根据服务器硬件和用途,调整内核参数,例如TCP连接数、文件句柄限制等
定期备份: 定期备份Zabbix配置和数据,以防止数据丢失
日志和日志轮转: 配置日志轮转,确保Zabbix日志不会占用过多的磁盘空间
关闭不必要的服务: 禁用不必要的系统服务,以减少资源消耗和安全风险