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

同时使用Beats与File输入时Logstash+Filebeat配置异常求助

问题解决思路及步骤

核心问题:Logstash多配置文件合并引发的逻辑混乱

Logstash同时加载多个配置文件时,会将所有input、filter、output合并到同一个处理流程,而非独立运行。你的两个配置文件直接导致:

  • Beats输入的事件会经过file配置里的grok过滤,同时输出到systemsyslogs和numberlogtest两个索引
  • File输入的事件也会流向两个索引,字段类型不匹配触发ES 400错误
  • Logstash自身的file输入持续读取目标日志(仅在Filebeat中排除无效),加上重复处理导致CPU占用飙升

具体解决步骤

1. 隔离Logstash处理流程

要让两个配置独立运行,推荐在同一实例中用pipeline.id区分:

  • Beats输入配置文件(如beats-pipeline.conf):
    pipeline.id: beats-pipeline
    input {
      beats {
        port => 5044
      }
    }
    filter {
    }
    output {
      if [@metadata][pipeline] {
        elasticsearch {
          hosts => ["localhost:9200"]
          manage_template => false
          index => "systemsyslogs"
          pipeline => "%{[@metadata][pipeline]}"
        }
      } else {
        elasticsearch {
          hosts => ["localhost:9200"]
          manage_template => false
          index => "systemsyslogs"
        }
      }
    }
    
  • File输入配置文件(如file-pipeline.conf):
    pipeline.id: file-pipeline
    input {
      file {
        path => "/var/log/foldername/number.log"
        start_position => "beginning"
        sincedb_path => "/var/lib/logstash/sincedb-number" # 指定独立记录文件,避免重复读取
      }
    }
    filter {
      grok {
        match => { "message" => "%{WORD:username} %{INT:number} %{TIMESTAMP_ISO8601:timestamp}" }
      }
    }
    output {
      elasticsearch {
        hosts => [ "localhost:9200" ]
        index => "numberlogtest"
      }
    }
    

修改Logstash的pipelines.yml,添加两个管道配置:

- pipeline.id: beats-pipeline
  path.config: "/etc/logstash/conf.d/beats-pipeline.conf"
- pipeline.id: file-pipeline
  path.config: "/etc/logstash/conf.d/file-pipeline.conf"

2. 修复ES 400字段类型错误

报错Can't get text on a START_OBJECT是因为字段类型不匹配:比如service字段在numberlogtest索引中被映射为text类型,但Beats事件中的service是对象({"type"=>"system"})。

  • 管道隔离后,Beats事件仅输出到systemsyslogs,File输入事件仅输出到numberlogtest,不会再出现字段混输
  • 若numberlogtest索引已有错误映射,删除后重新创建:
    curl -X DELETE http://localhost:9200/numberlogtest
    

3. 终止日志重复读取

  • 修正Filebeat排除规则:exclude_files使用正则表达式,将原配置改为:
    exclude_files:
      - ^/var/log/foldername/.*\.log$
    
  • 确保Logstash的file输入通过sincedb_path记录读取位置,避免反复从头读取

验证步骤

  1. 重启Logstash和Filebeat服务
  2. 查看Logstash日志,确认无重复读取警告和ES 400错误
  3. 检查Elasticsearch两个索引,确认事件正常写入
  4. 监控CPU占用率,确认恢复正常

内容的提问来源于stack exchange,提问作者user12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:01:02