springboot在windows集成elk

说明:elk指的是Elasticsearch、Logstash、Kibana的简称

Elasticsearch:是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;

Logstash:是一个用来搜集、分析、过滤日志的工具。

Kibana:是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。

elk的测试版本:6.2.2

这里简单搭建elk来收集springBoot生产的日志

1:安装elk

1.1安装elasticsearch

​ 1.1.1 下载ElasticSearch,下载地址:https://www.elastic.co/downloads/elasticsearch

​ 下载zip压缩包,并解压

​ 1.1.2 进入bin目录下,双击执行elasticsearch.bat

​ 1.1.3 启动后在浏览器上访问http://localhost:9200,如下图展示则安装启动成功。

1.2安装elasticsearch-head插件

​ 1.2.1在谷歌浏览器的网上应用商店增加扩展插件

​ 1.2.2点击插件可查看Elasticsearch的索引文件

1.3安装Logstash

​ 1.3.1下载Logstash https://www.elastic.co/downloads/logstash

​ 下载zip包并解压到D:\elasticsearch-6.2.2\logstash-6.2.2

​ 1.3.2在bin目录下新建logstash.conf文件,并填入以下配置内容

input {
 tcp {
 mode => "server"
 host => "127.0.0.1"
 port => 4560
 codec => json_lines
 }
}
output {
  elasticsearch {
    hosts => "127.0.0.1:9200"
    index => "springboot-logstash-%{+YYYY.MM.dd}"
  }
  stdout{  
      codec=>rubydebug  
  }
}

​ 1.3.3测试输入消息转发到Elasticsearch

​ 在cmd命令切换到D:\elasticsearch-6.2.2\logstash-6.2.2\bin,并logstash -e "input { stdin { } } output { elasticsearch { hosts => ['127.0.0.1:9200'] } }"

​ 输入hello world回车发送

看到logstash-YYYY-MM-DD索引 并能看到hello world,说明配置成功了

​ 1.3.4运行Logstash,在cmd命令切换到D:\elasticsearch-6.2.2\logstash-6.2.2\bin,执行logstash -f logstash.conf

1.4安装Kibana

​ 1.4.1 下载地址 https://www.elastic.co/downloads/kibana ,下载zip压缩包,并解压

​ 1.4.2 执行kibana.bat,访问http://localhost:5601/,如下图所示,则成功

2:springboot集成logstash

新建一个springboot工程

pom 添加依赖

<dependencies>
    <!--集成logstash-->
    <dependency>
        <groupId>net.logstash.logback</groupId>
        <artifactId>logstash-logback-encoder</artifactId>
        <version>5.3</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.22</version>
    </dependency>
</dependencies>

springboot默认内置logback,不需要增加依赖

在资源的resource文件夹下新建logback-spring.xml(注意destination的地址必须要和logstash的host和port一致),配置内容:

<?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/base.xml"/>

    <springProperty scope="context" name="appName" source="Web Server's Default Page"/>

    <!-- 日志在工程中的输出位置 -->
    <property name="LOG_FILE" value="${BUILD_FOLDER:-build}/${appName}"/>

    <!-- 控制台的日志输出样式 -->
    <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>INFO</level>
        </filter>
        <!-- 日志输出编码 -->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!--logstash配置-->
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>127.0.0.1:4560</destination>
        <!-- 日志输出编码 -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <pattern>
                        {
                        "logLevel": "%level",
                        "serviceName": "${springAppName:-}",
                        "pid": "${PID:-}",
                        "thread": "%thread",
                        "class": "%logger{40}",
                        "rest": "%message"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
        <!--<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>-->
    </appender>

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

</configuration>

接着在配置文件application.yml,添加配置:

logging:
  level:
    root=INFO:
  config: classpath:logback-spring.xml

增加个测试日志的controller接口

@Slf4j
@Controller
public class DemoController {

    @RequestMapping("/")
    @ResponseBody
   public String home() {
       log.info("hello world!");
      return "hello world!";
      
   }

}

重复上述的启动Elasticsearch、Logstash、Kibana过程

启动springboot项目测试,访问elasticsearch-head,若出现springboot-logstash-*对应日期的索引,说明集成logstash成功

打开http://localhost:5601/,添加索引,采集springboot-logstash*的索引的消息

使用 Discover 查询日志信息,先访问http://localhost:8081/

输入hello world实时查询采集的日志

posted @ 2021-02-02 12:52  rxzf  阅读(747)  评论(0编辑  收藏  举报