实战详解Docker快速搭建部署ELK

news2024/11/26 10:50:35

一.安装前须知
以下步骤在 VMware 中的 centos 7 中操作,ip 地址为:192.168.161.128;

注意安装的时候最好统一版本,否则后面会出现许多问题,进官网搜索对应镜像,查看 Tags 标签下的版本,目前我这最新的 Tags 是 7.12.1,所以拉取镜像时统一加上该版本号。官网镜像地址

Docker 搭建 ELK 之前需熟悉 Docker 的相关指令,如:拷贝容器文件docker cp、强制删除容器: docker rm -f 容器id、创建网络: docker network create elk、查看日志:docker logs container 等等。

为了方便后续文件的挂载,先创建如下目录 /usr/local/elk ,再执行 mkdir /usr/local/elk/{elasticsearch,kibana,logstash} 创建3个对应的目录,所以以下操作如无特别说明,均在 /usr/local/elk下执行。

为了容器间的通信,需要先用 docker 创建一个网络: 

docker network create --subnet=172.10.0.0/16 elk

二.安装 Docker
安装 docker 可以照着官网步骤一步一步来,挺简单的。

Install Docker Engine on CentOS

安装完后可以看下版本:docker -v
查看 docker 详细信息:docker info

三.Docker 安装 ElasticSearch

1.搜索、下载并查看镜像

# 搜索镜像
docker search elasticsearch
# 拉取 7.12.1 版本镜像
docker pull elasticsearch:7.12.1
# 查看所有镜像
docker images

2.拷贝配置文件

# 运行 elasticsearch
docker run -d --name es --net elk -P -e "discovery.type=single-node" elasticsearch:7.12.1
# 进入容器查看配置文件路径
docker exec -it es /bin/bash
cd config

 在 config 中可看到 elasticsearch.yml 配置文件,再执行 pwd 可以看到当前目录为: /usr/share/elasticsearch/config,所以退出容器,执行文件的拷贝:

# 将容器内的配置文件拷贝到 /usr/local/elk/elasticsearch/ 中
docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch/

# 修改文件权限
chmod 666 elasticsearch/elasticsearch.yml

# 在elasticsearch 目录下再创建data目录,同时修改权限
chmod -R 777 elasticsearch/data

注意:这里要修改文件的权限为可写,否则,进行挂载后,在外部修改配置文件,容器内部的配置文件不会更改。同时,创建 data 目录进行挂载。

3.重新运行容器并挂载:

# 先删除旧的容器
docker rm -f es

# 运行新的容器
docker run -d --name es \
--net elk \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
--privileged=true \
-v $PWD/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v $PWD/elasticsearch/data/:/usr/share/elasticsearch/data \
elasticsearch:7.12.1

说明:

  • -p (小写)映射端口号,主机端口:容器端口
  • -P(大写)随机为容器指定端口号
  • -v 进行容器的挂载
  • –name 指定容器别名
  • –net 连接指定网络
  • -e 指定启动容器时的环境变量
  • -d 后台运行容器
  • –privileged=true 使容器有权限挂载目录

4.查看容器

# 查看运行中的容器
docker ps

# 查看容器日志
docker logs es

curl localhost:9200

如果日志无误,可以用 curl ip:9200 查看结果,也可用浏览器输入 http://ip:9200 查看。至此,elasticsearch 安装完成。

同时,我们可以在 data 目录下看到容器内的数据,并且在宿主机修改也会同步到容器的内部。

如果遇到连接不上elasticsearch 

解决办法
在elasticsearch的配置文件(config/elasticsearch.yml)里加上允许跨域的配置

http.cors.enabled: true
http.cors.allow-origin: "*"

重新启动elasticsearch

四.Docker 安装 ElasticSearch-

head(可选)

说明:这是 ES 的可视化界面,是为了方便后面调试时看日志有没成功输入到 ES 用的,非必须安装的项目,也可跳过此步。

1.拉取镜像
docker pull mobz/elasticsearch-head:5

2.运行容器
docker run -d --name es_admin --net elk -p 9100:9100 mobz/elasticsearch-head:5
注意:这里使用到了 --net elk,即我们之间创建的网络;
如果没有创建,则需要进行下一步修改配置配件,如果前面照着创建了,则可以直接跳过。

3.编辑配置文件(可选)

#将配置文件拷贝到当前目录下
docker cp es_admin:/usr/src/app/Gruntfile.js ./

 编辑该配置文件,在 connect -> server -> options 下添加: hostname: '0.0.0.0'在这里插入图片描述

#将文件拷贝回去
docker cp Gruntfile.js es_admin:/usr/src/app/
# 重启容器
docker restart es_admin

因为该镜像内部没有安装 vi 和 vim,所以无法直接在容器内部编辑,需要我们拷贝出来,修改后再进行覆盖。
重启容器后,通过 http://ip:9100 访问即可查询 ES 中的数据。

