配置spring项目输出json到logstash或者使用filebeat收集上传到elk

     2022-03-20     289

关键词:

一、使用LogStash

在项目中添加Gradle依赖,然后Sync项目:

"net.logstash.logback:logstash-logback-encoder:4.11",

或者使用Maven:

<!-- https://mvnrepository.com/artifact/net.logstash.logback/logstash-logback-encoder -->
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>4.11</version>
</dependency>

然后添加配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <contextName>${HOSTNAME}</contextName>
  <property name="LOG_PATH" value="/var/log" />
  <springProperty scope="context" name="appName" source="spring.application.name" />
  <springProperty scope="context" name="ip" source="spring.cloud.client.ipAddress" />
  <property name="CONSOLE_LOG_PATTERN"
            value="[%d{yyyy-MM-dd HH:mm:ss.SSS} ${ip} ${appName} %highlight(%-5level) %yellow(%X{X-B3-TraceId}),%green(%X{X-B3-SpanId}),%blue(%X{X-B3-ParentSpanId}) %yellow(%thread) %green(%logger) %msg%n"/>

  <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>../${LOG_PATH}/${appName}/${appName}-error.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>../${LOG_PATH}/${appName}/${appName}-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>2MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <append>true</append>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <pattern>${CONSOLE_LOG_PATTERN}</pattern>
      <charset>utf-8</charset>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>error</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>

  <appender name="FILEWARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>../${LOG_PATH}/${appName}/${appName}-warn.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>../${LOG_PATH}/${appName}/${appName}-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>2MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <append>true</append>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <pattern>${CONSOLE_LOG_PATTERN}</pattern>
      <charset>utf-8</charset>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>warn</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>

  <appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>../${LOG_PATH}/${appName}/${appName}-info.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>../${LOG_PATH}/${appName}/${appName}-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>2MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <append>true</append>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <pattern>${CONSOLE_LOG_PATTERN}</pattern>
      <charset>utf-8</charset>
    </encoder>

    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>info</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>

  <appender name="logstash" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>../${LOG_PATH}/${appName}/${appName}.json</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOG_PATH}/${appName}/${appName}-%d{yyyy-MM-dd}.json</fileNamePattern>
      <maxHistory>7</maxHistory>
    </rollingPolicy>
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
      <providers>
        <timestamp>
          <timeZone>UTC</timeZone>
        </timestamp>
        <pattern>
          <pattern>
            {
            "ip": "${ip}",
            "app": "${appName}",
            "level": "%level",
            "trace": "%X{X-B3-TraceId:-}",
            "span": "%X{X-B3-SpanId:-}",
            "parent": "%X{X-B3-ParentSpanId:-}",
            "thread": "%thread",
            "class": "%logger{40}",
            "message": "%message",
            "stack_trace": "%exception{10}"
            }
          </pattern>
        </pattern>
      </providers>
    </encoder>
  </appender>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>${CONSOLE_LOG_PATTERN}</pattern>
      <charset>utf-8</charset>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>debug</level>
    </filter>
  </appender>

  <logger name="org.springframework" level="INFO" />
  <logger name="org.hibernate" level="INFO" />
  <logger name="com.kingboy.repository" level="DEBUG" />

  <root level="INFO">
    <appender-ref ref="FILEERROR" />
    <appender-ref ref="FILEWARN" />
    <appender-ref ref="FILEINFO" />
    <appender-ref ref="logstash" />
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

在上面的配置文件中:

  • LOG_PATH主要配置日志输出目录,在后面使用LOG_PATH进行路径拼接
  • 两个springProperty用于配置使用TCP Socket方式读取日志的IPv4地址和Port号
  • CONSOLE_LOG_PATTERN用于配置日志格式
  • FILEERROR用于配置日志器实现滚动输出
  • rollingPolicy的XML配置块指定了如何切分文件的策略

LogStash需要安装一个插件:

bin/plugin install logstash-codec-json_lines

参考:https://github.com/logstash/logstash-logback-encoder

二、使用FileBeat

有些公司的日志架构可能是通过各种Beats收集然后通过LogStash过滤后写入Kafka再写入ElasticSearch中的,因此不需要整合logstash-logback-endcoder,那么你只需要整合一个配置类即可:

@Configuration
public class WebApplicationConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        super.configureMessageConverters(converters);
        // 1. 需要定义一个convert转换消息的对象;
        FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
        // 2. 添加FastJson的配置信息,比如:是否要格式化返回的json数据;
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,
                                      SerializerFeature.WriteMapNullValue,
                                      SerializerFeature.WriteNullStringAsEmpty,
                                      SerializerFeature.DisableCircularReferenceDetect,
                                      SerializerFeature.WriteNullListAsEmpty);
        // 3. 处理中文乱码问题
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        // 4. 在convert中添加配置信息.
        fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
        fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
        // 5. 将convert添加到converters当中.
        converters.add(fastJsonHttpMessageConverter);
    }
}

logstash数据处理服务的输出插件output配置参数详解(代码片段)

Logstash数据处理服务的输出插件Output配置参数详解1.将日志数据存储到Elasticsearch集群output配置字段是将收集的日志数据存输出到生存储中,一般都是elasticsearch集群。常用字段配置:hostsES集群每个节点的地址信息。index:指定存储... 查看详情

logstash解析日志实例

配置Filebeat输出到LogstashLogstash中配置Filebeat输入使用GrokFilter插件解析日志使用Geoip插件丰富数据将数据索引到Elasticsearch多个输入输出插件配置介绍来自为知笔记(Wiz) 查看详情

