springBoot+Docker集成ELK

springBoot+Docker集成ELK

    • 一、elk 简介
    • 二、elk的安装
    • 三、创建springboot工程
      • 配置 pom.xml文件
      • 启动类 SpringbootElkApplication
      • logback-spring.xml
    • 四、配置 pattern

一、elk 简介

时下最流行的ELK,日志分析系统,是由三部分组成:Logstash、ElasticSearch、Kibana。这三者是核心组件,并非全部。

Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。

Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。

Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。

二、elk的安装

我们采用的 docker 镜像安装 。(请先确保已安装docker,docker安装教程: https://blog.csdn.net/weixin_44930692/article/details/106660431.)

#下载镜像
docker pull sebp/elk
#启动镜像 , 指定es的内存
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 5601:5601 -p 5044:5044 -p 9200:9200 -p 9300:9300 -it --name elk 5e0d1e6e98a7

注:如若提示:

springBoot+Docker集成ELK_第1张图片

请修改启动命令中的 ES_JAVA_OPTS="-Xms256m -Xmx256m"的Xms,Xmx大小并再次启动

由于sebp/elk中logstash的input的方式默认是filebeat,首先们需要进入elk容器中修改input方式。logstash默认会将etc/logstash/conf.d/中的配置文件进行整合然后启动。

由于sebp/elk中logstash的input的方式默认是filebeat,首先们需要进入elk容器中修改input方式。logstash默认会将etc/logstash/conf.d/中的配置文件进行整合然后启动。

#进入容器
docker exec -it elk /bin/bash 
#进入修改目录
cd etc/logstash/conf.d/
#修改02-beats-input.conf 文件
vim 02-beats-input.conf	

修改 02-beats-input.conf 文件,修改如下:

input {    
    tcp {         
        port => 5044         
        codec => json_lines     
    } 
} 
output{  
    elasticsearch { 
    hosts => ["localhost:9200"] 
    } 
}

保存后,我们使用 control + P + Q 退出docker的elk容器。然后重启容器,让我们的配置生效。

#重启容器
docker restart elk
#查看运行中的容器
docker ps 

现在启动成功,我们可以访问一下 http://localhost:9200/ 或 http://127.0.0.1:9200/

springBoot+Docker集成ELK_第2张图片
我们可以访问一下 http://localhost:5601/ 或 http://127.0.0.1:5601/
springBoot+Docker集成ELK_第3张图片

三、创建springboot工程

创建工程springboot-elk ,并使用logback 记录日志。

配置 pom.xml文件


<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.0modelVersion>

    <groupId>com.gfgroupId>
    <artifactId>springboot-elkartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <packaging>jarpackaging>

    <name>springboot-elkname>
    <description>Demo project for Spring Bootdescription>

    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.1.1.RELEASEversion>
        <relativePath/> 
    parent>

    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
        <java.version>1.8java.version>
    properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>

        
        <dependency>
            <groupId>ch.qos.logbackgroupId>
            <artifactId>logback-classicartifactId>
        dependency>

        <dependency>
            <groupId>net.logstash.logbackgroupId>
            <artifactId>logstash-logback-encoderartifactId>
            <version>5.2version>
        dependency>

    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <configuration>
                    <fork>truefork>
                configuration>
            plugin>
        plugins>
    build>

project>

启动类 SpringbootElkApplication

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class SpringbootElkApplication {

    private final static Logger logger = LoggerFactory.getLogger( SpringbootElkApplication.class );

    public static void main(String[] args) {
        SpringApplication.run(SpringbootElkApplication.class, args);
    }

    @GetMapping("/{name}")
    public String hi(@PathVariable(value = "name") String name) {
        logger.info( "name = {}" , name );
        return "hi , " + name;
    }
}

logback-spring.xml


        
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <springProperty scope="context" name="springAppName"
                source="spring.application.name" />

<property name="LOG_FILE" value="${BUILD_FOLDER:-build}/${springAppName}" />


<property name="CONSOLE_LOG_PATTERN"
          value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />


<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFOlevel>
    filter>
    
    <encoder>
        <pattern>${CONSOLE_LOG_PATTERN}pattern>
        <charset>utf8charset>
    encoder>
appender>


<appender name="logstash"
          class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <destination>127.0.0.1:5044destination>
    
    <encoder
            class="net.logstash.logback.encoder.LogstashEncoder">
        <providers>
            <timestamp>
                <timeZone>UTCtimeZone>
            timestamp>
            <pattern>
                <pattern>
                    {
                    "severity": "%level",
                    "service": "${springAppName:-}",
                    "trace": "%X{X-B3-TraceId:-}",
                    "span": "%X{X-B3-SpanId:-}",
                    "exportable": "%X{X-Span-Export:-}",
                    "pid": "${PID:-}",
                    "thread": "%thread",
                    "class": "%logger{40}",
                    "rest": "%message"
                    }
                pattern>
            pattern>
        providers>
    encoder>
appender>


<root level="INFO">
    <appender-ref ref="console" />
    <appender-ref ref="logstash" />
root>

configuration>

启动工程,访问 [http://127.0.0.1:9091/h啊哈哈哈] 日志会存入elasticsearch中
springBoot+Docker集成ELK_第4张图片
项目启动成功。

四、配置 pattern

打开 **http://localhost:5601/*点击,Management, 配置 pattern 输入,匹配所有数据。
springBoot+Docker集成ELK_第5张图片
选择时间@timestamp,这样数据展示会以时间排序
springBoot+Docker集成ELK_第6张图片
好了 ,点击discover,就可以看到我们springboot-elk项目的日志信息了。
springBoot+Docker集成ELK_第7张图片
至此 springBoot+Docker集成ELK大功告成!!!

你可能感兴趣的:(ELK,Kibana,Docker,java,elasticsearch,logback)