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 数据流
下面这张图帮你理清数据从哪来、到哪去。别嫌简单,我每次排错都先看它。
2.2 Elasticsearch:核心存储与检索引擎
ES 是整个栈的基石。我建议你先下载7.17.x系列(跟咱们课程版本一致)。别追新,稳定第一。
安装步骤(Linux 环境为例)
- 下载 tar 包,解压到
/usr/local/elasticsearch-7.17.10 - 创建专用用户
elsearch(ES 不允许 root 启动) - 修改
config/elasticsearch.yml几个关键项 - 启动并验证
我以前图省事用 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,没出过问题。
安装与启动
- 下载同版本 kibana tar 包,解压到
/usr/local/kibana-7.17.10 - 修改
config/kibana.yml - 用普通用户启动(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 审计日志。别急,基础牢比什么都重要。