elk-logstash时区问题

参考技术A使用版本:elk6.0配置文件:logstash.confg问题:如图14号的数据,结果采集到了15号,慢了8小时,希望得到的结果,是凌晨0点索引自动切换原因:原来Logstash用的UTC时间,logstash在按每天输出到elasticsearch时,因为时区使用utc,造... 查看详情

elk上手3logback接入logstash(代码片段)

ELK上手3logback接入logstash一、准备工作二、Logstash配置三、Logback设置1.pom.xml引用2.logback-spring.xml设置四、kibana查看日志1.设置索引2.查看日志一、准备工作已安装Elasticsearch已安装logstashJava开发环境二、Logstash配置在Logstash的config目录... 查看详情

日志分析系统elk之logstash(代码片段)

Logstash什么是ELKLogstash简介Logstash组成1、输入2、过滤器(可选)3、输出Logstash安装与配置通过命令行运行Logstash参数-e参数-f日志输出到文件日志上传到elasticsearchLogstash伪装为日志服务器grok过滤插件分割命令行的信息输出... 查看详情

docker安装elk收集springboot日志(方法1)

参考技术A1、logstash中安装json_lines插件并重启logstash2、在SpringBoot项目pom.xml文件中添加logstash-logback-encoder依赖3、logback.xml文件添加配置,让logback的日志输出到logstash4、启动springboot应用5、使用kibana查看日志信息 查看详情

centos7安装logstash(代码片段)

CentOS7安装LogstashLogstash工作原理安装Logstash下载解压修改配置文件验证配置文件设置数据源日志输出启动Logstash输出日志到ElasticsearchLogstash收集Nginx日志验证配置文件配置Nginx日志启动LogstashLogstash工作原理Logstash使用管道方式进行... 查看详情

logstash监听logback输出日志并存储到es(代码片段)

...https://blog.csdn.net/weixin_43944305/article/details/118469227然后部署logstash下载https://www.elastic.co/cn/downloads/past-releases#logstash解压tar-zxvflogstash-6.3.0.tar.gz-C~/app/mvlogstash-6.3.0logstash改下jvm配置,自己的小服务器吃不消/home/ubuntu/app/logstash/config/... 查看详情

logstashoutput(二)kafka

参考技术AKafka也是Logstash的常用输出之一,一般拿来作数据的中转。常规的Kafka输出配置文件如下所示:logstash-out-kafka的其他配置还包括:logstash-kafka插件输入和输出默认codec为json格式。在输入和输出的时候注意下编码格式。消息... 查看详情

elk日志分析平台之logstash数据采集(代码片段)

目录logstash简介数据采集三要素:输入,过滤和输出一Logstash安装与配置二Logstash的输入输出1命令行方式:标准输入到标准输出2conf文件方式:标准输入,输出到文件3conf文件方式:标准输入,输出到ES和... 查看详情

elk日志分析平台之logstash数据采集(代码片段)

目录logstash简介数据采集三要素:输入,过滤和输出一Logstash安装与配置二Logstash的输入输出1命令行方式:标准输入到标准输出2conf文件方式:标准输入,输出到文件3conf文件方式:标准输入,输出到ES和... 查看详情

logstashcodec详解

...如上面的例子中的timestamp、type等都不会带过来。有时候logstash采集的日志是JSON格式,那我们可以在input字段加入codec=>json来进行解析,这样就可以根据具体内容生成字段,方便分析和储存。如果想让logstash输出为json格式,可以... 查看详情

使用 filebeat 和 logstash 将 syslog 转换为 json

】使用filebeat和logstash将syslog转换为json【英文标题】:convertsyslogtojsonwithfilebeatandlogstash【发布时间】:2017-04-1211:39:38【问题描述】:filebeat是否有可能将日志作为syslog接收并将它们作为json输出到logstash,这样我就不需要解析每种... 查看详情

elk日志平台----解耦配置文件

...配置文件,配置输入输出,实例;第二个:shipper.conf配置logstash收集日志内容到redis里;第三个:indexer.conf配置logstash从redis里读取日志内容输出到Elasticsearch里。第二个跟第三个配置解耦收集日志ELK解耦logstash---------->redis---------... 查看详情

logstash安装和使用(代码片段)

下载地址https://artifacts.elastic.co/downloads/logstash/logstash-5.6.8.zip下载后解压,测试#将键盘内容输出到控制台logstash-e‘inputstdinoutputstdout‘ 从文件中读取配置,然后连接mysql然后输出到es新建mysqletc文件夹 inputjdbcjdbc_dr 查看详情

如何使用logstash(代码片段)

目录一、什么是Logstash二、如何安装三、快速使用四、Input输入插件五、codec编码插件六、filter过滤器插件七、output输出插件八、总结一、什么是LogstashLogstash是一个日志收集器,可以理解为一个管道,或者中间件。功能是从定义... 查看详情

logstash:多个配置文件(conf)(代码片段)

Logstash:多个配置文件(conf)对于多个配置的处理方法,有多个处理方法:多个pipeline一个pipleline处理多个配置文件一个pipeline含有一个逻辑的数据流,它从input接收数据,并把它们传入到队列里,经过worker的处理,最后输出到out... 查看详情

使用filebeat替换logstash

参考技术Alogstash功能虽然强大,但是基于ruby的配置语法、依赖jdk、消耗系统资源等弊端,使得考虑其他方式来替换logstash,filebeat则是一个完美的替代者配置解释:filebeat.prospectors:定义数据原型input_type:log,指定数据原型为log类... 查看详情