首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Docker快速搭建ELK日志分析平台

使用Docker快速搭建ELK日志分析平台

作者头像
姜同学
发布于 2022-10-27 09:07:38
发布于 2022-10-27 09:07:38
2.3K00
代码可运行
举报
文章被收录于专栏:姜同学姜同学
运行总次数:0
代码可运行

为什么选择Docker?

Docker是目前非常主流的容器化的虚拟技术,这个虚拟又与VMware或者是Hyper-v搭建的虚拟机不同,虚拟机是在宿主机的内核已经操作系统系统之上在虚拟出一套操作系统,而Docker这种容器化的技术是基于操作系统的namespace直接使用宿主机的操作系统去构建需要隔离的应用,中间省去了再去虚拟化一套操作系统的过程,或许有人会担心使用如果Docker的容器挂掉了之后,数据会丢失的问题,这你大可不必的过多担心,Docker本身实现了数据卷的工程,可以将容器内部的目录挂载到宿主机之上,只要你的宿主机还健康,那么上面的数据就不会丢失.甚至是当你重新创建一个容器之后你将新容器的数据目录也挂载到了之前容器的目录上,数据都可以复用,但我不建议你这样哦~

ELK版本的选择

主版本不用最新版,大版本不用老版,这是我选择版本的原则,根据这个原则我们打开DockerHub看一下哪一个版本符合我的要求.

可以看到最新版本是7.14,那么根据上面的选择版本的原则,我们直接pull 7.13.0版本的ELK即可.

安装docker-compose

ELK其实是三个开源软件的简称,E代表的是搜索引擎elasticsearch,L代表的是日志收集系统logstash,K代表的是可视化的es的索引分析平台.当然我们选择了Docker安装,那么ELK就代表了三个容器,对于容器的版本,选择docker-compose更加合适.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用国内镜像下载docker-compose
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose
# 服务docker-compose执行权限
sudo chmod +x /usr/local/bin/docker-compose

下载ELK的Docker镜像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker pull elasticsearch:7.13.0
docker pull logstash:7.13.0
docker pull kibana:7.13.0

编写docker-compose.yml文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: '3'
services:
  elasticsearch:
    image: elasticsearch:7.13.0
    container_name: elasticsearch-dev
    networks:
      - host
    environment:
      - "cluster.name=elasticsearch" #设置集群名称为elasticsearch
      - "discovery.type=single-node" #以单一节点模式启动
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用jvm内存大小
    volumes:
      - /pins/dev/data/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
      - /pins/dev/data/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
    ports:
      - :9200
  kibana:
    image: kibana:7.13.0
    container_name: kibana-dev
    networks:
      - host
    links:
      - elasticsearch:es #可以用es这个域名访问elasticsearch服务
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    environment:
      - "elasticsearch.hosts=http://es:9200" #设置访问elasticsearch的地址
    ports:
      - :5601
  logstash:
    image: logstash:7.13.0
    container_name: logstash-dev
    networks:
      - host
    volumes:
      - /pins/dev/data/logstash/conf:/usr/share/logstash/pipeline/ #挂载logstash的配置文件
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    links:
      - elasticsearch:es #可以用es这个域名访问elasticsearch服务
    ports:
      - :4560
networks:
  host:

先别急着启动

启动之前先使用netstat -anp | grep 端口号 查看一下你用到的端口有没有被占用,还记得上面我说过的容器挂载吗,挂载的目录要在宿主机上创建好哦,不然是会报错的哦~,你以为事情如此简单,一个坑都没有?那必然不是呀.

设置内核参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 改变设置 
sysctl -w vm.max_map_count=262144 
# 使之立即生效 
sysctl -p

es的数据挂载目录需要全权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chomd 777 /pins/dev/data/elasticsearch/data

修改logstash.conf输出到es

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    codec => json_lines
  }
}
output {
  elasticsearch {
    hosts => "es:9200"
    index => "springboot-logstash-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "密码我不告诉你"
  }
}

