ELK 是一套开源的日志收集、存储、分析与可视化的技术栈,早期由 Elasticsearch、Logstash、Kibana 三个核心组件组成,后来随着 Beats 的加入,官方也将其更名为 Elastic Stack。
以下是 ELK/Elastic Stack 的核心组件及功能说明:
-
Elasticsearch
- 定位:分布式、RESTful 风格的搜索引擎和数据存储中心,是整个技术栈的核心。
- 核心功能
- 存储结构化 / 非结构化数据(如日志、指标),支持高并发读写。
- 提供全文检索、模糊匹配、聚合分析等能力。
- 支持集群部署,具备高可用、水平扩展特性。
- 运维关注点:分片与副本配置、集群健康状态监控、索引生命周期管理(ILM)。
-
Logstash
- 定位:开源的数据管道工具,用于数据的采集、过滤、转换和传输。
- 核心功能
- 输入(Input):从多种数据源采集数据(如文件、Kafka、Redis、TCP/UDP)。
- 过滤(Filter):对数据进行清洗、转换(如字段提取、格式标准化、敏感信息脱敏)。
- 输出(Output):将处理后的数据发送到 Elasticsearch、文件、消息队列等目标。
- 运维关注点:配置文件编写、性能调优(避免内存溢出)、多管道部署。
-
Kibana
- 定位:基于 Web 的可视化平台,用于和 Elasticsearch 交互。
- 核心功能
- 数据可视化:通过仪表盘(Dashboard)、图表(折线图、柱状图)展示分析结果。
- 日志查询:提供开发者友好的查询界面,支持 Lucene 语法。
- 告警配置:设置监控规则,触发邮件、钉钉等告警通知。
- 索引管理:查看索引状态、配置索引模式。
- 运维关注点:权限控制(对接 LDAP/SSO)、仪表盘模板化、性能优化。
-
Beats
- 定位:轻量级的数据采集器,替代 Logstash 完成边缘节点的数据采集,降低资源消耗。
- 常见子组件
- Filebeat:最常用的日志采集器,监控文件变化并发送日志,适合替代传统的 rsyslog。
- Metricbeat:采集系统和服务的指标数据(如 CPU、内存、磁盘、Nginx 状态)。
- Packetbeat:网络数据包采集器,分析 TCP/UDP 流量,用于网络监控。
- Heartbeat:服务可用性监控工具,通过 ICMP/TCP/HTTP 检测服务是否在线。
- 运维关注点:轻量化部署、采集规则配置、与 Logstash/Elasticsearch 的对接方式。
扩展组件
- Elastic Agent:新一代的统一采集器,整合 Beats 和 Logstash 的功能,支持集中式配置管理。
- Elastic Alerting:集成在 Kibana 中的告警模块,支持复杂告警规则配置。
- Elastic Security:提供安全分析、威胁检测、合规审计等能力,适用于安全运维场景。
组件协作流程
数据源(日志/指标) → Beats(采集) → Logstash(过滤转换) → Elasticsearch(存储分析) → Kibana(可视化/告警)
ELK 基础运维部署清单
本清单基于 CentOS 8 系统,采用 Filebeat + Logstash + Elasticsearch + Kibana 经典架构,包含核心组件的安装、配置和验证步骤,适合快速搭建测试或生产环境。
一、环境准备
1. 基础依赖安装
# 安装Java(Elasticsearch/Logstash依赖,推荐JDK 11) yum install -y java-11-openjdk-devel java -version # 验证安装 # 关闭防火墙和SELinux(生产环境建议配置规则,而非直接关闭) systemctl stop firewalld && systemctl disable firewalld setenforce 0 sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
2. Elastic 官方源配置
# 创建yum源文件 cat > /etc/yum.repos.d/elastic.repo << EOF [elastic-8.x] name=Elastic repository for 8.x packages baseurl=https://artifacts.elastic.co/packages/8.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF
二、核心组件部署
1. Elasticsearch 部署(核心存储)
(1)安装
yum install -y elasticsearch
(2)核心配置
编辑配置文件 /etc/elasticsearch/elasticsearch.yml,修改以下关键参数:
# 集群名称(同一集群必须一致) cluster.name: elk-cluster # 节点名称(每个节点唯一) node.name: es-node-1 # 数据存储路径 path.data: /data/elasticsearch # 日志存储路径 path.logs: /var/log/elasticsearch # 监听地址(0.0.0.0 允许外部访问) network.host: 0.0.0.0 # HTTP端口 http.port: 9200 # 集群初始化节点(单节点部署填当前节点IP) discovery.seed_hosts: ["192.168.1.100"] # 主节点选举候选 cluster.initial_master_nodes: ["es-node-1"] # 跨域配置(允许Kibana访问) http.cors.enabled: true http.cors.allow-origin: "*"
(3)系统优化(必做)
# 1. 修改系统限制(编辑 /etc/security/limits.conf) cat >> /etc/security/limits.conf << EOF elasticsearch soft memlock unlimited elasticsearch hard memlock unlimited elasticsearch soft nofile 65535 elasticsearch hard nofile 65535 EOF # 2. 修改内核参数(编辑 /etc/sysctl.conf) cat >> /etc/sysctl.conf << EOF vm.max_map_count=262144 EOF sysctl -p # 生效配置
(4)启动与验证
# 创建数据目录并授权 mkdir -p /data/elasticsearch && chown -R elasticsearch:elasticsearch /data/elasticsearch # 启动并设置开机自启 systemctl start elasticsearch && systemctl enable elasticsearch # 验证(返回集群信息则成功) curl http://192.168.1.100:9200
2. Logstash 部署(数据过滤)
(1)安装
yum install -y logstash
(2)核心配置(Filebeat 输入 → Elasticsearch 输出)
创建配置文件 /etc/logstash/conf.d/filebeat-es.conf:
input {
# 监听Filebeat的数据
beats {
port => 5044
}
}
filter {
# 示例:解析Nginx日志(根据实际日志格式调整)
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
# 日期格式化
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
output {
# 输出到Elasticsearch
elasticsearch {
hosts => ["http://192.168.1.100:9200"]
index => "logstash-%{+YYYY.MM.dd}" # 按天生成索引
}
# 控制台输出(调试用,生产环境可注释)
stdout { codec => rubydebug }
}
(3)启动与验证
systemctl start logstash && systemctl enable logstash # 验证端口监听(5044端口被占用则成功) netstat -tlnp | grep 5044
3. Kibana 部署(可视化)
(1)安装
yum install -y kibana
(2)核心配置
编辑配置文件 /etc/kibana/kibana.yml:
# 监听地址(允许外部访问) server.host: "0.0.0.0" # Elasticsearch 地址 elasticsearch.hosts: ["http://192.168.1.100:9200"] # 中文界面配置(可选) i18n.locale: "zh-CN"
(3)启动与验证
systemctl start kibana && systemctl enable kibana # 访问验证:浏览器打开 http://192.168.1.100:5601
4. Filebeat 部署(日志采集)
(1)安装
yum install -y filebeat
(2)核心配置(采集 Nginx 日志为例)
编辑配置文件 /etc/filebeat/filebeat.yml:
filebeat.inputs:
- type: log
enabled: true
# 要采集的日志路径(支持通配符)
paths:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
# 自定义字段(便于分类)
fields:
log_source: nginx
env: prod
# 输出到Logstash(优先选择,而非直接输出ES)
output.logstash:
hosts: ["192.168.1.100:5044"]
# 关闭直接输出ES
# output.elasticsearch:
# hosts: ["localhost:9200"]
(3)启动与验证
systemctl start filebeat && systemctl enable filebeat # 查看日志确认无报错 tail -f /var/log/filebeat/filebeat
三、基础验证与运维
1. 全链路验证
- 访问 Nginx 产生测试日志:
curl http://localhost - 打开 Kibana → Stack Management → Index Patterns → 创建索引模式
logstash-* - 进入 Discover 页面,即可查看采集的日志数据
2. 日常运维要点
| 组件 | 常用命令 | 运维关注点 |
|---|---|---|
| Elasticsearch | curl http://IP:9200/_cat/health?v |
集群健康状态、分片数量、磁盘使用率 |
| Logstash | systemctl status logstash |
配置语法错误、管道性能、内存占用 |
| Kibana | grep "error" /var/log/kibana/kibana.log |
界面访问异常、ES 连接失败 |
| Filebeat | filebeat test config |
日志路径权限、采集规则生效状态 |
3. 安全加固建议(生产环境必做)
- 开启 Elasticsearch 账号密码认证
- 配置 Kibana 权限控制(对接 LDAP/SSO)
- 限制防火墙端口访问(仅允许内部服务器连接 9200/5044 端口)