Filebeat 收集 Linux 系统日志配置指南

1. 基础配置文件编写

创建 filebeat.yml 配置文件,核心结构如下:

filebeat.inputs:
- type: filestream
  id: system-logs
  enabled: true
  paths:
    - /var/log/syslog
    - /var/log/messages
    - /var/log/*.log

output.elasticsearch:
  hosts: ["http://elasticsearch:9200"]
  indices:
    - index: "linux-system-%{+yyyy.MM.dd}"

2. 多行日志处理(Java 堆栈示例)

针对 Java 堆栈等跨行日志,添加 multiline 配置:

filebeat.inputs:
- type: filestream
  id: java-logs
  paths:
    - /var/log/app/*.log
  multiline.type: pattern
  multiline.pattern: '^[[:space:]]+(at|Caused by)'  # 识别堆栈行首特征
  multiline.negate: true
  multiline.match: after

参数解析

  • pattern: 正则匹配行首特征(如缩进空格 + "at/Caused by")
  • negate: true: 将不匹配该模式的行视为新事件
  • match: after: 将匹配行追加到上一事件
3. 完整配置示例
filebeat.inputs:
- type: filestream
  id: system
  paths: 
    - /var/log/syslog
    - /var/log/auth.log

- type: filestream
  id: java-app
  paths:
    - /opt/app/logs/*.log
  fields:
    app: java-service
  multiline:
    pattern: '^\s+(\w+\.)+'  # 匹配包名前缀
    negate: true
    match: after
    timeout: 5s              # 多行等待超时

output.elasticsearch:
  hosts: ["es-node1:9200", "es-node2:9200"]
  username: "filebeat-user"
  password: "secure-password"

4. 关键优化技巧
  1. 日志类型标记
    fields:
      log_type: system
    fields_under_root: true  # 将字段提升到根层级
    

  2. 处理器增强
    processors:
      - drop_fields:         # 过滤无用字段
          fields: ["log.offset"]
      - dissect:             # 提取时间戳
          tokenizer: "%{timestamp} %{message}"
          field: "message"
          target_prefix: ""
    

  3. 性能调优
    queue.mem:
      events: 4096           # 内存队列大小
    max_procs: 4             # CPU核数限制
    

5. 验证与调试
# 测试配置文件语法
filebeat test config

# 模拟日志采集(不发送至ES)
filebeat -e --strict.perms=false \
  -E output.console.pretty=true

最佳实践

  • 对不同的日志源使用独立的 id
  • 使用 fields 添加环境标签(如 env: production
  • 通过 multiline.timeout 防止大堆栈阻塞
  • 结合 ignore_older 避免历史日志重复采集
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