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

Elasticsearch集群未接收Filebeat采集的索引问题排查求助

问题排查:Filebeat未向Elasticsearch写入日志且未生成指定索引

环境与配置

  • Elasticsearch集群部署在${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT},集群健康状态为green:
{
  "cluster_name" : "elasticsearch",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 14,
  "active_shards" : 28,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}
  • K8s集群中使用Filebeat 8.1.0采集Pod日志,已确认可访问节点/var/log/containers/目录
  • Filebeat配置文件filebeat.yml:
filebeat.autodiscover:
  providers:
    - type: kubernetes
      templates:
        - condition:
            equals:
              kubernetes.namespace: develop
          config:
            - type: container
              paths:
                - /var/log/containers/*-${data.kubernetes.container.id}.log
              exclude_lines: ["^\\s+[\\-`('.|_]"]
      hints.enabled: true
      hints.default_config:
        type: container
        multiline.type: pattern
        multiline.pattern: '^[[:space:]]'
        multiline.negate: false
        multiline.match: after
http:
  enabled: true
  host: localhost
  port: 5066

output.elasticsearch:
  hosts: '${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}'
  username: ${ELASTICSEARCH_USERNAME}
  password: ${ELASTICSEARCH_PASSWORD}
  indices:
    - index: "develop"
      when:
        equals:
          kubernetes.namespace: "develop"
    - index: "kubernetes-dev"
      when:
        not:
          and:
          - equals:
              kubernetes.namespace: "develop"

filebeat.inputs:
- type: container
  paths:
    - /var/log/containers/*.log
  processors:
  - add_kubernetes_metadata:
    host: ${NODE_NAME}
    matchers:
      - logs_path:
          logs_path: "/var/log/containers/"
  - decode_json_fields:
      fields: ["message"]
      add_error_key: true
      process_array: true
      overwrite_keys: false
      max_depth: 10
      target: json_message

问题现象

  • Elasticsearch始终未生成develop或kubernetes-dev索引(已配置对应索引模板)
  • Filebeat监控日志显示核心指标异常:
    • filebeat.harvester.open_files: 0、filebeat.harvester.running: 0:无日志文件被采集
    • libbeat.pipeline.clients: 0、registrar.states.current: 0:无日志事件进入处理流程

排查与修复步骤

1. 解决输入配置冲突

配置中同时启用了自动发现(filebeat.autodiscover)和静态输入(filebeat.inputs),两者会相互干扰:

  • 注释掉filebeat.inputs整段配置,仅保留自动发现逻辑,验证是否能启动日志采集

2. 修正索引路由语法错误

kubernetes-dev索引的路由条件存在语法问题,and关键字后的条件未正确缩进:

# 错误写法
when:
  not:
    and:
    - equals:
        kubernetes.namespace: "develop"

# 正确写法(简化版更清晰)
when:
  not:
    equals:
      kubernetes.namespace: "develop"

语法错误会导致日志无法匹配索引规则,无法写入目标索引

3. 验证自动发现的元数据获取权限

自动发现模板中使用${data.kubernetes.container.id}变量,依赖Filebeat读取K8s API的权限:

  • 确认Filebeat绑定的ServiceAccount拥有view角色权限,能获取Pod的元数据信息
  • 可临时将模板中的路径改为/var/log/containers/*.log,排除变量解析失败的问题

4. 检查多线配置的兼容性

自动发现默认配置启用了多线合并,若日志格式不符合^[[:space:]]的匹配规则,会导致日志无法被正确解析:

  • 注释掉hints.default_config中的多线配置段,测试是否能正常采集日志

5. 查看详细错误日志

当前监控日志仅展示指标,需开启调试日志排查深层问题:

  • 修改配置log.level: debug,查看Filebeat日志中是否有Elasticsearch连接失败、权限不足、配置解析错误等信息
  • 验证Elasticsearch的用户名/密码是否正确,且该用户拥有create_index权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:25:30