使用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

相关推荐
辉的技术笔记9 小时前
Dify 自部署为什么跑不动?6 层瓶颈诊断法教你定位
docker
程序员老赵1 天前
Docker 部署 Redmine:老牌开源项目管理部署实测记录
docker·开源·团队管理
程序员老赵1 天前
服务器文件不想 SFTP 上传?Docker 跑个 File Browser,浏览器就能管理
服务器·docker·开源
lichenyang4534 天前
Docker 学习笔记(五):Docker Compose,用一个 YAML 启动前端、后端和 MongoDB
docker
lichenyang4534 天前
Docker 学习笔记(四):Dockerfile,把项目打成自己的镜像
docker·容器
lichenyang4534 天前
Docker 学习笔记(三):Docker 网络、bridge、子网和容器互通
docker·容器
lichenyang4534 天前
Docker 学习笔记(二):docker run 的参数到底在控制什么?
docker·容器
Patrick_Wilson8 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
Suroy9 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭9 天前
运行你的第一个Docker容器
后端·docker·容器