使用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 ![](https://file.jishuzhan.net/article/1725466180887515138/355343b60a07607a923c9a08aaa5072f.webp)

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 ![](https://file.jishuzhan.net/article/1725466180887515138/ec89f1f17be8203f72bec2b5268673df.webp)总算启动成功。

插曲:

期间出现下面问题,删除容器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

相关推荐
聆风吟º22 分钟前
无需 VNC / 公网 IP!用 Docker-Webtop+cpolar,在手机浏览器远程操控 Linux
linux·运维·docker
ZLRRLZ39 分钟前
【Docker】Docker镜像仓库
docker·容器
知白守黑2674 小时前
docker资源限制
运维·docker·容器
无妄无望8 小时前
docker学习(4)容器的生命周期与资源控制
java·学习·docker
爱宇阳9 小时前
禅道社区版 Docker Compose 服务迁移教程
运维·docker·容器
xzl0410 小时前
docker运行Ubuntu22.04
docker
vue学习11 小时前
docker 学习dockerfile 构建 Nginx 镜像-部署 nginx 静态网
java·学习·docker
热爱生活的五柒12 小时前
vscode如何链接远程服务器里面的docker里面的目录
服务器·vscode·docker
hello_zzw14 小时前
docker部署MySQL主从服务集群
mysql·adb·docker
vue学习14 小时前
docker 运行容器限制内存、限制磁盘 IO
运维·docker·容器