4.页面无数据问题

如果打开页面之后节点、索引等显示完全,但是数据浏览中无数据显示,那么我们还需要改一个配置文件,这是因为 ES 6 之后增加了请求头严格校验的原因(我们装的是 7.12.1 版本):

docker cp es_admin:/usr/src/app/_site/vendor.js ./
vi vendor.js
docker cp vendor.js es_admin:/usr/src/app/_site/

这个配置文件内容有点多,这里需要了解 vim 的部分操作:
按 ESC 进入命令模式,接着 : set nu 显示行号,接着 : 行号 跳转到对应的行。
在这里我们需要修改:(注意不是把整行替换掉)
6886 行:contentType: "application/json;charset=UTF-8"
7573 行: contentType === "application/json;charset=UTF-8"
改完后再将配置文件 copy 回容器,不需重启,直接刷新页面即可。

五.Docker 安装 Kibana

步骤大致如同 elasticsearch:

1.拉取镜像

docekr search kibana
docker pull kibana:7.12.1

# 启动 kibana 容器并连接同一网络
docker run -d --name kibana --net elk -P -e "ELASTICSEARCH_HOSTS=http://es:9200" -e "I18N_LOCALE=zh-CN" kibana:7.12.1

注意: -e "ELASTICSEARCH_HOSTS=http://es:9200" 表示连接刚才启动的 elasticsearch 容器,因为在同一网络(elk)中,地址可直接填 容器名+端口,即 es:9200, 也可以填 http://192.168.161.128:9200,即 http://ip:端口。

2.拷贝文件

docker cp kibana:/usr/share/kibana/config/kibana.yml kibana/

chmod 666 kibana/kibana.yml

拷贝完成后,修改该配置文件,主要修改 elastissearch.hosts 并新增 i18n.locale 配置:

es 地址改为刚才安装的 es 地址,因容器的隔离性,这里最好填写 http://ip:9200;
kibana 界面默认是英文的,可以在配置文件中加上 i18n.locale: zh-CN(注意冒号后面有个空格)。
这样有了配置文件,在启动容器时就不用通过 -e 指定环境变量了。

#
# ** THIS IS AN AUTO-GENERATED FILE **
#

# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
# elasticsearch 地址
elasticsearch.hosts: [ "http://192.168.161.128:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
# 开启 kibana 的汉化(经测试没有这项也没问题)
# i18n.locale: zh-CN  

注意:如果使用挂载配置文件的方式启动的话,elasticsearch.hosts 这需填写 http://ip:9200,而不能使用容器名了,否则后面 kibana 连接 es 会失败。(ip为es容器的网络地址

3.重新开个容器

#删除原来未挂载的容器
docker rm -f kibana

# 启动容器并挂载
docker run -d --name kibana \
-p 5601:5601 \
-v $PWD/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml \
--net elk \
--privileged=true \
kibana:7.12.1

4.查看结果

打开浏览器,输入:http://ip:5601 打开 kibana 控制台,如果未能成功打开,可以使用: docker logs kibana 查看容器日志看是否运行有误等。

可参考官网:Install Kibana with Docker

六.Docker 安装 LogStash

安装 Logtash 继续同上:

1.拉取镜像并拷贝配置

docker pull logstash:7.12.1

docker run -d -P --name logstash --net elk logstash:7.12.1

# 拷贝数据
docker cp logstash:/usr/share/logstash/config logstash/
docker cp logstash:/usr/share/logstash/data logstash/
docker cp logstash:/usr/share/logstash/pipeline logstash/

#文件夹赋权
chmod -R 777 logstash/

2.修改相应配置文件

  • 修改 logstash/config 下的 logstash.yml 文件,主要修改 es 的地址:
    http.host: "0.0.0.0"
    xpack.monitoring.elasticsearch.hosts: [ "http://192.168.161.128:9200" ]
    

4.查看日志

docker logs -f logstash

每次启动完容器最好检查下日志,这样方便后续的步骤,如果出了问题,可以看到是哪的问题并方便解决。

七.创建springboot应用

这个比较简单,主要就是几个配置文件:

  1. pom.xml 文件,引入 logstash 的依赖:
    <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>6.6</version>
    </dependency>
    
  2. 在 resource 下创建 log/logback-springxml 文件,这里我们主要填写
    <destination>ip:端口</destination>,关于 <pattern>标签则看个人使用情况修改。
  3. 最后修改 application.yml 文件:
    logging:
      config: classpath:log/logback-spring.xml
    

    启动后在 elasticsearch-head 界面即可看到输出的日志:在这里插入图片描述

    在这里插入图片描述

     至此,完成了用 Docker 搭建 elk 的过程。

七.后记

在搭建 ELK 时有遇到如下几个问题,特此记录一下:

1.Docker 拉取内存不足

由于我是在 VMware 装的 centos 7 上搭建的,开始装系统时挂载到根目录下的内存较小,因此,docker 拉取镜像时,到了 Logstash 这一步就提示内存不足了,又不想重新装过系统,因此,可以通过编辑 docker 的配置文件,来改变默认的容器卷下载的目录。

# 查看 docker 默认下载地址
docker info | grep "Docker Root Dir"

# 创建目录
mkdir /home/docker-root

# 编辑配置文件 
vi /usr/lib/systemd/system/docker.service

在编辑 docker.service 配置文件时,在 [Service] 节点下找到 ExecStart,在后面加上: --graph=/home/docker-root 即可,docker-root 即为刚才创建的目录:

[Service]
ExecStart=/usr/bin/dockerd --graph=/home/docker-root

最后重启 docker:

systemctl daemon-reload
systemctl restart docker
systemctl enable docker

2.Logstash端口映射

在编辑 logstash.conf 文件时,需要注意暴露出来的端口还需要容器映射才行,否则会导致 springboot 连接不上 logstash,如:

input {
  tcp {
    mode => "server"
    host => "0.0.0.0"  # 允许任意主机发送日志
    port => 5044
    codec => json_lines    # 数据格式
  }
}

这里允许任意主机通过 5044 端口发送日志,则在启动容器的时候,同时需要 -p 5044:5044 将端口映射出去,否则 springboot 在启动时会连接不到 logstash。

3.启动容器时内存不足

在启动 elasticsearch 或 logstash 容器时,可能会出现内存不足的情况,我们可以通过编辑修改指定文件来修改内存分配:

# 查找 jvm.options 文件
find / -name jvm.options

找到对应的 jvm.options 修改文件中的 -Xms(最小内存)和-Xmx(最大内存)。

或者在启动 elasticsearch 容器时,可直接加入环境变量如下所示,而 logstash 的目前没找到,可通过前面修改 jvm.options修改。

-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/460790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次死锁问题

最近在做一个需求&#xff0c;碰到了死锁的问题&#xff0c;记录下解决问题的过程 背景 这个需求要改动一个接口&#xff0c;我这边称为A接口&#xff0c;原先的逻辑是A接口内部会调用c方法&#xff0c;c方法是一个dubbo方法&#xff0c; 现在需要再A接口里添加调用B方法&…

springcloud之Feign、ribbon设置超时时间和重试机制的总结

目录标题 超时时间ribbon和Feignribbon和Feign默认超时时间关于ribbon和Feign超时时间配置说明 关于hystrix默认超时时间与配置说明 ribbon的重试机制重试的次数hystrix超时时间举个例子 超时时间 feign/ribbon对应的是请求的时间 hystrix对应的是断路器的时间 一般情况下 都是…

【Linux】2. 常见指令

1. 操作系统的定义 在真正了解Linux操作系统之前&#xff0c;我们需要初步明确什么是操作系统 Linux下的基本指令 指令的作用是什么&#xff0c;其实就是相当于Windows的基本操作&#xff0c;Linux操作系统是以命令行显示的&#xff0c;而Windows则是以图形化界面的方式展现…

图像融合方向:《Deep Image Blending》论文理解

《Deep Image Blending》论文理解 论文&#xff1a;《Deep Image Blending》WACV 2020 链接&#xff1a;Deep Image Blending 本文目录 《Deep Image Blending》论文理解论文创新点具体实现思路文中使用的基准方法文章内容解析使用模型整体架构两阶段算法详情第1阶段第2阶段 损…

一款高效、可靠的自动化测试平台,提升效率、降低测试成本

一、开源项目简介 扬帆测试平台是一款高效、可靠的自动化测试平台&#xff0c;旨在帮助团队提升测试效率、降低测试成本。该平台包括用例管理、定时任务、执行记录等功能模块&#xff0c;支持多种类型的测试用例&#xff0c;目前支持API(http和grpc协议)、性能&#xff0c;并且…

轻量级服务器nginx:负载均衡

负载均衡就是让每个设备&#xff0c;以同样的概率&#xff0c;处理用户对于服务器的任务请求&#xff0c;默认采用的负载调度策略就是轮流询问&#xff0c;Nginx作为反向代理服务器安装在服务端&#xff0c;Nginx的功能就是把请求转发给后面的应用服务器. 这里写目录标题 一 负…

差分优化算法——DE

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录 一、DE1.步骤2.特点 二、DE Optimiza1.函数最小值问题2.差分进化算法求解2.Java 实现与结果绘图 一、DE 差分进化算法是一种基于群体智能的优化算法&#xff0c;由Storn和Price于1995年提出&#xff0c;最早用…

vue3+ts开发微信小程序----使用FontAwesome图标的步骤(只适用于面性图标)

vue3ts开发微信小程序----使用FontAwesome图标的步骤&#xff08;只适用于面性图标&#xff09; 因为用的vue3ts 但是对于npm引进FontAwesome来说&#xff0c;好像对于小程序不支持&#xff0c;所以用了引入文件的方式。 下载FontAwesome字体&#xff0c;我用的是5版本的。[官方…

从初识RabbitMQ到安装了解

一、同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;但是你却不…

记 SAM React Demo 转 Vue 遇到的一些问题

前言 SegmentAnything Model (SAM) 是 Meta 开源的分割万物 AI 模型&#xff0c;因笔者主要使用 Vue&#xff0c;因此对官方 Demo 进行了工程迁移工作&#xff0c;这里记录了迁移过程遇到的一些问题。 没有使用多线程加速 官方的 React Demo 项目使用ort-wasm-simd-threaded…

态路小课堂丨浅谈IDC数据中心综合布线互联

在数据中心发展过程中&#xff0c;服务器、光模块等设备更新周期短&#xff0c;迭代快。但是&#xff0c;对于IDC数据中心综合布线系统来说&#xff0c;其使用周期一般都比较长。因此&#xff0c;为了能够匹配IDC数据中心的发展&#xff0c;关于综合布线的设计尤为重要。 目前&…

【vue】elementUI中el-table拖动滚动条的时候固定某一列

文章目录 前言&#xff1a;需求 前言&#xff1a; 写项目的时候有一个需求&#xff0c;就是当el-table的滚动条滑动的时候&#xff0c;可见区域如果没有该列则固定到左侧&#xff0c;由elementUi官方网站可知el-table固定一列的代码如下: fixed为主要的标识 头部固定设置的是t…

leetcode 2336. Smallest Number in Infinite Set(有限集中的最小数字)

实现一个SmallestInfiniteSet类(后面用set简称)&#xff0c;满足以下功能&#xff1a; 初始化时&#xff0c;set含有所有的正整数。 pop函数返回set中最小的整数。 add函数在set中添加一个整数。 思路&#xff1a; set具有以下的功能&#xff1a; 可以取出最小的数字。 可以查…

FPGA入门系列13--异步串口通信

文章简介 本系列文章主要针对FPGA初学者编写&#xff0c;包括FPGA的模块书写、基础语法、状态机、RAM、UART、SPI、VGA、以及功能验证等。将每一个知识点作为一个章节进行讲解&#xff0c;旨在更快速的提升初学者在FPGA开发方面的能力&#xff0c;每一个章节中都有针对性的代码…

Baklib如何帮助企业设计并维护FAQ页面?

作为现代企业的一部分&#xff0c;客户支持服务是为客户提供解决方案、回答问题和解决技术难题的关键部分。而其中最重要的一个基本工具是FAQ页面&#xff08;Frequently Asked Questions&#xff09;&#xff0c;它可以有效地减轻客户支持压力和提高工作效率。然而&#xff0c…

Linux——进度条与git的使用

目录 main.c Makefile process.c \r process.h 进度条的演示动图 git的使用 在gitee上创建一个仓库 复制HTTPS到xshell git clone .gitignore ​编辑 git add git commit -m 这里写日志信息 git push sudo yum -y install git git log git status git mv / …

vue2之echarts的封装 折线图,饼图,大图

目录 vue2之echarts的封装 折线图&#xff0c;饼图&#xff0c;大图折线图&#xff0c;饼图chartPan.vue使用 chartPan.vue 之饼图效果使用 chartPan.vue 之折线图效果展开大图大图组件 maxChart.vue大图效果 vue2之echarts的封装 折线图&#xff0c;饼图&#xff0c;大图 折线…

视觉回归测试—UI自动化的最后1分钟

视觉回归测试是一种验证应用GUI是否正确地展示给用户的操作。测试目标是找出应用在可视化上存在的软件缺陷&#xff0c;例如&#xff0c;字体、布局和渲染问题。这使得所发现的软件缺陷可在被最终用户看到前得到修正。此外&#xff0c;视觉测试可用于验证页面的内容&#xff0c…

车道线检测

前言 目前&#xff0c;车道线检测技术已经相当成熟&#xff0c;主要应用在自动驾驶、智能交通等领域。下面列举一些当下最流行的车道线检测方法&#xff1a; 基于图像处理的车道线检测方法。该方法是通过图像处理技术从摄像头传回的图像中提取车道线信息的一种方法&#xff0c…

【AI工具 收藏】

文章目录 miniGPT4&#xff1a;chatGPT&#xff0c;支持图片哔哔终结者 BibiGPT&#xff1a;自动总结视频内容Scribble Diffusion&#xff1a;草图绘画ChatGPT Shortcut&#xff1a;prompt提示词其他 博客总结的工具&#xff1a; miniGPT4&#xff1a;chatGPT&#xff0c;支持图…