问题复现:
在浏览器输入http://192.168.101.65:5601/ 访问kibana报错
Kibana server is not ready yet
问题报错:
首先查看kibana的日志
docker logs kibana
看到报错如下:
{"type":"log","@timestamp":"2023-10-07T07:03:20+00:00","tags":["warning","elasticsearch"],"pid":6,"message":"No living connections"}
{"type":"log","@timestamp":"2023-10-07T07:03:20+00:00","tags":["warning","plugins","licensing"],"pid":6,"message":"License information could not be obtained from Elasticsearch due to Error: No Living connections error"}
{"type":"log","@timestamp":"2023-10-07T07:03:49+00:00","tags":["warning","elasticsearch"],"pid":6,"message":"Unable to revive connection: http://es:9200/"}
那就大概明白是和elasticsearch的连接有问题
可能出现问题的地方有:
1. Elasticsearch没有启动。
2.Elasticsearch和Kibana版本不一致。
2. Kibana未能连接到Elasticsearch。默认情况下,Elasticsearch使用端口9200和9300。
4. Elasticsearch的索引不可用。请尝试通过访问`http://localhost:9200/.kibana`来访问看看能否有信息。
5. Kibana的配置文件存在问题。请检查Kibana配置文件中是否有任何错误或不正确的设置。您可以在Kibana日志文件中查找更多信息,该文件通常位于Kibana安装目录下的logs文件夹中。
问题解决:
方案一:检查版本
docker images
检查镜像,可以看到版本是一致的,因此不是这个问题
# 临时启动
docker run --name kibana -d -p 5601:5601 kibana:8.0.1# 宿主机 创建一个 用于存储kibana config文件夹
mkdir -p kibana# docker cp 拷贝 kibana/config 到 宿主机对于的配置文件夹
docker cp kibana:/usr/share/kibana/config /data/soft/kibana
方案二:检查是否连接上elasticsearch和kibana
先输入192.168.101.65:9200看看elasticsearch是否正常启动,一般不出现error就是连接上了
在输入192.168.101.65:9200/.kibana查看elasticsearch是否连接上了kibana,出现以下数据基本就没有问题了
然后输入192.168.101.65:5601看是否成功显示
方案三:检查kibana的配置
首先你得知道自己的kibana的yaml配置在哪,先运行kibana起来,然后执行以下命令
# 临时启动
docker run --name kibana -d -p 5601:5601 kibana:7.12.1# 在宿主机的任意一个位置创建用于存储kibana config文件夹
mkdir -p kibana#拷贝kibana/config 到 宿主机的/data/soft/kibana下
docker cp kibana:/usr/share/kibana/config /data/soft/kibana
然后进入到该目录下,出现以下文件即可
进入到该文件进行编辑
vim kibana.yml
server.name: kibana
server.host: "0"
elasticsearch.hosts: ["http://容器内部ip:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true
注意!!!这里的容器内部ip是docker赋予改容器的ip而不是虚拟机或者本机的ip,当然如果你不是docker部署的就是本机ip。
如果是docker配置的,可以输入以下命令查看elasticsearch的容器内部ip
docker ps #查看容器内的各个软件的容器id和端口等信息docker inspect 容器id #查看该软件的相关信息
记住这个信息,然后去到kibana.yml 中配置
然后重启kibana
docker restart kibana
在重复方案二的步骤查看是否连接成功
方案四:重做kibana
停止kibana,再从docker中删除kibana容器
docker stop kibanadocker rm -f <kibana容器id>
再重新拉回kibana然后配置kibana(记得修改里面的ELASTICSEARCH_HOSTS和版本号)
#拉取kibana
docker pull kibana:7.12.1#配置kibana
docker run -d --name kibana -e ELASTICSEARCH_HOSTS=http://172.18.0.2:9200 -p 5601:5601 kibana:7.12.1
方案五:重做elasticsearch和kibana
首先分别停止elasticsearch和kibana,再从docker中删除elasticsearch和kibana容器(不是删除镜像)
docker stop kibana
docker stop elasticsearchdocker rm -f <elasticsearch容器id>
docker rm -f <kibana容器id>
先创建一个网络,方便es和kibana容器互联
docker network create es-net
配置elasticsearch
#拉取
docker pull elasticsearch:7.12.1
#配置es
docker run -d \--name es \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \-e "discovery.type=single-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--network es-net \-p 9200:9200 \elasticsearch:7.12.1
命令解释:
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
:配置JVM的堆内存大小,默认是1G,但是最好不要低于512M-e "discovery.type=single-node"
:单点部署-v es-data:/usr/share/elasticsearch/data
:数据卷挂载,绑定es的数据目录-v es-plugins:/usr/share/elasticsearch/plugins
:数据卷挂载,绑定es的插件目录-privileged
:授予逻辑卷访问权--network es-net
:让ES加入到这个网络当中-p 9200
:暴露的HTTP协议端口,供我们用户访问的
输入以下命令启动elasticsearch
docker start es
然后访问192.168.101.65:9200看看elasticsearch看到以下情况即正常启动
再配置kibana
#拉取
docker pull kibana:7.12.1
#配置
docker run -d \--name kibana \-e ELASTICSEARCH_HOSTS=http://es:9200 \--network=es-net \-p 5601:5601 \kibana:7.12.1
命令解释:
--network=es-net
:让kibana加入es-net
这个网络,与ES在同一个网络中-e ELASTICSEARCH_HOSTS=http://es:9200
:设置ES的地址,因为kibana和ES在同一个网络,因此可以直接用容器名访问ES-p 5601:5601
:端口映射配置
输入以下信息启动kibana
docker start kibana
然后输入192.168.101.65:5601看是否成功显示页面