对于几十台机器的日志集中收集,最直接有效的方案是采用Beats + Logstash + Elasticsearch + Kibana(ELK)技术栈,其中Filebeat作为轻量级日志采集器,Logstash负责解析和转发,Elasticsearch集群存储和检索,Kibana进行可视化展示,这套架构成熟稳定,社区活跃,且可根据日志量灵活扩展。
为什么几十台机器日志必须集中管
日志散落在几十台机器上,排查问题时你需要在每台机器上手动 grep,新业务上线后,日志格式多样,想统一分析几乎不可能。集中收集不是选择题,而是运维的必答题,当服务器数量超过十台,人工登录查看日志的时间成本已经超过搭建一套日志系统所需投入,业内专家指出,大部分互联网公司会在服务器规模达到 20 台左右时正式引入集中日志方案。
从故障排查到安全审计,从性能监控到业务指标提取,集中后的日志能发挥数据价值,但几十台机器的规模很特殊单机方案扛不住,大型分布式方案又过度设计。你需要一个平衡效率、成本和可维护性的组装方案。
几十台服务器日志收集方案对比:ELK 还是 EFK
市场上的方案主要分两派:ELK(Elasticsearch + Logstash + Kibana)和 EFK(Elasticsearch + Fluentd + Kibana),两者在存储和可视化层共用 Elasticsearch 和 Kibana,差异在采集与传输环节。
日志集中收集工具怎么选
| 对比维度 | Filebeat + Logstash | Fluentd | rsyslog |
|---|---|---|---|
| 资源占用 | 极低,Filebeat 约 10MB 内存 | 中等,Fluentd 约 50MB 内存 | 极低,系统自带 |
| 解析能力 | Logstash 插件丰富,Grokg 灵活 | 内置正则,支持多种输入输出 | 有限,适合系统日志 |
| 扩展性 | 可通过 Kafka 做缓冲层 | 自带缓冲机制 | 集群场景需额外配置 |
| 学习成本 | 中等,需掌握 Logstash 配置 | 稍高,Fluentd 配置语法独特 | 低 |
| 社区活跃度 | 高,ELK 生态成熟 | 较高,CNCF 项目 | 低,传统方案 |
对于几十台机器规模,多数情况下推荐 Filebeat + Logstash 组合

,Filebeat 负责轻量采集,占用资源少,对业务影响小;Logstash 集中处理后端,支持复杂的日志解析和过滤,如果团队熟悉 Ruby 或需要更丰富的插件生态,Fluentd 也是可靠选择。
传输层要不要加 Kafka
当日志量达到每日几百 GB 时,Logstash 可能成为瓶颈,这时引入 Kafka 作为缓冲层是一个好思路,但在几十台机器场景下,日志量通常不会超过每日几十 GB,直接使用 Logstash 作为传输和解析中间件,架构更简单,运维成本更低,如果对日志丢失零容忍,或者需要将日志同时发给多个消费端,则可以考虑 Kafka,行业共识是:单日日志量低于 100GB 时,不需要 Kafka。
日志收集架构怎么搭建:从零到可用的完整步骤
环境准备
- 操作系统:CentOS 7+ 或 Ubuntu 18.04+
- Java 环境:Elasticsearch 需要 Java 8 或 11,推荐使用 OpenJDK
- 网络:所有机器之间能互相通信,采集端到 Logstash 端口开放,Logstash 到 Elasticsearch 端口开放
- 用户权限:Elasticsearch 不能用 root 运行,需要创建专用用户
安装和配置 Filebeat
Filebeat 部署在每台需要采集日志的机器上,安装简单,直接下载 RPM 包或使用官方仓库。
# 添加 Elastic 仓库
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
cat > /etc/yum.repos.d/elastic.repo << EOF
[elastic-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
# 安装
yum install filebeat -y
配置中需要指定日志路径和输出目标。核心配置字段:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
fields:
service: nginx
server: web-01
fields_under_root: true
output.logstash:
hosts: ["192.168.1.100:5044"]
paths支持通配符,可同时采集多个文件fields用来添加自定义标签,方便后续在 Elasticsearch 中区分来源output.logstash指定 Logstash 地址,多个地址自动负载均衡

配置 Logstash 进行解析
Logstash 通常部署在中央服务器上,接收 Filebeat 传来的日志,解析后输出到 Elasticsearch。一个典型的 Logstash 配置:
input {
beats {
port => 5044
client_inactivity_timeout => 3600
}
}
filter {
if [service] == "nginx" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
geoip {
source => "clientip"
}
}
mutate {
remove_field => ["message", "original"]
}
}
output {
elasticsearch {
hosts => ["http://192.168.1.101:9200", "http://192.168.1.102:9200"]
index => "logs-%{service}-%{+YYYY.MM.dd}"
}
}
grok是重中之重,它能将非结构化日志解析成结构化字段geoip插件可解析 IP 属地,方便分析访问来源mutate清理冗余字段,减小索引体积index按时间和服务名分索引,便于管理生命周期
部署 Elasticsearch 和 Kibana
Elasticsearch 至少需要三节点组成集群,保证高可用。几十台机器日志量不大,三节点标配即可,安装步骤与 Filebeat 类似,使用相同仓库。
Elasticsearch 配置要点:
cluster.name: logs-cluster node.name: node-1 network.host: 0.0.0.0 discovery.seed_hosts: ["192.168.1.101", "192.168.1.102", "192.168.1.103"] cluster.initial_master_nodes: ["node-1"]
discovery.seed_hosts列出所有节点 IP- 生产环境必须开启身份认证,设置
xpack.security.enabled: true
Kibana 安装后,通过浏览器访问 5601 端口,在 Management 中创建索引模式,就能开始搜索和分析日志。
日志收集系统性能优化
采集端性能
Filebeat 默认配置已经足够轻量,但如果日志量大,需要调整 harvester_buffer_size 和 backoff 参数,避免多个日志文件同时写入同一块磁盘造成 I/O 竞争,建议将不同服务的日志文件分散到不同磁盘,或者使用 SSD。
网络带宽和延迟

