在 CentOS 上使用 Filebeat 时,“分片”通常并不是指像 Elasticsearch 那样的数据分片,而是指 日志采集层面的拆分/分发,常见有下面几种场景和做法:
最简单、最稳定的方式:一台 CentOS 上跑多个 filebeat 进程,分别采集不同日志。
cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat-1.yml
cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat-2.yml
修改:
filebeat.inputsoutputpath.datapath.logs启动:
filebeat -c /etc/filebeat/filebeat-1.yml &
filebeat -c /etc/filebeat/filebeat-2.yml &
✅ 适合:日志量巨大、不同业务隔离
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
✅ 适合:按业务/系统分索引
processors 按字段分片例如按 hostname、服务名、环境分片:
processors:
- add_host_metadata: ~
- add_fields:
target: ''
fields:
env: prod
Filebeat → Kafka(partition 分片) → Logstash/ES
output.kafka:
hosts: ["kafka1:9092"]
topic: logs
partition.round_robin:
reachable_only: true
required_acks: 1
✅ Kafka 的 partition 就是真正的“分片”
如果你是指 一个大文件如何分片读取:
如果你非要“拆分文件”:
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 |
如果你能具体说一下:
我可以给你一套 可直接用的 CentOS 配置。