如何使用Sentry 监控你的Spring Boot应用

Sentry是一个应用监控系统,可以用于前后端各种技术栈的线上监控和错误分析,这次我们用它来进行Spring Boot项目的线上日志分析实践。

创建项目

首先需要根据提示在Sentry中创建好项目,项目平台(platform)可以选择Spring Boot或者Java。

引入依赖&配置

Sentry提供了官方的Spring Boot Starter。

<dependency>
 <groupId>io.sentry</groupId>
 <artifactId>sentry-spring-boot-starter</artifactId>
 <version>3.1.1</version>
</dependency>

除此之外,我们还需要配置application.properties,将我们在Sentry中创建的项目密钥(DSN)导入:

sentry.dsn=https://key@host/id

第一个错误

编写我们的Controller,尝试抛出一个简单的异常。

@RestController
public class HelloController {

 @RequestMapping("/")
 public void test() {
  throw new IllegalArgumentException("hello world");
 }
}

如果之前的配置没有问题,那么我们就可以在Sentry的「Issue」面板上面看到这个异常信息。

点击这个异常即可查看详细信息。可以看到这个异常的一些基本信息,比如说「用户信息(这里未设置)」、「用户环境」、「标签(Tag)」、「调用栈跟踪(StackTrace)」、「日志片(Breadcrumbs)」、「请求Headers」,以及一些用户可以自定义的内容(叫做Context)。

这里要介绍一下Sentry中的一个概念,首先,在相同地方产生的异常会被归纳为一个「Issue」,每次在这个地方产生的异常叫做「Event」。所以在同一个地方触发两次异常,仍然只有一个Issue,但是可以在Event页面看到两个事件。

自定义用户信息

既然已经知道了这个异常,我们也是希望了解是哪位用户触发的异常。Sentry SDK提供了SentryUserProvider,可以用于异常时用户信息的提供,我们只需要配置一个Bean。

@Bean
  public SentryUserProvider sentryUserProvider(){
    return () -> {
      // 实际的用户信息,可能要通过其他方式获得
      User user = new User();
      user.setId("userId");
      user.setUsername("张三");
      user.setEmail("zhangsan@gmail.com");

      return user;
    };
  }

再次触发异常,我们得到了用户信息。

自定义Tag以便利用Tag筛选异常

随着异常信息的增多,我们希望能够筛选出一些特定的异常信息,Sentry提供了「标签(Tag)」功能,可以根据标签进行筛选。虽然自带的Tags已经够多,但是我们还是希望能够根据业务需求自定义一些,当然Sentry SDK提供了BeforeSendCallback,我们可以借此添加一些Tag。

@Bean
  public SentryOptions.BeforeSendCallback beforeSendCallback(){
    return (event, hint) -> {
      event.setTag("name","zhangsan");
      return event;
    };
  }

可以看到我们的Tag已经成功地添加了,点击这个Tag可以找到所有含有这个Tag的Event。

整合Logback

我们现有的Spring Boot业务中可能涵盖了异常处理,大部分异常可能直接作为一个日志的形式记录下来了。当然Sentry也提供了Logback/Log4j2这类日志框架的支持。只需要导入对应的依赖即可,我们这里使用Logback作为例子。

<dependency>
 <groupId>io.sentry</groupId>
 <artifactId>sentry-logback</artifactId>
 <version>3.1.1</version>
</dependency>

Sentry Spring Boot Starter会自动监测依赖并为我们配置好相应的配置,我们直接就可以用log代替原有的异常抛出了。

@RestController
public class HelloController {
  private static Logger logger = LoggerFactory.getLogger(HelloController.class);

  @RequestMapping("/")
  public void test(){
    logger.error("Logback error!");
  }
}

这里比较有意思的一点是,对于未处理的野异常,Sentry会给他一个fatal的等级,而引入Logback后,会采用logger的日志等级。

通过在配置文件中配置minimum-event-level和minimum-breadcrumb-level,我们可以指定哪些log级别会产生一次「Event」,哪些log级别会记录下一个「日志片(Breadcrumbs)」,注意前提是logger的级别低于或等于这个级别(否则也收集不到)。

sentry.logging.minimum-event-level=info
sentry.logging.minimum-breadcrumb-level=debug

自建Sentry

