当前位置: 首页 > news >正文

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

 

相关文章:

  • 使用 Redis 实现分布式锁,解决分布式锁原子性、死锁、误删、可重入、自动续期等问题(使用SpringBoot环境实现)
  • 封装比较好的登录页面
  • 性能测试常见问题总结
  • 数据库表字段以表格形式写入Word
  • vite+react+typescript 遇到的问题
  • 002 OpenCV dft 傅里叶变换
  • 阿里云服务器 手动搭建WordPress(CentOS 8)
  • 【Java 进阶篇】深入理解 JQuery 事件绑定:标准方式
  • Python小白之PyCharm仍然显示“No module named ‘xlwings‘”
  • 基于单片机的水位检测系统仿真设计
  • Postman+Newman+Jenkins实现接口测试持续集成
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • 【智能家居项目】FreeRTOS版本——多任务系统中使用DHT11 | 获取SNTP服务器时间 | 重新设计功能框架
  • gRPC之SAN证书生成
  • 二百零二、Hive——Hive解析JSON字段(单个字段与json数组)
  • python3.6+scrapy+mysql 爬虫实战
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 2019.2.20 c++ 知识梳理
  • If…else
  • Javascript 原型链
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Redux系列x:源码分析
  • SpringCloud集成分布式事务LCN (一)
  • SQLServer之创建显式事务
  • vue中实现单选
  • 阿里研究院入选中国企业智库系统影响力榜
  • 工程优化暨babel升级小记
  • 关于springcloud Gateway中的限流
  • 汉诺塔算法
  • 机器学习 vs. 深度学习
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 力扣(LeetCode)357
  • 前端js -- this指向总结。
  • 小程序开发之路(一)
  • 我们雇佣了一只大猴子...
  • ​低代码平台的核心价值与优势
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (2)(2.10) LTM telemetry
  • (26)4.7 字符函数和字符串函数
  • (C语言)球球大作战
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (蓝桥杯每日一题)love
  • (十五)使用Nexus创建Maven私服
  • (一)Linux+Windows下安装ffmpeg
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)memcache、redis缓存
  • (转)创业家杂志:UCWEB天使第一步
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .net web项目 调用webService
  • .NET处理HTTP请求