Skip to content

etcd可视化工具

1. 概述

这是一个序列总结文档。

1.1 VirtualBox虚拟机信息记录

学习etcd时,使用以下几个虚拟机:

序号虚拟机主机名IPCPU内存说明
1ansible-masteransible192.168.56.1202核4GAnsible控制节点
2ansible-node1etcd-node1192.168.56.1212核2GAnsible工作节点1
3ansible-node2etcd-node2192.168.56.1222核2GAnsible工作节点2
4ansible-node3etcd-node3192.168.56.1232核2GAnsible工作节点3

后面会编写使用ansible部署etcd集群的剧本。

操作系统说明:

sh
[root@etcd-node1 ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[root@etcd-node1 ~]# hostname -I
192.168.56.121 10.0.3.15
[root@etcd-node1 ~]#

1.2 准备工作

参考第7节 etcd配置文件, 通过etcd配置文件来配置相关参数,然后启动etcd服务。

在三个节点上面使用start_by_config.sh启动etcd服务。

sh
[root@etcd-node1 ~]# cd /srv/etcd/node
[root@etcd-node1 node]# ls
config     logs       openssl.conf       start_by_config.sh  start.sh
data.etcd  nohup.out  start_auto_ssl.sh  start_no_ssl.sh     stop.sh
[root@etcd-node1 node]# ./start_by_config.sh 
[root@etcd-node1 node]# nohup: appending output to ‘nohup.out’

[root@etcd-node1 node]#

启动后,查看etcd集群状态:

sh
[root@etcd-node1 ~]# ech
+-----------------------------+--------+------------+-------+
|          ENDPOINT           | HEALTH |    TOOK    | ERROR |
+-----------------------------+--------+------------+-------+
| https://192.168.56.121:2379 |   true | 1.226138ms |       |
| https://192.168.56.123:2379 |   true | 1.153493ms |       |
| https://192.168.56.122:2379 |   true |  753.212µs |       |
+-----------------------------+--------+------------+-------+
[root@etcd-node1 ~]# ecm
+------------------+---------+-------+-----------------------------+-----------------------------+------------+
|        ID        | STATUS  | NAME  |         PEER ADDRS          |        CLIENT ADDRS         | IS LEARNER |
+------------------+---------+-------+-----------------------------+-----------------------------+------------+
| a7d7b09bf04ad21b | started | node3 | https://192.168.56.123:2380 | https://192.168.56.123:2379 |      false |
| d553b4da699c7263 | started | node2 | https://192.168.56.122:2380 | https://192.168.56.122:2379 |      false |
| e14cb1abc9daea5b | started | node1 | https://192.168.56.121:2380 | https://192.168.56.121:2379 |      false |
+------------------+---------+-------+-----------------------------+-----------------------------+------------+
[root@etcd-node1 ~]# ecs
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|          ENDPOINT           |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://192.168.56.121:2379 | e14cb1abc9daea5b |  3.5.18 |   25 kB |     false |      false |        23 |        974 |                974 |        |
| https://192.168.56.122:2379 | d553b4da699c7263 |  3.5.18 |   25 kB |      true |      false |        23 |        975 |                975 |        |
| https://192.168.56.123:2379 | a7d7b09bf04ad21b |  3.5.18 |   25 kB |     false |      false |        23 |        976 |                976 |        |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
[root@etcd-node1 ~]#

可以看到命令正常执行,说明etcd服务正常!

1.3 下载ca证书等文件

从服务器端下载之前配置的一些ca证书和签名文件等。主要是以下三个文件:

  • ca.crt
  • node1.crt
  • node1.key
sh
[root@etcd-node1 ~]# cd /etc/etcd/ssl
[root@etcd-node1 ssl]# ll
total 20
-rw-r--r-- 1 root root 1090 Apr  6 22:47 ca.crt
-rw-r--r-- 1 root root  977 Apr 12 22:19 client.crt
-rw-r--r-- 1 root root 1675 Apr  6 23:19 client.key
-rw-r--r-- 1 root root 1038 Apr 12 22:19 node1.crt
-rw-r--r-- 1 root root 1675 Apr  6 22:58 node1.key
[root@etcd-node1 ssl]#

可以使用sz命令将这三个文件下载到电脑本地。

2. etcd工具介绍

https://etcd.io/docs/v3.5/integrations/罗列了etcd相关的库和工具:

Snipaste_2025-05-29_22-35-20.png

以前用过一款etcd可视化工具etcdkeeper: https://github.com/evildecay/etcdkeeper

etcdkeeper_ui.png

界面相对简单,没有角色和用户管理。

最近发现一款不错的etcd可视化工具 Etcd Workbench 详细可参考 etcd-workbench一款免费好用的ETCD客户端,支持SSHTunnel、版本对比等功能

可参考官方中文介绍 https://github.com/tzfun/etcd-workbench/blob/master/README_ZH.md

Snipaste_2025-05-29_22-50-52.png

在这个页面 https://tzfun.github.io/etcd-workbench/ 可以下载etcd workbench的桌面app或者web服务用的jar包:

Snipaste_2025-05-29_22-55-24.png

Snipaste_2025-05-29_22-55-53.png

windows系统直接双击下载下来的etcd-workbench-1.1.6-windows-x86_64.exe之类的安装包,安装桌面app即可。

2.1 桌面app的使用

双击桌面的快捷图标“Etcd Workbench”,此时会打开Etcd Workbench 桌面app:

Snipaste_2025-05-29_22-59-57.png

此时,因为没有任务etcd服务器连接,需要我们手动配置一下etcd服务器信息。

此时,需要输入etcd服务器相关信息:

  • Name,etcd服务器的名称,如etcd_192.168.56.121,带一个IP信息,便于区分不同的etcd服务。
  • Host,etcd服务器的主机信息,此处就填写第一个节点的IP、192.168.56.121
  • Port,端口保持默认的2379即可。
  • Namespace,可理解为查询的键的前缀,可以保持默认为空即可。

此时点下方的“Test Connect”测试连接,可以发现会报异常:

Snipaste_2025-05-29_23-10-49.png

下方有三个勾选框,AuthSSLSSH。三个位置作用不一样。

2.1.1 Auth用户认证

勾选Auth框,就可以设置认证的用户和密码信息。

此处账号和密码信息,可以参考之前第5节 etcd角色权限控制 在三节点上面部署etcd TLS集群的基础上,开启角色控制。其中使用了以下命令创建了相关的用户:

sh
[root@etcd-node1 ~]# etcdctl user add root --interactive=false --new-user-password="securePassword"
User root created

# 创建用户,直接在命令行指定用户密码
[root@etcd-node1 ~]# rootetcdctl user add appA_user --interactive=false --new-user-password="securePassword"
User appA_user created

# 创建用户,直接在命令行指定用户密码
[root@etcd-node1 ~]# rootetcdctl user add appA_readonly_user --interactive=false --new-user-password="securePassword"
User appA_readonly_user created

如果作为管理员,我们就用root这个账号信息和密码,注意,你不应让别人知道你etcd的root账号的密码,此处是测试,使用的密码是securePassword

此时,虽然输出了正确的用户名和密码,尝试连接还是报错:

Snipaste_2025-05-29_23-28-02.png

因为我们ETCD服务器开启了SSL认证,必须要设置相关证书才能正常连接。这就是在1.3节中下载相关证书的原因。

2.1.2 SSL认证

勾选SSL框后,就弹出SSL相关的信息:

Snipaste_2025-05-29_23-35-34.png

此时,需要进行如下操作:

  • Authority: 认证中心,填写192.168.56.121

  • CA File:上传CA证书ca.crt

  • Identity: 勾选后面的enable,即启用身份认证。此时会弹出Cert FileCert Key File需要上传的选项。

  • Cert File:选择证书node1.crt

  • Cert Key File: 选择私钥文件node1.key

此时测试连接可以看到测试连接成功: Snipaste_2025-05-29_23-50-34.png

注意,此时一定要点击Save To Favorites收藏该连接,要不然下次打开桌面App后,又要重新输入相关信息,会比较麻烦。

Snipaste_2025-05-29_23-54-48.png

收藏后,左侧就会显示这个收藏的etcd服务器连接:

Snipaste_2025-05-29_23-55-24.png

最后,点击“Connect”就可以连接到etcd服务器了!

2.1.3 app界面说明

进入到app后,就可以看到etcd集群各节点信息:

Snipaste_2025-05-29_23-56-43.png

键值信息:

Snipaste_2025-05-29_23-58-07.png

用户管理:

Snipaste_2025-05-30_00-00-17.png

角色管理:

Snipaste_2025-05-30_00-00-51.png

对比不同版本的键值差异:

Snipaste_2025-05-30_00-06-03.png

可以看到,该工具可以非常方便的来管理etcd服务!!

2.2 浏览器web UI的使用

你可以在这个页面https://tzfun.github.io/etcd-workbench/ 下载web使用的jar,并且需要安装jdk 11

详细参考 https://github.com/tzfun/etcd-workbench-web

Snipaste_2025-05-31_21-30-24.png

我下载的是 etcd-workbench-1.1.4.jar。将其上传到/srv/etcd_workbench目录。

在这里https://github.com/tzfun/etcd-workbench-web/blob/master/server/src/main/resources/etcd-workbench.conf 可以下载官方给的配置文件示例etcd-workbench.conf

将编辑好的etcd-workbench.conf也存放在/srv/etcd_workbench目录下。

sh
[root@etcd-node1 ~]# cd /srv/etcd_workbench
[root@etcd-node1 etcd_workbench]# ls -lh
total 15M
-rw-r--r-- 1 root root  15M May 26 22:12 etcd-workbench-1.1.4.jar
-rw-r--r-- 1 root root 2.6K May 31 21:49 etcd-workbench.conf
-rwxr--r-- 1 root root  176 May 31 22:09 start.sh
-rwxr--r-- 1 root root  102 May 31 21:56 status.sh
-rwxr--r-- 1 root root  103 May 31 22:10 stop.sh
[root@etcd-node1 etcd_workbench]# cat etcd-workbench.conf 
[server]
# 注意,此配置文件应与 etcd-workbench-*.jar 之类的jar文件(如etcd-workbench-1.1.4.jar)放置在同一目录下
# Configure the port the service will run on.
# workbench WEB服务监听端口,默认8002,建议修改默认值
port = 8003
# Configure the timeout for executing instructions to ETCD server, in milliseconds.
# 链接超时时间,单位毫秒,默认3000毫秒
etcdExecuteTimeoutMillis = 3000
# Configure data storage directory.
# 数据存储目录,默认为 ./data
dataDir = ./data
# If Authentication is turned on, in order to ensure that user data is not easily cracked,
# configure the data signature key to encrypt and protect it. It must be 16 characters.
# 数据加密使用的密钥,为16字符,默认为 etcdWorkbench@*? 建议修改默认值
configEncryptKey = etcdWorkbench@*?
# When heartbeat detection is enabled, the client connection will be released if no operation
# is performed for more than 35 seconds.
#
# When heartbeat detection is turned off, the client connection will be released if no operation
# is performed for more than 2 hours.
#
# It is recommended to enable it, because it can effectively prevent OOM caused by client disconnection attacks.
# 启用心跳检测后,如果持续时间超过35秒没有操作,客户端连接将被释放
# 当心跳检测关闭时,如果超过2小时没有操作,客户端连接将被释放 
# 建议启用它,因为它可以有效地防止客户端断开连接攻击引起的OOM。
# 默认值为false, 建议修改为 true
enableHeartbeat = true

[auth]
# If set to true, user must log in to use etcd workbench, and add the user field to configure the user.
# If set to false, all connection data can be used and shared by anyone!!!
# 启用认证功能,默认值为false表示未启动,true表示启动。
enable = true
# If enabled authentication, add username and password with `user` field.
# Supports repeatedly adding multiple `user` fields.
# 指定用户名和密码
user = username1:password1
user = username2:password2

[log]
# Base log level
# 日志级别
level = INFO
# Customize the log level of the specified path.
levels = io.netty:INFO,io.grpc:INFO
# Configure log storage directory.
# 日志文件存储路径
file = ./logs
# Configure log file name.
# 日志文件的名称
fileName = etcd-workbench
# Configure the log file rolling size. When this size is exceeded, a new file will be created to store the log.
# Unit MB
# 指定日志的滚动大小,单位MB. 默认10MB
fileLimitSize = 10
# Support: `std` and `file`
# 日志打印的位置
printers = std,file

[root@etcd-node1 etcd_workbench]#

提前安装一下openjdk依赖:

sh
yum install java-11-openjdk -y

安装完成后,对应的java路径为/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64/bin/java,查看java版本信息:

sh
[root@etcd-node1 ~]# /usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64/bin/java --version
openjdk 11.0.23 2024-04-16 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.23.0.9-2.el7_9) (build 11.0.23+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.23.0.9-2.el7_9) (build 11.0.23+9-LTS, mixed mode, sharing)
[root@etcd-node1 ~]#

