logback 集成 logstash

这篇具有很好参考价值的文章主要介绍了logback 集成 logstash。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

logback 集成 logstash

相关环境参考: Java 输出 JSON 日志

1. 添加依赖

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>7.2</version>
</dependency>

2. 修改logback.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- scan=true 支持动态更新配置文件,默认1分钟刷新一次,可以通过 scanPeriod="30 seconds" 指定刷新周期 -->
<configuration scan="true">
  <!-- in the absence of the class attribute, assume ch.qos.logback.core.hook.ShutdownHook -->
  <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook">
    <delay>5 seconds</delay>
  </shutdownHook>

  <!-- 控制台输出 -->
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] - %-5level %logger:%L - %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <!-- logstash tcp 服务器地址,可以配置多个地址 -->
    <destination>172.30.225.232:5000</destination>
    <!-- 保持连接 -->
    <keepAliveDuration>5 minutes</keepAliveDuration>
    <!-- 连接超时等待时间 -->
    <connectionTimeout>5 seconds</connectionTimeout>
    <!-- 重连延迟,默认 30s -->
    <reconnectionDelay>30 second</reconnectionDelay>
    <!-- 等待策略,需要测试和监控CPU找到最佳配置 -->
    <!-- 文档: https://github.com/logfellow/logstash-logback-encoder#wait-strategy -->
    <waitStrategyType>sleeping</waitStrategyType>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder">
      <customFields>{"host":"${HOSTNAME}", "appname":"cloud-user"}</customFields>
    </encoder>
  </appender>

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

</configuration>

3. 配置说明

如果原有配置文件中需要保留一些特殊配置时,需要理解这里的配置才能将配置应用到已有的配置中。

3.1 动态刷新

想要在应用运行时看到修改配置文件后的效果,可以在原有配置添加:

<!-- scan=true 支持动态更新配置文件,默认1分钟刷新一次,可以通过 scanPeriod="30 seconds" 指定刷新周期 -->
<configuration scan="true">

3.2 优雅关机

增加logstash配置后,为了让程序在关闭时能正确关闭相关的资源,建议配置:

<shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook">
    <delay>5 seconds</delay>
</shutdownHook>

服务会等待5秒后执行释放资源的相关操作。

3.3 logstash appender

添加下面的配置,各部分说明看下面注释:

<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <!-- logstash tcp 服务器地址,可以配置多个地址 -->
    <destination>IP:5000</destination>
    <!-- 保持连接 -->
    <keepAliveDuration>5 minutes</keepAliveDuration>
    <!-- 连接超时等待时间 -->
    <connectionTimeout>5 seconds</connectionTimeout>
    <!-- 重连延迟,默认 30s -->
    <reconnectionDelay>30 second</reconnectionDelay>
    <!-- 等待策略,需要测试和监控CPU找到最佳配置 -->
    <!-- 文档: https://github.com/logfellow/logstash-logback-encoder#wait-strategy -->
    <waitStrategyType>sleeping</waitStrategyType>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder">
        <customFields>{"host":"${HOSTNAME}", "appname":"cloud-user"}</customFields>
    </encoder>
</appender>

这里特别说明 <customFields>{"host":"${HOSTNAME}", "appname":"cloud-user"}</customFields>

  • host 会在 json 中添加主机信息,以后有类似 POD 相关信息时,可以参考这里使用环境变量。
  • appname 定义当前的应用名,这里配置死的,后续使用容器或者POD时,也可以通过环境变量进行设置。

除此之外,还可以添加额外的自定义字段。

3.4 应用 appender

将 logstash appender 添加到某个 logger 下面,例如全局的:

<root level="INFO">
    <appender-ref ref="logstash"/>
    <!-- 其他 appender -->
</root>

3.5 总结

到这里可以看到,上面提供的完整配置中,没有介绍常见的 控制台输出,其他都是必要的配置。

配置正常后,就可以将日志以 JSON 形式输出到 logstash 中了,logstash 可以参考下面的配置,提供 tcp 端口的服务:

input {
    tcp {
        port => 5000
        codec => json_lines
    }
}