Sentry除了官方版以外,也可以自建自托管版本的Sentry。官方版存在用量限制,可能需要付费;自托管版没有用量限制,但是官方不提供技术支持。自建Sentry也非常简单,需要Docker和Docker Compose,硬件上需要至少2.4G空闲内存。

git clone https://github.com/getsentry/onpremise.git
cd onpremise
./install.sh

之后就可以在localhost:9000上看到自建的Sentry了,可以配合Nginx反向代理调整端口到80/443使用。

官方文档

本文仅介绍了一些常用的功能,有关Sentry的更多功能建议参考官方文档: docs.sentry.io

到此这篇关于如何使用Sentry 监控你的Spring Boot应用的文章就介绍到这了,更多相关Sentry 监控Spring Boot应用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • spring boot starter actuator(健康监控)配置和使用教程

    添加POM依赖: <!-- spring-boot-监控--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.bo

  • SpringBoot集成Zipkin实现分布式全链路监控

    Zipkin 简介 Zipkin is a distributed tracing system. It helps gather timing data needed to troubleshoot latency problems in service architectures. Features include both the collection and lookup of this data. If you have a trace ID in a log file, you ca

  • 详解使用spring boot admin监控spring cloud应用程序

    Spring Boot提供的监控接口,例如:/health./info等等,实际上除了之前提到的信息,还有其他信息业需要监控:当前处于活跃状态的会话数量.当前应用的并发数.延迟以及其他度量信息. 最近在找一个spring cloud的监控组件,要求粒度要到每一个接口的,hystrix dashboard显然不适合,也不是这个应用场景.后来发现了spring boot admin这个神器,可以注册到Eureka和spring cloud无缝整合,页面AngularJS写的还算凑合,里面包含有许多功

  • SpringBoot实现项目健康检查与监控

    Spring Boot 最主要的特性就是AutoConfig(自动配置),而对于我们这些使用者来说也就是各种starter, Spring Boot-Actuator 也提供了starter,为我们自动配置,在使用上我们只需要添加starter到我们的依赖中,然后启动项目即可. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-ac

  • 详解Spring boot Admin 使用eureka监控服务

    前言 最近刚好有空,来学习一下如何搭建spring boot admin环境.其中遇到很多的坑. 网上大多都是使用admin-url的方式直接来监控的,感觉一点也不灵活,这不是我想要的结果,所以本篇介绍借助eureka服务注册和发现功能来灵活监控程序. 本文主要记录spring boot admin的搭建过程,希望能有所帮助.其实非常的简单,不要被使用常规方式的误导! 环境介绍 IDE:intellij idea jdk: java8 maven:3.3.9 spring boot:1.5.6

  • 详解spring-boot actuator(监控)配置和使用

    在生产环境中,需要实时或定期监控服务的可用性.spring-boot 的actuator(监控)功能提供了很多监控所需的接口.简单的配置和使用如下: 1.引入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 如果使用http调用的

  • 详解Spring Boot Admin监控服务上下线邮件通知

    本文介绍了Spring Boot Admin监控服务上下线邮件通知,分享给大家,具体如下: 微服务架构下,服务的数量少则几十,多则上百,对服务的监控必不可少. 如果是以前的单体项目,启动了几个项目是固定的,可以通过第三方的监控工具对其进行监控,然后实时告警. 在微服务下,服务数量太多,并且可以随时扩展,这个时候第三方的监控功能就不适用了,我们可以通过Spring Boot Admin连接注册中心来查看服务状态,这个只能在页面查看. 很多时候更希望能够自动监控,通过邮件告警,某某服务下线了这样的功

  • 如何使用Sentry 监控你的Spring Boot应用

    Sentry是一个应用监控系统,可以用于前后端各种技术栈的线上监控和错误分析,这次我们用它来进行Spring Boot项目的线上日志分析实践. 创建项目 首先需要根据提示在Sentry中创建好项目,项目平台(platform)可以选择Spring Boot或者Java. 引入依赖&配置 Sentry提供了官方的Spring Boot Starter. <dependency> <groupId>io.sentry</groupId> <artifactId

  • springboot 使用Spring Boot Actuator监控应用小结

    微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了异常如何快速定位是哪个环节出现了问题? 在这种框架下,微服务的监控显得尤为重要.本文主要结合Spring Boot Actuator,跟大家一起分享微服务Spring Boot Actuator的常见用法,方便我们在日常中对我们的微服务进行监控治理. Actuator监控 Spring Boot使用"习惯优于配置的理念",采用包

  • 初识Spring boot监控

    最近对devOps这个话题有点兴趣,所以研究了一下monitor相关的开源项目,翻到medium上的一篇文章,而且实际项目中也曾看到devOps组的同事搭过类似的监控,就想过把瘾,了解一下监控可视化. 被监控服务配置 本地正好有spring-boot的项目,并且也依赖了jolokia(主要就是为了把JMX的mbean通过HTTP暴露出去) 项目配置也少不了 endpoints: enabled: true jmx: enabled: true jolokia: enabled: true man

  • Spring Boot应用监控的实战教程

    概述 Spring Boot 监控核心是 spring-boot-starter-actuator 依赖,增加依赖后, Spring Boot 会默认配置一些通用的监控,比如 jvm 监控.类加载.健康监控等. 我们之前讲过Docker容器的可视化监控,即监控容器的运行情况,包括 CPU使用率.内存占用.网络状况以及磁盘空间等等一系列信息.同样利用SpringBoot作为微服务单元的实例化技术选型时,我们不可避免的要面对的一个问题就是如何实时监控应用的运行状况数据,比如:健康度.运行指标.日志信

  • Spring Boot 项目做性能监控的操作流程

    Spring Boot特别适合团队构建各种可快速迭代的微服务,同时为了减少程序本身监控系统的开发量,Spring Boot 提供了 actuator 模块,可以很方便的对你的 Spring Boot 程序做监控. 1. actuator接口说明 Spring Boot 应用中加入监控很简单,只需要在pom.xml文件中加入以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifact

  • Spring Boot如何监控SQL运行情况?

    目录 前言 MYSQL监控慢SQL MySLQ如果需要监控慢SQL,需要在/ect/my.cnf文件中进行如下配置: 输出结果 Druid监控慢SQL 添加Druid依赖 Yml文件中配置Druid属性 监控页面 特殊说明 Prometheus+grafana实现SQL监控 结尾 前言 监控SQL是现在项目运维中必要的一部分,通过SQL监控我们能够明显的分析系统那些地方存在问题,从而有效的进行SQL优化,提升系统的性能.那么常见的SQL监控方式又那些呢? MYSQL监控慢SQL MySLQ如果需

  • 浅谈Java中Spring Boot的优势

    Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. Spring Boot 简化了基于 Spring 的应用开发,通过少量的代码就能创建一个独立的.产品级别的 Spring 应用. 作为一名 Java 程序员如果你已经厌恶了传统的开发模式,希望有一个全新的框架可以提供快速开发,简单集成的编程体验,强烈建议你学习了解 Spring Boot .

  • Java 程序员掌握 Spring Boot非常有必要

    Spring Boot从天而降 Spring Boot是企业级开发的整体整合解决方案,在现在企业项目开发中使用非常普遍,Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热潮,给企业开发带来了巨大的变革,可以说现在是Java程序员到了必须学习SpringBoot的时候. Spring已经足够好了? Spring框架真的太好了,任何一个java开发用过之后都会像上瘾一样,爱不释手.会在遇到新问题的时候,或者找到某一个方法的时候,都会去看一下spring是不是已经有同类

  • Spring Boot Actuator监控端点小结

    在Spring Boot的众多Starter POMs中有一个特殊的模块,它不同于其他模块那样大多用于开发业务功能或是连接一些其他外部资源.它完全是一个用于暴露自身信息的模块,所以很明显,它的主要作用是用于监控与管理,它就是:spring-boot-starter-actuator. spring-boot-starter-actuator模块的实现对于实施微服务的中小团队来说,可以有效地减少监控系统在采集应用指标时的开发量.当然,它也并不是万能的,有时候我们也需要对其做一些简单的扩展来帮助我们

  • Spring Boot使用Druid进行维度的统计和监控

    Druid Druid:一款为监控而生的数据库连接池框架,整个项目由数据库连接池.插件框架和SQL解析器组成. Druid功能介于PowerDrill和Dremel之间,它几乎实现了Dremel的所有功能,并且从PowerDrill吸收一些有趣的数据格式.Druid允许以类似Dremel和PowerDrill的方式进行单表查询,同时还增加了一些新特性,如为局部嵌套数据结构提供列式存储格式.为快速过滤做索引.实时摄取和查询.高容错的分布式体系架构等. Spring Boot spring框架作为J

随机推荐