一、实训目的
1、了解Elastic Stack的相关组件;
2、掌握基于Docker容器的Elastic Stack的平台规划;
3、掌握基于Docker容器的Elastic Stack的部署与配置。
二、实训学时
6 学时
三、实训类型
综合性
四、实训需求
1、硬件
每人配备计算机 1 台。
2、软件
安装Edge、Firefox、Chrome等最新版本浏览器,安装Mobaxterm软件。
3、网络
本地主机能够访问教学云计算平台,虚拟机按照配置指南配置网络。
4、工具
无。
五、实训任务
1、完成Docker和Docker Compose的环境安装;
2、完成Elastic Stack的部署与配置。
六、实训环境
1、本实训需要VM 1台,操作系统使用openEuler 24.03 LTS SP1。
2、本实训VM配置信息如表1-1所示。
图 1-1 虚拟机配置信息
| 虚拟机配置 | 操作系统配置 |
|---|---|
| 虚拟机名称:Labs-ELK-VM-101内存:8GBCPU:1颗,4核心虚拟磁盘:20GB(系统盘) +50GB(数据盘)网卡:1块 | 主机名:Labs-ELK-VM-101IP地址:10.10.2.101子网掩码:255.255.255.0网关:10.10.2.1DNS:10.10.3.70 |
📌注意:虚拟机名称、主机名称均需要按照实训课提供的实训指南中实训环境进行配置,虚拟机网络请根据自身实验环境进行配置,请勿完全按照实训环境进行配置。
七、实训内容及步骤
1、准备平台部署环境
1.1创建虚拟机
(1)在本实训课程提供的虚拟化资源平台上创建虚拟机,在左侧导航栏右击【虚拟机】,单击【创建/注册虚拟机】进入新建虚拟机向导,选择创建类型为【创建新虚拟机】,单击【下一页】,如图1-1所示。
(2)选择名称和客户机操作系统。设置虚拟机名称为“Labs-ELK-VM-101”,客户机操作系统系列为“Linux”,客户机操作系统版本为“其他 Linux (64 位)”,单击【下一页】,如图1-2所示。
(3)选择存储。选择虚拟机所使用的存储为“Cloud-ESXi-Node-2-Local-2”,单击【下一页】,如图1-3所示。
(4)自定义设置。按照本实训指南中《六、实训环境》规划的虚拟机完成虚拟机配置,设置CPU为4核,内存为8GB,硬盘为20GB,添加一块新硬盘为50GB,单击【下一页】,如图1-4所示。
(5)即将完成。检查虚拟机配置信息,确认无误单击【完成】开始创建虚拟机,如图1-5所示。
1.2 安装操作系统
操作系统镜像文件可通过openEuler官方网站(www.openeuler.org/zh)下载获取, 本实训所使用的操作系统镜像均为openEuler-24.03-LTS-SP1-x86_64-dvd.iso。
(1)等待虚拟机创建完成,在左侧导航栏单击【虚拟机】-【Labs-ELK-VM-101】,打开虚拟机电源,如图1-6所示。
(2)在虚拟机详细信息页面,依次单击【控制台】-【启动远程控制台】,将操作系统镜像挂载到该虚拟机,重新启动客户机,在初始安装界面中,使用键盘上下按键选择“Install openEuler 24.03-LTS-sp1”,按【Enter】键确认,开始操作系统的安装,如图1-7所示。
(3)在“欢迎”窗口中,设置安装语言为“中文-简体中文”,单击【继续(C)】,如图1-8所示。
(4)在“安装信息摘要”窗口,单击【安装目的地(D)】,按照目标位置选择大小为20GB的本地标准磁盘,点击【完成(D)】,如图1-9所示。
(5)在“安装信息摘要”窗口,单击“网络和主机名”进行设置。按照本实训指南中《六、实训环境》虚拟机网络和主机名规划完成配置,配置完成单击【完成(D)】,如图1-10所示。
(6)在“安装信息摘要”窗口,单击“Root账户”,勾选“启用root账户(E)”,设置Root密码,单击【完成(D)】,如图1-11所示。
(7)在“安装信息摘要”窗口,单击【开始安装】,等待安装完成,单击【重启系统(R)】,如图1-12所示。
1.3 使用SSH工具远程连接虚拟机
(1)在本地Windows启动SSH远程连接工具MobaXterm,进入主界面,如图1-13所示。
(2)点击“Session”图标,在配置对话框中输入"Remote host"为虚拟机地址10.10.2.101,“Specify username”为root,Port为22,如图1-14所示。填写完成后单击【OK】后输入账号root的密码,登录操作系统,如图1-15所示。
2、设计部署方案
本实训部署的Elastic Stack平台是基于Docker Compose实现容器化部署,容器数据存储在单独的磁盘中,虚拟机存储规划如表1-2所示。
| 磁盘名称 | 磁盘大小 | 用途 | 挂载目录 |
|---|---|---|---|
| /dev/sda | 20GB | 安装操作系统 | -- |
| /dev/sdb | 50GB | 存储Docker容器数据 | /data |
Elastic Stack平台使用Docker容器部署实现,平台由3个Elasticsearch集群节点、1个Kibana节点和3个Logstash节点组成,其中3个Elasticsearch集群节点既作为主节点同时也作为数据节点,Kibana节点用于可视化展示Elasticsearch集群数据,3个Logstash节点分别用于不同类型日志的清洗。Docker容器规划如表1-3所示。
表 1-3 Elastic Stack平台容器规划
| 容器名称 | 用途 | 容器IP | 映射端口 |
|---|---|---|---|
| labs-elk-es-setup | ES集群初始化 | 172.20.100.10 | -- |
| labs-elk-es-node-1 | ES集群主节点+数据节点 | 172.20.100.11 | 9200 |
| labs-elk-es-node-2 | ES集群数据节点 | 172.20.100.12 | -- |
| labs-elk-es-node-3 | ES集群数据节点 | 172.20.100.13 | -- |
| labs-elk-kibana | ES集群可视化平台 | 172.20.100.14 | 5601 |
| labs-elk-logstash-1 | Linux Syslog日志清洗 | 172.20.100.15 | 5044 |
| labs-elk-logstash-2 | MySQL日志清洗 | 172.20.100.16 | 5045 |
| labs-elk-logstash-3 | Apache日志清洗 | 172.20.100.17 | 5046 |
📌本步骤的网络规划要根据实际情况修订,不可照抄。
3、安装Docker和Docker Compose
3.1 数据磁盘格式化与挂载
(1)查看主机Labs-ELK-VM-101的磁盘信息,参考命令如下。
[root@Labs-ELK-VM-101 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 19G 0 part
├─openeuler-root 253:0 0 17G 0 lvm /
└─openeuler-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 50G 0 disk
sr0 11:0 1 4G 0 rom
(2)创建“/data”目录,格式化磁盘“/dev/sdb”作为Docker容器数据存储磁盘,并将其挂载到“/data”目录,参考命令如下。
# 创建/data目录
[root@Labs-ELK-VM-101 ~]# mkdir /data
# 格式化磁盘/dev/sdb
[root@Labs-ELK-VM-101 ~]# mkfs.ext4 /dev/sdb
mke2fs 1.47.0 (5-Feb-2023)
创建含有 13107200 个块(每块 4k)和 3276800 个 inode 的文件系统
文件系统 UUID:bde3e56a-9b20-4c97-9e0b-66ec59067701
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424
正在分配组表:完成
正在写入 inode表:完成
创建日志(65536 个块):完成
写入超级块和文件系统账户统计信息:已完成
# 将磁盘/dev/sdb挂载到/data目录
[root@Labs-ELK-VM-101 ~]# mount /dev/sdb /data
# 查看磁盘挂载情况
[root@Labs-ELK-VM-101 ~]# df -h
文件系统 大小 已用 可用 已用% 挂载点
/dev/mapper/openeuler-root 17G 1.8G 14G 12% /
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 3.7G 0 3.7G 0% /dev/shm
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
tmpfs 1.5G 8.7M 1.5G 1% /run
tmpfs 3.7G 0 3.7G 0% /tmp
/dev/sda2 974M 174M 733M 20% /boot
/dev/sdb 49G 24K 47G 1% /data
(3)修改配置文件/etc/fstab实现磁盘永久挂载,参考命令如下。
[root@Labs-ELK-VM-101 ~]# vi /etc/fstab
# 在文件末尾添加如下内容实现永久挂载
--------------------/etc/fstab--------------------
/dev/sdb /data ext4 defaults 0 0
--------------------/etc/fstab--------------------
# 重新加载systemd配置,以使新的配置生效
[root@Labs-ELK-VM-101 ~]# systemctl daemon-reload
# 卸载/data目录下的文件系统
[root@Labs-ELK-VM-101 ~]# umount /data
# 查看磁盘挂载情况
[root@Labs-ELK-VM-101 ~]# df -h
文件系统 大小 已用 可用 已用% 挂载点
/dev/mapper/openeuler-root 17G 1.8G 14G 12% /
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 3.7G 0 3.7G 0% /dev/shm
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
tmpfs 1.5G 8.7M 1.5G 1% /run
tmpfs 3.7G 0 3.7G 0% /tmp
/dev/sda2 974M 174M 733M 20% /boot
# 挂载/etc/fstab 文件中列出的所有文件系统
[root@Labs-ELK-VM-101 ~]# mount -a
# 查看磁盘挂载情况
root@Labs-ELK-VM-101 ~]# df -h
文件系统 大小 已用 可用 已用% 挂载点
/dev/mapper/openeuler-root 17G 1.8G 14G 12% /
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 3.7G 0 3.7G 0% /dev/shm
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
tmpfs 1.5G 8.7M 1.5G 1% /run
tmpfs 3.7G 0 3.7G 0% /tmp
/dev/sda2 974M 174M 733M 20% /boot
/dev/sdb 49G 24K 47G 1% /data
3.2 安装Docker
(1)在主机Labs-ELK-VM-101上关闭SELinux,参考命令如下。
# 临时关闭SELinux
[root@Labs-ELK-VM-101 ~]# setenforce 0
# 永久关闭SElinux
[root@Labs-ELK-VM-101 ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config
(2)添加阿里云的Docker CE软件仓库,参考命令如下。
# 添加阿里云的Docker CE软件仓库
[root@Labs-ELK-VM-101 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 将docker-ce.repo文件中所有$releasever替换为8
[root@Labs-ELK-VM-101 ~]# sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo
(3)安装Docker及相关组件:Docker社区版、Docker命令行客户端、容器运行时(Docker依赖的核心组件),参考命令如下。
[root@Labs-ELK-VM-101 ~]# yum install -y docker-ce docker-ce-cli containerd.io
(4)创建Docker配置文件 /etc/docker/daemon.json,配置Docker数据目录(/data目录)和Docker镜像加速,重新加载systemd配置,启动Docker服务并设置开机自启,参考命令如下。
# 配置Docker数据目录和镜像加速
[root@Labs-ELK-VM-101 ~]# cat <<-EOF > /etc/docker/daemon.json
{
"data-root": "/data/docker",
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1ms.run",
"https://docker-0.unsee.tech"
]
}
EOF
# 加载systemd配置,使配置生效
[root@Labs-ELK-VM-101 ~]# systemctl daemon-reload
# 启动docker服务并设置开机自启
[root@Labs-ELK-VM-101 ~]# systemctl enable docker --now
3.3 安装Docker Compose
(1)在主机Labs-ELK-VM-101上下载Docker Compose二进制可执行文件,参考命令如下。
# 下载Docker Compose
[root@Labs-ELK-VM-101 ~]# curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
📌本步骤需要下载大量资源,且受网络速率的影响,可能需要较长时间。
(2)对Docker Compose二进制文件赋予执行权限并创建软连接,参考命令如下。
# 赋予执行权限
[root@Labs-ELK-VM-101 ~]# chmod +x /usr/local/bin/docker-compose
# 创建软连接
[root@Labs-ELK-VM-101 ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
(3)查看Docker Compose版本,验证Docker Compose是否安装成功,参考命令如下。
# 验证Docker Compose安装
[root@Labs-ELK-VM-101 ~]# docker-compose --version
4、使用Docker Compose部署Elastic Stack
4.1创建Elasticsearch集群和Kibana容器
(1)在主机Labs-ELK-VM-101上编辑配置文件/etc/sysctl.conf,修改linux内核参数vm.max_map_count,设置用于控制一个进程可以拥有的最大内存映射区域数量为262144。参考命令如下。
# 修改配置文件/etc/sysctl.conf
[root@Labs-ELK-VM-101 ~]# vi /etc/sysctl.conf
--------------------/etc/sysctl.conf--------------------
# 在文件末尾添加如下内容
vm.max_map_count=262144
--------------------/etc/sysctl.conf--------------------
# 重新加载系统参数,使配置生效
[root@Labs-ELK-VM-101 ~]# sysctl -p
vm.max_map_count = 262144
📌vm.max_map_count是Linux内核参数之一,用于控制一个进程可以拥有的最大内存映射区域数量。内存映射是一种将文件或其他对象映射到进程地址空间的方法,它允许进程直接读取或写入文件,而不需要调用额外的read() 或 write()系统调用。这在一些场景下可以提高性能,特别是对于大型文件或数据库操作。
在Elasticsearch和类似的分布式系统中,通常会大量使用内存映射来管理数据和索引。因此,为了确保系统正常运行,需要调整内核参数以允许更多的内存映射。
(2)在/root目录下创建目录elastic_stack,并进入elastic_stack目录,参考命令如下。
# 创建目录elastic_stack
[root@Labs-ELK-VM-101 ~]# mkdir elastic_stack
# 进入目录elastic_stack
[root@Labs-ELK-VM-101 ~]# cd elastic_stack
(2)在elastic_stack目录下创建用于配置 Elastic Stack(Elasticsearch、Kibana 等)的.env环境变量文件,并编辑环境变量文件定义相关变量,参考命令如下。
[root@Labs-ELK-VM-101 elastic_stack]# touch .env
[root@Labs-ELK-VM-101 elastic_stack]# vi .env
--------------------/root/elastic_stack/.env--------------------
# Password for the 'elastic' user (at least 6 characters)
ELASTIC_PASSWORD=Labs#ELK@2025
# Password for the 'kibana_system' user (at least 6 characters)
KIBANA_PASSWORD=Labs#ELK@2025
# Version of Elastic products
STACK_VERSION=9.0.4
# Set the cluster name
CLUSTER_NAME=Labs-Cluster
# Set to 'basic' or 'trial' to automatically start the 30-day trial
#LICENSE=basic
LICENSE=trial
# Port to expose Elasticsearch HTTP API to the host
ES_PORT=9200
#ES_PORT=127.0.0.1:9200
# Port to expose Kibana to the host
KIBANA_PORT=5601
#KIBANA_PORT=80
# Increase or decrease based on the available host memory (in bytes)
MEM_LIMIT=2147483648
# Project namespace (defaults to the current folder name if not set)
#COMPOSE_PROJECT_NAME=Labs-Project
--------------------/root/elastic_stack/.env--------------------
(3)在elastic_stack目录下创建Docker Compose文件docker-compose-es.yml,并编辑文件定义相关容器。通过Docker Compose创建Elasticsearch初始化节点,Elasticsearch三节点集群和Kibana容器。参考命令如下。
[root@Labs-ELK-VM-101 elastic_stack]# touch docker-compose-es.yml
[root@Labs-ELK-VM-101 elastic_stack]# vi docker-compose-es.yml
(4)docker-compose-es.yml文件内容如下。
version: "2.2"
services:
# Elasticsearch集群初始化节点
labs-elk-es-setup:
container_name: labs-elk-es-setup
image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
volumes:
# 将生成的证书挂在到本地存储卷certs
- certs:/usr/share/elasticsearch/config/certs
networks:
net:
ipv4_address: 172.20.100.10
user: "0"
command: >
bash -c '
# 检查环境变量ELASTIC_PASSWORD和KIBANA_PASSWORD是否为空,若未设置则报错并终止脚本
if [ x${ELASTIC_PASSWORD} == x ]; then
echo "Set the ELASTIC_PASSWORD environment variable in the .env file";
exit 1;
elif [ x${KIBANA_PASSWORD} == x ]; then
echo "Set the KIBANA_PASSWORD environment variable in the .env file";
exit 1;
fi;
# 检测CA证书是否存在,不存在则创建CA证书
if [ ! -f config/certs/ca.zip ]; then
echo "Creating CA";
bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip;
unzip config/certs/ca.zip -d config/certs;
fi;
# 检测节点证书是否存在,不存在则创建节点证书
if [ ! -f config/certs/certs.zip ]; then
echo "Creating certs";
echo -ne \
"instances:\n"\
" - name: labs-elk-es-node-1\n"\
" dns:\n"\
" - labs-elk-es-node-1\n"\
" - localhost\n"\
" ip:\n"\
" - 127.0.0.1\n"\
" - name: labs-elk-es-node-2\n"\
" dns:\n"\
" - labs-elk-es-node-2\n"\
" - localhost\n"\
" ip:\n"\
" - 127.0.0.1\n"\
" - name: labs-elk-es-node-3\n"\
" dns:\n"\
" - labs-elk-es-node-3\n"\
" - localhost\n"\
" ip:\n"\
" - 127.0.0.1\n"\
> config/certs/instances.yml;
bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key;
unzip config/certs/certs.zip -d config/certs;
fi;
echo "Setting file permissions"
# 设置证书目录权限,修改用户和用户组为root
chown -R root:root config/certs;
# 修改当前目录及其所有子目录的权限设置为750
find . -type d -exec chmod 750 {} ;;
# 修改当前目录及其所有子目录中所有普通文件的权限设置为640
find . -type f -exec chmod 640 {} ;;
echo "Waiting for Elasticsearch availability";
# 持续检测Elasticsearch节点是否就绪,每30秒重试一次,直到满足条件
until curl -s --cacert config/certs/ca/ca.crt https://labs-elk-es-node-1:9200 | grep -q "missing authentication credentials"; do sleep 30; done;
echo "Setting kibana_system password";
# 为内置用户kibana_system配置密码
until curl -s -X POST --cacert config/certs/ca/ca.crt -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" https://labs-elk-es-node-1:9200/_security/user/kibana_system/_password -d "{"password":"${KIBANA_PASSWORD}"}" | grep -q "^{}"; do sleep 10; done;
echo "All done!";
'
healthcheck:
# 检查节点证书文件是否存在
test: ["CMD-SHELL", "[ -f config/certs/labs-elk-es-node-1/labs-elk-es-node-1.crt ]"]
# 每秒检查1次
interval: 1s
# 每次检查最多等待5秒
timeout: 5s
# 最多尝试120次
retries: 120
# Elasticsearch集群labs-elk-es-node-1节点
labs-elk-es-node-1:
depends_on:
labs-elk-es-setup:
condition: service_healthy
container_name: labs-elk-es-node-1
image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
# 指定容器的重启策略为:容器停止后自动重启
restart: always
volumes:
# 将初始化节点生成的CA证书和节点证书数据卷挂载到容器内部目录
- certs:/usr/share/elasticsearch/config/certs
# 将Elasticsearch节点的数据目录挂载到本地数据卷esdata01
- esdata01:/usr/share/elasticsearch/data
ports:
# 将容器内Elasticsearch服务的默认端口9200映射到主机的${ES_PORT}端口上(环境变量在.env文件中定义)
- ${ES_PORT}:9200
networks:
net:
ipv4_address: 172.20.100.11
environment:
# 设置Elasticsearch节点的名称为labs-elk-es-node-1
- node.name=labs-elk-es-node-1
# 设置Elasticsearch集群的名称为${CLUSTER_NAME}(环境变量在.env文件中定义)
- cluster.name=${CLUSTER_NAME}
# 指定参与初始主节点选举的候选节点列表,用于引导集群形成
- cluster.initial_master_nodes=labs-elk-es-node-1,labs-elk-es-node-2,labs-elk-es-node-3
# 设置Elasticsearch节点的初始发现主机列表,用于新节点加入集群时自动发现已有节点
- discovery.seed_hosts=labs-elk-es-node-2,labs-elk-es-node-3
# 设置Elasticsearch的用户elastic的密码
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
# 启用Elasticsearch进程的内存锁定,避免由于频繁的内存交换而导致的性能下降
- bootstrap.memory_lock=true
# 启用X-Pack安全模块,强制所有操作需身份认证
- xpack.security.enabled=true
# 启用HTTPS加密客户端到Elasticsearch的通信
- xpack.security.http.ssl.enabled=true
# 指定节点HTTP服务的私钥文件路径
- xpack.security.http.ssl.key=certs/labs-elk-es-node-1/labs-elk-es-node-1.key
# 指定节点HTTP服务的证书文件路径
- xpack.security.http.ssl.certificate=certs/labs-elk-es-node-1/labs-elk-es-node-1.crt
# 指定信任的根证书 (CA),用于验证客户端证书(若启用双向认证)
- xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
# 启用节点间通信加密(默认端口 9300),防止数据嗅探
- xpack.security.transport.ssl.enabled=true
# 指定节点间通信的私钥文件路径
- xpack.security.transport.ssl.key=certs/labs-elk-es-node-1/labs-elk-es-node-1.key
# 指定节点间通信的证书文件路径
- xpack.security.transport.ssl.certificate=certs/labs-elk-es-node-1/labs-elk-es-node-1.crt
# 指定信任的根证书 (CA),用于验证其他节点证书
- xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
# 设置证书验证级别为certificate(验证证书有效性,但不验证主机名)
- xpack.security.transport.ssl.verification_mode=certificate
# 设置许可证类型,${LICENSE}变量通常为basic(免费)或trial(全功能试用)
- xpack.license.self_generated.type=${LICENSE}
# 允许机器学习功能自动调整内存占用百分比
- xpack.ml.use_auto_machine_memory_percent=true
mem_limit: ${MEM_LIMIT}
# 定义进程的资源限制配置
# 整体作用:允许Elasticsearch进程锁定所需的所有物理内存(与bootstrap.memory_lock=true配合使用,确保JVM内存不被交换到磁盘)
ulimits:
# 指定内存锁定相关的限制
memlock:
# 设置内存锁定的软限制为"无限制"
soft: -1
# 设置内存锁定的硬限制为"无限制"
hard: -1
# 定义容器健康检查机制
healthcheck:
# 通过检测未认证访问时的特定错误信息,确认Elasticsearch服务已完成安全初始化并处于可接受请求的状态,持续验证120次直到服务就绪
test:
[
"CMD-SHELL",
"curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'",
]
# 每10秒检查一次
interval: 10s
# 每次检查最多等待10秒
timeout: 10s
# 最多尝试120次
retries: 120
labs-elk-es-node-2:
depends_on:
- labs-elk-es-node-1
container_name: labs-elk-es-node-2
image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
restart: always
volumes:
- certs:/usr/share/elasticsearch/config/certs
- esdata02:/usr/share/elasticsearch/data
networks:
net:
ipv4_address: 172.20.100.12
environment:
- node.name=labs-elk-es-node-2
- cluster.name=${CLUSTER_NAME}
- cluster.initial_master_nodes=labs-elk-es-node-1,labs-elk-es-node-2,labs-elk-es-node-3
- discovery.seed_hosts=labs-elk-es-node-1,labs-elk-es-node-3
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- bootstrap.memory_lock=true
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=true
- xpack.security.http.ssl.key=certs/labs-elk-es-node-2/labs-elk-es-node-2.key
- xpack.security.http.ssl.certificate=certs/labs-elk-es-node-2/labs-elk-es-node-2.crt
- xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.key=certs/labs-elk-es-node-2/labs-elk-es-node-2.key
- xpack.security.transport.ssl.certificate=certs/labs-elk-es-node-2/labs-elk-es-node-2.crt
- xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.license.self_generated.type=${LICENSE}
- xpack.ml.use_auto_machine_memory_percent=true
mem_limit: ${MEM_LIMIT}
ulimits:
memlock:
soft: -1
hard: -1
healthcheck:
test:
[
"CMD-SHELL",
"curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'",
]
interval: 10s
timeout: 10s
retries: 120
labs-elk-es-node-3:
depends_on:
- labs-elk-es-node-2
container_name: labs-elk-es-node-3
image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
restart: always
volumes:
- certs:/usr/share/elasticsearch/config/certs
- esdata03:/usr/share/elasticsearch/data
networks:
net:
ipv4_address: 172.20.100.13
environment:
- node.name=labs-elk-es-node-3
- cluster.name=${CLUSTER_NAME}
- cluster.initial_master_nodes=labs-elk-es-node-1,labs-elk-es-node-2,labs-elk-es-node-3
- discovery.seed_hosts=labs-elk-es-node-1,labs-elk-es-node-2
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- bootstrap.memory_lock=true
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=true
- xpack.security.http.ssl.key=certs/labs-elk-es-node-3/labs-elk-es-node-3.key
- xpack.security.http.ssl.certificate=certs/labs-elk-es-node-3/labs-elk-es-node-3.crt
- xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.key=certs/labs-elk-es-node-3/labs-elk-es-node-3.key
- xpack.security.transport.ssl.certificate=certs/labs-elk-es-node-3/labs-elk-es-node-3.crt
- xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.license.self_generated.type=${LICENSE}
- xpack.ml.use_auto_machine_memory_percent=true
mem_limit: ${MEM_LIMIT}
ulimits:
memlock:
soft: -1
hard: -1
healthcheck:
test:
[
"CMD-SHELL",
"curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'",
]
interval: 10s
timeout: 10s
retries: 120
labs-elk-kibana:
depends_on:
labs-elk-es-node-1:
condition: service_healthy
labs-elk-es-node-2:
condition: service_healthy
labs-elk-es-node-3:
condition: service_healthy
container_name: labs-elk-kibana
image: docker.elastic.co/kibana/kibana:${STACK_VERSION}
restart: always
volumes:
- certs:/usr/share/kibana/config/certs
- kibanadata:/usr/share/kibana/data
- kibanaconfig:/usr/share/kibana/config
ports:
- ${KIBANA_PORT}:5601
networks:
net:
ipv4_address: 172.20.100.14
environment:
- SERVERNAME=kibana
- ELASTICSEARCH_HOSTS=https://labs-elk-es-node-1:9200
- ELASTICSEARCH_USERNAME=kibana_system
- ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
- ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=config/certs/ca/ca.crt
mem_limit: ${MEM_LIMIT}
healthcheck:
test:
[
"CMD-SHELL",
"curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'",
]
interval: 10s
timeout: 10s
retries: 120
# 使用主机本地存储,定义持久化存储卷
volumes:
certs:
name: labs-elk-certs
driver: local
esdata01:
name: labs-elk-es-data01
driver: local
esdata02:
name: labs-elk-es-data02
driver: local
esdata03:
name: labs-elk-es-data03
driver: local
kibanadata:
name: labs-elk-kibana-data
driver: local
kibanaconfig:
name: labs-elk-kibana-config
driver: local
# 创建隔离的专用网络
networks:
net:
# 设置网络名称为labs-elk-network
name: labs-elk-network
# 设置网络类型为bridge
driver: bridge
ipam:
config:
# 定义网络子网范围:172.20.100.0/24
- subnet: 172.20.100.0/24
(5)执行Docker Compose创建容器,参考命令如下。
[root@Labs-ELK-VM-101 elastic_stack]# docker-compose -f docker-compose-es.yml up -d
📌本步骤需要下载大量资源,且受网络速率的影响,可能需要较长时间。
(6)使用docker exec命令进入容器labs-elk-kibana,为加密保存对象插件创建加密密钥,参考命令如下。
# 进入容器labs-elk-kibana
[root@Labs-ELK-VM-101 ~]# docker exec -it labs-elk-kibana /bin/bash
# 创建加密密钥
bash-5.1$ bin/kibana-encryption-keys generate
## Kibana Encryption Key Generation Utility
The 'generate' command guides you through the process of setting encryption keys for:
xpack.encryptedSavedObjects.encryptionKey
Used to encrypt stored objects such as dashboards and visualizations
https://www.elastic.co/guide/en/kibana/current/xpack-security-secure-saved-objects.html#xpack-security-secure-saved-objects
xpack.reporting.encryptionKey
Used to encrypt saved reports
https://www.elastic.co/guide/en/kibana/current/reporting-settings-kb.html#general-reporting-settings
xpack.security.encryptionKey
Used to encrypt session information
https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html#security-session-and-cookie-settings
Already defined settings are ignored and can be regenerated using the --force flag. Check the documentation links for instructions on how to rotate encryption keys.
Definitions should be set in the kibana.yml used configure Kibana.
Settings:
xpack.encryptedSavedObjects.encryptionKey: d9dbe12c7f4fc0ebd5f5c001a4180940
xpack.reporting.encryptionKey: dac7ca616ec7ca156eda1811ec6c436d
xpack.security.encryptionKey: 563af03ac0a4175bf5ccd574fc4cf77e
📌
bin/kibana-encryption-keys generate作用是生成一组随机的加密密钥,用于保护 Kibana 中保存的敏感数据(如存储对象)。
- xpack.encryptedSavedObjects.encryptionKey: 加密存储在Kibana
saved objects(如仪表板、可视化、索引模式)中的敏感字段(例如:API 密钥、数据库连接密码、第三方服务的凭据等)。- xpack.reporting.encryptionKey: 加密Reporting功能生成的报告(如PDF、PNG导出)的存储内容。
- xpack.security.encryptionKey: 加密Security功能相关的会话信息(如用户会话cookie)以及在浏览器中存储的安全相关状态。
(7)修改容器labs-elk-kibana的配置文件/data/docker/volumes/labs-elk-kibana-config/_data/kibana.yml添加上述生成的加密密钥参数。
---------------kibana.yml---------------
#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
# 配置文件中添加以下内容(上述步骤生成的加密密钥参数):
xpack.encryptedSavedObjects.encryptionKey: a4185486bd133a9ea49e72ec8b1f21b3
xpack.reporting.encryptionKey: 48ea28086679d2ec25f342720eec48a9
xpack.security.encryptionKey: 4710555b420d4ca04c9ed7b9610a49d4
---------------kibana.yml---------------
📌
小贴士:
在主机Labs-ELK-VM-101上创建Kibana容器时,定义了将容器
labs-elk-kibana的配置文件所在目录/usr/share/kibana/config挂载到本地存储卷labs-elk-kibana-config。Docker容器的存储卷存储位置为:Docke数据目录/volumes/存储卷名称/_data
(8)重启容器labs-elk-kibana,使配置生效,参考命令如下。
重启容器labs-elk-kibana
[root@Labs-ELK-VM-101 ~]# docker restart labs-elk-kibana
4.2 创建Logstash容器
(1)在elastic_stack目录下创建Docker Compose文件docker-compose-logstash.yml,并编辑文件定义相关容器。通过Docker Compose创建Logstash容器。参考命令如下。
[root@Labs-ELK-VM-101 elastic_stack]# touch docker-compose-logstash.yml
[root@Labs-ELK-VM-101 elastic_stack]# vi docker-compose-logstash.yml
(2)docker-compose-logstash.yml文件内容如下。
version: "2.2"
services:
labs-elk-logstash-1:
image: docker.elastic.co/logstash/logstash:${STACK_VERSION}
container_name: labs-elk-logstash-1
volumes:
- certs:/usr/share/logstash/config/certs
- logstash011:/usr/share/logstash/pipeline
- logstash012:/usr/share/logstash/config
restart: always
ports:
- 5044:5044
networks:
net:
ipv4_address: 172.20.100.15
extra_hosts:
- "labs-elk-es-node-1:172.20.100.11"
- "labs-elk-es-node-2:172.20.100.12"
- "labs-elk-es-node-3:172.20.100.13"
labs-elk-logstash-2:
image: docker.elastic.co/logstash/logstash:${STACK_VERSION}
container_name: labs-elk-logstash-2
volumes:
- certs:/usr/share/logstash/config/certs
- logstash021:/usr/share/logstash/pipeline
- logstash022:/usr/share/logstash/config
restart: always
ports:
- 5045:5044
networks:
net:
ipv4_address: 172.20.100.16
extra_hosts:
- "labs-elk-es-node-1:172.20.100.11"
- "labs-elk-es-node-2:172.20.100.12"
- "labs-elk-es-node-3:172.20.100.13"
labs-elk-logstash-3:
image: docker.elastic.co/logstash/logstash:${STACK_VERSION}
container_name: labs-elk-logstash-3
volumes:
- certs:/usr/share/logstash/config/certs
- logstash031:/usr/share/logstash/pipeline
- logstash032:/usr/share/logstash/config
restart: always
ports:
- 5046:5044
networks:
net:
ipv4_address: 172.20.100.17
extra_hosts:
- "labs-elk-es-node-1:172.20.100.11"
- "labs-elk-es-node-2:172.20.100.12"
- "labs-elk-es-node-3:172.20.100.13"
volumes:
certs:
name: labs-elk-certs
driver: local
logstash011:
name: labs-elk-logstash01-pipeline
driver: local
logstash012:
name: labs-elk-logstash01-config
driver: local
logstash021:
name: labs-elk-logstash02-pipeline
driver: local
logstash022:
name: labs-elk-logstash02-config
driver: local
logstash031:
name: labs-elk-logstash03-pipeline
driver: local
logstash032:
name: labs-elk-logstash03-config
driver: local
networks:
net:
name: labs-elk-network
external: true
(5)执行Docker Compose创建容器,参考命令如下。
[root@Labs-ELK-VM-101 elastic_stack]# docker-compose -f docker-compose-logstash.yml up -d
5、验证Elastic Stack
(1)使用docker命令查看Elasticsearch三节点集群、Kibana容器、Logstash容器是否创建成功,参考命令如下。
[root@Labs-ELK-VM-101 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7270dc98abe5 docker.elastic.co/logstash/logstash:9.0.4 "/usr/local/bin/dock…" 3 minutes ago Up 3 minutes 0.0.0.0:5044->5044/tcp, :::5044->5044/tcp, 9600/tcp labs-elk-logstash-1
b9aebcecf676 docker.elastic.co/logstash/logstash:9.0.4 "/usr/local/bin/dock…" 3 minutes ago Up 3 minutes 9600/tcp, 0.0.0.0:5045->5044/tcp, :::5045->5044/tcp labs-elk-logstash-2
c519febaa5fd docker.elastic.co/logstash/logstash:9.0.4 "/usr/local/bin/dock…" 3 minutes ago Up 3 minutes 9600/tcp, 0.0.0.0:5046->5044/tcp, :::5046->5044/tcp labs-elk-logstash-3
3dec26def77c docker.elastic.co/kibana/kibana:9.0.4 "/bin/tini -- /usr/l…" 4 days ago Up 4 days (healthy) 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp labs-elk-kibana
fd7d6399d3cf docker.elastic.co/elasticsearch/elasticsearch:9.0.4 "/bin/tini -- /usr/l…" 4 days ago Up 4 days (healthy) 9200/tcp, 9300/tcp labs-elk-es-node-3
3f76058a0f8e docker.elastic.co/elasticsearch/elasticsearch:9.0.4 "/bin/tini -- /usr/l…" 4 days ago Up 4 days (healthy) 9200/tcp, 9300/tcp labs-elk-es-node-2
83b541e8ff69 docker.elastic.co/elasticsearch/elasticsearch:9.0.4 "/bin/tini -- /usr/l…" 4 days ago Up 4 days (healthy) 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 9300/tcp labs-elk-es-node-1
(2)使用浏览器访问Elasticsearch集群地址https://10.10.2.101:9200,输入elastic_stack目录下.env文件中定义的elastic用户及密码(用户名:elastic,密码:Labs#ELK@2025)查看Elasticsearch集群信息,如图1-17,1-18所示。
(3)使用浏览器访问Kibana地址http://10.10.2.101:5601,输入elastic_stack目录下.env文件中定义的elastic用户的密码(用户名:elastic,密码:Labs#ELK@2025)登录Kibana,如图1-19,1-20所示。
6、Kibana的使用
(1)使用浏览器访问Kibana地址,登录成功后进入Kibana的Home界面,展示Kibana的功能模块、集成模块、管理模块,点击相应模块可快速进入对应功能界面,如图1-21所示。
功能模块:Elasticsearch、Observability、Security、Analytics
- Elasticsearch(弹性搜索):使用精细的API和工具创建搜索体验。
- Observability(可观察性):使用专用UI整合日志、指标、应用程序跟踪和系统可用性。
- Security(安全):预防、收集、检测和响应威胁,以在整个基础架构中提供统一保护。
- Analytics(分析):使用分析工具和应用程序探索、可视化和分析数据。
集成模块:Add integrations、Try sample data、Upload a file
- Add integrations:添加集成。
- Try sample data:试用示例数据。
- Upload a file:上传文件。
管理模块:Manage permissions、Monitor the stack、Back up and restore、Manage index lifecycles、Dev Tools、Stack Management
- Manage permissions(管理权限):控制访问权限以及可以执行任务。
- Monitor the stack(堆栈监控):跟踪部署的实时运行状况和性能。
- Back up and restore(备份和恢复):将快照保存到备份存储库,以还原恢复索引和群集状态。
- Manage index lifecycles(管理索引生命周期):定义生命周期策略,以便在索引老化时自动执行。
- Dev Tools(开发工具)
- Stack Management(堆栈管理)
(2)在Kibana的Home界面,单击左上角的三条横线,导航到左侧菜单,查看Kibana的功能菜单,如图1-22所示。详细功能如表1-4所示。
表1-4 Kibana功能清单
| 功能模块 | 菜单 | 功能描述 |
|---|---|---|
| Analytics(分析) | Discover | 交互式探索和搜索Elasticsearch中的原始数据 |
| Dashboards | 通过可视化图表组合创建自定义数据监控面板 | |
| Maps | 基于地理位置数据创建交互式地图可视化 | |
| Machine Learning | 自动检测数据异常模式并预测趋势 | |
| Graph | 分析数据间的关联关系与网络结构 | |
| Visualize Library | 管理和复用已保存的可视化组件 | |
| Elasticsearch(弹性搜索) | Overview | 监控Elasticsearch集群健康与性能状态 |
| Playground | 安全测试Elasticsearch查询语法的实验环境 | |
| Elasticsearch | 管理索引、分片、节点等集群配置 | |
| Vector Search | 基于向量相似度的AI驱动语义搜索 | |
| Semantic Search | 理解自然语言意图的智能搜索 | |
| Observability(可观测性) | Overview | 统一查看日志、指标、APM等观测数据 |
| Alerts | 设置规则并接收异常状态通知 | |
| SLOs | 定义和追踪服务等级目标的达成情况 | |
| Cases | 跨团队协作处理运维事件 | |
| Logs | 集中采集、查看与分析日志数据 | |
| Infrastructure | 监控服务器、容器等基础设施指标 | |
| Applications | 追踪应用性能(APM)与代码级诊断 | |
| Synthetics | 模拟用户操作监控网站/应用可用性 | |
| User Experience | 采集并分析真实用户交互性能数据 | |
| Security(安全) | Dashboards | 展示安全事件与威胁态势的可视化面板 |
| Rules | 配置威胁检测自动化规则 | |
| Alerts | 实时接收安全事件告警 | |
| Attack discovery | 自动识别攻击链关键步骤 | |
| Findings | 查看云环境安全合规扫描结果 | |
| Cases | 调查与响应安全事件的协作空间 | |
| Timelines | 可视化关联分析安全事件时间线 | |
| Intelligence | 导入威胁情报并匹配内部数据 | |
| Explore | 交互式调查网络流量与端点行为 | |
| Manage | 配置身份认证、权限策略等安全设置 |
(3)在Kibana的Home界面,单击左上角的三条横线,导航到左侧菜单,下滑选择“Management”选项卡中“Dev Tools”选项,Kibana提供了4个开发工具,分别是Console、Search Profiler、Grok Debugger、Painless Lab。
Console : Dev Tools的核心,提供一个交互式界面用于编写和执行针对Elasticsearch的RESTful API请求。可以把它看作Elasticsearch的“命令行”或“API测试客户端”,如图1-23所示。
Search Profiler: 用于深入分析Elasticsearch查询的性能瓶颈。执行提供的查询,并返回一个详细的、可视化报告,展示查询在集群中各个分片上执行的每个步骤所花费的时间,如图1-24所示。
Grok Debugger: 专门用于测试和调试Grok模式。Grok是一种强大的工具,用于将非结构化的日志文本解析成结构化的、可查询的字段(通常在Logstash或Elasticsearch Ingest Pipeline中使用),如图1-25所示。
Painless Lab: 提供一个沙盒环境,用于编写、测试和调试Painless脚本。Painless是Elasticsearch默认的安全、高性能脚本语言,用于在查询、聚合、更新文档、脚本字段、评分等场景执行自定义逻辑,如图1-26所示。
(4)在Kibana的Home界面,单击左上角的三条横线,导航到左侧菜单,下滑选择“Management”选项卡中“Integrations”选项。Integrations预置数百种数据源连接器(如AWS、MySQL、Docker),支持一键安装预构建的数据采集器,快速接入外部系统数据,如图1-27所示。
(5)导航到左侧菜单下滑选择“Management”选项卡中“Fleet”选项。Fleet集中管理所有 Agent(数据采集器)的配置、部署和更新,实现批量部署、策略下发、状态监控与版本升级。如图1-28所示。
(6)导航到左侧菜单下滑选择“Management”选项卡中“Osquery”选项。Osquery提供通过SQL语法实时查询终端设备(服务器/PC)的操作系统状态(进程、网络、文件等),如图1-29所示。
(7)导航到左侧菜单下滑选择“Management”选项卡中“Stack Monitoring”选项。Stack Monitoring能够监控Elastic Stack自身组件(Elasticsearch/Kibana/Logstash/Beats)的性能指标与健康状态,如图1-30所示。
(8)导航到左侧菜单下滑选择“Management”选项卡中“Stack Management”选项,Kibana提供了6个层面的堆栈管理,分别是Ingest、Data、Alerts and Insights、Security、Kibana、Stack。如图1-31所示。
- Ingest:管理用于在数据索引前进行预处理的Ingest Pipelines。
- Data:管理存储在Elasticsearch集群中的索引、索引模板和数据流。
- Alerts and Insights:管理告警规则及其触发的案例。
- Security:集中管理集群和Kibana的用户、角色、API密钥、角色映射等安全配置。
- Kibana:管理Kibana自身的核心配置和内容。
- Stack:管理整个Elastic Stack(Elasticsearch, Kibana等)的配置和监控。
Kibana堆栈管理详细功能如表1-5所示。
表1-5 Kibana堆栈管理功能清单
| 功能模块 | 菜单 | 功能描述 |
|---|---|---|
| Ingest | Ingest Pipelines | 定义在Elasticsearch中索引文档之前处理和转换数据的处理步骤序列 |
| Logstash Pipelines | 查看和管理Logstash实例(如果已配置)中用于数据收集、转换和传输的管道 | |
| Data | Index Management | 管理Elasticsearch索引(创建、查看、删除、管理设置)和索引模板 |
| Index Lifecycle Policies | 定义自动化管理索引生命周期的策略(热、温、冷、删除阶段) | |
| Data Set Quality | 监控数据集的健康状况、性能和合规性 | |
| Snapshot and Restore | 创建、管理和恢复Elasticsearch集群数据与配置的快照(备份) | |
| Rollup Jobs | 创建和管理任务,将历史、细粒度的数据汇总为存储效率更高的摘要数据 | |
| Transforms | 创建和管理任务,将现有索引中的数据聚合、转换并持续输出到新的专用索引中 | |
| Cross-Cluster Replication | 配置和管理索引从一个Elasticsearch集群(领导者)自动复制到另一个集群(跟随者) | |
| Remote Clusters | 配置与其他Elasticsearch集群的连接,以便进行跨集群搜索或复制(CCR) | |
| Migrate | 提供工具或向导,将数据或配置迁移到新的部署或版本 | |
| Alerts and Insights | Alerts | 查看、管理和监控由告警规则触发的活动告警实例 |
| Rules | 创建和管理定义触发条件(基于查询、指标、机器学习等)和通知动作的告警规则 | |
| Cases | 集中跟踪和管理与告警或调查相关的协作信息和工作流程 | |
| Connectors | 配置与其他系统(如电子邮件、Slack、ServiceNow、Webhook等)的连接,用于告警通知或数据交互 | |
| Reporting | 管理由Kibana仪表板、可视化或搜索生成的PDF/PNG报表的生成、调度和下载 | |
| Machine Learning | 管理Elasticsearch的机器学习功能(作业、模型、结果) | |
| Watcher | 管理Elasticsearch原生的告警和通知功能 | |
| Maintenance Windows | 定义计划维护时段,在此期间可以暂停告警通知或某些操作 | |
| Security | Users | 管理可以访问Elasticsearch集群和Kibana的用户账号 |
| Roles | 定义权限集合,控制用户对集群数据、Kibana功能等的访问级别 | |
| API keys | 创建和管理用于程序化访问Elasticsearch API的密钥 | |
| Role Mappings | 将外部身份提供者(如LDAP、SAML、OIDC)的用户或组映射到Kibana角色 | |
| Kibana | Data Views | 定义用于在Kibana中探索和可视化数据的索引模式 |
| Files | 管理用户上传到Kibana的文件(如图片、CSV等) | |
| Saved Objects | 管理、导入、导出在Kibana中创建的所有内容(仪表板、可视化、搜索、地图、机器学习作业等) | |
| AI Assistants | 配置和管理Kibana中用于增强分析、搜索和可观察性体验的AI助手 | |
| Tags | 创建和管理标签,用于分类和筛选Kibana中的Saved Objects | |
| Spaces | 创建和管理隔离的环境(空间),用于组织Kibana对象、仪表板并为不同团队或项目分配访问权限 | |
| Advanced Settings | 查看和修改Kibana应用程序的底层配置选项 | |
| Stack | License Management | 查看当前Elastic Stack许可证信息、状态和进行许可证更新 |
| Upgrade Assistant | 检查集群状态并提供指导,为升级到新版本的Elastic Stack做准备 |