编写启动脚本start.sh、状态查看脚本status.sh和服务停止脚本stop.sh

sh
[root@etcd-node1 etcd_workbench]# cat start.sh 
#!/bin/bash
base_dir=/srv/etcd_workbench
cd "${base_dir}"
nohup /usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64/bin/java -jar "${base_dir}"/etcd-workbench-1.1.4.jar &

[root@etcd-node1 etcd_workbench]# cat status.sh 
#!/bin/bash
ps -ef|grep -v grep|grep --color=always java|grep --color=always 'etcd-workbench-.*.jar'

[root@etcd-node1 etcd_workbench]# cat stop.sh 
#!/bin/bash
ps -ef|grep -v grep|grep java|grep 'etcd-workbench-.*.jar'|awk '{print $2}'|xargs kill -9

[root@etcd-node1 etcd_workbench]#

启动服务:

sh
[root@etcd-node1 etcd_workbench]# ./start.sh 
[root@etcd-node1 etcd_workbench]# nohup: appending output to ‘nohup.out’

[root@etcd-node1 etcd_workbench]# 
[root@etcd-node1 etcd_workbench]# ./status.sh 
root      2449     1 12 22:12 pts/0    00:00:00 /usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64/bin/java -jar /srv/etcd_workbench/etcd-workbench-1.1.4.jar
[root@etcd-node1 etcd_workbench]#

