温馨提示×

Filebeat如何进行日志分割

小樊
40
2025-12-08 20:32:54
栏目: 编程语言

Filebeat日志分割的常见场景与做法

一 概念澄清

  • Filebeat自身日志分割:指对 Filebeat 进程输出的运行日志进行按大小或按时间切分与保留。
  • 被采集日志的分割:指对应用/系统产生的日志文件(如 /var/log/ 下的文件)进行轮转,Filebeat 负责持续采集,不负责切割文件。
  • 索引/数据按时间或业务分割:指将写入 Elasticsearch 的索引按天、按月或按业务维度拆分,便于检索与保留策略管理。

二 对Filebeat自身日志进行分割

  • 在 Filebeat 配置中开启文件日志并设定保留策略,例如保留最近 7 个文件:
logging:
  file:
    enabled: true
    path: /var/log/filebeat/filebeat
    name: filebeat
    keepfiles: 7
    permissions: 640
  • 说明:上述配置会让 Filebeat 将自身日志写入 /var/log/filebeat/filebeat.log,并按策略自动轮转与清理旧文件。该方式属于 Filebeat 内置的日志文件管理,不涉及采集路径的日志切割。

三 对被采集日志进行分割(系统级轮转)

  • 使用 logrotate 对应用日志进行按天轮转、压缩与保留(示例针对 Filebeat 自身日志目录,其他日志路径同理):
    1. 新建配置:
sudo vi /etc/logrotate.d/filebeat
  1. 写入内容:
/var/log/filebeat/*.log {
    daily
    missingok
    rotate 7
    compress
    notifempty
    create 640 root root
}

参数含义:daily(每天轮转)、rotate 7(保留 7 份)、compress(压缩旧日志)、create(轮转后重建文件并设定权限/属主)。 3) 手动测试与生效:

sudo logrotate -f /etc/logrotate.d/filebeat
sudo systemctl restart filebeat
  • 说明:Filebeat 不负责切割应用日志,通常由 logrotate 或应用自身按策略轮转;Filebeat 会自动识别并继续跟踪新文件。

四 将数据写入按时间或业务分割的索引

  • 直接由 Filebeat 写入按月的索引(示例按月拆分):
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"
setup.template.enabled: false
setup.template.overwrite: true

output.elasticsearch:
  hosts: ["localhost:9200"]
  index: "nginx-access-%{[beat.version]}-%{+yyyy.MM}"
  • 通过 Logstash 按业务字段拆分索引(示例按项目拆分并写入按天索引):
# Filebeat
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /opt/logs/qfzs-*/log_info.log
  fields:
    project: "assistant"
- type: log
  enabled: true
  paths:
    - /opt/logs/qfzs-*/log_info.log
  fields:
    project: "qfzs-shop"
output.logstash:
  hosts: ["localhost:5044"]
# Logstash
input { beats { port => 5044 } }
filter {
  if "assistant" in [fields][project] { mutate { add_field => { "index_prefix" => "filebeat-assistant" } } }
  else if "qfzs-shop"   in [fields][project] { mutate { add_field => { "index_prefix" => "filebeat-qfzs-shop" } } }
  else { mutate { add_field => { "index_prefix" => "filebeat-default" } } }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "%{[index_prefix]}-%{+YYYY.MM.dd}"
  }
}
  • 说明:前者通过 Filebeat 的 index 模板直接按月写入;后者利用 fields 标记业务,由 Logstash 动态选择索引前缀,实现按业务与时间的多维拆分。

0