跳至主要內容

搭建 elasticsearch + kibana

三思原创大约 4 分钟dockerelasticsearchdocker-compose搭建配置文件安装

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

image
image

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

安装步骤

  1. 在root用户的目录下创建文件夹(不挂载可不操作)

    这里看个人情况,我这边把配置文件的目录挂载一下,这样可以不用进入docker容器就能修改文件

    mkdir -p elasticsearch/{config,data,plugins}
    # 修改权限
    chmod -R 777 elastiscsearch
    
  2. 编写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
    
  3. 配置文件

    这里的配置文件都可以在容器中修改,如果挂载的话可以在外部修改 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"
      
  4. 执行命令以及错误检查

    # 执行
    docker-compose up -d
    # 等待成功后命令 
    docker-compose ps
    

    到这里已经执行完成了,后面需要验证成果的时候了

  5. 登录elasticsearch

    在页面打开连接 http://ip:9200

    image

    #elastic用户名密码
    #进入docker里面的容器
    docker exec -it elasticsearch bash
    
    # 创建内置的用户  elastic, kibana等用户都会创建,按照步骤操作即可
    elasticsearch-setup-passwords interactive
    

    在页面上输入即可进入

    image

  6. elastic重置密码

    # elasticsearch容器的bin目录下执行
    elasticsearch-reset-password -u 需要重置密码的用户名
    

    image

  7. 登录kibana

    http://ip:5601
    用户名用 elastic密码就是之前设置的,如果忘记了,用reset方法

    image

    常见错误

    # 打不开报错 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用户连接

  8. kibana使用

    image

    进入之后可以查询所有的数据,到这里基本完成了。

  9. 安装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
    

    image

    用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查看结果image