ubuntu filebeat如何处理日志格式
导读:Ubuntu 上 Filebeat 处理日志格式的实践指南 一 处理思路总览 识别日志类型:按是否为JSON 单行、多行堆栈、系统日志(syslog)、键值或正则可解析文本进行分类。 选择处理方式:优先使用**模块(Modules)与处理...
Ubuntu 上 Filebeat 处理日志格式的实践指南
一 处理思路总览
- 识别日志类型:按是否为JSON 单行、多行堆栈、系统日志(syslog)、键值或正则可解析文本进行分类。
- 选择处理方式:优先使用**模块(Modules)与处理器(Processors)**在 Filebeat 侧完成结构化;复杂场景可发送到 Logstash 做二次解析;最终输出到 Elasticsearch 并配合索引模板与 Kibana 展示。
- 关键配置位置:输入(inputs)、模块(modules)、处理器(processors)、输出(outputs)。
二 常见日志格式与 Filebeat 配置
-
JSON 日志(每行一个 JSON 对象)
- 适用:应用直接输出 JSON(如自定义 JSON 日志、改造后的 Nginx JSON 等)。
- 要点:启用 JSON 解码,将字段提升为顶层,必要时指定 message 键与错误键。
- 示例:
filebeat.inputs: - type: log enabled: true paths: - /var/log/myapp/*.log json.keys_under_root: true json.add_error_key: true json.message_key: event output.elasticsearch: hosts: ["localhost:9200"] index: "myapp_json-%{ +yyyy.MM.dd} " - 说明:keys_under_root 将 JSON 字段放到事件根层;add_error_key 在解析失败时添加 error 字段便于排查。
-
多行堆栈日志(Java、Python traceback 等)
- 适用:异常堆栈跨多行,需要合并为一条事件。
- 要点:用 multiline 将“非时间/异常起始行”合并到上一行;按时间或“at/Exception”等特征匹配。
- 示例:
filebeat.inputs: - type: log enabled: true paths: - /var/log/java/*.log multiline.negate: true multiline.pattern: '^[0-9]{ 4} -[0-9]{ 2} -[0-9]{ 2} ' multiline.match: after multiline.max_lines: 500 multiline.timeout: 5s - 说明:negate: true + match: after 表示“不以时间开头的行附加到前一条”;可按实际时间格式调整 pattern。
-
Ubuntu 系统日志(auth、syslog 等)
- 适用:/var/log/auth.log、/var/log/syslog 等系统日志。
- 要点:启用 System 模块,由模块内置解析器处理常见 syslog 格式;如需自定义可在 Logstash 进一步 grok。
- 示例:
# 启用模块 sudo filebeat modules enable system sudo filebeat modules list # 输出到 Logstash(示例) output.logstash: hosts: ["192.0.2.10:5044"] # 重启服务 sudo systemctl restart filebeat - 说明:System 模块内置 fileset(如 auth、syslog),简化收集与解析;复杂场景在 Logstash 中用 grok 细化字段。
-
键值或正则可解析文本(如 Spring Boot 默认格式)
- 适用:非 JSON、但具备固定分隔符或模板的日志。
- 要点:使用 dissect 轻量解析;不适合再抽取子字段时,可配合 grok(通常放在 Logstash)。
- 示例(dissect 解析 Spring Boot 默认行):
filebeat.inputs: - type: stdin processors: - dissect: tokenizer: "%{ logDate} %{ logTime} %{ logLevel} %{ pid} --- [%{ thread} ] %{ logger} : %{ message} " field: "message" output.console: enabled: true pretty: true - 说明:dissect 基于分隔符切分,性能优于 grok;无法覆盖复杂模式时,将事件送至 Logstash 用 grok 深度解析。
三 输出与索引模板
- 输出到 Elasticsearch
- 建议按天分索引,使用内置或自定义模板;在 filebeat.yml 中设置索引名与模板:
output.elasticsearch: hosts: ["localhost:9200"] index: "filebeat-%{ [agent.version]} -%{ +yyyy.MM.dd} " setup.template.name: "filebeat" setup.template.pattern: "filebeat-*" setup.template.settings: index.number_of_shards: 3 - 说明:模板用于预置字段类型与分词,避免动态映射带来的性能与查询问题。
- 建议按天分索引,使用内置或自定义模板;在 filebeat.yml 中设置索引名与模板:
四 调试与运行
- 语法校验与前台运行:使用 -e -c 快速校验并查看事件输出。
sudo filebeat -e -c /etc/filebeat/filebeat.yml - 生产部署:使用 systemd 管理,变更后重启服务。
sudo systemctl restart filebeat - 模块与配置路径:模块通常启用后生成/修改 /etc/filebeat/modules.d/*.yml;主配置为 /etc/filebeat/filebeat.yml。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu filebeat如何处理日志格式
本文地址: https://pptw.com/jishu/753551.html
