温馨提示×

如何用Ubuntu的Filebeat分析日志

小樊
45
2025-12-22 21:20:50
栏目: 智能运维

在 Ubuntu 上使用 Filebeat 进行日志分析

一 架构与准备

  • 组件分工:在 Ubuntu 上部署 Filebeat 负责采集与轻量处理,常见链路为 Filebeat → Logstash(解析与丰富)→ Elasticsearch(存储与检索)→ Kibana(可视化与仪表盘)。Filebeat 资源占用低、支持断点续传与多模块,适合边缘节点采集。建议各组件版本保持一致(如 7.17.x8.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
      • 输出到 Logstash(同上),便于在 Logstash 中用 Grok 深度解析。
        模块适合标准化日志,自定义输入适合非标或项目特定日志。

三 解析与可视化

  • 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”] }
      • }
      • 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 解析出浏览器/系统信息,便于后续聚合分析。
  • Kibana 可视化

    • 索引模式:进入 Kibana → Management → Stack Management → Index Patterns,创建如 nginx-logs-* 或 filebeat-* 的模式,时间字段选 @timestamp
    • Discover:按 statusmethodclient_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 版本尽量一致,减少兼容性问题。
      以上实践覆盖多行、过滤、性能与版本等高频问题点。

0