Fluentd-ElasticSearch配置两三(糗)事

本文讲述了在配置Fluentd收集日志并转发到ElasticSearch的过程中遇到的问题,包括Output插件的请求超时、Request Entity Too Large错误以及如何避免日志重复。解决方案涉及到调整Fluentd的buffer配置、设置请求超时时间以及添加ElasticSearch日志数据防重配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上周末在家闲来无事,于是乎动手帮项目组搭建日志收集的EFK环境,最终目标的部署是这个样子的:

这里写图片描述

在每个应用机器上部一个Fluentd做为代理端,以tail方式读取指定的应用日志文件,然后Forward到做为汇聚端的Fluentd,汇聚端对日志内容加工、分解成结构化内容,再存储到ElasticSearch。日志内容的展现由Kinana实现。

Fluentd是什么? Fluentd是一个完全免费的、完全开源的日志收集器,可以与125多种系统相对接,实现“日志一切”架构。

图片来自于Fluentd官方网站

由于前面已经在Kubernetes容器平台上部署好了ElasticSearch与Kibana,周末只是忙乎Fluentd的安装配置,以前没有使用过,现学再卖,结果折腾过程中出现了几个问题,在这里念叨记录一下。

Output插件的请求超时时间

在我们的部署中,只使用了Fluentd两种Output插件,一个是代理端用于向后传递日志内容的Ouput-Forward,一个是用于向ES中存储数据的Output-ElasticSearch。

  • 代理端Output-Forward插件配置(最初)
  <match **>
    @type             forward
    require_ack_response ture
    <server>
      host             10.xxx.xx.xx
      port             24224
    </server>
    <buffer tag>
      @type            file
      path             /xxx/xxx/buffer
      flush_interval   10s
      total_limit_size 1G
    </buffer>
  </match>

  • 汇聚端Output-ElasticSearch插件配置(最初)
  <match xxxxx.xxxxx.**>
    @type              elasticsearch
    host               10.xxx.xx.xxx
    port               30172
    logstash_format    true
    logstash_prefix    log.xxxxx.xxxxx.xxxxx-
    <buffer tag>
      @type            file
      path             "/xxx/xxx/fluentd/aggregator/xxxx/buffer"
      total_limit_size 20G
      flush_interval   10s
    </buffer>
  </match>

配置完以后,简单测试跑通后,满心欢喜地拿应用某台机器上1-3月产生的日志灌数。从Kibana界面上代表日志数量的绿柱向上增长,几千…几万..百万…两百万,当时还发图片给项目组的显摆了一番。后面想着不可能有这么多日志记录吧!? 登录到应用服务器上去日志目录里wc了一把,所有文件行数总和才150万! 晕死!

跑进Kibana界面细观瞧,才发现入库的日志记录有重复内容,比如:某条记录就重复了233次。 当时也不知道具体原因,猜测着可能是Output-ElasticSearch插件因接收响应超时,叕重发了内容到ElasticSearch,所以试着查到相应参数:request_timeout加入到汇聚端配置中,参数默认值是:5s


                
### Fluentd-Elasticsearch 版本 1.20 的配置与问题分析 Fluentd 是一种流行的开源数据收集器,用于统一日志记录层。当与 Elasticsearch 结合使用时,它能够高效地处理和存储大量日志数据。以下是关于 `fluentd-elasticsearch:1.20` 的版本信息及其常见配置问题的解析。 #### 关于 fluentd-elasticsearch:1.20 的基本信息 `fluentd-elasticsearch:1.20` 是基于 Docker 容器镜像的一个特定版本,主要用于将日志数据传输到 Elasticsearch 中进行索引化和查询[^4]。此版本通常依赖于官方维护的 Fluentd 镜像,并集成了必要的插件来支持 Elasticsearch 输出功能。 #### 常见配置问题及解决方案 ##### 1. **Elasticsearch 连接失败** 如果在运行容器时遇到连接至 Elasticsearch 失败的情况,可能的原因包括网络不通、目标地址错误或认证未通过等问题。可以通过以下方式解决: - 确认 Elasticsearch 地址是否正确: ```yaml <match **> @type elasticsearch host "#{ENV['FLUENT_ELASTICSEARCH_HOST']}" port "#{ENV['FLUENT_ELASTICSEARCH_PORT']}" logstash_format true </match> ``` 上述配置中的 `host` 和 `port` 参数需匹配实际环境下的 Elasticsearch 实例位置[^5]。 - 如果启用了 HTTPS 或者需要用户名密码验证,则应补充如下字段: ```yaml scheme https user admin_user password secret_password ``` ##### 2. **缓冲区溢出** 当 Fluentd 收集的日志量过大而无法及时写入 Elasticsearch 时,可能会触发缓冲区满告警。此时可以调整缓冲区大小以及刷新频率参数以缓解压力: ```yaml buffer_chunk_limit 2M flush_interval 5s retry_wait 1s max_retry_wait 30s num_threads 8 ``` 以上设置增大了单次提交的数据上限并优化线程数分配,从而提升吞吐能力[^6]。 ##### 3. **时间戳格式不兼容** 部分情况下发现发送给 Elasticsearch 的文档缺少合法的时间戳字段 `_timestamp` ,这通常是由于输入源缺乏标准 ISO8601 时间表示所致。为此可以在 `<filter>` 节点定义转换逻辑: ```ruby <filter **> @type record_transformer enable_ruby <record> timestamp ${Time.at(time).iso8601} </record> </filter> ``` #### 推荐实践 为了更好地管理复杂场景下可能出现的各种异常状况,在生产环境中建议启用监控工具链(如 Prometheus + Grafana),并通过自定义指标跟踪关键性能表现;另外定期审查日志文件有助于提前发现问题苗头。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值