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
相关产品推荐
相关产品推荐

