2. 环境准备:安装 Elasticsearch、Logstash、Kibana
好了,咱们正式开始动手。这一章说白了就是把 ELK 三件套装到机器上,然后让它们能互相说话。
我见过不少同学在这步栽跟头——版本不匹配、配置文件里的端口没打开、日志路径写错……其实只要按着节奏来,十几分钟就能搞定。
本章核心目标:在你的本地开发机(Linux/Mac/WSL)上安装 Elasticsearch 8.x、Logstash 8.x 和 Kibana 8.x,并验证它们能正常通信。
2.1 整体架构:ELK 三件套的关系
先看一张图,你就明白这三个组件是怎么连起来的。我习惯把这张图贴在终端旁边,排查问题时扫一眼就清楚问题出在哪一层。
2.2 环境要求与版本选择
我个人习惯统一使用 8.x 系列,因为从 8.0 开始 Elastic 把安全功能默认开启了,这对审计场景其实是好事——日志本身就要防篡改。不过需要注意:大版本必须一致,比如 Elasticsearch 8.6 配 Logstash 8.6、Kibana 8.6,不能搞混。
| 组件 | 建议版本 | 最低 Java 版本 | 你需要注意什么 |
|---|---|---|---|
| Elasticsearch | 8.10.2 | 自带 JDK 17 | 安装后默认开启安全认证,需要修改 elastic 密码 |
| Logstash | 8.10.2 | 同样自带 JDK 17 | 注意内存配置,默认 1GB 堆,审计日志量大的话需要调大 |
| Kibana | 8.10.2 | 不需要独立 JDK | 首次登录需要 enrollment ,别丢了 |
⚠️ 我曾经踩过的坑:有一次我图省事用了 apt 源里的旧版本(7.17),结果 Logstash 的 fingerprint filter(审计日志去重必备)在新配置里不兼容。从那以后我每次都先上 elastic.co 官网看版本矩阵,确保 major.minor 完全对齐。
2.3 安装 Elasticsearch
嗯,这里我推荐用 tar.gz 包安装,这样升级方便,而且可以随时看到完整目录结构。我们用 /opt/elasticsearch 作为根目录。
2.3.1 下载并解压
# 进入 /opt 目录
cd /opt
# 下载(用国内镜像会更快,比如华为云镜像站)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.10.2-linux-x86_64.tar.gz
# 解压
tar -xzf elasticsearch-8.10.2-linux-x86_64.tar.gz
# 重命名(个人习惯简化路径)
mv elasticsearch-8.10.2 elasticsearch
2.3.2 配置 elasticsearch.yml
重点看几个关键配置。你想想看,审计日志需要保留一段时间,所以节点名称和数据路径先设好。
# /opt/elasticsearch/config/elasticsearch.yml
cluster.name: secrets-audit-cluster
node.name: node-1
path.data: /opt/elasticsearch/data
path.logs: /opt/elasticsearch/logs
network.host: 0.0.0.0
http.port: 9200
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
💡 小技巧:如果你是在 WSL 或虚拟机里测试,把 network.host 设为 0.0.0.0 就可以从宿主机访问 Kibana 了。但生产环境一定要绑内网 IP,别暴露到公网。
2.3.3 启动 Elasticsearch
Elasticsearch 不允许用 root 用户启动,需要创建一个专用用户。我通常叫它 esuser。
# 创建用户
sudo useradd esuser -s /bin/bash
# 给权限
sudo chown -R esuser:esuser /opt/elasticsearch
# 切换用户启动
su - esuser
cd /opt/elasticsearch
./bin/elasticsearch -d -p pid
启动后稍微等十几秒,跑一下 curl http://localhost:9200,看到类似下面的 JSON 就说明成功了:
{
"name" : "node-1",
"cluster_name" : "secrets-audit-cluster",
"cluster_uuid" : "xxx",
"version" : {
"number" : "8.10.2"
}
}
⚠️ 注意事项:第一次启动后控制台会打印出 elastic 用户的初始密码和 Kibana 的 enrollment 。一定要复制保存,不然你后面登录 Kibana 会卡住。我在项目现场就遇到过一回,忘了存 ,最后只能重新生成。
2.4 安装 Kibana
Kibana 是用户和 Elasticsearch 之间的窗户。安装步骤跟 ES 大同小异,但配置上要注意两点:一是告诉它 ES 在哪,二是配上认证信息。
2.4.1 下载解压
cd /opt
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.10.2-linux-x86_64.tar.gz
tar -xzf kibana-8.10.2-linux-x86_64.tar.gz
mv kibana-8.10.2 kibana
2.4.2 配置 kibana.yml
# /opt/kibana/config/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "你的密码" # 这里用上一步设置的 kibana_system 密码
xpack.security.enabled: true
💡 个人经验:之前测试时我忘了配 elasticsearch.password,结果 Kibana 启动后一直报 No alive nodes。后来才发现 ES 8.x 默认是 HTTPS,如果你没配证书,就把 elasticsearch.hosts 写成 http:// 以跳过。但生产环境必须用 HTTPS。
2.4.3 启动 Kibana
# 还是用非 root 用户
sudo useradd kibuser
sudo chown -R kibuser:kibuser /opt/kibana
su - kibuser
cd /opt/kibana
./bin/kibana &
等 Kibana 完全就绪(观察日志出现 "Kibana is now available"),浏览器打开 http://你的IP:5601,输入 elastic 用户和密码登录。登录成功后你会看到 Kibana 主界面。
2.5 安装 Logstash
Logstash 是流水线上最灵活的搬运工。我特别喜欢它的 pipeline 隔离能力——一个实例可以跑多条管道,互不干扰。我们后面会用一条专门的 pipeline 吃 Secrets 审计日志。
2.5.1 下载解压
cd /opt
wget https://artifacts.elastic.co/downloads/logstash/logstash-8.10.2-linux-x86_64.tar.gz
tar -xzf logstash-8.10.2-linux-x86_64.tar.gz
mv logstash-8.10.2 logstash
2.5.2 内存与配置
Logstash 默认堆大小是 1GB。如果你只是测试审计日志,1GB 够用;但如果你要模拟每天几百万条日志,建议至少调到 2-4GB。改 jvm.options 即可。
# /opt/logstash/config/jvm.options
-Xms2g
-Xmx2g
然后我们写一个简单的测试 pipeline,验证 Logstash 能否连上 ES。
# /opt/logstash/pipeline/test.conf
input {
stdin { }
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
user => "elastic"
password => "你的密码"
index => "test-logstash-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
2.5.3 启动测试
cd /opt/logstash
./bin/logstash -f pipeline/test.conf
启动后在控制台随便输入一段文字,比如 hello secrets audit,然后回车。如果 Logstash 输出类似下面的结果,并且 ES 里能查到索引,就代表全线打通了:
{
"@timestamp" => 2025-01-15T08:22:10.123Z,
"message" => "hello secrets audit",
"host" => "localhost",
"@version" => "1"
}
打开 Kibana → Dev Tools → Console,执行 GET test-logstash-*/_search,你就看到刚才输入的那条记录。那种成就感,说实话,我第一次成功时还挺兴奋的。
2.6 验证三件套通信
我习惯用一张快速检查表来确认所有节点都正常。你照着跑一遍,基本就能排除 90% 的安装问题。
| 验证项 | 命令/操作 | 预期结果 |
|---|---|---|
| Elasticsearch 健康 | curl http://localhost:9200/_cluster/health?pretty |
"status":"green" |
| Kibana 是否可访问 | 浏览器打开 http://localhost:5601 |
Kibana 登录页正常显示 |
| Logstash 输出到 ES | 启动 test pipeline,输入一段文字 | ES 中出现 test-logstash-* 索引 |
| Kibana 能否看到数据 | Management → Stack Management → Index Management | 能看到上述索引 |
💡 一个你可能忽略的点:如果 Logstash 输出时报 connection refused,八成是 ES 的安全证书问题。你可以暂时把 elasticsearch.yml 里的 xpack.security.enabled 设为 false 来排除(仅限测试环境)。但我还是建议保持开启,因为后面的审计日志场景,安全功能本身就是一个核心演示点。
2.7 本章小结
好,环境准备就到这。你现在应该有了:
- 一个运行在 9200 的 Elasticsearch 实例
- 一个运行在 5601 的 Kibana 实例
- 一个能正常消费数据并写入 ES 的 Logstash 实例
- 验证了它们三者之间的通信链路
说实话,这些步骤看起来琐碎,但你要是能一次跑通,后面所有的可视化、告警、分析都会顺滑很多。我曾经在一个客户的远程环境下,因为防火墙端口漏开,折腾了半小时才定位到 Logstash 的 beats 输入端口。所以现在我做环境准备时,一定先把网络连通性测试写进文档,你们也别省这一步。
接下来你就可以准备真正的 Secrets 审计日志数据源了。到时候我们会在 Logstash 里写完整的 filter 配置,把原始的 JSON 日志清洗成结构化的、适合在 Kibana 上做图表的字段。