温馨提示×

如何使用Filebeat监控Linux日志

小樊
39
2026-01-01 10:32:11
栏目: 智能运维

使用 Filebeat 监控 Linux 日志

一 安装与准备

  • CentOS/RHEL 上可直接用包管理器安装:
    • 安装命令:sudo yum install filebeat -y
    • 配置文件默认路径:/etc/filebeat/filebeat.yml
  • 也可下载官方压缩包部署(适合无外网或离线环境):
    • 示例:wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.6.1-linux-x86_64.tar.gz
    • 解压后使用 -c 指定配置文件启动
  • 建议准备一个最小配置用于连通性验证(见下文),再逐步启用模块与复杂处理。

二 最小可用配置与启动

  • 直接输出到 Elasticsearch(单机示例)
    • 编辑 /etc/filebeat/filebeat.yml
      filebeat.inputs:
      - type: log
        enabled: true
        paths:
          - /var/log/*.log
        ignore_older: 72h
      
      output.elasticsearch:
        hosts: ["localhost:9200"]
        index: "filebeat-%{+yyyy.MM.dd}"
      
    • 启动与开机自启:
      sudo systemctl start filebeat
      sudo systemctl enable filebeat
      sudo systemctl status filebeat
      
    • 查看服务日志:sudo journalctl -u filebeat -f
  • 通过 Logstash 中转(便于解析与过滤)
    • Filebeat 配置:
      filebeat.inputs:
      - type: log
        enabled: true
        paths:
          - /var/log/*.log
      
      output.logstash:
        hosts: ["192.0.2.10:5044"]
      
    • Logstash 示例(/etc/logstash/conf.d/beats-input.conf):
      input { beats { port => 5044 } }
      output { stdout { codec => rubydebug } }
      
    • 验证:在 Logstash 控制台看到事件后,再切回 Elasticsearch 输出。

三 常用输入与处理器配置

  • 多日志源与字段标记(便于后续索引与检索)
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/messages
        - /var/log/secure
      fields:
        log_source: system
      fields_under_root: true
      tags: ["os", "centos"]
    
    - type: log
      enabled: true
      paths:
        - /var/log/nginx/*.log
      fields:
        log_source: nginx
      fields_under_root: true
      tags: ["web", "nginx"]
    
  • 行过滤与多行合并(适合错误堆栈)
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/app/*.log
      include_lines: ['^ERR', '^WARN']
      exclude_lines: ['^DEBUG']
      multiline.pattern: '^\d{4}-\d{2}-\d{2}'
      multiline.negate: true
      multiline.match: after
    
  • JSON 日志解析(每行一个 JSON 对象)
    - type: log
      enabled: true
      paths:
        - /var/log/app/json.log
      json.keys_under_root: true
      json.add_error_key: true
    
  • 从文件尾部开始读取(避免重启后重发历史)
    - type: log
      enabled: true
      paths:
        - /var/log/stream.log
      tail_files: true
    
  • 常用调优参数
    • ignore_older: 72h(忽略旧文件)
    • scan_frequency: 3s(扫描新文件频率)
    • harvester_buffer_size: 20048(单文件读取缓冲)
    • max_bytes: 10485760(单事件最大字节数,可按日志切分大小调整)

四 输出到不同后端与索引管理

  • 输出到 Redis(削峰与解耦)
    output.redis:
      hosts: ["127.0.0.1:6379"]
      key: "filebeat"
      db: 1
      datatype: list
    
  • 条件路由到不同 Redis Key(按字段分流)
    output.redis:
      hosts: ["127.0.0.1:6379"]
      key: "default_list"
      keys:
        - key: "error_list"
          when.contains:
            message: "error"
        - key: "debug_list"
          when.contains:
            message: "DEBUG"
        - key: "%{[fields.list]}"
    
  • 输出到 Kafka
    output.kafka:
      hosts: ["kafka1:9092","kafka2:9092"]
      topic: "%{[fields.log_topic]}"
      required_acks: 1
      compression: gzip
    
  • 索引与 ILM(索引生命周期管理)
    • 默认启用 ILM,索引名通常为 filebeat-*;如需自定义索引名或关闭 ILM:
      setup.ilm.enabled: false
      setup.template.name: "myapp"
      setup.template.pattern: "myapp-*"
      output.elasticsearch:
        hosts: ["localhost:9200"]
        index: "myapp-%{+yyyy.MM.dd}"
      
    • 也可基于字段做索引路由:
      output.elasticsearch:
        hosts: ["localhost:9200"]
        indices:
          - index: "ops-systemlog-%{+yyyy.MM.dd}"
            when.equals:
              fields.source: "ops-systemlog"
          - index: "ops-operationlog-%{+yyyy.MM.dd}"
            when.equals:
              fields.source: "ops-operationlog"
      
    • 注意:启用 ILM 时索引命名通常受限,需与 ILM 策略匹配。

五 运维与排错要点

  • 查看运行状态与实时日志
    • 服务状态:sudo systemctl status filebeat
    • 实时日志:sudo journalctl -u filebeat -f
  • 配置语法与调试
    • 语法检查:filebeat test config -c /etc/filebeat/filebeat.yml
    • 调试输出:filebeat -e -c /etc/filebeat/filebeat.yml -d “publish”
  • 重置采集位点(谨慎:会重发历史)
    • 删除注册表目录:sudo rm -rf data/registry
    • RPM 包安装常见路径:sudo rm -rf /var/lib/filebeat/registry
  • 日志轮转配合
    • Filebeat 不负责切分,建议配合 logrotate 使用,避免文件句柄与切分冲突
  • 模块与自动配置
    • 启用官方模块(如 system、nginx 等)可简化常见日志的采集与解析:
      filebeat modules enable system nginx
      filebeat setup --modules system,nginx
      
    • 模块配置目录:/etc/filebeat/modules.d/*.yml,可按需启用与调整。

0