Spring Boot整合 Sentry 监控项目日志

简介:

Sentry Java版使用简介


基本概念


  • Sentry是什么?


Sentry 是一个开源的实时错误报告工具,支持 web 前后端、移动应用以及游戏,支持 Python、OC、Java、Go、Node、Django、RoR 等主流编程语言和框架 ,还提供了 GitHub、Slack、Trello 等常见开发工具的集成。


  • DSN(Data Source Name)


Sentry 服务支持多用户、多团队、多应用管理,每个应用都对应一个 PROJECTID,以及用于身份认证的 PUBLICKEY 和 SECRET_KEY。由此组成一个这样的 DSN:

'{PROTOCOL}://{PUBLICKEY}:{SECRETKEY}@{HOST}/{PATH}{PROJECT_ID}'


PROTOCOL 通常会是 http 或者 https,HOST 为 Sentry 服务的主机名和端口,PATH 通常为空。 为方便管理,每个应用生成一个 DSN。


使用 Sentry SDK


Sentry 的 SDK 通常在各语言的包管理器中成为 Raven,使用起来也非常简单。以 Java版本为例(使用SpringBoot框架):


1.首先项目中pom文件安装 Raven

 
 
  1.    <!--导入Sentry-->

  2.    <dependency>

  3.       <groupId>com.getsentry.raven</groupId>

  4.       <artifactId>raven-logback</artifactId>

  5.       <version>8.0.2</version>

  6.   </dependency>