启动ELK

看图,懂的都懂懒得解释了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker-compose -f  docker-compose-dev.yml up -d

LogStash安装json_lines插件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 进入logstash容器 
docker exec -it logstash-dev /bin/bash 
# 进入bin目录 cd /bin/ 
# 安装插件 logstash-plugin install logstash-codec-json_lines 
# 退出容器 exit 
# 重启logstash服务 docker restart logstash-dev

使用Kibana在es创建Index索引

浏览器访问http://192.168.1.52:5601/进入kibana.

创建logstack输出到es的索引模式

SpringBoot输出日志到Logstash

怎么讲SpringBoot的日志输出到logstash上呢,veryeasy,我又懒得解释了,自己看代码吧.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--输出到logstash的appender-->
<appender name="LOGSTASH-DEV" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <!--可以访问的logstash日志收集端口-->
    <destination>192.168.1.52:4560</destination>
    <!-- 日志输出编码 -->
    <encoder charset="UTF-8"
             class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <timestamp>
                <timeZone>UTC</timeZone>
            </timestamp>
            <pattern>
                <pattern>
                    {
                    "logLevel": "%level",
                    "serviceName": "hospital-manage",
                    "pid": "${PID:-}",
                    "thread": "%thread",
                    "class": "%logger{40}",
                    "rest": "%message %ex",
                    "@profile":"dev"
                    }
                </pattern>
            </pattern>
        </providers>
    </encoder>
</appender>

<!--  springboot多环境配置  -->
<springProfile name="prod">
    <root>
        <level value="info"/>
        <appender-ref ref="loghubAppender"/>
    </root>
</springProfile>
<springProfile name="dev | test | prod">
    <root>
        <level value="info"/>
        <appender-ref ref="fileAppender"/>
        <appender-ref ref="LOGSTASH-DEV"/>
    </root>
</springProfile>
<springProfile name="dev | test">
    <root>
        <level value="info"/>
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="LOGSTASH-DEV"/>
    </root>
</springProfile>

这里需要注意的是logback.xml要更名为logback-spring,不然多环境配置中的springProfile标签可是不可以用的哦~

展示一下效果吧

结束了,但没完全结束,因为上面的做法并不安全

为ELK增加权限控制

docker的命令我也懒得解释了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
### es增加密码
docker exec -it elasticsearch-dev /bin/bash
vi config/elasticsearch.yml
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cluster.name: "docker-cluster"
network.host: 0.0.0.0
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
### 重启es,初始化密码
docker restart elasticsearch-dev
docker exec -it elasticsearch-dev /bin/bash
elasticsearch-setup-passwords interactive

修改logstash.conf增加访问es的账号密码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    codec => json_lines
  }
}
output {
  elasticsearch {
    hosts => "es:9200"
    index => "springboot-logstash-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "密码我不告诉你"
  }
}

