2. Elastic Stack 基础:Elasticsearch 安装与配置、Kibana 安装与启动、Logstash 基础

做 HSM 审计日志可视化,说白了,你得先有能跑起来的三件套:Elasticsearch 存数据,Logstash 转数据,Kibana 看数据。我早期做日志平台时,一上来就急着配 Kibana,结果 ES 没起来,折腾半小时才发现端口被占。

嗯,这一章咱们就把地基夯实。你跟着我的步骤走,肯定不会翻车。

2.1 为什么要先搭好 Elastic Stack?

HSM 审计日志通常是 syslog 或 JSON 格式,量大、字段多。你想想看,如果用传统数据库存,查询慢、可视化更麻烦。Elastic Stack 天生适合做这件事:

  • Elasticsearch —— 分布式搜索引擎,存日志、做聚合。
  • Logstash —— 管道工具,把日志从各种源头拉过来,过滤、转换,再推给 ES。
  • Kibana —— 前端界面,画图表、做仪表盘。

我见过的生产环境,基本都是三件套联动。也有用 Beats 代替 Logstash 的,但咱们课程主要用 Logstash,因为它灵活,适合 HSM 这种复杂解析场景。

知识结构图:Elastic Stack 数据流

下面这张图帮你理清数据从哪来、到哪去。别嫌简单,我每次排错都先看它。

Elastic Stack 数据流图 数据源(HSM) Logstash Elasticsearch Kibana 用户(你看) 箭头方向:HSM → Logstash → Elasticsearch → Kibana → 用户 如果 ES 没启动,Kibana 会一直报错,所以先装 ES

2.2 Elasticsearch:核心存储与检索引擎

ES 是整个栈的基石。我建议你先下载7.17.x系列(跟咱们课程版本一致)。别追新,稳定第一。

安装步骤(Linux 环境为例)

  1. 下载 tar 包,解压到 /usr/local/elasticsearch-7.17.10
  2. 创建专用用户 elsearch(ES 不允许 root 启动)
  3. 修改 config/elasticsearch.yml 几个关键项
  4. 启动并验证

我以前图省事用 root 跑,结果报错 can not run elasticsearch as root,白白浪费五分钟。

切记:ES 不能以 root 用户启动。创建普通用户、赋权、切换用户再启动。

配置要点

打开 elasticsearch.yml,至少改这几个:

配置项 推荐值 说明
cluster.name hsm-audit 集群名,后面 Logstash 和 Kibana 都要用它来连接
node.name node-1 随便起,别重复就行
network.host 0.0.0.0 允许外部访问,生产环境建议绑定内网 IP
discovery.seed_hosts ["127.0.0.1"] 单节点就这样,多节点改成实际 IP

如果你内存紧张,可以在 jvm.options 里把 -Xms1g -Xmx1g 改成 -Xms512m -Xmx512m。我之前在 2G 的虚机上跑,不改直接 OOM。

启动与验证

切到 elsearch 用户,运行:

cd /usr/local/elasticsearch-7.17.10
./bin/elasticsearch -d -p pid

等 10 秒,然后检查:

curl http://localhost:9200

如果返回类似的 JSON,就说明 ES 起来了:

{
  "name" : "node-1",
  "cluster_name" : "hsm-audit",
  "cluster_uuid" : "...",
  "version" : {...}
}

我看到 cluster_name 是自己设置的“hsm-audit”,心里就踏实了。

2.3 Kibana:可视化门户

Kibana 说白了就是 ES 的前端。它的安装比 ES 简单,但注意版本必须和 ES 完全一致。我用 7.17.10 的 Kibana 配 7.17.10 的 ES,没出过问题。

安装与启动

  1. 下载同版本 kibana tar 包,解压到 /usr/local/kibana-7.17.10
  2. 修改 config/kibana.yml
  3. 用普通用户启动(Kibana 不强制,但我习惯统一用非 root)

关键配置:

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
kibana.index: ".kibana_hsm"   # 自定义,避免跟其他项目冲突

启动命令:

./bin/kibana &

第一次启动会有点慢,因为 Kibana 要往 ES 里初始化自己的索引。你可以看日志 logs/kibana.log,搜“Kibana is now available”。

我踩过的一个坑:启动后浏览器访问 http://localhost:5601 一片空白,看日志发现 ES 连接超时。原因是 elasticsearch.hosts 写成了 127.0.0.1,而 ES 绑的是内网 IP。改成公网 IP 就好了。

验证连接

在浏览器输入 http://localhost:5601,如果看到 Kibana 的欢迎页面,恭喜,两头通了!

2.4 Logstash:数据管道

Logstash 的定位就是“管道工”。它从各种源拉数据,经过 filter 加工,再输出。咱们 HSM 日志解析主要靠它的 grok 和 mutate 插件。

基础概念

  • input:数据来源,比如文件、TCP、syslog
  • filter:解析、转换数据,比如拆字段、改类型
  • output:目的地,通常是 Elasticsearch

一个最简单的 Logstash 配置(从标准输入到标准输出)长这样:

input {
  stdin {}
}
filter {
  # 啥也不做
}
output {
  stdout { codec => rubydebug }
}

启动命令:

./bin/logstash -f simple.conf

然后在终端打字,就能看到 JSON 输出。嗯,就是这么朴实无华。

我建议你第一次跑 Logstash 时先用上面的简单配置,确保它本身没问题。然后再换成真正接收 HSM 日志的配置。不然你搞不清楚到底是配置写错了还是 Logstash 没装好。

与 ES 联动的输出配置

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "hsm-audit-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "your_password"   # 如果 ES 开启了安全认证
  }
}

注意索引命名模式,后面我们在 Kibana 创建索引模式时要用到 hsm-audit-* 这种通配符。

2.5 基础环境检查清单

把三件套都装好之后,我建议你按下面这个表格自检一遍:

组件 检查命令/操作 预期结果
Elasticsearch curl localhost:9200 返回 JSON,包含 cluster_name
Kibana 浏览器访问 localhost:5601 Kibana 欢迎页
Logstash 运行简单 stdin 配置 + 输入测试文字 控制台输出结构化数据
三件套联动 Logstash 配置输出到 ES,然后去 Kibana 查看索引 Kibana 中能列出对应索引

这一章的内容就到这里。环境搭好了,后面咱们才能真正开始处理 HSM 审计日志。别急,基础牢比什么都重要。