2.在项目配置文件中建立logback.xml

 
 
  1. <configuration>

  2.    <!-- 彩色日志 -->

  3.    <!-- 彩色日志依赖的渲染类 -->

  4.    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>

  5.    <conversionRule conversionWord="wex"

  6.                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>

  7.    <conversionRule conversionWord="wEx"

  8.                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

  9.    <!-- 彩色日志格式 -->

  10.    <property name="CONSOLE_LOG_PATTERN"

  11.              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(--){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>/>

  12.    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">

  13.        <encoder>

  14.            <!--<pattern> %d{YYYY-MM-dd HH:mm:ss.SSS} [%-5level] -&#45;&#45; %logger{36} [%thread] \t- %msg%n%nopex</pattern>-->

  15.            <pattern>${CONSOLE_LOG_PATTERN}</pattern>

  16.        </encoder>

  17.    </appender>

  18.    <appender name="Sentry" class="com.getsentry.raven.logback.SentryAppender">

  19.        <!--每个项目生成不通的key-->

  20.        <dsn>http://d73b23c481654b9ca0e4e8a9db310169:daaf5dc2edef462690791ef324316738@sentry.boluome.com/7</dsn>

  21.        <!-- 设置拦截的最低级别为warn 警告-->

  22.        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">

  23.            <level>WARN</level>

  24.        </filter>

  25.    </appender>

  26.    <logger name="logback.SentryAppenderIT" level="INFO">

  27.        <appender-ref ref="Sentry"/>

  28.    </logger>

  29.    <root level="INFO">

  30.        <appender-ref ref="Console"/>

  31.        <appender-ref ref="Sentry"/>

  32.    </root>

  33. </configuration>


3.application.propertes中添加导入日志配置【主要要提前在pom文件中添加包含*.xml,否则会报错,not found file】

logging.config=classpath:logback.xml

4.接口层,正常使用logger等方法。Raven会自动把warn级别通过tcp发送到日志中心,并通知相关人员查看信息

 
 
  1.   @RequestMapping(value = "/testlog", method = RequestMethod.GET)

  2.    public void testLog() {

  3.        logger.info("test接口");//最低拦截级别为warn,所以info不会输出发送到日志中心

  4.        logger.error("error"); //会显示在日志中心,并邮件通知相关联系人

  5.    }

这样就可以使用 Raven 对象向 Sentry 服务器中提交日志信息了。

使用 Sentry web 服务

主要是登录后台查看,后续有时间更新此部分文档。开通账号可找虎大师。

附录

sentry 官方文档

 
 
  1. <?xml version="1.0" encoding="UTF-8" ?>

  2. <!-- scan="true"    当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->

  3. <!--  scanPeriod="30 seconds"   设置每30秒自动扫描,若没有指定具体单位则以milliseconds为标准(单位:milliseconds, seconds, minutes or hours)  -->

  4. <!-- debug="false"当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。-->

  5. <configuration scan="true" scanPeriod="30 seconds">

  6.    <!-- 上下文名称  -->

  7.    <contextName>test</contextName>

  8.    <!-- 存放日志文件路径 -->

  9.    <property name="Log_Home" value="mylogs/test"/>

  10.    <!-- ch.qos.logback.core.ConsoleAppender 控制台输出 -->

  11.    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

  12.        <encoder>

  13.            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->

  14.            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>

  15.        </encoder>

  16.    </appender>

  17.    <!-- DEBUG级别 -->

  18.    <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">

  19.        <!-- 级别过滤器 -->

  20.        <filter class="ch.qos.logback.classic.filter.LevelFilter">

  21.            <!-- 设置过滤级别 -->

  22.            <level>DEBUG</level>

  23.            <!-- 用于配置符合过滤条件的操作 -->

  24.            <onMatch>ACCEPT</onMatch>

  25.            <!-- 用于配置不符合过滤条件的操作 -->

  26.            <onMismatch>DENY</onMismatch>

  27.        </filter>

  28.        <Encoding>UTF-8</Encoding>

  29.        <File>${Log_Home}/debug/debug.log</File>

  30.        <!-- 根据时间来制定滚动策略 -->

  31.        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

  32.            <FileNamePattern>

  33.                ${Log_Home}/debug/debug.%d{yyyy-MM-dd}.%i.log

  34.            </FileNamePattern>

  35.            <!-- 多久后自动清楚旧的日志文件,单位:月 -->

  36.            <MaxHistory>1</MaxHistory>

  37.            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

  38.                <!-- 默认值是 10MB,文档最大值 -->

  39.                <MaxFileSize>2MB</MaxFileSize>

  40.            </TimeBasedFileNamingAndTriggeringPolicy>

  41.        </rollingPolicy>

  42.        <encoder>

  43.            <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>

  44.        </encoder>

  45.    </appender>

  46.    <!-- INFO级别 -->

  47.    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">

  48.        <!-- 级别过滤器 -->

  49.        <filter class="ch.qos.logback.classic.filter.LevelFilter">

  50.            <!-- 设置过滤级别 -->

  51.            <level>INFO</level>

  52.            <!-- 用于配置符合过滤条件的操作 -->

  53.            <onMatch>ACCEPT</onMatch>

  54.            <!-- 用于配置不符合过滤条件的操作 -->

  55.            <onMismatch>DENY</onMismatch>

  56.        </filter>

  57.        <Encoding>UTF-8</Encoding>

  58.        <File>${Log_Home}/info/info.log</File>

  59.        <!-- 根据时间来制定滚动策略 -->

  60.        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

  61.            <FileNamePattern>

  62.                ${Log_Home}/info/info.%d{yyyy-MM-dd}.%i.log

  63.            </FileNamePattern>

  64.            <!-- 多久后自动清楚旧的日志文件,单位:月 -->

  65.            <MaxHistory>1</MaxHistory>

  66.            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

  67.                <!-- 默认值是 10MB,文档最大值 -->

  68.                <MaxFileSize>2MB</MaxFileSize>

  69.            </TimeBasedFileNamingAndTriggeringPolicy>

  70.        </rollingPolicy>

  71.        <encoder>

  72.            <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>

  73.        </encoder>

  74.    </appender>

  75.    <!-- WARN级别 -->

  76.    <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">

  77.        <!-- 级别过滤器 -->

  78.        <filter class="ch.qos.logback.classic.filter.LevelFilter">

  79.            <!-- 设置过滤级别 -->

  80.            <level>WARN</level>

  81.            <!-- 用于配置符合过滤条件的操作 -->

  82.            <onMatch>ACCEPT</onMatch>

  83.            <!-- 用于配置不符合过滤条件的操作 -->

  84.            <onMismatch>DENY</onMismatch>

  85.        </filter>

  86.        <Encoding>UTF-8</Encoding>

  87.        <File>${Log_Home}/warn/warn.log</File>

  88.        <!-- 根据时间来制定滚动策略 -->

  89.        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

  90.            <FileNamePattern>

  91.                ${Log_Home}/warn/warn.%d{yyyy-MM-dd}.%i.log

  92.            </FileNamePattern>

  93.            <!-- 多久后自动清楚旧的日志文件,单位:月 -->

  94.            <MaxHistory>1</MaxHistory>

  95.            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

  96.                <!-- 默认值是 10MB,文档最大值 -->

  97.                <MaxFileSize>2MB</MaxFileSize>

  98.            </TimeBasedFileNamingAndTriggeringPolicy>

  99.        </rollingPolicy>

  100.        <encoder>

  101.            <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>

  102.        </encoder>

  103.    </appender>

  104.    <!-- ERROR级别 -->

  105.    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">

  106.        <!-- 级别过滤器 -->

  107.        <filter class="ch.qos.logback.classic.filter.LevelFilter">

  108.            <!-- 设置过滤级别 -->

  109.            <level>ERROR</level>

  110.            <!-- 用于配置符合过滤条件的操作 -->

  111.            <onMatch>ACCEPT</onMatch>

  112.            <!-- 用于配置不符合过滤条件的操作 -->

  113.            <onMismatch>DENY</onMismatch>

  114.        </filter>

  115.        <Encoding>UTF-8</Encoding>

  116.        <File>${Log_Home}/error/error.log</File>

  117.        <!-- 根据时间来制定滚动策略 -->

  118.        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

  119.            <FileNamePattern>

  120.                ${Log_Home}/error/error.%d{yyyy-MM-dd}.%i.log

  121.            </FileNamePattern>

  122.            <!-- 多久后自动清楚旧的日志文件,单位:月 -->

  123.            <MaxHistory>1</MaxHistory>

  124.            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

  125.                <!-- 默认值是 10MB,文档最大值 -->

  126.                <MaxFileSize>2MB</MaxFileSize>

  127.            </TimeBasedFileNamingAndTriggeringPolicy>

  128.        </rollingPolicy>

  129.        <encoder>

  130.            <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>

  131.        </encoder>

  132.    </appender>

  133.    <!-- 控制java下面包的打印,没设置等级,将继承上级root的等级 -->

  134.    <logger name="rattlesnake.callback"/>

  135.    <!-- 当前日志总级别为TRACE、DEBUG、INFO、 WARN、ERROR、ALL和 OF -->

  136.    <!-- the level of the root level is set to DEBUG by default.       -->

  137.    <root level="DEBUG">

  138.        <appender-ref ref="STDOUT"/>

  139.        <appender-ref ref="FILE_DEBUG"/>

  140.        <appender-ref ref="FILE_INFO"/>

  141.        <appender-ref ref="FILE_WARN"/>

  142.        <appender-ref ref="FILE_ERROR"/>

  143.    </root>

  144. </configuration>

-END-



原文发布时间为:2018-10-08
本文作者:lxchinesszz
本文来自云栖社区合作伙伴“程序猿DD”,了解相关信息可以关注“程序猿DD”。
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
8月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
770 1
日志收集和Spring 微服务监控的最佳实践
|
8月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1567 5
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
1426 0
|
10月前
|
机器学习/深度学习 XML Java
【spring boot logback】日志logback格式解析
在 Spring Boot 中,Logback 是默认的日志框架,它支持灵活的日志格式配置。通过配置 logback.xml 文件,可以定义日志的输出格式、日志级别、日志文件路径等。
1860 5
|
11月前
|
Prometheus 监控 Cloud Native
|
Java 应用服务中间件 Linux
Tomcat运行日志字符错乱/项目启动时控制台日志乱码问题
总结: 通过以上几种方法,概括如下:指定编码格式、设置JVM的文件编码、修改控制台输出编码、修正JSP页面编码和设置过滤器。遵循这些步骤,你可以依次排查和解决Tomcat运行日志字符错乱及项目启动时控制台日志乱码问题。希望这些建议能对你的问题提供有效的解决方案。
2198 16
|
11月前
|
Prometheus 监控 Cloud Native
Spring Boot 可视化监控
本文介绍了如何通过Spring Actuator、Micrometer、Prometheus和Grafana为Spring Boot应用程序添加监控功能。首先创建了一个Spring Boot应用,并配置了Spring Actuator以暴露健康状态和指标接口。接着,利用Micrometer收集应用性能数据,并通过Prometheus抓取这些数据进行存储。最后,使用Grafana将Prometheus中的数据可视化,展示在精美的仪表板上。整个过程简单易行,为Spring Boot应用提供了基本的监控能力,同时也为后续扩展更详细的监控指标奠定了基础。
1780 2
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
711 0
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
599 9