当前位置: 首页 > 知识库问答 >
问题:

Spring哨兵1。X根本不起作用

辛弘壮
2023-03-14

我们有一个Spring1.5.17应用程序,并试图简单地集成哨兵。因为这是Spring的旧版本(不可能升级),我们在这里遵循哨兵的Legacy SDK 1.7方向。这很简单。

这是pom。我们也使用其他spring库,如logging/actuator/jpa,但为了清晰起见,没有显示。都是相同的spring版本。

<dependency>
    <groupId>io.sentry</groupId>
    <artifactId>sentry-spring</artifactId>
    <version>1.7.30</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>1.5.17.RELEASE</version>
</dependency>

另外,增加了哨兵。属性文件位于src/main/resources下。

enabled=true
dsn=***
environment=uat
sample.rate=1.0
stacktrace.app.packages=com.pls
stacktrace.hidecommon=false

根据sentry docs创建了一个样板配置文件,覆盖了两个bean。

@Configuration
public class SentryConfig {

    @Bean
    public HandlerExceptionResolver sentryExceptionResolver() {
        return new io.sentry.spring.SentryExceptionResolver();
    }

    @Bean
    public ServletContextInitializer sentryServletContextInitializer() {
        return new io.sentry.spring.SentryServletContextInitializer();
    }
}

通过断点,我已经确认这些bean正在初始化,并且它们正在正确地从sentry.properties获取属性。一个相关的线程,我发现如果我手动使SentryClient.capture事件(事件)调用,然后事件显示在哨兵。这意味着哨兵客户端安装正确并正常工作,但Spring实际上从未调用过. captureEvents()

为了证实我的怀疑,我进入了SentryExceptionResolver bean,并确认代码从未到达这个断点。

我试图通过在@RestControllerie中抛出虚拟错误来触发断点。

@GET
@Path("/test")
public Object throwError(){
  LOGGER.error("ERROR BEING LOGGED");
  throw new RuntimeException("ERROR THROWN");
}

虽然此错误肯定会在控制台日志中抛出,但它不会触发。capture()codepath。

相关的线程提到了一些与日志模块有关的内容,但我不明白它们之间有什么关系sentry springdependency正在加载所有需要的应用程序,客户端正在初始化,只是从来没有真正调用过!!

无论如何,我尝试添加各种日志依赖项(例如,如本哨兵文档中所述的日志返回),但没有成功。我的配置可能缺少什么!?!?

如果有关系,我们会使用spring启动程序日志。。。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

请注意,当我添加哨兵登录依赖时,应用程序不会加载。

共有1个答案

韶浩博
2023-03-14

看起来您使用的是JAX-RS,而不是SpringMVC。没有现成的JAX-RS-Sentry集成。

要将异常转发给Sentry,还可以使用Sentry logbackintegration。您可以配置Logback将任何记录器错误转发给Sentry。没有Spring集成的缺点是错误没有使用HTTP请求的上下文信息进行修饰。

 类似资料:
  • 我的Redis Sentinel故障转移不起作用,当master完成时,不进行握手,故障转移也不发生;然而,sentinel会显示主程序何时恢复到正常状态或何时关闭。我的sentinel.conf文件内容如下: 我真的很感激你能帮上忙。

  • 主要内容:一、哨兵,二、源码分析,三、总结一、哨兵 Sentinel(哨兵),听名字大家都应该想得到这个家伙是做什么的。在redis的应用中,有单机模式、主从模式、哨兵模式和集群模式,其实你从它的发展就可以看出来,redis是从一个简单的应用开始,不断的壮大,从单点到分布式,从简单的主从备份以及初始的哨兵监控,再到可以看成把二者合成的集群模式,除了是应用场景的变化,更多的是为了提高安全性和高可用性。网上有很多人问哨兵和集群有啥不一样,其实

  • 我正试图使用两个redis节点设置哨兵。请找到内联的conf文件。 端口16371 dir“C:\程序文件\redis\16371\” loglevel通知 日志文件“C:\Program Files\redis\logs\16371.log” 哨兵监视器示例127.0.0.1 6371 *致命配置文件错误*读取配置文件,在第5行 有人能帮我把这个修好吗。蒂亚:)

  • 我一直在读有关Redis sentinel用于故障转移的文章。我计划有1主+1从,如果主倒下超过1分钟,把从变成主。我知道这在哨兵身上是百分之百可能的。 null 与1个哨兵相比,多个哨兵有什么好处?我的应用程序一次只能连接到1个哨兵,即使有2个哨兵,如果其中一个在应用程序层中出现复杂的逻辑,我的应用程序也不能在其中任何一个之间旋转或切换。

  • 每一个哨兵都可以连接到我的主人,并可以看到奴隶。它们能够独立地检测主从是否倒下。问题是哨兵们无法探测到对方。 我已经验证了每个哨兵都像预期的那样向通道发布消息,但似乎没有一个哨兵真正从其他哨兵通道接收消息。 我怎么让哨兵们见面?

  • Redis 哨兵(Sentinel)是 Redis 的高可用性(Hight Availability)解决方案:由一个或多个 Sentinel 实例组成的 Sentinel 系统可以监视任意多个主服务器,以及这些主服务器的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。 Sentinel