output {
  elasticsearch {
     hosts => ["elasticsearch:9200"]
     index => "app-%{[appname]}-%{+YYYY.MM.dd}"
  }
  stdout {
  }
}

elasticsearch 插件文档:https://www.elastic.co/guide/en/logstash/8.5/plugins-outputs-elasticsearch.html

上面的配置会为每个 appname 创建对应的索引,在 Kibana 中的 DavaView 可以配置 app* 索引来查看所有应用的日志。

4. 代码中使用

默认情况下,代码中仍然通过 logger.info(...) 方式输出日志即可,日志的内容会作为 message 字段存储。

如果想要额外记录其他信息,全局的信息可以通过 slf4j 的 MDC 机制记录,如下:

//记住用slf4j,不要依赖具体的实现
//import org.slf4j.MDC;
MDC.put("xxx", "xxx");
logger.info(....);
MDC.remove("XXX");

MDC信息和线程绑定,处理不好可能会乱,logstash-logback-encoder 提供了 StructuredArguments,参考文档:

https://github.com/logfellow/logstash-logback-encoder#event-specific-custom-fields

由于这种方式依赖了具体的日志实现,需要做一层封装才适合使用。

5. Kibana 效果

5.1 索引

logback logstash,运维,JAVA编程,logback,elasticsearch,大数据

5.2 Data Views

logback logstash,运维,JAVA编程,logback,elasticsearch,大数据

5.3 Discover

logback logstash,运维,JAVA编程,logback,elasticsearch,大数据

logback logstash,运维,JAVA编程,logback,elasticsearch,大数据
对应的 JSON:文章来源地址https://www.toymoban.com/news/detail-791320.html

{
  "_index": "app-cloud-user-2022.11.26",
  "_id": "qbYdsoQBuYtdaHhXAY0t",
  "_version": 1,
  "_score": 0,
  "_source": {
    "message": "hello indexStr=201, 2022-11-26T04:05:55.852Z",
    "@version": "1",
    "appname": "cloud-user",
    "host": "liuzh-pc",
    "level_value": 20000,
    "config": {
      "date": "2022-11-26 12:05:55",
      "uuid": "dd0cedcc-82e4-4783-8bcc-09c32b2fd051"
    },
    "thread_name": "Thread-9",
    "level": "INFO",
    "dateStr": "2022-11-26T04:05:55.852Z",
    "logger_name": "com.example.springbootjsonlog.SpringBootJsonLogApplication",
    "@timestamp": "2022-11-26T04:05:55.852Z",
    "HOSTNAME": "liuzh-pc",
    "indexStr": "201"
  },
  "fields": {
    "config.date": [
      "2022-11-26 12:05:55"
    ],
    "indexStr": [
      "201"
    ],
    "appname.keyword": [
      "cloud-user"
    ],
    "config.date.keyword": [
      "2022-11-26 12:05:55"
    ],
    "appname": [
      "cloud-user"
    ],
    "host": [
      "liuzh-pc"
    ],
    "@version": [
      "1"
    ],
    "logger_name": [
      "com.example.springbootjsonlog.SpringBootJsonLogApplication"
    ],
    "host.keyword": [
      "liuzh-pc"
    ],
    "logger_name.keyword": [
      "com.example.springbootjsonlog.SpringBootJsonLogApplication"
    ],
    "config.uuid.keyword": [
      "dd0cedcc-82e4-4783-8bcc-09c32b2fd051"
    ],
    "thread_name.keyword": [
      "Thread-9"
    ],
    "dateStr": [
      "2022-11-26T04:05:55.852Z"
    ],
    "level": [
      "INFO"
    ],
    "HOSTNAME.keyword": [
      "liuzh-pc"
    ],
    "@version.keyword": [
      "1"
    ],
    "message": [
      "hello indexStr=201, 2022-11-26T04:05:55.852Z"
    ],
    "@timestamp": [
      "2022-11-26T04:05:55.852Z"
    ],
    "HOSTNAME": [
      "liuzh-pc"
    ],
    "level.keyword": [
      "INFO"
    ],
    "level_value": [
      20000
    ],
    "thread_name": [
      "Thread-9"
    ],
    "message.keyword": [
      "hello indexStr=201, 2022-11-26T04:05:55.852Z"
    ],
    "indexStr.keyword": [
      "201"
    ],
    "config.uuid": [
      "dd0cedcc-82e4-4783-8bcc-09c32b2fd051"
    ]
  }
}

