fluentd日志报错read timeout reached
作者:互联网
背景:架构为fluentd日志采集后放到本地之后上传到es中,发现fluentd采集的日志本地存量一直在上涨,没有将日志写入es中,fluentd日志报错read timeout reached,如下图
排查:
1、怀疑磁盘性能问题,使用dd命令测试了es-data所用磁盘,发现写入速度还是可以的,排除此问题
dd bs=128k count=10k if=/dev/zero of=test conv=fdatasync
2、怀疑为buffer文件有错误,根据报的chunkid 去到对应fluentd主机的/var/log/td-agent/buffer/elasticsearch目录里 将报错的文件先移除到别处,然后重启fluentd,发现有新的chunkid的文件出现阻塞日志写入,尝试几次后都是如此,排除此问题。
3、怀疑为fluentd的线程数导致,参数为
flush_thread_count # 不设置默认为1 |
将此参数设为8,再次重启fluentd,发现还是会报read timeout reached的错误,且和线程数为1时不同的时一次会报出8个来,问题原因不在于此参数。
4、怀疑为fluentd的超时时间太短,参数为
request_timeout 240s #原来为120s |
尝试设为240s,时间久一点之后还是会报read timeout reached的错误,设为2400s的话因为时间太长,暂时不会报错 但是本地日志数还是在增长并没有下降,怀疑跟此参数无关,尝试其他办法
5、查询资料发现有类似问题是添加了以下参数解决,其中前两个已设置,最后一个没有设置
reconnect_on_error true reload_on_failure true reload_connections false |
reload_connections false # 默认为 true 可以调整elasticsearch-transport主机重载特性的工作方式。默认情况下,它将每隔 10,000 次请求从服务器重新加载主机列表,以分散负载。如果您的 Elasticsearch 集群位于反向代理之后,这可能是个问题,因为 Fluentd 进程可能无法直接访问 Elasticsearch 节点。 |
而在集群中fluentd中使用的es的svc,相当于反向代理了Elasticsearch 节点.,将fluentd添加了此配置之后重启,发现日志写入正常,问题解决。老平台之所以没问题是因为老平台是iptables,生成iptables规则转换nat为ip地址。新平台的都是ipvs,ipvs直接路由到对应的pod-ip,相当于一个反向代理所以要加这个参数。
参考链接:
https://llaoj.cn/diary/2020/12/31/fluentd-es-connect-timeout.html
https://github.com/uken/fluent-plugin-elasticsearch#stopped-to-send-events-on-k8s-why
标签:fluentd,read,报错,timeout,日志,es 来源: https://www.cnblogs.com/yunweirizhi/p/16337534.html