ELK 简介与架构
日志管理概述
日志是程序遵循特定格式(通常含时间戳)生成的文本数据,分散存储在不同服务器上。主要作用包括数据查找(定位 Bug)、服务诊断(统计负荷)和数据分析(如 TOP10 用户分析)。
传统方式依赖登录服务器查看,管理数十上百台机器时效率低下。集中化日志管理(如 syslog)解决了收集问题,但检索和统计仍依赖 grep、awk 等命令,面对海量数据和复杂查询力不从心。ELK 平台能完美解决上述痛点,提供日志的收集、分析、检索功能。
核心概念
- API: 应用程序编程接口,允许程序间交互而无需了解后端源码。
- JSON: 轻量级数据交换格式,易于读写和解析。
- REST: 表现层状态转移,基于 HTTP 方法(GET/POST/PUT/DELETE)进行资源操作。
ELK 组件详解
ELK 由 Elasticsearch、Logstash 和 Kibana 三个开源工具组成。
-
Elasticsearch: 分布式搜索引擎,基于 Lucene。支持全文搜索、实时索引、自动分片和副本机制。采用 RESTful API,高可用且可线性扩展。
- 节点 (Node): ES 运行实例。
- 集群 (Cluster): 同名称节点组成的分布式系统。
- 索引 (Index): 类似数据库的日志集合。
- 切片 (Shard): 索引数据的划分,分布存储于不同节点。
- 副本 (Replica): 切片的数据冗余,保障安全和高可用。
-
Logstash: 服务端数据处理管道。负责日志收集、过滤、修改并发送至 ES。支持多种输入输出插件,架构通常为 C/S 模式。
-
Kibana: 可视化 Web 界面,用于汇总、分析和搜索 ES 中的日志数据。
常见架构模式
- 基础版: Elasticsearch + Logstash + Kibana。适合简单场景,生产环境较少直接使用。
- 轻量采集版: Elasticsearch + Logstash + Filebeat + Kibana。Filebeat 作为轻量级代理部署在客户端,资源消耗低,但缺乏消息队列缓存,故障可能导致日志丢失。
- 高可靠版: Elasticsearch + Logstash + Filebeat + Kafka + Kibana。引入 Kafka 作为消息队列缓冲,即使 Logstash 故障,数据也不会丢失,适合生产环境大规模运维监控。
环境准备与安装
1. 基础环境配置
所有组件均依赖 JDK。ES 7.17.3 之后版本需 JDK 17+,之前支持 JDK 8。安装包自带 JDK 可直接使用。
# 配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/elasticsearch-8.4.0/jdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile
java -version
:ES 对文件句柄数和内存映射有要求。