修改Kibana增加访问es的账号密码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Default Kibana configuration for docker target
server.host: "0"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN"
elasticsearch.username: "elastic"
elasticsearch.password: "密码我还是不告诉你"
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-06T,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ELK实战(Springboot日志输出查找)
需求 把分布式系统,集群日志集中处理快速查询 搭建ELK并与springboot日志输出结合 搭建ELK 基于我前面的elasticsearch搭建博客文档docker-compose.yml基础上进行添加修改 新建docker-compose.yml文件,内容如下 version: '2' services: elasticsearch-central: image: elasticsearch:5.6.4 container_name: es1 volumes:
老梁
2019/09/10
1.8K0
ELK实战(Springboot日志输出查找)
SpringBoot应用整合ELK实现日志收集
搭建了ELK日志收集系统之后,我们如果要查看SpringBoot应用的日志信息,就不需要查看日志文件了,直接在Kibana中查看即可。
macrozheng
2019/07/22
2.3K0
SpringBoot应用整合ELK实现日志收集
springcloud集成elk
springcloud是一个应用很广的微服务全家桶,阿里开发了自己的springcloud alibaba分支,elk是一款不错的监控工具,尤其是日志分析,可以将springcloud微服务项目的日志通过logstash-logback-encoder传送到elk的logstash上,好了废话不多少了,直接进入环境搭建流程:
johnhuster的分享
2022/03/29
7060
springcloud集成elk
Docker 入门到实战教程(十二)ELK+Filebeat搭建日志分析系统
一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
小东啊
2020/07/23
4.9K1
Docker 入门到实战教程(十二)ELK+Filebeat搭建日志分析系统
项目实战|史上最简单的springboot 整合elk教程,实现日志收集
总有测试小姐姐教你紧急刹车,回头做(改)人(bug):AI大师,你这不行啊!(吃瓜群众排排坐,笑歪了嘴)
AI码师
2021/01/27
4K0
项目实战|史上最简单的springboot 整合elk教程,实现日志收集
走进Java接口测试之整合ELK实现日志收集
启动时会发现 /usr/share/elasticsearch/data 目录没有访问权限,只需要修改 /mydata/elasticsearch/data 目录的权限,再重新启动即可;
高楼Zee
2020/09/24
1.8K0
走进Java接口测试之整合ELK实现日志收集
Springboot项目搭配ELK日志平台
上一篇讲过了elasticsearch和kibana的可视化组合查询,这一篇就来看看大名鼎鼎的ELK日志平台是如何搞定的。
天涯泪小武
2019/01/17
1.5K0
整活 | 海量日志收集利器之ELK!SpringBoot + ELK走起!
前面我们安装的Elasticsearch版本是7.10.2,所以Logstash和接下来要安装的Kibana都要安装7.10.2这个版本。
行百里er
2021/06/10
1.5K0
整活 | 海量日志收集利器之ELK!SpringBoot + ELK走起!
使用 ELK 收集日志
在当前分布式、微服务架构下,各个应用都部署在不同的服务器上,每个应用都在记录着自己重要或者不重要的日志信息。当我们要通过日志信息来排查错误时,可以根据出错应用在对应的机器上找报错相关的日志信息。但是,可能我们不具有相应服务器的访问权限,也可能相同的应用部署在多台服务器上,导致根本不知道在哪台服务器上找日志。遇到类似这样的尴尬,想要通过日志来排查错误就搞得很麻烦。在这种情况下,ELK 为我们提供了统一的日志管理解决方案,它能很好的支持 Logback 等日志框架,使得我们可以集中的管理不同应用输出的日志信息。
码农UP2U
2022/12/03
6940
使用 ELK 收集日志
SpringBoot集成ELK实现日志收集实践
Elasticsearch默认使用mmapfs目录来存储索引。操作系统默认的mmap计数太低可能导致内存不足,我们可以使用下面这条命令来增加内存:
gang_luo
2020/08/17
1.4K0
ELK+logback+kafka+nginx 搭建分布式日志分析平台
ELK(Elasticsearch , Logstash, Kibana)是一套开源的日志收集、存储和分析软件组合。而且不只是java能用,其他的开发语言也可以使用,今天给大家带来的是elk+logback+kafka搭建分布式日志分析平台。本文主要讲解一下两种流程,全程linux环境(模拟现实环境,可用内存一定要大于2G,当然也可以使用windows),至于elk这些组件的原理,百度太多了,我就不重复了,重在整合。
用户2235302
2018/08/22
1.6K0
ELK+logback+kafka+nginx 搭建分布式日志分析平台
面试问3个东西,就知道你是否真的上线了项目!
本文的宗旨在于通过易于上手实操的方式,教会读者完成系统ELK日志采集的对接和使用。那你知道对于一个系统的上线考察,必备的几样东西是什么吗?其实这也是面试中考察求职者,是否真的做过系统开发和上线的必备问题。包括:服务治理(熔断/限流)、监控和日志,如果你做的系统里没有这样几个东西,一种是说明系统是玩具项目,另外一种就是压根没做过或者没关心过。前面的已经写完了,所以今天来给大家写ELK日志。
小傅哥
2023/12/19
3550
面试问3个东西,就知道你是否真的上线了项目!
SpringCloud 分布式日志采集方案
由于微服务架构中每个服务可能分散在不同的服务器上,因此需要一套分布式日志的解决方案。spring-cloud提供了一个用来trace服务的组件sleuth。它可以通过日志获得服务的依赖关系。基于sleuth,可以通过现有的日志工具实现分布式日志的采集。
民工哥
2021/12/06
6050
SpringCloud 分布式日志采集方案
使用 Docker 搭建 ELK 环境
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)
soulteary
2020/05/04
1.7K0
使用 Docker 搭建 ELK 环境
Spring Boot ELK 整体介绍 及使用
1. ELK应用场景 在复杂的企业应用服务群中,记录日志方式多种多样,并且不易归档以及提供日志监控的机制。无论是开发人员还是运维人员都无法准确的定位服务、服务器上面出现的种种问题,也没有高效搜索日志内容从而快速定位问题的方式。因此需要一个集中式、独立的、搜集管理各个服务和服务器上的日志信息,集中管理,并提供良好的UI界面进行数据展示,处理分析。 因此:ELK提供一套开源的解决方案,能高效、简便的满足以上场景。
Freedom123
2024/03/29
2230
Spring Boot ELK 整体介绍 及使用
ELK入门使用-与springboot集成
ELK官方的中文文档写的已经挺好了,为啥还要记录本文?因为我发现,我如果不写下来,过几天就忘记了,而再次捡起来必然还要经历资料查找筛选测试的过程。虽然这个过程很有意义,但并不总是有那么多时间去做。因此,接下来的内容仅仅是我根据查询到的资料,筛选,组装,测试后达到我的目标的一个过程。
Ryan-Miao
2018/08/01
6450
ELK入门使用-与springboot集成
ELK+logback+kafka+nginx 搭建分布式日志分析平台
ELK(Elasticsearch , Logstash, Kibana)是一套开源的日志收集、存储和分析软件组合。而且不只是java能用,其他的开发语言也可以使用,今天给大家带来的是elk+logback+kafka搭建分布式日志分析平台。本文主要讲解一下两种流程,全程linux环境(模拟现实环境,可用内存一定要大于2G,当然也可以使用windows),至于elk这些组件的原理,百度太多了,我就不重复了,重在整合。
码农笔录
2022/01/21
1.1K0
ELK+logback+kafka+nginx 搭建分布式日志分析平台
手把手教你搭建ELK
假如我订单服务总共部署在20台服务器上,如果我们直接登录服务器查询日志的话,那得先看一号机器,没有再看二号机器……并且日志量较多的话,可能一个时间段内日志就被切分成好几个文件,这样查询实在是太麻烦了,ELK就是解决这个问题的。
贪挽懒月
2022/12/02
1.4K0
Springboot项目使用aop切面保存详细日志到ELK日志平台
上一篇讲过了将Springboot项目中logback日志插入到ELK日志平台,它只是个示例。这一篇来看一下实际使用中,我们应该怎样通过aop切面,拦截所有请求日志插入到ELK日志系统。同时,由于往往我们有很多个服务,都需要记录日志,为每个服务都搭建一个ELK并不现实,所以我们采用集中化管理日志,将所有日志都插到同一个ELK中。这样又会遇到另一个问题,就是ES中的Index如果只有一个,那么所有日志都混杂在一个Index里,为日后的检索带来不便,我们希望能根据不同的应用来拆分为不同的ES的Index。
天涯泪小武
2019/01/17
1.5K0
springboot logback(log4j) elk 非集群
好长时间没有写过blog了。抽时间把很久之前集成的一个简易的elk升级了下 本教程使用的软件如下: springboot 2.* jdk8 elk 6.2.4(elasticsearch logstash kibana)
日薪月亿
2019/05/14
1.1K0
相关推荐
ELK实战(Springboot日志输出查找)
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档