查看nohup.out日志:

sh
[root@etcd-node1 etcd_workbench]# tail nohup.out 
| |__' |      \ ' /     _| |_\/_| |_  _| |_\/_| |_
`.____.'       \_/     |_____||_____||_____||_____|
Powered by JVMM https://github.com/tzfun/jvmm 
Framework version: 2.4.2

2025-05-31 22:12:46.270+0800 INFO  org.beifengtz.etcd.server.EtcdServer Load configuration successfully
2025-05-31 22:12:46.553+0800 INFO  org.beifengtz.etcd.server.service.HttpService Please access http://192.168.56.121:8003
2025-05-31 22:12:46.554+0800 INFO  org.beifengtz.etcd.server.service.HttpService Http server service started on 8003 in 180 ms
2025-05-31 22:12:46.556+0800 INFO  org.beifengtz.etcd.server.EtcdServer Etcd workbench version: 1.1.4
2025-05-31 22:12:46.557+0800 INFO  org.beifengtz.etcd.server.EtcdServer Etcd workbench build hash: c18b83c
[root@etcd-node1 etcd_workbench]#

日志中,提示可以通过http://192.168.56.121:8003来访问work-bench UI服务。

在浏览器中打开该URL地址,可以看到以下效果:

Snipaste_2025-05-31_22-16-57.png

此时,提示需要登陆。此时需要使用etcd-workbench.conf配置文件中定义的用户名和密码登陆。

ini
# 指定用户名和密码
user = username1:password1
user = username2:password2

如使用用户名username1和密码password1登陆:

Snipaste_2025-05-31_22-19-34.png

登陆后,效果图如下:

Snipaste_2025-05-31_22-14-26.png

此时看到的效果,与使用桌面app看到的效果是一样的!!

尝试输入AuthSSL相关信息,具体填写可参考2.1节:

Snipaste_2025-05-31_22-23-15.png

点击Test Connect可以看到连接成功!注意,此时建议将该连接保存到收藏,即点击Save to Favorites,然后再点击Connect连接到ETCD服务器,避免下次登陆需要重新连接!!

此时,连接上ETCD服务器,但可以看到,功能相对本地桌面App相对来说少一些:

Snipaste_2025-05-31_22-29-36.png

Snipaste_2025-05-31_22-34-39.png

此种方式,如果我像新增一个新的用户登陆到WEB UI,如新增账号username3密码信息:

ini
# 指定用户名和密码
user = username1:password1
user = username2:password2
user = username3:password3

此时使用username3直接登陆,会提示不正确的用户名和密码:

Snipaste_2025-05-31_22-43-11.png

必须要重启etcd-workbench Web服务才能使用新添加的账号登陆:

sh
[root@etcd-node1 etcd_workbench]# ./stop.sh 
[root@etcd-node1 etcd_workbench]# ./status.sh 
[root@etcd-node1 etcd_workbench]# ./start.sh 
[root@etcd-node1 etcd_workbench]# nohup: appending output to ‘nohup.out’

[root@etcd-node1 etcd_workbench]# ./status.sh 
root      2561     1 11 22:43 pts/0    00:00:00 /usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64/bin/java -jar /srv/etcd_workbench/etcd-workbench-1.1.4.jar
[root@etcd-node1 etcd_workbench]#

此时再使用username3账号才能正常登陆!

2.3 SSH Tunnel

SSH 隧道(SSH Tunneling),又称为 SSH 端口转发(SSH Port Forwarding),是一种利用SSH协议为其他协议或网络链接加密的方法。通过SSH隧道,用户可以安全地传输未加密的网络流量,通过远程服务器转发到目标目的地,保证了数据传输的私密性和安全性。

SSH隧道主要有三种类型:

  1. 本地端口转发(Local Port Forwarding): 将本地端口的流量转发到SSH服务器,再由SSH服务器转发到目标服务器。
  2. 远程端口转发(Remote Port Forwarding): 将SSH服务器端口的流量转发到本地计算机,再由本地计算机转发到目标服务器。
  3. 动态端口转发(Dynamic Port Forwarding): 创建一个本地 SOCKS 代理服务器,应用程序通过配置使用这个SOCKS代理,而SSH客户端负责把流量通过SSH连接转发出去。

暂时还不知道如何在etcd workbench中使用SSH隧道,后期待补!!

参考:

本首页参考 https://notes.fe-mm.com/ 配置而成