用途
ELK Stack 技能用于集中化并分析日志,由 Elasticsearch、Logstash 和 Kibana 三个组件构成。适合在以下场景使用:从多个来源集中日志、构建日志搜索与分析平台、创建基于日志的仪表盘与告警、为日志实现全文检索、处理与转换日志数据。
前提条件
- Docker 或服务器基础设施
- 足够的日志存储磁盘空间
- 日志来源具备网络访问能力
主要能力
Docker 部署
技能提供 docker-compose.yml 配置,包含 elasticsearch、logstash、kibana、filebeat 四个服务。Elasticsearch 使用单节点发现模式,关闭 xpack 安全,设置 JVM 堆内存为 1g,暴露 9200 端口并挂载数据卷。Logstash 挂载 pipeline 与 config 目录,暴露 5044 和 5000 端口。Kibana 暴露 5601 端口并指向 Elasticsearch。Filebeat 以 root 用户运行,挂载容器日志目录与 Docker socket。
Elasticsearch 配置
索引模板:通过 PUT _index_template/logs-template 定义 logs-* 索引模式,设置分片数、副本数、生命周期策略名称,并映射 @timestamp、message、level、service、host、trace_id 等字段类型。
索引生命周期管理(ILM):通过 PUT _ilm/policy/logs-policy 定义 hot、warm、cold、delete 四个阶段。hot 阶段按 50GB 或 1 天滚动;warm 阶段在 7 天后收缩分片并强制合并;cold 阶段在 30 天后冻结;delete 阶段在 90 天后删除。
Logstash 管道
基础管道:输入支持 beats(5044 端口)和 tcp(5000 端口,json_lines 编解码);过滤器支持 JSON 解析、日期解析、添加环境标签、nginx 日志的 grok 模式匹配;输出到 Elasticsearch,索引名为 logs-%{+YYYY.MM.dd}。
高级过滤:包括应用日志 grok 解析、从消息中提取 trace_id、GeoIP 查询、在生产环境丢弃 DEBUG 日志、通过 translate 字典丰富状态码描述。
Filebeat 配置
支持容器日志采集(添加 Docker 元数据)和文件日志采集(如 nginx 日志,带标签与字段)。输出到 Logstash 的 5044 端口,并配置日志级别与文件轮转。
Elasticsearch 查询
基础查询:match_all、按关键词 match、按字段 bool 过滤(must 与 filter 组合,支持时间范围)。
聚合:按日志级别统计数量(terms),按时间统计错误率(date_histogram 配合 filter 子聚合)。
Kibana 设置
索引模式:在 Stack Management → Index Patterns 创建 logs-*,时间字段设为 @timestamp。
保存搜索:如 level:ERROR、service:api-gateway AND level:ERROR、response_time:>1000。
可视化类型:折线图(错误率趋势)、饼图(日志级别分布)、数据表(高频错误消息)、指标(错误总数)。
仪表盘示例:包含日志总数(指标)、错误率趋势(折线图)、按服务分布(饼图)、最近错误(数据表)、日志流(Discover 面板)。
告警
Watcher(X-Pack):通过 PUT _watcher/watch/error_alert 定义触发器(每 5 分钟)、输入(搜索 logs-* 中最近 5 分钟的 ERROR)、条件(命中数大于 100)、动作(Slack webhook 通知)。
常见问题
- 磁盘占用高:实施 ILM 策略,减少保留时间
- 搜索缓慢:优化索引设置,增加分片,使用过滤器
- 日志解析失败:测试 grok 模式,检查日志格式变化
- 内存压力:增加堆大小(最多为 RAM 的 50%),限制字段数据
最佳实践
- 实施索引生命周期管理
- 使用索引模板保持映射一致
- 在摄入时解析日志
- 限制存储字段以减少存储
- 对时间序列数据使用数据流
- 监控集群健康
- 实施适当的安全措施(X-Pack)
- 定期进行索引维护
相关技能
- loki-logging:替代日志栈
- prometheus-grafana:指标监控
- audit-logging:合规日志
限制
资料未提供具体的收费、价格、平台兼容性、性能效果或完整使用步骤等额外信息。