一、Spring Boot 日志配置

采用 Spring Boot 默认的 Logback:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds"> <contextName>logback</contextName>
<property name="LOG_PATTERN" value="%d{ISO8601} %-5level [%thread] %logger - %msg%n" />
<property name="FILE_PATH" value="/project/logs" /> <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender> <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${FILE_PATH}/demo.log</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${FILE_PATH}/demo.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxHistory>30</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy> <totalSizeCap>1GB</totalSizeCap>
</rollingPolicy> </appender> <root level="INFO">
<appender-ref ref="console" />
<appender-ref ref="rollingFile" />
</root>
</configuration>

输出的日志格式如下:

2020-06-02 15:05:14,903 INFO  [http-nio-18000-exec-1] com.example.demo.TestController - test log

二、FileBeat 配置文件

filebeat.inputs:

- type: log
enabled: true
paths:
- /project/logs/demo.log
multiline.pattern: ^(\d{4}|\d{2})\-(\d{2}|[a-zA-Z]{3})\-(\d{2}|\d{4})
multiline.negate: true
multiline.match: after output.logstash:
hosts: ["localhost:9909"]

三、Logstash 配置文件

input {
beats {
port => "9909"
}
} filter {
grok {
match => ["message", "%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{LOGLEVEL:level}%{SPACE}\[%{NOTSPACE:thread}\]%{SPACE}%{NOTSPACE:logger}%{SPACE}-%{SPACE}%{JAVALOGMESSAGE:msg}"]
} date {
match => ["timestamp", "yyyy-MM-dd HH:mm:ss,SSS"]
}
} output {
file {
path => "/project/logs/9909.1.log"
} elasticsearch {
hosts => ["localhost:9200"]
index => "spring-boot-log-demo-%{+yyyy.MM.dd}"
}
}

四、使用

启动 FileBeat,看到类似如下输出:

{
"@timestamp":"2020-06-02T07:05:14.903Z",
"level":"INFO",
"thread":"http-nio-18000-exec-1",
"host":{
"name":"localhost.localdomain"
},
"timestamp":"2020-06-02 15:05:14,903",
"logger":"com.example.demo.TestController",
"log":{
"offset":78483,
"file":{
"path":"/project/logs/demo.log"
}
},
"tags":[
"beats_input_codec_plain_applied"],
"@version":"1",
"ecs":{
"version":"1.5.0"
},
"message":"2020-06-02 15:05:14,903 INFO [http-nio-18000-exec-1] com.example.demo.TestController - test log",
"input":{
"type":"log"
},
"agent":{
"ephemeral_id":"64285633-8b79-4ae6-be6a-02fe5da31866",
"hostname":"localhost.localdomain",
"id":"c441fd1d-e158-4712-b3cf-1d2413920532",
"version":"7.7.0",
"type":"filebeat"
},
"msg":"test log"
}

上面的 log、message 等信息我们不需要,可以在配置中去掉,修改 Logstash 配置:

input {
beats {
port => "9909"
}
} filter {
grok {
match => ["message", "%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{LOGLEVEL:level}%{SPACE}\[%{NOTSPACE:thread}\]%{SPACE}%{NOTSPACE:logger}%{SPACE}-%{SPACE}%{JAVALOGMESSAGE:msg}"]
} date {
match => ["timestamp", "yyyy-MM-dd HH:mm:ss,SSS"]
} mutate {
remove_field => "log"
remove_field => "message"
}
} output {
file {
path => "/project/logs/9909.1.log"
} elasticsearch {
hosts => ["localhost:9200"]
index => "spring-boot-log-demo-%{+yyyy.MM.dd}"
}
}

修改后效果:

{
"@timestamp":"2020-06-02T07:40:46.112Z",
"level":"INFO",
"thread":"http-nio-18000-exec-9",
"host":{
"name":"localhost.localdomain"
},
"timestamp":"2020-06-02 15:40:46,112",
"logger":"com.example.demo.TestController",
"tags":[
"beats_input_codec_plain_applied"],
"@version":"1",
"ecs":{
"version":"1.5.0"
},
"input":{
"type":"log"
},
"agent":{
"ephemeral_id":"64285633-8b79-4ae6-be6a-02fe5da31866",
"version":"7.7.0",
"type":"filebeat",
"hostname":"localhost.localdomain",
"id":"c441fd1d-e158-4712-b3cf-1d2413920532"
},
"msg":"test log"
}

实际使用中发现 Logstash 启动的服务端口不能超过两个,不然会接收不到上传的信息

参考

  1. filebeat+redis+ELK收集Springboot的Logback日志

