Featured image of post 使用Docker安装Elasticsearch以及Kibana

使用Docker安装Elasticsearch以及Kibana

Elasticsearch与Kibana的安装

最近准备开始学习Kibana数据分析相关的知识。工欲善其事必先利其器,第一步,我们先来配置好相关的环境。首先声明:本文章提到的所有内容仅适用于测试环境,不适用于生产环境(当然生产环境的安装也不会看这篇文章😂)。当然配置环境最推荐的还是先去官网阅读文档,这里只是提供一些快速上手的步骤。

平台环境

这里使用 Win11+WSL+Ubuntu+Docker Desktop 来完成环境的搭建。

安装 Elasticsearch

要使用Kibana,前提是需要有一个运行的Elasticsearch。这里使用单节点安装。

我们首先运行一个Elasticsearch容器,等容器初始化完成后,将 “/usr/share/elasticsearch/data” 以及 “/usr/share/elasticsearch/config” 目录拷贝出来,以方便后续持久化Elasticsearch的配置。

** 记得这个时候要把elastic的密码以及链接kibana的token保存下来,可以通过查看当前容器的日志获得:

1
2
docker logs -f es01
# 初始化完成后,日志的最下面会显示密码以及相关token

复制配置文件以及数据文件到容器外面,以便持久化:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
docker netwrok create elastic # 创建一个elastic的容器网络,方便后面与Kibana连接
docker run --name es01 --net elastic -p 9200:9200 -dit -m 2GB docker.elastic.co/elasticsearch/elasticsearch:8.11.3
mkdir esconfigdir # 创建一个文件夹来保存es的配置文件
mkdir esdatadir # 创建一个文件夹来保存es的数据
docker cp es01:/usr/share/elasticsearch/config ./esconfigdir
docker cp es01:/usr/share/elasticsearch/data ./esdatadir
chmod g+rwx esconfigdir/config # 配置文件权限
chgrp 0 esconfigdir/config # 配置文件权限
chmod g+rwx esdatadir/data # 配置文件权限
chgrp 0 esdatadir/data # 配置文件权限

这个时候我们已经有了es的配置文件,就可以把上面这个容器暂停并删除了,重新创建一个容器,将刚刚复制出来的配置和数据文件映射到相应位置,记得更改下面这段命令中的宿主机映射文件路径:

1
2
3
docker stop es01
docker rm es01 # 停止并删除原来的容器
docker run --name es01 --net elastic -p 9200:9200 -dit -m 2GB -v /root/esdatadir/data:/data -v /root/esconfigdir/config:/config --restart=always docker.elastic.co/elasticsearch/elasticsearch:8.11.3 # 记得把宿主机上需要映射的文件路径改成实际的位置

不出意外的话,现在es应该能正常跑起来了。可以查看一下日志看看有没有报错。

安装 Kibana 并连接到 Elasticsearch

既然Elastic已经安装完成,现在就可以安装Kibana了。我们仍然使用docker,一样的需要先把配置和数据文件复制出来方便持久化。

先启动一个临时的容器来完成Kibana与Elasticsearch的连接:

1
docker rm --rm -dit --name kib01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.11.3 # 启动一个临时的容器

容器跑起来之后,查看容器的日志,启动正常的话,日志的最后会输出一个链接,在宿主机上打开这个链接。需要注意的是,链接的IP是0.0.0.0这样的形式,如果在宿主机上访问不了,可以用localhost或者127.0.0.1来访问。

这个时候需要用之前日志中的elastic用户的密码登录,即:用户名为elastic,密码为之前elasticsearch容器日志里面的密码。登陆完之后,输入日志中的token来连接elasticsearch。

上面步骤完成之后,正常的话,应该能正常使用elasticsearch以及Kibana了。但是还有最后一步,就是持久化Kibana的配置和数据文件:

1
2
3
4
5
6
7
mkdir kibanaconfig
mkdir kibanadata
docker cp kib01:/usr/share/kibana/config ./kibanaconfig # 复制容器内的配置文件到宿主机
docker cp kib01:/usr/share/kibana/data ./kibanadata # 复制容器内的数据文件到宿主机
docker stop kib01
docker rm kib01 # 暂停并删除临时的容器
docker run --restart=always -dit --name kib01 --net elastic -p 5601:5601 -v /root/kibanaconfig/config:/usr/share/kibana/config -v /root/kibanadata/data:/usr/share/kibana/data docker.elastic.co/kibana/kibana:8.11.3 # 重新启动一个容器,记得更换里面宿主机上映射文件的路径

一个小坑

前两天重启了一下电脑,然后Kibana就连接不上了,网页端显示Kibana server is not ready yet,一开始以为Elasticsearch容器挂掉了,看了看容器日志,一切正常。然后再查看Kibana容器的日志,发现如下报错:

Unable to retrieve version information from Elasticsearch nodes. connect ECONNREFUSED 172.18.0.2:9200

既然Elasticsearch容器没有挂,这里又连接失败,联想到我是重启电脑之后才失败的,我怀疑应该是Elasticsearch容器重启后内部的IP变了,于是查看了一下容器IP,确实如此。

既然知道了问题所在,那么一切就好办了:IP虽然会变,但是hostname不会变,所以我们只需要将Kibana配置文件中的elasticsearch.hosts这个字段里面的IP地址换成Elasticsearch容器的hostname就可以了,我这里是改成https://es01:9200。然后重启Kibana容器。

原本以为这样改好就可以了,但是还是没办法访问Kibana。现在日志里面的报错信息变成了这个:

Unable to retrieve version information from Elasticsearch nodes. Hostname/IP does not match certificate’s altnames: Host: es01. is not in the cert’s altnames: ……….

看来是证书的问题,但是证书是Elasticsearch自己生成的,每次去改都太麻烦了。由于是内网配置的ES,所以也就不那么在乎安全性,所以参考这个链接里面的解决方案:

If you want to bypass it, you can try configure Kibana with elasticsearch.ssl.verificationMode: certificate. Please do note this is less safe than full which is the default.

在Kibana配置文件后面追加一个配置elasticsearch.ssl.verificationMode: certificate,然后再重启Kibana,就好了✌️!

到这里,所有的步骤就已经完成了,我们的Elasticsearch和Kibana也配置完成了。接下来的教程会介绍Elasticsearch的一些基本概念和Kibana的一些用法,欢迎继续关注哦💖!

Kibana成功启动

最后的最后,欢迎关注我的小红书和公众号哦!

微信公众号 小红书
Wechat Xiaohongshu