如何用Ubuntu的Filebeat分析日志
导读:在 Ubuntu 上使用 Filebeat 进行日志分析 一 架构与准备 组件分工:在 Ubuntu 上部署 Filebeat 负责采集与轻量处理,常见链路为 Filebeat → Logstash(解析与丰富)→ Elasticsear...
在 Ubuntu 上使用 Filebeat 进行日志分析
一 架构与准备
- 组件分工:在 Ubuntu 上部署 Filebeat 负责采集与轻量处理,常见链路为 Filebeat → Logstash(解析与丰富)→ Elasticsearch(存储与检索)→ Kibana(可视化与仪表盘)。Filebeat 资源占用低、支持断点续传与多模块,适合边缘节点采集。建议各组件版本保持一致(如 7.17.x 或 8.x)。
- 安装 Filebeat(示例为 8.9.0,可按需替换版本):
- 下载并安装:wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.9.0-amd64.deb & & sudo dpkg -i filebeat-8.9.0-amd64.deb
- 启用系统模块:sudo filebeat modules enable system
- 检查:sudo filebeat modules list
- 启动与开机自启:sudo systemctl start filebeat & & sudo systemctl enable filebeat
- 查看运行日志:tail -f /var/log/filebeat/filebeat.log
上述流程与模块能力适用于 Ubuntu/Debian 系,Filebeat 多模块(如 system、nginx 等)可简化常见日志的采集与解析。
二 配置采集与输出
-
场景 A 采集 Ubuntu 系统日志(使用 System 模块,推荐)
- 编辑模块配置:sudo filebeat setup --modules system(首次可自动加载索引模板与仪表盘骨架)
- 修改主配置 /etc/filebeat/filebeat.yml,输出到 Logstash(示例端口 5044):
- output.elasticsearch.enabled: false
- output.logstash.hosts: [“localhost:5044”]
- 重启:sudo systemctl restart filebeat
该方式利用模块内置的解析能力,后续在 Kibana 中可直接使用系统日志相关可视化。
-
场景 B 采集应用日志(以 Nginx 为例,或自定义路径)
- 方式 1(模块):sudo filebeat modules enable nginx,按需调整 /etc/filebeat/modules.d/nginx.yml 的 paths。
- 方式 2(自定义输入):在 filebeat.yml 中添加:
- filebeat.inputs:
- type: filestream
enabled: true
paths:
- /var/log/nginx/*.log
- type: filestream
enabled: true
paths:
- 输出到 Logstash(同上),便于在 Logstash 中用 Grok 深度解析。
模块适合标准化日志,自定义输入适合非标或项目特定日志。
- filebeat.inputs:
三 解析与可视化
-
Logstash 示例管道(解析 Nginx 访问日志)
- 配置 /etc/logstash/conf.d/nginx-pipeline.conf:
- input { beats { port => 5044 } }
- filter {
- grok {
- match => { “message” => “%{ IPORHOST:client_ip} - %{ USER:user} [%{ HTTPDATE:timestamp} ] "%{ WORD:method} %{ URIPATHPARAM:path} HTTP/%{ NUMBER:http_version} " %{ NUMBER:status} %{ NUMBER:body_bytes_sent} "%{ DATA:referrer} " "%{ DATA:user_agent} "” }
- }
- date { match => [“timestamp”, “dd/MMM/yyyy:HH:mm:ss Z”] target => “@timestamp” }
- useragent { source => “user_agent” target => “user_agent_info” }
- mutate { remove_field => [“message”, “timestamp”] }
- grok {
- }
- output { elasticsearch { hosts => [“http://localhost:9200”] index => “nginx-logs-%{ +YYYY.MM.dd} ” } stdout { codec => rubydebug } }
- 启动:/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx-pipeline.conf
通过 Grok 将非结构化日志结构化为字段,Date 将日志时间标准化为 @timestamp,UserAgent 解析出浏览器/系统信息,便于后续聚合分析。
- 配置 /etc/logstash/conf.d/nginx-pipeline.conf:
-
Kibana 可视化
- 索引模式:进入 Kibana → Management → Stack Management → Index Patterns,创建如 nginx-logs-* 或 filebeat-* 的模式,时间字段选 @timestamp。
- Discover:按 status、method、client_ip 等筛选与检索。
- Visualize:
- 状态码分布饼图(按 status 聚合)
- 请求量时序折线图(X 轴 @timestamp 按小时,Y 轴文档计数)
- 地理分布地图(基于 client_ip 的 GeoIP,需提前解析 IP 地理信息)
以上步骤可快速搭建常用监控面板,进一步可按需扩展。
四 验证与常见问题
-
快速验证
- Filebeat 自身日志:tail -f /var/log/filebeat/filebeat.log(观察是否成功连接 Logstash/ES、无报错)
- Logstash 调试:stdout { codec => rubydebug } 输出可确认字段解析是否正确
- Elasticsearch:GET /filebeat-*/_search 或在 Kibana Discover 查看是否入库
通过逐级查看日志与检索结果,可快速定位采集、解析、入库链路问题。
-
常见问题与要点
- 多行日志(如 Java 堆栈):在 Filebeat 使用 multiline 将异常栈合并为单事件,常用 pattern 如以 “[” 开头,negate 与 match 组合控制合并方向,设置 max_lines 与 timeout 防止过长或卡死。
- 只采集关键行:用 include_lines/exclude_lines 正则过滤(如仅 WARN/ERROR)。
- 忽略历史旧文件:ignore_older 可跳过指定时间之前的文件,减少无效采集。
- 性能与可靠性:合理设置 spool_size、idle_timeout、close_renamed/close_removed,避免文件轮转导致漏采或句柄占用。
- 版本匹配:Filebeat、Logstash、Elasticsearch、Kibana 版本尽量一致,减少兼容性问题。
以上实践覆盖多行、过滤、性能与版本等高频问题点。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何用Ubuntu的Filebeat分析日志
本文地址: https://pptw.com/jishu/778628.html
