这篇博客文章是由Julien Dubois(Microsoft)和Charlie Klein(Logz.io)共同撰写的,目的是让Spring Boot用户更好地理解使用Logz.io之类的日志提取和分析工具的好处 。
日志在经典Spring Boot应用程序中的工作方式
Spring Boot应用程序通常使用Logback( 官方文档 )或Log4J 2( 官方文档 )来管理应用程序日志。
通常根据每个项目或公司的使用情况来修改此配置,并且遵循“ 十二要素应用程序”一章中有关记录日志并将所有内容输出到控制台的惯例(也是一种好的做法)。
高级用户(例如使用JHipster )通常使用一些定制的Logback版本,该版本通常以三种不同的方式进行配置:
- 使用
src/main/resources/logback-spring.xml
文件。 例如,这是JHipster的默认配置: https : //github.com/jhipster/jhipster-sample-app/blob/master/src/main/resources/logback-spring.xml 。 - 在
logging.*
属性键下使用Spring Boot的配置文件。 在https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html上有记录,您还可以在JHipster的默认Spring Boot配置文件中找到一个示例进行开发: https://github.com/jhipster/jhipster-sample-app/blob/master/src/main/resources/config/application-dev.yml 。 - 在运行时,由于可以通过编程方式重新配置Logback。 例如,这是JHipster用户使用其自定义
LoggingConfiguration.java
文件或使用其日志管理屏幕时执行的操作。
配置日志很棒,但是一旦将日志发送到控制台,真正有趣的工作就开始了:您需要一个系统来汇总和分析日志! 在本文中,我们将使用Logz.io了解需要配置的内容,最重要的是,我们将从这种解决方案中获得什么好处。
将日志传送到Logz.io
将日志传送到Logz.io的第一步是将Logz.io依赖项添加到您的Maven pom.xml
文件中:
<dependency>
<groupId> io.logz.logback </groupId>
<artifactId> logzio-logback-appender </artifactId>
<version> 1.0.22 </version>
</dependency>
然后,您需要配置src/main/resources/logback-spring.xml
文件以使用此库:
<configuration>
<!-- Use shutdownHook so that we can close gracefully and finish the log drain -->
<shutdownHook class= "ch.qos.logback.core.hook.DelayingShutdownHook" />
<appender name= "LogzioLogbackAppender" class= "io.logz.logback.LogzioLogbackAppender" >
<token><your-logz-io-token></token>
<logzioUrl> https:// <your-logz-io-listener-host> :8071 </logzioUrl>
<logzioType> java-application </logzioType>
<filter class= "ch.qos.logback.classic.filter.ThresholdFilter" >
<level> INFO </level>
</filter>
</appender>
<root level= "debug" >
<appender-ref ref= "LogzioLogbackAppender" />
</root>
</configuration>
确保日志进入平台的一个好方法是在Logz.io平台中打开“ Live Tail”选项卡。 按下play后,您应该会在应用程序中看到日志流。 如果不这样做,请访问Logz.io日志传送故障排除页面 。
如果您想了解更多信息,则应该在https://docs.microsoft.com/zh-cn/azure/java/java-get-started-上阅读此更深入的教程(由Julien Dubois共同编写)。 with-logzio 。
使用Logz.io分析日志
将您的日志发送到Logz.io之后 ,有趣的部分开始了。
Logz.io提供ELK Stack和Grafana(世界上最流行的开源监视解决方案)作为一项完全托管的服务,因此工程师可以使用他们知道的开源,而无需自己构建或维护可伸缩的日志记录或度量标准管道。 用户可以查询和可视化其日志和指标,以监视生产问题,安全事件,用户活动以及更多用户案例。 在本节中,我们将重点介绍Logz.io的日志记录功能。
Logz.io用户在功能强大的Kibana版本(“ ELK堆栈”中的“ K”)上与日志进行交互,从而为工程师提供了广泛的灵活性,可将其日志数据切片和切块。 Logz.io用户受益于Kibana的完整功能以及其他高级分析功能,这些功能使Kibana更快,更集成且更易于使用。 以下教程将在上方工具栏的“ Kibana”选项卡中进行(框A)。
打开Kibana后,您可以查看您的环境生成的所有日志。 根据下面的查询(框B),“ service-10”在过去2天内生成了170万条日志。
显然,不可能对日志列表进行排序以识别生产问题或监视用户活动。 单击“模式”选项卡(方框C)将类似的日志组聚集在一起,因此您可以快速了解服务正在生成哪种日志数据,而无需滚动浏览整个日志列表。 对于每个模式,您可以查看时间,计数,比率(属于该模式的日志百分比)以及模式本身。
在日志模式中滚动,您可以通过单击每个模式右侧的“过滤出”或“过滤入”按钮来快速查询最重要的日志数据(框D)。 在这种情况下,当我们向下滚动时,会发现一个指示“ SSL库错误”的模式,这显然值得研究。
打开SSL错误模式后,我们可以看到它被标记为“ Cognitive Insight”。 Cognitive Insights利用AI在诸如StackOverflow和GitHub之类的在线讨论论坛上交叉引用传入的日志,以识别您环境中的关键日志事件。
此功能可帮助我们在大海捞针中找到针头。 打开“数据洞察”后,我们会看到有关事件的上下文信息以及指向讨论SSL错误的论坛的链接。
团队可以打开这些链接,以查看其他工程师如何解决该问题。
您可能想知道的有关此SSL错误的最后信息是它的起源。 换句话说,产生此问题的实际代码是什么? 要获取此信息,您可以转到右上角的“洞察”选项卡。
该图有助于我们将问题与特定部署相关联。 彩色线表示生产问题,灰色虚线表示最近的部署。 如您所见,直到12月4日下午3:20部署“更新人偶证书”之后,才出现由蓝点表示的SSL错误。 因此,我们可以得出结论,此部署导致SSL错误,因此可以快速解决。
借助Cognitive Insights和在部署时间表上绘制问题的功能,您可以通过向工程师显示问题的根本原因和根源来与他们联系,以结束循环。
自己看看吧!
除了上面探讨的功能之外,您还可以监视Grafana上的指标,构建自己的Kibana可视化,设置警报以及做更多的事情。
From: https://dev.to/azure/using-logz-io-to-make-logging-spring-boot-applications-easier-and-faster-4k7a