暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

因ES默认设置引起的监控数据缺失故障排查

IT那活儿 2024-12-23
76

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!


问题现象

前期通过智慧运维管理平台纳管了一批主机资源,资源使用情况监控视图一直很正常,但是最近出现到某个时间点之后数据开始缺失的情况,进一步导致当资源出现异常无法及时告警的问题。
咨询产品同事告知可能是ES出现了问题(当前项目是单节点部署),重启ES之后监控数据恢复正常,但是过段时间之后又出现此问题:

原因分析

单纯靠重启无法从根本上解决问题,只能通过查看相关模块的日志去定位问题,ES重启之后问题解决那就先从ES着手分析问题,通过查看ES系统日志,发现某个报错信息隔断时间就会出现,出现时间点和上面的监控数据缺失时间点一致。
详细的报错信息如下图所示:
报错信息提示空间不足,由于ES建索引写入数据,数据最先是存在内存buffer里的,然后再刷入到lucene的底层文件segment中;写入segment完毕后再执行refresh操作,refresh操作后,数据将commit到磁盘中。
过程简单描述如下:
内存buffer-->segment-->refresh-->磁盘。
初步定位问题:
ES内存使用达到设定的极限值,触发了es熔断请求内存被占用完了,其他索引无法分配更多的内存
ES的内存设置是在config目录下面的jvm.options文件中,当前设置如下所示当前jvm大小是默认设置,报错原因也是提示超过4G限制,无法创建新的索引

解决方法

现在已经基本确定是由于jvm 空间设置太小导致的,由于本机内存最大存储空间为64G,所以把jvm空间调整为32G官方建议占服务器内存的一半,并且建议Xms与Xmx大小一致,重启ES:
观察了几天监控视图一直保持正常,没有再出现之前在某个时间段没有数据的情况(如下图),看来问题已经得到了解决。

总 结:

经过近1个月的观察,监控数据没有再出现缺失的情况,虽然当前已经解决了问题,但是单节点ES部署的问题,也存在很大的风险,后续将考虑集群部署;
另外开源软件在应用到生产环境中时,需要根据项目实际情况确定是否需要调整默认设置。

END


本文作者:周建伟(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论