分享新加坡服务器 ELK Stack 日志收集与分析实战,从部署到可视化的完整流程。
日志是排障和分析的关键。本文分享新加坡服务器 ELK Stack 实战。
ELK 组件 1) Elasticsearch:搜索引擎,存储和索引日志 2) Logstash:日志处理管道,过滤和转换 3) Kibana:可视化界面,分析和展示 4) Beats:轻量日志采集器(Filebeat、Metricbeat) 5) 通常用 Filebeat 代替 Logstash 做采集
架构设计 1) Filebeat:部署在应用服务器,采集日志 2) Kafka:消息队列,缓冲和削峰(可选) 3) Logstash:处理和转换日志 4) Elasticsearch:存储和索引 5) Kibana:可视化和告警
Filebeat 配置 ```yaml filebeat.inputs: - type: log enabled: true paths: - /var/log/nginx/*.log fields: service: nginx env: production output.logstash: hosts: ["logstash:5044"] ```
Logstash 配置 ```ruby input { beats { port => 5044 } } filter { if [fields][service] == "nginx" { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } date { match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ] } } } output { elasticsearch { hosts => ["elasticsearch:9200"] index => "%{[fields][service]}-%{+YYYY.MM.dd}" } } ```
Elasticsearch 优化 1) 索引按天创建,便于管理和删除 2) 分片数:3-5 个主分片 3) 副本数:1 副本 4) refresh_interval:30s 5) ILM:索引生命周期管理,自动删除旧索引
Kibana 仪表盘 1) 日志搜索:按关键词、时间、服务搜索 2) 错误统计:错误日志数量和趋势 3) 访问分析:PV、UV、地域分布 4) 性能监控:响应时间、慢请求 5) 告警:错误率超过阈值告警
索引生命周期管理(ILM) 1) Hot:最近 7 天,SSD,高性能 2) Warm:7-30 天,HDD,查询为主 3) Cold:30-90 天,只读 4) Delete:90 天后自动删除 5) 节省存储成本
日志规范 1) JSON 格式:结构化日志,便于分析 2) 时间戳:精确到毫秒 3) 服务标识:服务名、环境、主机 4) 日志级别:DEBUG、INFO、WARN、ERROR 5) Trace ID:全链路追踪
常见问题 问题一:ES 写入慢 原因:refresh 太频繁;bulk 太小。 解决:refresh_interval 30s;bulk 5-15MB。
问题二:日志丢失 原因:Kafka 积压;Logstash 处理慢。 解决:增加 Kafka 分区;优化 Logstash。
问题三:磁盘满 原因:日志量增长;保留时间过长。 解决:ILM 自动删除;冷热分层。
问题四:查询慢 原因:分片过多;索引太大。 解决:合理分片数;按时间查询。
问题五:Kibana 加载慢 原因:查询范围太大;数据量大。 解决:限制时间范围;用 filter。
监控告警 1) ES 集群状态 2) 磁盘使用率 3) 日志量异常 4) 错误日志突增 5) Kafka 消费延迟
成本优化 1) 冷热分层:冷数据用便宜存储 2) 采样:部分日志采样 3) 压缩:ES 默认压缩 4) 合理保留:不需要的及时删除 5) 聚合:历史数据聚合存储
总结:ELK 是日志分析的标准方案。合理的索引设计、ILM 管理、日志规范,才能让 ELK 稳定高效运行。