1. 项目背景与核心价值
去年在帮一家电商公司优化他们的用户行为分析系统时,第一次尝试将Logstash与Doris结合使用。当时他们每天产生近200GB的Nginx访问日志,传统方案是用ELK套件处理,但随着数据量增长,Elasticsearch的存储成本和查询性能逐渐成为瓶颈。经过多轮测试验证,最终我们通过Logstash+Doris的方案,在保证实时性的同时将存储成本降低了60%,P99查询延迟控制在800ms以内。
这个方案特别适合满足以下场景需求:
- 需要实时/准实时处理文本日志的场景(如访问日志、设备日志、交易记录)
- 原始数据量每天超过50GB的中大型日志系统
- 对历史数据有复杂分析需求(如用户行为路径分析、漏斗分析)
- 需要同时支持高并发点查询和批量分析
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与工具选型
2.1 组件版本匹配建议
经过多个生产环境验证,推荐使用以下版本组合:
| 组件 | 推荐版本 | 关键特性 |
|---|---|---|
| Logstash | 7.17.x | 支持Java11运行环境 |
| Doris | 1.2.4+ | 稳定支持Stream Load协议 |
| JDK | 11.0.15 | 与Logstash 7.x兼容性最佳 |
特别注意:Doris 1.1.x版本存在Stream Load的内存泄漏问题,务必使用1.2.4以上版本
2.2 硬件资源配置参考
根据日志吞吐量不同,建议配置:
日处理100GB以下:
- Logstash节点:4核8G内存,200GB SSD
- Doris FE节点:8核16G内存
- Doris BE节点:16核64G内存(3节点起步)
日处理100-500GB:
- 需要部署Logstash集群(至少3节点)
- Doris BE节点建议32核128G内存(SSD存储)
3. Logstash配置详解
3.1 输入插件优化配置
对于本地日志文件采集,推荐使用file输入插件的以下配置模板:
ruby复制input {
file {
path => ["/var/log/nginx/*.log"]
start_position => "beginning"
sincedb_path => "/dev/null" # 禁用sincedb避免重复采集
codec => "json" # 如果日志是JSON格式
discover_interval => 15 # 文件发现间隔(秒)
stat_interval => 1 # 文件状态检查间隔(秒)
file_chunk_size => 102400 # 每次读取块大小(KB)
}
}
关键参数说明:
sincedb_path:生产环境建议设置为固定路径,便于重启后继续采集file_chunk_size:机械硬盘建议设为256KB以下,SSD可适当增大discover_interval:日志文件轮转频繁时可缩短到5秒
3.2 过滤器配置实战
针对Nginx访问日志的Grok模式示例:
ruby复制filte
