温馨提示×

如何用Ubuntu Filebeat监控应用程序

小樊
38
2025-12-07 01:59:00
栏目: 智能运维

在 Ubuntu 上使用 Filebeat 监控应用程序日志

一 安装与准备

  • 更新索引并导入 Elastic GPG 密钥,添加 Elastic 7.x APT 仓库,安装 Filebeat,然后启动并设为开机自启:
    sudo apt update
    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
    sudo apt update
    sudo apt install filebeat
    sudo systemctl start filebeat
    sudo systemctl enable filebeat
    
  • 配置文件默认路径为:/etc/filebeat/filebeat.yml。修改前建议备份:sudo cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml.bak

二 快速上手 控制台输出验证

  • 为了先确认采集是否正常,可临时将输出改为控制台,便于本地查看事件:
    sudo tee /etc/filebeat/filebeat.yml >/dev/null <<'EOF'
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/myapp/*.log
    
    output.console:
      enabled: true
      pretty: true
    EOF
    sudo systemctl restart filebeat
    journalctl -u filebeat -f
    
  • /var/log/myapp/*.log 替换为你的应用实际日志路径。看到结构化日志输出即表示采集链路正常。

三 生产常用架构与配置

  • 架构A Filebeat → Logstash → Elasticsearch
    • Filebeat 配置(示例采集 Java 应用日志):
      sudo tee /etc/filebeat/filebeat.yml >/dev/null <<'EOF'
      filebeat.inputs:
      - type: log
        enabled: true
        paths:
          - /var/log/myapp/*.log
        fields:
          app: myapp
          env: prod
        fields_under_root: true
      
      output.logstash:
        hosts: ["logstash.example.com:5044"]
      EOF
      
    • Logstash 配置(/etc/logstash/conf.d/filebeat-to-es.conf):
      input {
        beats { port => 5044 }
      }
      filter {
        # 可添加 grok、date、mutate 等处理
      }
      output {
        elasticsearch {
          hosts => ["http://es.example.com:9200"]
          index => "app-logs-%{+YYYY.MM.dd}"
        }
      }
      
    • 启动组件:
      sudo systemctl restart filebeat
      sudo systemctl restart logstash
      
  • 架构B Filebeat 直连 Elasticsearch
    sudo tee /etc/filebeat/filebeat.yml >/dev/null <<'EOF'
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/myapp/*.log
      fields:
        app: myapp
        env: prod
      fields_under_root: true
    
    output.elasticsearch:
      hosts: ["es.example.com:9200"]
      index: "app-logs-%{+YYYY.MM.dd}"
    EOF
    sudo systemctl restart filebeat
    
  • 多应用或多域名分流到不同索引(利用 fields 条件索引)
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/nginx/example.com.access.log
      fields: { domain: "example.com" }
      fields_under_root: true
    - type: log
      enabled: true
      paths:
        - /var/log/nginx/api.example.com.access.log
      fields: { domain: "api.example.com" }
      fields_under_root: true
    
    output.elasticsearch:
      hosts: ["es.example.com:9200"]
      indices:
        - index: "example-com-%{+yyyy.MM.dd}"
          when.equals:
            domain: "example.com"
        - index: "api-example-com-%{+yyyy.MM.dd}"
          when.equals:
            domain: "api.example.com"
    
  • 以上示例覆盖了 Filebeat 采集 Java 日志并发送到 Logstash 或直连 Elasticsearch 的常见做法,以及按域名分流到不同索引的实践。

四 常用处理与运维要点

  • 多行日志合并(如 Java 堆栈):
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/myapp/*.log
      multiline.pattern: '^[[:space:]]'
      multiline.negate: true
      multiline.match: after
    
  • 按应用或环境打标签(便于检索与权限隔离):
    fields:
      app: order-service
      env: staging
    fields_under_root: true
    
  • 数据保留与索引生命周期管理(ILM):在生产环境建议启用 ILM 或按日索引(如 app-logs-%{+YYYY.MM.dd}),并在 Elasticsearch 配置相应的 Index Lifecycle Policy,避免无限增长。
  • 权限与路径:确保 Filebeat 运行用户对应用日志有读取权限(如使用 systemd 可配置 ReadWritePaths 或加入日志所属用户组)。
  • 调试与验证:
    • 语法检查:sudo filebeat test config
    • 输出连通性:sudo filebeat test output
    • 查看服务日志:journalctl -u filebeat -f
    • KibanaDiscover 中检索对应索引(如 app-logs-*)验证字段与内容。

0