搭建 elasticsearch + kibana
原创大约 4 分钟
本文介绍了使用docker-compose搭建elasticsearch 8.2.0和kibana 8.2.0的步骤,包括创建文件夹、编写docker-compose.yml、配置文件、执行命令以及登录elasticsearch等操作。

docker-compose 搭建 elasticsearch8.2.0 + kibana 8.2.0
编写目的
最近研究es,搭建环境的时候发现网上的很多文档大部分都是用来记录自己操作的,不过中间还是出现了很多问题,单独的文档还不能解决这些问题。我决定记录下来中间发生的问题,还有解决方案。还有在windows上docker-compose搭建的,原理一样不过不好操作中间很多问题可能和环境有关系,这里就不记录了,可能以后会记录,如果你在windows的docker上搭建的话,有问题也可以问,我这边已经踩过一次了。
安装环境
centos7
docker 20.10.6
docker-compose 1.18.0
elasticsearch 8.2.0
kibana 8.2.0
安装步骤
在root用户的目录下创建文件夹(不挂载可不操作)
这里看个人情况,我这边把配置文件的目录挂载一下,这样可以不用进入docker容器就能修改文件
mkdir -p elasticsearch/{config,data,plugins} # 修改权限 chmod -R 777 elastiscsearch
编写docker-compose.yml
version: '3' services: elasticsearch: image: elasticsearch:8.2.0 container_name: elasticsearch environment: - discovery.type=single-node - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 如果不挂载这里可以不写volumes #volumes: # - /root/elasticsearch/data:/usr/share/elasticsearch/data # - /root/elasticsearch/config/elasticsearch.yml:/config/elasticsearch.yml # - /root/elasticsearch/plugins:/usr/share/elasticsearch/plugins #hostname: elasticsearch restart: always ports: - 9200:9200 - 9300:9300 networks: - elasticsearch kibana: image: kibana:8.2.0 container_name: kibana environment: - elasticsearch.hosts=http://elasticsearch:9200 #hostname: kibana depends_on: - elasticsearch restart: always ports: - "5601:5601" networks: - elasticsearch networks: elasticsearch: external: true
配置文件
这里的配置文件都可以在容器中修改,如果挂载的话可以在外部修改 config目录下
elasticsearch.yml
cluster.name: "docker-cluster" network.host: 0.0.0.0 xpack.security.enabled: true xpack.security.http.ssl.enabled: false xpack.license.self_generated.type: basic
kibana.yml
这里的用户名密码查看下面的用户名密码 elastic用户名密码
server.host: "0.0.0.0" server.shutdownTimeout: "5s" elasticsearch.hosts: [ "http://elasticsearch:9200" ] monitoring.ui.container.elasticsearch.enabled: true # 注意这里的用户名不能用elastic,使用之后会启动报错,看下面的错误2 elasticsearch.username: "kibana_system" # 这里的密码是在启动时候配置的,如果忘记也没关系,这里的elasticsearch.password忘记了的话,elastic重置密码 elasticsearch.password: "8X1cLb+-mCx9twnqhHc9"
执行命令以及错误检查
# 执行 docker-compose up -d # 等待成功后命令 docker-compose ps
到这里已经执行完成了,后面需要验证成果的时候了
登录elasticsearch
在页面打开连接 http://ip:9200
#elastic用户名密码 #进入docker里面的容器 docker exec -it elasticsearch bash # 创建内置的用户 elastic, kibana等用户都会创建,按照步骤操作即可 elasticsearch-setup-passwords interactive
在页面上输入即可进入
elastic重置密码
# elasticsearch容器的bin目录下执行 elasticsearch-reset-password -u 需要重置密码的用户名
登录kibana
http://ip:5601
用户名用 elastic密码就是之前设置的,如果忘记了,用reset方法
常见错误
# 打不开报错 server is not ready yet,这是因为 kibana没有启动成功,去后台查看错误日志 docker logs -f kibana
错误1 authentication credentials
[2022-07-06T10:21:59.387+00:00][ERROR][elasticsearch-service] Unable to retrieve version information from Elasticsearch nodes. security_exception: [security_exception] Reason: missing authentication credentials for REST request [/_nodes?filter_path=nodes. *.version%2Cnodes.* .http.publish_address%2Cnodes.*.ip]
解决方法:
修改配置文件 elasticsearch.yml
cluster.name: "docker-cluster" network.host: 0.0.0.0 # 这个需要打开 xpack.security.enabled: true xpack.security.http.ssl.enabled: false # basic xpack.license.self_generated.type: basic
错误2 elasticsearch.username: elastic
[2022-07-06T10:20:32.437+00:00][ERROR][elasticsearch-service] Unable to retrieve version information from Elasticsearch nodes. connect ECONNREFUSED 172.25.0.2:9200 FATAL CLI ERROR YAMLException: can not read a block mapping entry; a multiline key may not be an implicit key at line 12, column 23: elasticsearch.username: elastic
解决方法:
kibana.yml中的配置文件 不能使用elastic用户连接
kibana使用
进入之后可以查询所有的数据,到这里基本完成了。
安装es插件ik分词
在elasticsearch容器中bin目录下执行
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.2.0/elasticsearch-analysis-ik-8.2.0.zip
用python简单验证下创建索引
from elasticsearch import Elasticsearch es = Elasticsearch(hosts=('http://ip地址:9200'),request_timeout=1000,basic_auth=('elastic','密码')) data = { "name": "张三", "age": "16", "sex": "m", "address": "beijing", "create_time": "2022-7-07 10:34:47", "modify_time": "2022-4-18 14:34:52" } response = es.index(index="test_index", body=data) print(response)
执行结果
{ "_index": "test_index", "_id": "tcuX1oEBYruXjblhr1rE", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 }
在kibana查看结果