2. 环境准备:安装 Elasticsearch、Logstash、Kibana

好了,咱们正式开始动手。这一章说白了就是把 ELK 三件套装到机器上,然后让它们能互相说话。

我见过不少同学在这步栽跟头——版本不匹配、配置文件里的端口没打开、日志路径写错……其实只要按着节奏来,十几分钟就能搞定。

本章核心目标:在你的本地开发机(Linux/Mac/WSL)上安装 Elasticsearch 8.x、Logstash 8.x 和 Kibana 8.x,并验证它们能正常通信。

2.1 整体架构:ELK 三件套的关系

先看一张图,你就明白这三个组件是怎么连起来的。我习惯把这张图贴在终端旁边,排查问题时扫一眼就清楚问题出在哪一层。

ELK Stack 核心流程 ELK Stack 核心流程(Secrets 审计日志场景) 数据源 Secrets 审计日志 Logstash 解析 + 过滤 + 输出 Elasticsearch 存储 + 索引 Kibana 可视化 + 交互 用户 / 安全团队 搜索 + 图表 + 告警 💡 数据流向:Secrets 审计日志 → Logstash 解析 → Elasticsearch 索引 → Kibana 展示 每个组件只做一件事,组合起来就是完整的审计分析流水线

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 上做图表的字段。