ELK Stack日志分析平台搭建
ELK(Elasticsearch + Logstash + Kibana)是最经典的日志分析平台组合。Elasticsearch负责存储和搜索日志,Logstash负责采集和解析日志,Kibana提供可视化界面。虽然阿里云SLS更省心,但很多团队出于成本或合规考虑仍选择自建ELK。
部署架构
推荐架构:Filebeat(部署在各服务器上采集日志)→ Redis/Kafka(缓冲队列)→ Logstash(解析和过滤)→ Elasticsearch(存储和索引)→ Kibana(可视化)。加入消息队列可以解耦采集和处理,防止日志洪峰压垮Logstash。
Elasticsearch配置
JVM堆内存设置为物理内存的50%,但不超过32GB(超过32GB会失去压缩指针优化)。集群至少3个节点,设置 discovery.seed_hosts 和 cluster.initial_master_nodes。开启安全功能(X-Pack),设置用户名密码。索引策略:按天创建索引(如 app-log-2024.01.15),使用ILM管理索引生命周期(热→温→冷→删除)。
Logstash配置
Logstash使用grok插件解析日志。grok正则匹配是性能瓶颈,尽量使用精确匹配而非正则。对于JSON格式日志,直接使用 json { source => "message" } 解析,比grok快10倍。
使用 mutate 过滤器清理字段、重命名字段。使用 date 过滤器将日志时间设为 @timestamp。使用 geoip 过滤器为IP地址添加地理位置信息。
Kibana使用
创建Index Pattern关联日志索引。在Discover页面可以搜索和过滤日志。创建Dashboard展示关键指标:错误率趋势图、TOP 10错误类型、响应时间分布。使用Lens可视化编辑器拖拽创建图表。
性能优化
Elasticsearch的写入性能优化:增大 refresh_interval(如30s)、使用批量API写入、合理设置shard数量(单个shard 10-50GB)。查询性能优化:使用filter代替query(filter可缓存)、避免wildcard查询、合理使用routing。
