• 使用docker部署ELK日志框架-Elasticsearch


    一、ELK知识了解

    1-ELK组件

    工作原理:
    (1)在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
    (2)Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
    (3)Elasticsearch 对格式化后的数据进行索引和存储。
    (4)Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。

    2- ELK部署 

    1、环境
    (1) 操作系统版本:

    [root@kk ~]# cat /etc/redhat-release
    CentOS Linux release 7.9.2009 (Core)

     (2) docker版本( docker安装 --参考-http://t.csdnimg.cn/wiQTu

    [root@kk ~]# docker -v
    Docker version 24.0.7, build afdd53b

    (3) 本次ELK三个组件选择官网最新8.7.1版本

    [root@kk ~]# systemctl start docker  //启动docker

    //拉取镜像文件

    [root@kk ~]# docker pull docker.elastic.co/elasticsearch/elasticsearch:8.11.1  //这是最新版本

    [root@kk ~]# docker pull elasticsearch:8.7.1   //本文用8.7版本

    # 查看镜像 docker images 

    [root@kk ~]# docker images

    2.创建一个ELK容器通信专用网络 

    [root@kk ~]# docker network create elastic
    6d32f1379cdbe03a44fafd7445aae8dcb15c79825d9ec6f2e34234abcd633f26
    查看建立的信道情况:docker network ls

    如下图所示:

    3.创建ELK目录,方便容器启动后目录挂载 

     [root@kk ~]# mkdir -p /etc/{elasticsearch,kibana,logstash}

    4. 拉取配置文件

    # 启动elasticsearch

    [root@kk ~]# docker run -d --name es --net elastic -P -e "discovery.type=single-node" elasticsearch:8.7.1
    50d2ef8abc301f370664b137c6d6f93bf8dd72b2b7539d4509d8571a04591515

    # 进入容器内

    # 进入配置文件目录
    [root@kk ~]# docker exec -it es /bin/bash
    elasticsearch@50d2ef8abc30:~$  cd /usr/share/elasticsearch/config
    ( 容器内工作目录为/usr/share/elasticsearch/config)
    # 退出容器
    elasticsearch@50d2ef8abc30:~/config$ exit
    exit
    # 复制文件
    [root@kk ~]# docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml /etc/elasticsearch/config
    Successfully copied 2.56kB to /etc/elasticsearch/config

    # 修改权限
    chmod -R 777 /etc/elasticsearch

    5.重新启动容器并挂载目录 

    查看运行的容器

    [root@kk ~]# docker ps -a
    CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS                          PORTS                                                                                      NAMES
    c2a3a23141dd   elasticsearch:8.7.1   "/bin/tini -- /usr/l…"   9 minutes ago   Up 9 minutes                    0.0.0.0:32769->9200/tcp, :::32769->9200/tcp, 0.0.0.0:32768->9300/tcp, :::32768->9300/tcp   es

    # 删除临时启动容器
                                                                 vibrant_blackwell
    [root@kk ~]# docker rm -f es
    es

    # 启动容器挂载目录

    docker run -d --name es --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -v /etc/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /etc/elasticsearch/data/:/usr/share/elasticsearch/data -v /etc/elasticsearch/plugins/:/usr/share/elasticsearch/plugins --privileged=true elasticsearch:8.7.1
     

    [root@kk ~]# docker run -d elasticsearch:8.7.1
    e48d06b30424b9d345431152cc69d0870fcbf2e0cbe60f48e3a3e9b51684788e

    # 若无加载的容器,那么需要重启docker 
    sudo systemctl restart docker

    # 查看容器状态
    docker ps

    # 查看容器日志状态
    docker logs -f es

    总算启动成功。

    插曲:

    期间出现下面问题,删除容器docker 重装不成功,之后把容器删除,重新挂载,后再次启动容器反复尝试。 

    docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/etc/elasticsearch/config/elasticsearch.yml" to rootfs at "/usr/share/elasticsearch/config/elasticsearch.yml": stat /etc/elasticsearch/config/elasticsearch.yml: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.

    查询解决方案:

    这个错误通常是由于容器无法启动导致的。错误信息中提到了一个文件路径的问题,可能是由于文件路径不存在或者文件类型不匹配导致的。建议您检查一下容器的配置文件,确保文件路径正确,并且文件类型与容器内部的文件类型匹配。如果文件路径正确,但是文件类型不匹配,您可以尝试将文件复制到容器内部,并将其类型更改为正确的类型。如果问题仍然存在,您可以尝试重新安装Docker或者更新Docker版本,以确保Docker的正常运行。 

     没办法,只能重新安装下docker 版本再从头来。

    6.验证elasticsearch是否正常启动

    curl 172.20.193.85:9200 

     

  • 相关阅读:
    Go实现随机、轮训、权重、哈希负载均衡
    csp初赛总结 & 那些年编程走过的坑 & 初高中信竞常考语法算法点
    http协议的缓存机制
    渲染引擎什么情况下才会为特定的节点创建新的图层
    PopupWindow第一次弹出的位置和第二次不一致
    python虚拟环境创建问题:You will need to adjust your conda configuration to proceed.
    【C指针详解】进阶篇
    [杂谈]-快速了解直接内存访问 (DMA)
    使用open3d可视化3d人脸
    【毕业设计1】基于单片机的智能灌溉系统 - 物联网 嵌入式 stm32 c51
  • 原文地址:https://blog.csdn.net/Snower_2022/article/details/134423582