You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Filebeat未持续刷新日志至Elastic的配置问题排查求助

问题排查与解决方案

问题现象

在AKS集群(K8S 1.28.9)部署Elastic、Filebeat、Logstash(已禁用)后,执行Elastic索引删除(flush+clean)并重启Filebeat,Filebeat同步某段时间日志后停止推送,Filebeat日志报错:log.origin":{"file.name":"log/input.go","file.line":626},"message":"File didn't change:。另外Elastic集群有2个节点带“dim”规则(已知最多可配3个但不推荐)。

版本信息

  • logstash: 8.5.0
  • kibana: 8.3.1
  • elasticsearch: 8.3.1
  • AKS cluster: 1.28.9

当前Filebeat配置

apiVersion: v1
kind: ConfigMap
metadata:
  name: filebeat-config
data:
  filebeat.yml: |
    filebeat.inputs:
        - type: log
          enabled: true
          paths:
            - /var/uat6-app/SL-LOG/*coresuite_sl-services-*.log
          scan_frequency: 1s  # 每秒检查一次新日志条目
          close_inactive: 7200m   # 关闭超过5天未活动的文件
          clean_inactive: 45000m  # 删除超过30天的状态条目
          ignore_older: 43200m   # 忽略超过30天的文件
          close_eof: true # Filebeat读取到文件末尾后立即关闭,后续有新数据追加时会重新打开并从上次位置继续读取
          close_older: 1h
          
          
          multiline:
            pattern: '^\[\d{4}-\d{2}-\d{2}'
            negate: true
            match: after

          processors:
            - dissect:
                tokenizer: '[%{timestamp}],%{log.level},[%{source}],%{requestToken},%{thread},%{hostName},%{clientIP},%{clientPort},[] %{message}'
                field: "message"
                target_prefix: "log"
                ignore_failure: true

            - dissect:
                when:
                  contains:
                    log.message: "PrimaryFilter - doFilter :"
                tokenizer: 'PrimaryFilter - doFilter : %{exception_message}'
                field: "log.message"
                target_prefix: "log"
                ignore_failure: true

            - add_fields:
                when:
                  not:
                    has_fields: ['log.clientIP']
                target: "log"
                fields:
                  clientIP: "unknown"

            - add_fields:
                when:
                  not:
                    has_fields: ['log.requestToken']
                target: "log"
                fields:
                  requestToken: "unknown"

            - add_fields:
                when:
                  not:
                    has_fields: ['log.clientPort']
                target: "log"
                fields:
                  clientPort: "unknown"

            - fingerprint:
                when:
                  has_fields: ["log.timestamp", "log.requestToken", "log.uri", "log.timeElapsed", "log.statusCode", "log.httpMethod", "log.hostName", "log.clientIP", "log.clientPort"]
                fields: ["log.timestamp", "log.requestToken", "log.uri", "log.timeElapsed", "log.statusCode", "log.httpMethod", "log.hostName", "log.clientIP", "log.clientPort"]
                target_field: "@metadata._id"
                method: "sha256"

        setup.ilm.overwrite: true
        setup.ilm.enabled: false
        setup.template.name: 'uat6'
        setup.template.pattern: 'uat6-app-*'
        setup.template.overwrite: true
        setup.template.enabled: false
          
        output.elasticsearch:
          hosts: ["${ES_HOSTS}"]
          username: "${ES_USER}"
          password: "${ES_PASSWORD}"
          index: "uat6-app-%{+yyyy.MM.dd}"
          ssl.verification_mode: "none"
          allow_older_versions: true
          document_id: "%{[@metadata][_id]}"



        logging.level: debug
        logging.selectors: ["*"]

配置问题分析与修复方案

1. Filebeat状态管理与日志读取中断问题

报错File didn't change指向以下配置冲突或逻辑问题:

  • close_eof与close_older冲突:close_eof: true会在文件读完后立即关闭,而close_older:1h会在1小时后关闭未活动文件。重启Filebeat时,若状态文件记录了已关闭文件的偏移量,Filebeat会认为文件无新内容,停止读取。
  • ignore_older与clean_inactive时间不匹配:ignore_older设为30天,但clean_inactive设为超过30天,旧状态残留会干扰Filebeat重新扫描文件的逻辑。
  • 自定义document_id导致的推送停止:配置了document_id后,Elastic索引删除再重启Filebeat时,Filebeat会尝试写入相同ID的文档,若之前已成功写入(即使索引被删),Filebeat会因状态判断认为推送完成,停止后续读取。

修复建议:

  • 将close_eof改为false,避免文件读完立即关闭,让Filebeat保持对文件的监听(直到close_inactive触发)。
  • 统一ignore_older和clean_inactive的时间,比如都设为43200m(30天),确保状态清理与文件忽略同步。
  • 重启Filebeat时清理状态数据:在AKS中,若Filebeat使用PersistentVolume存储状态,需删除对应PVC或清理默认状态目录/usr/share/filebeat/data,强制Filebeat重新扫描所有日志文件。

2. ILM与模板配置冲突

配置中同时关闭ILM和模板功能,但又指定了模板名称和匹配规则,导致Filebeat无法正确初始化索引模板,可能引发Elastic因映射不匹配拒绝写入,间接导致推送停止。

修复建议:

  • 将setup.template.enabled设为true,确保Filebeat能正确创建或更新索引模板,避免写入时的映射错误。
  • 保持setup.ilm.enabled: false即可(若无需索引生命周期管理)。

3. Elastic混合角色节点影响

2个节点配置"dim"混合角色(master+data+ingest),虽未超过3个的限制,但会导致节点资源竞争,Filebeat批量写入时易出现超时,进而引发推送停止。

修复建议:

  • 拆分节点角色:单独配置master节点、data节点和ingest节点,避免混合角色导致的性能瓶颈,提升集群写入稳定性。

内容的提问来源于stack exchange,提问作者Michał Picheta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:44:52