到了这里,关于logback 集成 logstash的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Logstash Logback Encoder实现ELK日志归集

    搭建SpringCloud平台日志归集方案,主要使用Logstash Logback Encoder组件实现。 主要分为运维相关的配置和开发相关的配置,具体分类无需纠结,都了解一遍即可。 不足之处,各位大神指出,感谢~ Elasticsearch配置 新建Index Templates,Mapping参考值如下,具体参考值可参考 Logstash Logba

    2024年02月11日
    浏览(55)
  • docker搭建elk环境并实现logstash监听logback,亲测有效!!!

    原因:线上日志太多且没有长期保存,导致问题发现晚点就找不到日志了,当然可以更改日志保存时间,但是还有个问题就是不好查询,需要根据时间去查找到底查询哪个日志文件,于是想到了用elk收集日志,这样就好查询了。 简单了解了一下elk是什么,首先elk是三个中间件

    2024年01月17日
    浏览(77)
  • springboot集成logback

    1、引入maven依赖 2、再resource下面新建一个文件名称为 logback-spring.xml 3、logback详解

    2024年02月10日
    浏览(23)
  • springboot集成Logback 日志写入数据库

    引入maven依赖 注意:springboot内部是有Logback的包,但是本人使用的时候缺少部分类文件,因此单独映入了一次 建表 logback有三张表logging_event、logging_event_exception、logging_event_property,不需要自己创建,只需要在如下位置找到自己保存的库表生成sql复制运行即可. 添加配置文件(logback-sp

    2024年02月07日
    浏览(51)
  • 如何基于运维事件中心通过 logstash 进行日志关键字监控

    日常运维过程中,很多场景都需要对日志进行监测,以便第一时间发现应用/业务相关异常,这是一种比较常见的监控需求,所以也有很多方法可以实现告警。对于简单的告警可以通过一些传统的监控工具实现,但对于体量和业务是非常复杂的中大型企业来说,在

    2024年02月20日
    浏览(37)
  • Elasticsearch 介绍及java集成

    ElasticSearch 是分布式实时搜索、实时分析、实时存储引擎,简称(ES), 成立于2012年,是一家来自荷兰的、开源的大数据搜索、分析服务提供商,为企业提供实时搜索、数据分析服务,支持PB级的大数据。 基于Apache Lucene 开源搜索引擎,Lucene是目前公认的性能最好,最先进的,

    2024年02月16日
    浏览(37)
  • Logback日志框架使用详解以及如何Springboot快速集成

      日志系统是用于记录程序的运行过程中产生的运行信息、异常信息等,一般有8个级别,从低到高为All Trace Debug Info Warn Error Fatal OFF off 最高等级,用于关闭所有日志记录 fatal 指出每个严重的错误事件将会导致应用程序的退出。 error 指出虽然发生错误事件,但仍然不影响系统

    2024年02月07日
    浏览(41)
  • Elasticsearch与Java的集成与使用

    Elasticsearch是一个基于Lucene的搜索引擎,它具有实时搜索、分布式、可扩展和高性能等特点。Java是一种广泛使用的编程语言,它与Elasticsearch之间的集成和使用是非常重要的。本文将从以下几个方面进行阐述: 核心概念与联系 核心算法原理和具体操作步骤 数学模型公式详细讲

    2024年02月19日
    浏览(46)
  • 【java_wxid项目】【第十三章】【Elasticsearch集成】

    主项目链接:https://gitee.com/java_wxid/java_wxid 项目架构及博文总结: 点击:【使用Spring Boot快速构建应用】 点击:【使用Spring Cloud Open Feign基于动态代理动态构造请求实现与其他系统进行交互】 点击:【使用Spring Cloud Hystrix实现服务容错、熔断、降级、监控】 点击:【使用Spr

    2023年04月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包