# filebeat-config.yaml apiVersion: v1 kind: ConfigMap metadata: name: filebeat-config namespace: efk data: filebeat.yml: | filebeat.inputs: - type: http_endpoint enabled: true listen_address: 0.0.0.0:8888 path: "/" json.keys_under_root: true processors: # 提取路径中的变量(严格模式) - dissect: tokenizer: "/tanya.candle.%{currency}.%{year}.%{interval}" field: "http.request.path" target_prefix: "" ignore_missing: false # 关键:关闭忽略缺失 # 强制设置默认值(即使字段为空) - script: lang: javascript source: | function process(event) { // 先检查字段是否存在,不存在则设置默认值 if (!event.containsKey('currency') || event.get('currency') === '') { event.put('currency', 'unknown'); } if (!event.containsKey('year') || event.get('year') === '') { event.put('year', '0000'); } if (!event.containsKey('interval') || event.get('interval') === '') { event.put('interval', '0D'); } } output.elasticsearch: hosts: ["http://elasticsearch:9200"] username: "fluentd_user" password: "fluentd_password" indices: - index: "logstash-candle-${currency}-${year}-${interval}" # 严格验证字段值非空 when.and: - not.equals: currency: "" - not.equals: year: "" - not.equals: interval: "" - index: "fallback-index" when.or: - equals: currency: "" - equals: year: "" - equals: interval: ""