前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >博文|如何对Zabbix Proxy高队列进行故障诊断

博文|如何对Zabbix Proxy高队列进行故障诊断

作者头像
Zabbix
发布2021-04-29 11:19:13
1.3K0
发布2021-04-29 11:19:13
举报
文章被收录于专栏:Zabbix中国官方Zabbix中国官方

感谢本文译者赵静—宏时数据技术工程师!

Zabbix proxy是整个Zabbix架构的主要组件。因此很多时候,当其中一个proxy出现故障,会对所有监控配置造成严重的后果,引起一连串事件与问题。

安装

安装(通过安装包安装)

  • Zabbix 5.01
  • CentOS 8
  • Zabbix Proxy与Zabbix Server在同一部设备上
  • Zabbix Server数据库和Zabbix Proxy数据库在MariaDB数据库引擎上
  • 有三个Zabbix Server Host(已复制)在配置>Hosts
  • ‘training proxy’—是主动(Active)模式的Proxy,没有加密,压缩状态开启—已添加在管理>Proxies

管理>队列中,队列数值在增加。但根据监控项的数量,没有接收到host上所有监控项的数据。

Queue overview 队列概况

在生产实例中,这会导致一些问题。这个情况下,所有没有数据的trigger 不能触发函数,造成许多问题。

为什么队列递增?

Zabbix Proxy正在监控 Zabbix agent,监控检查与类型可为被动或主动。主动检查意味着Agent连接Proxy以请求配置,这个配置包含信息说明应该收集什么数据,在host上获得数据并发送给proxy。Agent被动检查则与之相反。Proxy连接Agent,轮询收集的数值。Proxy可以以主动或被动的模式运行,两种都是相同的连接方式。

配置错误

如果Proxy出现问题,一定要查看proxy日志。这意味着可能需要SSH连接proxy server。

代码语言:javascript
复制
tail -f /var/log/zabbix/zabbix_proxy.log

‘无法发送proxy数据至server’消息滥发

在本地主机IP地址上出现无法发送proxy数据至server的消息,因为未找到“Training proxy”只会在一种情况下出现——当Zabbix proxy配置文件里的主机名称参数无法匹配 Zabbix前端对应的proxy名称。

当Training proxy正在运行,在前端,在管理 > Proxies,training proxy是小写字母。这导致proxy停止向server发送数据,并在日志中写下错误。

Different proxy name spelling不同的proxy名称拼写

所以我们需要修改proxy名称并点击“更新”。

Updating the proxy name 更新proxy名称

然后,为了节省时间,可以在Zabbix Server上强制重新加载配置缓存,执行如下命令:

代码语言:javascript
复制
zabbix_server -R config_cache_reload

还要检查proxy日志。你会发现消息已经停止滥发,Server默认每分钟自动更新其配置缓存。

管理 > 队列里,没有延迟的数值,所有数据都能正常被处理。

Proxy queue overview Proxy队列概况

所以,出现配置错误的情况下,你需要:

a) 检查proxy日志,多数情况足够解决问题 b) 遇到特殊情况,要检查server日志

Proxy连接不到Agent

如果proxy不能从agent处获取数据,并不是proxy-server通信或server自身出现问题。需要检查proxy和agent的日志文件,看看是否有问题信息提示。

首先,需检查proxy。最可能的情况,在日志中出现‘网络错误’、‘host不可用’、‘连接超时’、‘TCP连接问题’或其他类似错误信息。如果出现如下错误信息,如连接失败,无法连接agent 1,但其他正常运行,那么问题很可能与网络有关。可能是网络发生变化阻止proxy从agent处收集数据。可以用agent的IP从proxy上运行zabbix_get,尝试对其进行故障诊断,或简单测试连通性。

如果没有问题,agent需要日志报告返回正常。如果agent日志返回正常,但在前端仍看不到任何数据,那可能是出现别的问题。例如,proxy负责这种监控类型没有足够的进程。

Agent可能只是停止、死机或被删除,这种情况下,在运行 zabbix_get时能看到错误信息。

如果收到这个错误消息,表明proxy收不到数值,那么可能是在proxy与agent间的某处连接或agent自身出现问题。这种情况下,需要检查正在监控的host——agent是否运行,或监听端口,或是否有防火墙规则阻断proxy与agent的连接。可能只是agent配置上的Server=IP地址不同于Proxy的IP地址。

所以,如果proxy连接不到agent,需要:

a) 检查proxy日志 b) 检查agent日志 c) 隔离无法运行的agent。如果所有agent都无法运行,那就是网络的问题 d) 运用zabbix_getsnmpget (snmp problems) 测试proxy与host间的连通性

Proxy连接不到Server

当proxy连接不到server,在server日志里查看不到任何东西,因为连接中断,server将收不到任何数据。可以通过检查proxy日志,查看错误信息,例如‘无法连接到server’或‘无法发送proxy数据到server’。

如果proxy连接不到server,需要:

a) 检查proxy日志

Proxy发送数据不够快

如果proxy上出现队列,但有数据正在传输,表明proxy能够连接到server和agent,因为可以接收和发送数据,尽管也会出现延迟的情况。延迟表明proxy跟不上数据流,proxy上数据堆积的速度比发送的速度快。在最新数据处可以查看这个问题,图表中出现间断和点。

检查这个问题,可以在Zabbix proxy host上执行命令

ps ax | grep sender

只有一个进程——Zabbix proxy上的data sender,它不在server上,是负责发送数据到server的唯一进程。如果对sender到底做了什么感兴趣,可以反复执行上面的命令,相关日志的变化会告诉我们答案。

存在问题时,查看每秒发送多少数值是不够的。data sender的迭代需要几百秒甚至更多。这种情况下,可以通过数据库并运行查询语句:

代码语言:javascript
复制
select max(id)-(select nextid from ids where table_name + "proxy_history" limit l) from proxy_history;

这个查询会告诉我们proxy数据库上剩下多少数值还没发到Zabbix server。基本上,这是proxy上的backlog队列。

在上面的例子,一切运行正常,队列也没有堆积。

如果能观察到,data sender要花几百秒的时间发送数值给server,最可能出现的查询结果不会是零。多次运行查询会显示proxy上的backlog不断增加。

造成这些问题的原因很多,其中一个是Zabbix proxy与server之间的网络连接慢。这种情况下,通常ping值不足以反映网络状况的好坏。如果所有进程都不繁忙,但是data sender 难以发送数据,那可能需要咨询网络团队。可能是Zabbix server出现问题。data sender 是一个单进程,发送数据到server,但在server上,只有trapper负责接收数据。所以要确保server上有足够的trapper,且不是全部都处于繁忙状态。

所以,如果Proxy发送数据不够快,需要:

a) 检查data sender b) 检查proxy数据库上的队列 c) 检查网络连接速度

Proxy没有足够的进程

假设,有一个Zabbix server正常运行,Zabbix前端以及大部分环境都通过Zabbix server进行监控。

在管理 > Proxies里,看到Training proxy只添加了三个host。

这三个host正接收数据,没有丢失的队列和数据。假设,一个月内需要在proxy上部署网络发现或agent主动注册,并添加更多host进行监控。最终可能大约有30000个host,这时会出现问题:proxy上的间断或队列正在增加。

如果检查server日志,可能没发现什么错误——没有问题、没有查询慢。还可以在监控> Hosts查看,例如会显示‘内部进程繁忙’的图表。

那么问题可能在proxy上。因为添加了30000个新的host,proxy上的进程数量可能不足以让proxy处理当前数据。

proxy上的运行进程

部署了30000个host之后,之前的进程数量不够支撑当前设置。这个问题不会显示在server日志或server图表。这种情况下,需要监控proxy。在配置 > Hosts处创建一个host,添加到组别,指明这个host由proxy监控,还有proxy自身,点击添加

添加host

注意 用户通常指定agent接口为proxy的外部地址,这并不是完全正确的。

使用在配置 > 模板里的模板Template App Zabbix Proxy监控proxy。这个proxy有内部监控项,这个监控项不使用Zabbix agent接口指定的IP地址。

Proxy上的内部监控项

如果在 配置 > Hosts里,不配置这个host由proxy监控,那么在性能图表上还会看到数据,但是这些数据是来自Zabbix server,你可能会被监控 > Hosts里的图表、数据收集器进程和内部进程误导。所以,会看到来自server的数据,显示并不繁忙,但是proxy出现问题。这种情况下,你只需要增加更多进程,例如poller、trapper等。

如果Proxy没有足够的进程,需要确保正确监控proxy,并检查proxy的性能图表:

a) 数据收集进程繁忙 b) 内部进程繁忙,以及 c) 自由缓存的百分比

Server跟不上数据

如果数据通过proxy无缝地从agent开始传输,传输到server,那么在server上可能出现问题。可以在server日志上发现这个问题,可能会看到一些查询慢或超时。更重要的是,在监控 > Hosts的性能图表里也能看到相同的信息。

例如这里,需要检查‘数据收集进程繁忙’。

性能图表的‘数据收集进程繁忙’

更具体一点,我们所感兴趣的trapper,只是在主动模式的proxy上操作的trapper,正如这个例子提到的那样。

所以如果trapper完全繁忙,可能唯一需要做的是增加trapper的数量。

如果trapper繁忙,但在‘Zabbix内部进程繁忙%’的图表中,housekeeper和history sinker以及大部分图表都加载运行100%,在图表中有一些点和间断,这表明Zabbix server上有严重的性能问题。99%的情况下,这是因为数据库性能问题和Zabbix设置问题。

所以如果Server跟不上数据,需要:

a) 检查server日志 b) 检查server性能图表 c) 检查日志里的查询慢,如果在历史图表发现插入数据的查询慢,那就是数据库跟不上。

有太多未发送数值

有时,上述的任何一个问题都会导致proxy收集backlog,在问题修复之后队列不下降或下降很慢时。这种情况下,可以运行查询,检查proxy数据库上的backlog。、

例如,当看到百万个数值,proxy在某些时段停止运行,在数据库有巨大的backlog,队列仍在堆积。这种情况下,唯一能做到是降低backlog——删除所有储存在proxy数据库的数据,重新开始。虽然会丢失这个时间段里未发送的数据历史,但至少能重新回到监控。

需要:

1. 停止运行Zabbix proxy

代码语言:javascript
复制
systemctl stop zabbix-proxy

2. 打开数据库

代码语言:javascript
复制
mysql

3. Tuncate两个图表——proxy历史查询和IDs

代码语言:javascript
复制
truncate proxy_history;
代码语言:javascript
复制
truncate ids;

代码片段:可切换语言,无法单独设置文字格式

4. 退出数据库,打开Zabbix proxy

代码语言:javascript
复制
systemctl start zabbix-prox

降低proxy backlog

5. 重启

代码语言:javascript
复制
zabbix_server -R config_cache_reload

6. 打开数据库

代码语言:javascript
复制
mysql

7. 使用Zabbix proxy

代码语言:javascript
复制
use zabbix-proxy;

这样在查询中,看不到backlog了

Proxy backlog已下降

注意不要忘记truncate IDs图表。如果只truncate proxy历史图表,无法解决问题。

如果有太多未发送数值,且proxy队列正在堆积,则需要降低backlog。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Zabbix开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档