浅尝 Elastic Stack (四) Logstash + Beats 读取 Spring Boot 日志的更多相关文章

  1. 浅尝 Elastic Stack (五) Logstash + Beats + Kafka

    在 Elasticsearch.Kibana.Beats 安装 中讲到推荐架构: 本文基于 Logstash + Beats 读取 Spring Boot 日志 将其改为上述架构 如果没有安装 Kaf ...

  2. 浅尝 Elastic Stack (三) Logstash + Beats

    本文使用 Filebeat,如果没有安装需要安装: curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat- ...

  3. 浅尝 Elastic Stack (二) Logstash

    一.安装与启动 Logstash 依赖 Java 8 或者 Java 11,需要先安装 JDK 1.1 下载 curl -L -O https://artifacts.elastic.co/downl ...

  4. 浅尝 Elastic Stack (一) Elasticsearch、Kibana、Beats 安装

    Elastic Stack 包括 Elasticsearch.Kibana.Beats 和 Logstash,也称为 ELK Stack.能够安全可靠地获取任何来源.任何格式的数据,然后实时地对数据进 ...

  5. Elastic Stack之Logstash进阶

    Elastic Stack之Logstash进阶 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用GeoLite2和logstash 过滤插件的geoip案例 1>. ...

  6. SpringBoot 整合 Elastic Stack 最新版本(7.14.1)分布式日志解决方案,开源微服务全栈项目【有来商城】的日志落地实践

    一. 前言 日志对于一个程序的重要程度不用过多的言语修饰,本篇将以实战的方式讲述开源微服务全栈项目 有来商城 是如何整合当下主流日志解决方案 ELK +Filebeat . 话不多说,先看实现的效果图 ...

  7. 日志配置文件读取spring boot配置文件中的属性

    如果是读取 application.properties 这种spring boot的默认配置文件时 其中 scope固定为context  指明从上下文中获取, name 根据自己的意思给, sou ...

  8. 十四、Spring Boot 日志记录 SLF4J

    在开发中打印内容,使用 System.out.println() 和 Log4j 应当是人人皆知的方法了. 其实在开发中我们不建议使用 System.out 因为大量的使用 System.out 会增 ...

  9. Springboot 系列(四)Spring Boot 日志框架

    注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 Spring 框架选择使用了 JCL 作为默 ...

随机推荐

  1. Linux 环境下 C++ 的开发编译

    Linux环境下C++程序的开发编译学习笔记 环境:vmware 运行下的Ubuntu 16.04 姓名:谢津 时间:2018/5/24 内容:1)vim的安装及配置:2)第一个C++程序的编写与编译 ...

  2. 8. Prism导航

    1. 背景 导航是为了实现不同界面的切换,是一种组织系统功能的方式.提供两种导航,一是基于View切换,二是基于ViewModel状态. 2. 基于View切换的导航 最常用导航方式.在该种导航中首先 ...

  3. 02模板渲染和参数(补充:URL传参到视图)

    先抛出代码: @app.route('/') def index(): return render_template('index.html',username ="郑勇") 问题 ...

  4. spring boot实现超轻量级网关(反向代理、转发)

    在我们的rest服务中,需要暴露一个中间件的接口给用户,但是需要经过rest服务的认证,这是典型的网关使用场景.可以引入网关组件来搞定,但是引入zuul等中间件会增加系统复杂性,这里实现一个超轻量级的 ...

  5. Ceph部署mon出现0.0.0.0地址

    前言 最近在群里两次看到出现mon地址不对的问题,都是显示0.0.0.0:0地址,如下所示: [root@lab8106 ceph]# ceph -s cluster 3137d009-e41e-41 ...

  6. 推荐一个学习SQL Server基本语法及其他编程的网站

    菜鸟们的练习场 1.领先的 Web 技术教程 在 w3school,你可以找到你所需要的所有的网站建设教程. 从基础的 HTML 到 CSS,乃至进阶的XML.SQL.JS.PHP 和 ASP.NET ...

  7. 莫小安 Linux下Redis的安装与配置

    转载自--Linux下Redis的安装与配置 redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了 memcached的不足,它 ...

  8. MediaCodec编码OpenGL速度和清晰度均衡

      ## 概述 在安卓平台为了实现h264视频编码,我们通常可以使用libx264, ffmpeg等第三方视频编码库,但是如果对编码的速度有一定的要求,要实现实时甚至超实时的高速视频编码,我们并没有太 ...

  9. [原题复现]2019上海大学生WEB-Decade(无参数RCE、Fuzz)

    简介  原题复现:  考察知识点:无参数命令执行.Fuzz  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 环境复现 ...

  10. 网站实现微信扫码登录 php

    微信开放平台账号一个,必须是商户,不然你也开不了 1.在开放平台创建应用,并设置回调地址(域名即可) 2.生成二维码,前端代码,用户扫码后会给你的回调地址发送code <span id=&quo ...