Docker整合ELK+SpringBoot详解

目的:

本次是想通过docker搭建elk环境并整合springboot实现我们的一个日志分析的场景

ELK简介:

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

前期准备

阿里云1核2g的轻量服务器centos8.2
docker环境配置已经完成
由于楼主服务器资源有限,所以后面在启动docker相关容器服务时要注意jvm相关内存配置,不然服务器很容易卡死

详细过程

搭建开始前先把相关的端口开发出来
在这里插入图片描述

1:搭建elasticsearch

拉取镜像

docker pull elasticsearch:7.1.0

启动容器

docker run --name elasticsearch -d  -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" -p 9200:9200 elasticsearch:7.1.0

启动成功后打开访问地址,看是否搭建成功
输入地址:http://服务器ip地址:9200
在这里插入图片描述
如果能看到上述信息,则搭建完成。

2:搭建kibana

拉取镜像

docker pull kibana:7.1.0

启动容器并与elasticsearch关联

docker run --name kibana \
-e ELASTICSEARCH_HOSTS=http://172.18.0.3:9200 \
-p 5601:5601 \
-d kibana:7.1.0

注意:
172.18.0.3为elasticsearch容器的docker对外暴露的地址
可通过下面命令查看

docker inspect elasticsearch | grep IPAddress

在这里插入图片描述
启动成功后打开页面输入地址访问看是否搭建成功
地址:http://服务器ip地址:5601
在这里插入图片描述
出现上面的界面即表示搭建成功,可以发现默认是英文显示,这个可以通过配置文件修改改为中文显示

设置界面中文显示
#进入kibana容器内部,5aab81677579为容器id
docker exec -it 5aab81677579 /bin/bash
#进入kibana.yml文件对应目录
 cd config
 #修改kibana.yml配置文件
 vi kibana.yml
在内容末尾处添加加上:i18n.locale: "zh-CN"
输入 :wq!
保存退出
重启容器看配置是否修改成功
docker restart 5aab81677579

由于kibana启动非常占内存,所以为了避免服务器崩溃,设置相应内存
#进入kibana容器内部,5aab81677579为容器id
docker exec -it 5aab81677579 /bin/bash
#进入kibana文件对应目录
cd bin
#修改kibana配置文件
vi kibana
在文件内容末尾处加上
NODE_OPTIONS="$NODE_OPTIONS --max-old-space-size=200"
输入 :wq!
保存退出
重启容器
docker restart 5aab81677579

3:搭建logstash

拉取镜像

docker pull logstash:7.1.0

启动容器

docker run -d --name logstash -p 4560:4560 logstash:7.1.0

修改相关配置重新启动

如果你的服务器内存有限,可以设置相应内存
#进入logstash容器内部,43774f6fface为容器id
docker exec -it 43774f6fface /bin/bash
#进入jvm.options对应目录
cd config
#修改jvm.options配置文件
vi jvm.options
修改xmx xms大小默认是1g可以看情况修改
-Xms256m
-Xmx256m


配置logstash连接es和对应监听地址配置
#进入logstash容器内部,99cbece75e8a为logstash容器id
docker exec -it 99cbece75e8a sh
#进入logstash.conf文件对应目录
cd pipeline/
#修改logstash.conf文件
vi logstash.conf
替换成以下内容
input {
  tcp {
    #模式选择为server
    mode => "server"
    #ip和端口对应docker对外暴露logstash的地址可以使用下面命令查看
    #docker inspect logstash | grep IPAddress
    host => "172.18.0.2"
    port => 4560
    #格式json
    codec => json_lines
  }
}
filter {
  #过滤器,根据需要填写
}
output {
  elasticsearch {
        action => "index"
    #这里是es的地址,多个es要写成数组的形式
    hosts  => "http://172.18.0.3:9200"
    #用于kibana过滤,可以填项目名称
    index  => "springboot-logstash"
  }
}
修改后保存退出重启容器
docker restart 99cbece75e8a

4:搭建springboot项目

输出日志到logstash上最终存储到es中,使用我们的kibana查看
可以新建一个测试springboot工程
导入maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.test</groupId>
    <artifactId>springbootdemo</artifactId>
    <version>1.0.0-SNAPSHOT</version>
   
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.4.RELEASE</version>
            </dependency>
            <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>5.3</version>
            </dependency>
            <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
            <optional>true</optional>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

编写logback.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration>

<configuration>

    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

    <!--应用名称-->

    <property name="APP_NAME" value="test-log"/>

    <!--日志文件保存路径-->

    <property name="LOG_FILE_PATH" value="D:/logs"/>

    <contextName>${APP_NAME}</contextName>

    <!--每天记录日志到文件appender-->

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>

            <maxHistory>30</maxHistory>

        </rollingPolicy>

        <encoder>

            <pattern>${FILE_LOG_PATTERN}</pattern>

        </encoder>

    </appender>

    <!--输出到Logstash的appender-->

    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">

        <!--可以访问的Logstash日志收集端口-->

        <destination>服务器公网ip地址:4560</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>

    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="LOGSTASH"/>
    </root>

</configuration>

编写测试controller

package cn.test.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;


@Slf4j
@RestController
public class IndexController {
    @GetMapping("/elk")
    public void index() {
        String message = "测试logback ELK日志接入,时间:" + new Date();
        log.info(message);
    }
}
编写springboot启动类

```java
package cn.test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BootDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(BootDemoApplication.class,args);
    }
}

启动springboot项目

打开控制台输入地址多访问几次,测试结果
在这里插入图片描述
在这里插入图片描述
可以看到日志正常输出了,然后我们去kibana查看我们的日志输出情况
``

5:kibana新建indexPattern查看日志情况

打开我们之前搭建的kibana平台,新建indexPattern
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
新建indexpattern成功后打开discover界面查看我们日志输出情况
在这里插入图片描述
在这里插入图片描述
可以看到我们的elk已经走通了,后面就可以根据自己的实际业务需求去进行修改配置。

总结

本次通过docker搭建elk+springboot的过程还是花费了不少的时间的,还是有所收获的。碰到问题的话尽量去百度查资料,耐心点基本上都是可以解决的。有感兴趣的小伙伴可以一起交流学习呀。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zwhdlb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值