温馨提示×

centos filebeat如何分片

小樊
51
2026-10-20 11:46:38
栏目: 智能运维

在 CentOS 上使用 Filebeat 时,“分片”通常并不是指像 Elasticsearch 那样的数据分片,而是指 日志采集层面的拆分/分发,常见有下面几种场景和做法:


一、Filebeat 自身“分片”的常见方式

1️⃣ 多个 Filebeat 实例(进程级分片)

最简单、最稳定的方式:一台 CentOS 上跑多个 filebeat 进程,分别采集不同日志。

cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat-1.yml
cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat-2.yml

修改:

  • filebeat.inputs
  • output
  • path.data
  • path.logs

启动:

filebeat -c /etc/filebeat/filebeat-1.yml &
filebeat -c /etc/filebeat/filebeat-2.yml &

✅ 适合:日志量巨大、不同业务隔离


2️⃣ 使用 fields + 输出路由(逻辑分片)

一个 Filebeat,按日志类型打标签,输出到不同地方。

filebeat.inputs:
- type: log
  paths:
    - /var/log/nginx/*.log
  fields:
    log_type: nginx

- type: log
  paths:
    - /var/log/app/*.log
  fields:
    log_type: app

输出示例(Elasticsearch):

output.elasticsearch:
  hosts: ["es:9200"]
  indices:
    - index: "nginx-%{+yyyy.MM.dd}"
      when.equals:
        fields.log_type: nginx
    - index: "app-%{+yyyy.MM.dd}"
      when.equals:
        fields.log_type: app

✅ 适合:按业务/系统分索引


3️⃣ 使用 processors 按字段分片

例如按 hostname、服务名、环境分片:

processors:
  - add_host_metadata: ~
  - add_fields:
      target: ''
      fields:
        env: prod

二、Kafka 作为“分片层”(推荐)

Filebeat → Kafka(partition 分片) → Logstash/ES

output.kafka:
  hosts: ["kafka1:9092"]
  topic: logs
  partition.round_robin:
    reachable_only: true
  required_acks: 1

✅ Kafka 的 partition 就是真正的“分片”


三、Filebeat 采集文件内部“分片”

如果你是指 一个大文件如何分片读取:

  • Filebeat 不支持按行数/大小分片
  • 它是 逐行 tail,自动记录 offset
  • 单个文件只能被一个 input 读取

如果你非要“拆分文件”:

split -l 100000 big.log big.part.

四、常见误区澄清

❌ Filebeat 不直接控制 Elasticsearch 分片
✅ ES 分片在 index 模板里设置:

{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}

五、推荐方案总结

场景 推荐方式
日志量大 多 Filebeat 实例
多业务 fields + 路由
高吞吐 Filebeat + Kafka
ES 分片 Index Template

如果你能具体说一下:

  • 是 按文件 / 按业务 / 按机器 / 按 ES 索引 分片?
  • 输出是 ES 还是 Kafka?

我可以给你一套 可直接用的 CentOS 配置。

0 踩