EFK stack中Fluentd突发无法向ElasticSearch发送日志问题求助
EFK栈Fluentd写入ES中断故障排查方案
结合无配置变更下突发故障的特征,以及2022年6月同场景批量故障的共性原因,按排查优先级从高到低给出定位和修复路径:
最高优先级排查:ES磁盘高水位触发只读锁
这是该时间节点最常见的故障诱因:
- 触发逻辑:Elasticsearch默认规则中,数据盘使用率达到90%的高水位阈值时,会自动将磁盘上所有索引置为
read-only allow delete状态,拒绝所有写入请求,此时ES进程本身运行状态完全正常,仅写入链路中断,和描述的现象完全吻合。6月18日到20日的2天空窗期,刚好是日常日志累计把磁盘打满的常见周期。 - 验证操作:
- 执行命令查询所有索引的块配置:
curl -XGET http://<你的ES服务地址>:9200/_all/_settings | grep read_only_allow_delete - 若返回结果包含
"read_only_allow_delete" : "true"即可确认故障点
- 执行命令查询所有索引的块配置:
- 修复操作:
- 先清理过期历史日志索引、删除无用数据,将ES数据盘使用率降到85%以下
- 执行命令全局解除只读锁:
curl -XPUT -H "Content-Type: application/json" http://<你的ES服务地址>:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}' - 重启Fluentd服务,观察写入链路是否恢复
次高优先级排查:浮动镜像标签导致ES 8.x版本兼容故障
- 触发逻辑:如果部署配置中Elasticsearch、Fluentd镜像使用了
latest、8这类未锁定精确版本的浮动标签,2022年6月中下旬正是Elasticsearch 8.x正式版大规模推送的窗口,节点调度或Pod重启时会自动拉取最新8.x版本镜像。8.x版本默认强制开启SSL认证、内置账号密码校验,同时完全移除了mapping type兼容逻辑,会直接拒绝旧配置下Fluentd的写入请求,ES进程本身依然显示运行正常。 - 验证操作:
- 执行命令查询ES运行版本:
curl http://<你的ES服务地址>:9200 - 若返回版本号为8.x开头,同时Fluentd日志中存在401认证失败、type字段不合法类报错即可确认
- 执行命令查询ES运行版本:
- 修复操作:
- 快速回退方案:将ES镜像版本锁定为故障前运行的7.17.x LTS版本,滚动更新集群即可恢复
- 版本适配方案:在Fluentd的ES输出插件配置段补充参数:
scheme https、ssl_verify false、user 你的ES访问账号、password 你的ES访问密码、suppress_type_name true,配置重载或重启Fluentd即可
兜底排查项
若以上两类场景均不匹配,按顺序逐项核对:
- 进入Fluentd容器内部,执行curl命令访问ES9200端口,确认不存在网络策略、Service规则、防火墙拦截导致的链路不通
- 查询ES集群健康状态:
curl http://<你的ES服务地址>:9200/_cluster/health,若集群状态为red,先处理未分配的异常分片 - 检查Fluentd缓冲目录所在磁盘的使用率,若磁盘写满会导致Fluentd既无法缓存新日志,也无法完成批量写入发送
内容的提问来源于stack exchange,提问作者Mohit Aggarwal
相关产品推荐
相关产品推荐

