一、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. Socket创建简单服务器和客户端程序

    使用Socket编程创建简单服务器和客户端 要知道的 Socket-AddressFamily, SocketType, ProtocolType https://blog.csdn.net/weix ...

  2. Stimulsoft Reports和Dashboards发布新版本2020.5具有多项改进

    Stimulsoft仪表工具实现所需的数据可视化和自己的信息图表.该产品能够应用必要的过滤器和排序,汇总数据,执行任何复杂度的计算.该产品的优势在于其多功能性-能够为您的业务,财务,销售,行业等任何领 ...

  3. 【新阁教育】穷学上位机系列——搭建STEP7仿真环境

    经常有学员问我,学习上位机要不要买PLC硬件? 我一般的回答是:富则自行购买,穷则搭建仿真. PLC硬件,对于学习上位机来说,是锦上添花的事,经济条件允许,有则更好,条件不允许,我们也可以通过搭建仿真 ...

  4. 不能再被问住了!ReentrantLock 源码、画图一起看一看!

    前言 在阅读完 JUC 包下的 AQS 源码之后,其中有很多疑问,最大的疑问就是 state 究竟是什么含义?并且 AQS 主要定义了队列的出入,但是获取资源.释放资源都是交给子类实现的,那子类是怎么 ...

  5. 快速傅里叶变换(FFT)学习笔记(其二)(NTT)

    再探快速傅里叶变换(FFT)学习笔记(其二)(NTT) 目录 再探快速傅里叶变换(FFT)学习笔记(其二)(NTT) 写在前面 一些约定 前置知识 同余类和剩余系 欧拉定理 阶 原根 求原根 NTT ...

  6. Ubuntu17.10 React Native 环境搭建

    React Native 环境搭建 环境:ubuntu17.10 安装依赖 必须安装的依赖有:Node.React Native 命令行工具以及 JDK 和 Andriod Studio. 安装nod ...

  7. AMA指标原作者Perry Kaufman 100+套交易策略源码分享

    更多精彩内容,欢迎关注公众号:数量技术宅.想要获取本期分享的完整策略代码,请加技术宅微信:sljsz01 AMA技术指标与原作者 Kaufman 说起 Perry Kaufman 这个名字,不少读者会 ...

  8. 使用bootstrap fileinput多文件拖拽上传的记录

    今天琢磨文件上传,刚好看到bootstrap 我就搜了一下,刚刚能满足需求,使用上手也很快,使用完还是记录下来. 1.首先我们下载插件包,可以用nuget搜索bootstrap-fileinput 也 ...

  9. 数据采集与融合第四次作业:多线程以及scrapy框架的使用

    数据采集第四次作业:多线程以及scrapy框架的使用 任务一:单多线程的使用 单线程代码: from bs4 import BeautifulSoup from bs4 import UnicodeD ...

  10. 【JVM第三篇--运行时数据区】程序计数器、虚拟机栈、本地方法栈

    写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.运行时数据区 我们在编写Java程序时,使用JVM的流程主要如下所示: 虚拟机在 ...