K8S部署的ELK分片问题解决,报错:unexpected error while indexing monitoring document
背景
一开始是Kibana的展示web上看不见收集的日志,看下ES的pod日志报错unexpected error while indexing monitoring document,经过排查是磁盘满了。
接着就是这段故事:K8S的StorageClass使用节点本地LVM逻辑卷怎么进行PVC扩容
扩容完成后,来看看ES回复正常了吗
处理过程
磁盘扩容完毕,接着看下ES的日志,得又是全报错,原本还以为能自动恢复
在ELK,当 Elasticsearch 集群磁盘空间不足(或触发其他保护条件)时,会自动为所有索引添加 index.blocks.read_only_allow_delete: true
的设置。
此时集群只能读取或删除数据,无法执行写入操作(如创建索引、写入文档、更新映射等)。
这个配置既然不能自动恢复,那就通过修改配置手动恢复下吧。
先看下配置
curl -u 用户名:密码 -X GET "http://ES的IP:端口/_all/_settings?pretty"
果然有index.blocks.read_only_allow_delete: true
处理可以直接在Kibana上的开发工具终端执行
PUT _all/_settings
{"index.blocks.read_only_allow_delete": null
}
调用api的方式也可
curl -u "username:password" -X PUT "http://<es-host>:9200/_all/_settings" \-H "Content-Type: application/json" \-d '{"index.blocks.read_only_allow_delete": null}'
执行完成后,重新看下block还在不在
curl -u 用户名:密码 -X GET "http://ES的IP:端口/_all/_settings?pretty"
blocks字段没了,完成修改。
到Kibana上看下日志是否有数据,验证完成。
不生效情况
如果执行api或者在界面上执行修改状态后,也没有报错和回显,但是验证的时候还是没更改,那就是状态未生效,考虑程序执行卡顿或者写入问题等其他情况,我其实过程中就遇见这种问题,解决方法也简单,重新下es即可。
kubectl rollout restart statefulset elasticsearch-master -n logging
重启完成后重新执行流程完成报错处理