温馨提示×

如何利用Filebeat监控CentOS应用日志

小樊
49
2026-01-07 23:51:48
栏目: 智能运维

在 CentOS 上用 Filebeat 监控应用日志的完整实践


一 安装与目录结构

  • 使用 YUM 安装 Filebeat(以 7.x 为例,其他版本命令相同):
    • 安装:sudo yum install filebeat -y
    • 启用并启动:sudo systemctl enable filebeat && sudo systemctl start filebeat
    • 配置文件路径:/etc/filebeat/filebeat.yml
    • 服务日志:/var/log/filebeat/filebeat
    • 状态与调试:sudo systemctl status filebeatsudo journalctl -u filebeat -f
  • 建议目录与权限:
    • 应用日志统一落盘到:/var/log/myapp/(示例),并确保 filebeat 用户可读(如属主 root:root 0644 或加入 filebeat 组)。

二 最小可用配置与启动

  • 编辑 /etc/filebeat/filebeat.yml,采集应用日志并输出到本机 Elasticsearch
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/myapp/*.log
      fields:
        type: myapp
        env: prod
    
    output.elasticsearch:
      hosts: ["localhost:9200"]
      index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
    
  • 校验与启动:
    • 语法检查:sudo filebeat test config -c /etc/filebeat/filebeat.yml
    • 输出连通性:sudo filebeat test output -c /etc/filebeat/filebeat.yml
    • 启动服务:sudo systemctl restart filebeat
    • 查看服务日志:sudo tail -f /var/log/filebeat/filebeat
  • 说明:
    • Elasticsearch 不在本机,将 hosts 改为实际地址(如 “es-host1:9200”)。
    • 索引名中的 %{+yyyy.MM.dd} 为按天滚动的日期格式。

三 常见场景配置要点

  • 多行堆栈日志(如 Java 异常)
    - type: log
      enabled: true
      paths:
        - /var/log/myapp/app.log
      multiline:
        pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
        negate: true
        match: after
        max_lines: 1000
        timeout: 3s
    
  • 仅采集含关键字的行
    - type: log
      enabled: true
      paths:
        - /var/log/myapp/*.log
      include_lines: ['^ERROR', '^WARN']
      exclude_lines: ['^DEBUG']
    
  • 忽略历史与已轮转文件
    - type: log
      enabled: true
      paths:
        - /var/log/myapp/*.log
      ignore_older: 24h
      close_inactive: 1h
      clean_inactive: 72h
    
  • 从文件尾部开始读取(避免重启后重发历史)
    - type: log
      enabled: true
      paths:
        - /var/log/myapp/*.log
      tail_files: true
    
  • 自定义字段与标签(便于检索与分流)
    - type: log
      enabled: true
      paths:
        - /var/log/myapp/access.log
      tags: ["access"]
      fields:
        app: myapp
        log_type: access
      fields_under_root: true
    
  • 使用 Filebeat 模块快速接入常见应用(Nginx、Apache、System、MySQL 等)
    # 启用模块(示例:nginx)
    sudo filebeat modules enable nginx
    
    # 编辑模块配置(可按需调整日志路径与解析规则)
    sudo vi /etc/filebeat/modules.d/nginx.yml
    
    # 启动
    sudo systemctl restart filebeat
    
  • 说明:
    • 多行合并、包含/排除行、忽略旧文件、tail_files、fields 与 fields_under_root 等为 Filebeat 输入常用参数,可按需组合使用。

四 输出到 Elasticsearch 或 Logstash

  • 直连 Elasticsearch(适合轻量直写)
    output.elasticsearch:
      hosts: ["es-host1:9200", "es-host2:9200"]
      index: "myapp-%{[agent.version]}-%{+yyyy.MM.dd}"
      # 如启用安全认证
      # username: "elastic"
      # password: "YourPassword"
    
  • 经由 Logstash(适合复杂解析与缓冲)
    # filebeat.yml
    output.logstash:
      hosts: ["logstash-host:5044"]
    
    # Logstash 示例(/etc/logstash/conf.d/beats-input.conf)
    input {
      beats { port => 5044 }
    }
    output {
      elasticsearch {
        hosts => ["es-host:9200"]
        index => "myapp-%{+yyyy.MM.dd}"
      }
    }
    
  • 说明:
    • 直写 ES 更简洁;经由 Logstash 可做更灵活的 Grok 解析、脱敏、路由与缓冲。

五 索引与生命周期管理、Kibana 可视化

  • 索引与 ILM(Index Lifecycle Management)
    • 默认启用 ILM,索引名通常需以 filebeat-* 开头;如需自定义命名,可关闭 ILM 并自定义索引:
      setup.ilm.enabled: false
      setup.template.name: "myapp"
      setup.template.pattern: "myapp-*"
      output.elasticsearch:
        index: "myapp-%{+yyyy.MM.dd}"
      
  • 索引模板与覆盖
    • 可启用模板并覆盖默认设置(如分片数、副本数、字段定义等):
      setup.template.enabled: true
      setup.template.name: "myapp"
      setup.template.pattern: "myapp-*"
      setup.template.overwrite: true
      setup.template.settings:
        index.number_of_shards: 3
        index.number_of_replicas: 1
      
  • Kibana 查看
    • 访问 http://:5601,在 Stack Management → Index Patterns 创建索引模式(如 filebeat-* 或 myapp-*),选择时间字段 @timestamp,即可在 Discover 中检索与可视化应用日志。

0