温馨提示×

filebeat能否自定义ubuntu日志格式

小樊
41
2025-12-09 01:32:55
栏目: 智能运维

可以实现自定义,但需区分两类“格式”

  • 事件内容的结构化解析:让 Ubuntu 的系统日志(如 /var/log/syslog、/var/log/auth.log)按你指定的字段结构输出(时间戳、主机、进程、消息等)。
  • 输出呈现格式:控制写入 Elasticsearch 的索引名、是否美化 JSON、或输出到 Logstash 时的事件形态。

方案一 使用内置 System 模块并自定义解析

  • 启用模块与配置路径
    • 启用模块:sudo filebeat modules enable system
    • 配置目录:/etc/filebeat/modules.d/system.yml(可按需调整)
  • 自定义解析思路
    • 保留模块自带的 Ingest Pipeline(推荐):只调整 pipeline 的日期格式、字段映射或新增处理器,避免重写 grok,稳定性更好。
    • 完全自定义 grok:在 Elasticsearch 中为 system 模块创建自定义 pipeline,用 dissect/grok 按你的日志样式解析,然后在 Filebeat 指定该 pipeline。
  • 输出到 Logstash 时
    • 在 filebeat.yml 中启用 Logstash 输出,由 Logstash 承担复杂解析与再加工(示例与常见 system 日志的 grok 模式可参考实践文章)。

方案二 不用模块,直接用 inputs + processors 自定义

  • 适用场景:/var/log 下的自定义应用日志或非标准 syslog。
  • 最小可用配置示例(filebeat.yml)
    • filebeat.inputs:
      • type: log enabled: true paths:
        • /var/log/myapp.log fields: log_type: myapp processors:
        • dissect: tokenizer: “%{ts} %{+ts} %{host} %{proc}[%{pid}]: %{msg}” field: “message” target_prefix: “”
        • date: field: “ts” formats: [“ISO8601”, “Jan _2 15:04:05”, “2006-01-02 15:04:05”] target_field: “@timestamp”
        • add_fields: fields: env: “prod”
    • output.elasticsearch: hosts: [“localhost:9200”] index: “myapp-%{+yyyy.MM.dd}”
  • 要点
    • 先用 dissect 做轻量切分,再用 date 统一时间,必要时用 grok 处理复杂模式。
    • 通过 fields 添加业务标签,便于后续在 ES/Kibana 中筛选与聚合。

方案三 自定义输出格式与索引命名

  • 输出到 Elasticsearch 的呈现
    • 开启 JSON 美化:在 output.elasticsearch 中设置 pretty: true(便于调试)。
    • 自定义索引名:例如 index: “filebeat-%{[agent.version]}-%{+yyyy.MM.dd}”。
  • 输出到 Logstash
    • 将事件以结构化 JSON 发送至 Logstash(默认行为),由 Logstash 决定最终索引与存储格式。
  • 生效与验证
    • 修改后重启:sudo systemctl restart filebeat
    • 查看服务日志:sudo journalctl -u filebeat -f,确认无报错且事件已发送。

实践建议

  • 优先使用 System 模块 + 自定义 Ingest Pipeline,减少对 Filebeat 侧逻辑的侵入,升级更平滑。
  • 对时间字段统一到 @timestamp,避免多时区与格式混乱。
  • 始终在输出侧设置明确的 index 命名策略,便于 ILM 与权限控制。
  • 复杂多行堆栈(如 Java 异常)使用 multiline 配置,避免行被错误拆分。

0