温馨提示×

CentOS Filebeat日志格式自定义技巧

小樊
45
2025-12-09 14:39:25
栏目: 智能运维

CentOS 上 Filebeat 日志格式自定义技巧

一 配置结构与常用输出

  • 配置文件默认路径为:/etc/filebeat/filebeat.yml。核心结构包含:
    • filebeat.inputs:定义采集路径与输入类型(如 log、modules)。
    • processors:在发送前对事件进行加工(如 add_fields、mutate、decode_json_fields 等)。
    • output.elasticsearch / output.logstash:定义输出目标与索引命名。
  • 常用输出示例(Elasticsearch):
    • 指定索引按日期滚动:index: “filebeat-%{[agent.version]}-%{+yyyy.MM.dd}”
    • 自定义字段与根级别放置:使用 fieldsfields_under_root: true 将字段提升到事件根层级,便于检索与聚合。

二 在采集侧自定义事件字段

  • 添加静态字段或标签:
    • 使用 add_fields 增加业务维度(如 env、app、region),或用 fields_under_root 将字段放到根层级。
  • 清理无用字段:
    • 使用 mutate.remove_field 删除不需要的元数据或敏感字段,减少噪声与泄露风险。
  • 示例(在 filebeat.inputs 下为某类日志增加字段):
    • 说明:该示例为采集的日志事件增加 env=prodapp=myapp,并删除 agent.ephemeral_idagent.type 两个字段。

三 解析与重写日志内容

  • 多格式混合场景建议用 fields.log_type 标记日志类型,再配合条件处理器分别解析。
  • 典型解析器与用法:
    • JSON 日志:使用 decode_json_fields,将 message 中的 JSON 展开到事件;设置 target: “”overwrite_keys: true 可将其提升到根层级并覆盖同名键。
    • Key-Value 日志:使用 kv 处理器,指定 field 为 message,配合 trim_key/trim_valueseparator 等清理与切分规则。
    • 字段重命名与类型转换:使用 renameconvert 统一字段命名与类型(如将 status 转为 long)。
    • 脱敏与合规:使用 maskemail、ip、手机号 等敏感信息进行掩码处理。
  • 示例(按类型解析与脱敏):
    • 说明:对 log_type=kv 的日志执行 KV 解析;对 log_type=json 的日志执行 JSON 解析;对 message 中的邮箱与 IP 进行掩码。

四 输出与索引命名模板

  • 索引命名与生命周期:
    • 按版本与日期命名:index: “filebeat-%{[agent.version]}-%{+yyyy.MM.dd}”
    • 启用 ILM(Index Lifecycle Management)管理热温冷与滚动删除:
      • setup.ilm.enabled: true
      • setup.ilm.policy_name: “delete”(示例策略名,可按需调整)
  • 模板与压缩:
    • 自定义分片与压缩:setup.template.settings 中设置 index.number_of_shardsindex.codec: best_compression_source.enabled: true
  • 安全传输:
    • 输出到 ES 或 Logstash 时启用 SSL/TLS,配置 certificate_authorities、certificate、key 等参数,确保链路加密与可信。

五 调试与验证

  • 配置校验与热加载:
    • 校验配置:filebeat test config -e;必要时开启模块热加载:filebeat.config.modules: reload.enabled: true
  • 服务管理:
    • 重启与查看状态:sudo systemctl restart filebeat;sudo systemctl status filebeat;实时查看日志:sudo journalctl -u filebeat -f
  • 数据验证:
    • 查看索引:curl -X GET “localhost:9200/_cat/indices?v&pretty”
    • 检索样例文档:curl -X GET “localhost:9200/filebeat-*/_search?pretty” -H ‘Content-Type: application/json’ -d ‘{ “query”: { “match_all”: {} }, “size”: 1 }’。

0