几十台机器同时发送日志,Logstash 所在机器的网络带宽可能成为瓶颈。经验建议:Logstash 实例的 CPU 核数至少为 4 核,内存不低于 8GB,如果带宽不足,可以在 Filebeat 端启用压缩:
output.logstash: hosts: ["192.168.1.100:5044"] compression_level: 3
压缩级别 3 即可,再高会消耗 CPU。
存储容量规划
日志集中收集需要提前规划存储容量,以每天 10GB 日志量为例,保留 30 天需要 300GB(未压缩),Elasticsearch 索引副本通常为 1 份,总容量翻倍到 600GB,加上日志复制和热度分层,建议预留 1TB 以上磁盘,如果使用托管服务,价格会按存储量计费,单日日志量在 10GB 以内,自建成本更低。
日志集中收集常见问题
Q:几十台机器日志收集需要什么硬件配置?
A:采集端每台机器用 1 核 1GB 即可运行 Filebeat;中央处理服务器建议 4 核 8GB 以上,运行 Logstash 和 Kibana;Elasticsearch 集群至少 3 个节点,每个节点 4 核 8GB 起步,磁盘根据日志量按 1:3 比例规划(1GB 日志对应 3GB 存储空间),如果日志量小,可将 Logstash 和 Kibana 部署在同一台机器上。
Q:日志收集系统价格高吗?
A:自建方案硬件成本主要来自 Elasticsearch 节点,三个服务器加磁盘约 1-2 万元,软件全部开源免费,如果使用云服务,如简米云日志服务或酷番云 CLS,按日志量收费,单日 10GB 日志每月费用约 500-1000 元,但省去了运维人力,自建适合预算有限且团队有运维能力;托管适合快速上线,但长尾成本更高。
Q:如何保证日志不丢失?
A:Filebeat 默认启用了内存队列和磁盘队列,当网络中断时日志会缓存在本地,直到重新发送成功,Logstash 也具备持久化队列能力,设置 queue.type: persisted 可以在进程崩溃后恢复数据,Elasticsearch 写入时通过副本机制保证数据冗余。行业共识是:只要配置了持久化队列和副本,日志丢失概率极低。
几十台机器的日志集中收集,选 Filebeat + Logstash + Elasticsearch 这套组合,投入产出比最理想,不必追求复杂架构,先跑起来,再根据日志量逐步优化。