如何解决Elastic Filebeat无法写入自定义索引并应用自定义映射的问题
解决方案
核心原因
Filebeat默认开启的索引生命周期管理(ILM)会强制覆盖output.elasticsearch.index的自定义配置,这是你始终写入默认filebeat-xxx索引的根本原因。
分步操作
- 修正filebeat.yml配置
完整的修正后配置如下:
# ============================== Filebeat inputs =============================== filebeat.inputs: - type: gcp-pubsub enabled: true project_id: my-project topic: logs-for-es-marina subscription.name: logs-for-es-marina-sub credentials_file: /mydir/.config/gcloud/application_default_credentials.json fields_under_root: true # ======================= ILM 配置 ======================= # 完全禁用全局ILM setup.ilm.enabled: false setup.ilm.overwrite: true # ======================= Elasticsearch template setting ======================= setup.template.name: "marina" setup.template.pattern: "marina-*" setup.template.enabled: false # ---------------------------- Elasticsearch Output ---------------------------- output.elasticsearch: enabled: true index: "marina-test2" hosts: ["https://<my_es>:9243"] username: "<my-user>" password: "<my-pwd>" # 输出端单独禁用ILM,避免ILM覆盖自定义索引名 ilm_enabled: false # ================================= Processors ================================= processors: - add_host_metadata: when.not.contains.tags: forwarded - add_cloud_metadata: ~ - add_docker_metadata: ~ - add_kubernetes_metadata: ~ - decode_json_fields: fields: ["message"] # 保持解析后的字段存放在message层级,匹配自定义映射 target: "message" # 解析失败时添加错误标签方便排查 add_error_key: true
- 清理旧缓存状态
之前的启动记录会在Filebeat的data目录缓存旧的ILM、模板配置,停止Filebeat后执行清理操作:
# RPM/DEB安装版本执行 rm -rf /var/lib/filebeat/registry/* # 二进制本地运行版本执行 rm -rf ./data
- 校验并启动服务
启动前先执行校验命令确认配置和连通性正常:
# 校验配置合法性 filebeat test config # 校验ES连通性 filebeat test output
返回成功后正常启动Filebeat即可。
常见问题说明
之前添加setup.ilm.overwrite: true后卡住,是因为输出端未禁用ILM,Filebeat仍在尝试调用ILM相关接口,全局ILM关闭后接口无响应导致卡死,添加输出端的ilm_enabled: false即可解决该问题。
配置生效后事件会写入marina-test2索引,自动匹配你手动上传的自定义映射,不会再出现message字段的类型解析异常。
内容的提问来源于stack exchange,提问作者Marina
相关产品推荐
相关产品推荐

