情况简述
(一)问题
Zabbix的报表功能关联的仪表盘页数(且每页内容达到最满)很多的情况下,会发生发送失败的情况。
(二)报错
Cannot fetch data: context deadline exceeded
(三)办法
a.打开该文件
# vi /etc/zabbix/zabbix_web_service.conf
b.找到Timeout然后取消注释并将值从默认的3修改为5或更大
(个人建议不要太大,满足需求即可)
Timeout=5
c.重启zabbix-web-service进程
# systemctl restart zabbix-web-service.service
d.再到计划报表中点测试发送试试
(四)原因
之所以发生发生失败的情况,是因为仪表盘太大生成pdf时耗时很长,这个耗时超过了zabbix的上下文超时时间时生成任务就会被中断,所以就会出现发送失败的情况。
排查过程
起初认为是页数有最大值的原因,但官网上并无类似介绍,然后开始验证测试。
1 - 使用每页内容为半页的仪表盘,增加至第11页时,出现发送失败;
2 - 使用每页内容为整页的仪表盘,增加至第04页时,出现发送失败;
3 - 貌似从页数和内容满不满上找不到问题规律;
发现从页数方面找不到规律和方向,才开始看报错。
4 - 根据异常报错搜索,找到一篇MongoDB关于该报错的介绍,随之确定,问题原因是上下文超时;
(多谢!MongoDB Golang 报告 “context deadline exceeded” 问题及解决办法|极客笔记)
5 - 再根据上下文超时相关内容搜索zabbix和mysql相关内容,未找到类似案例;
6 - 随后翻了翻zabbix和mysql的配置文件,认为zabbix-web-service.conf中的timeout可能是,便从3改为30后再测试,仪表盘页数很多时的报表发送成功了。又改回原值后又不成功了;
7 - 至此找到了问题的解决办法。