Java集成Sentry之配置(二)

10、Event Sampling

Sentry可以配置为使用sample.rate选项对事件进行采样:

sample.rate=0.75

此选项采用0.0到1.0之间的数字,表示允许通过服务器的事件百分比(从0%到100%)。默认情况下,所有事件都将发送到Sentry服务器。

11、Uncaught Exception Handler

默认情况下,配置UncaughtExceptionHandler将尝试向Sentry发送异常。要禁用它,请使用uncaught.handler.enabled选项。请注意,默认情况下异常是异步发送的,并且无法保证在JVM退出之前它们将被发送。此选项最好与下面描述的磁盘缓冲系统一起使用。

uncaught.handler.enabled=false

12、Buffering Events to Disk

Sentry可以配置为只要与Sentry服务器的通信失败并使用buffer.dir选项,就可以将事件写入磁盘上的指定目录。如果该目录不存在,Sentry将尝试在启动时创建它,因此可能需要父目录的写权限。 Sentry始终要求对缓冲区目录本身具有写入权限。如果使用AndroidSentryClientFactory,则默认启用此选项。

buffer.dir=sentry-events

将存储在磁盘上的最大事件数默认为10,但也可以使用选项buffer.size进行配置:

buffer.size=100

如果提供了缓冲区目录,后台线程将定期尝试重新发送在磁盘上找到的事件。默认情况下,它将尝试每60秒发送一次事件。您可以使用buffer.flushtime选项(以毫秒为单位)更改此设置:

buffer.flushtime=10000

13、Graceful Shutdown of Buffering (Advanced)

为了正常关闭缓冲区刷新线程,将创建ShutdownHook。默认情况下,缓冲区刷新线程有1秒钟正常关闭,但可以通过buffer.shutdowntimeout(以毫秒为单位)调整:

buffer.shutdowntimeout=5000

特殊值-1可用于禁用超时并无限期地等待执行程序终止。

在Sentry的生命周期与JVM的生命周期不匹配的环境中,ShutdownHook可能导致内存泄漏。

一个例子是在JEE环境中,可以定期部署和取消部署使用Sentry的应用程序。

要避免此行为,可以通过设置buffer.gracefulshutdown选项来禁用正常关闭:

buffer.gracefulshutdown=false

14、Async Connection

为了避免由于生成大量日志或与Sentry服务器的连接速度缓慢而导致的性能问题,建立了异步连接,使用低优先级线程池向Sentry提交事件。

要禁用异步模式,请在选项中添加async = false:

async=false

15、Graceful Shutdown of Async (Advanced)

为了正常关闭异步连接,将创建ShutdownHook。默认情况下,异步连接被给予1秒以正常关闭,但这可以通过async.shutdowntimeout(以毫秒表示)来调整:

async.shutdowntimeout=5000

特殊值-1可用于禁用超时并无限期地等待执行程序终止。

在Sentry的生命周期与JVM的生命周期不匹配的环境中,ShutdownHook可能导致内存泄漏。

一个例子是在JEE环境中,可以定期部署和取消部署使用Sentry的应用程序。

要避免此行为,可以禁用正常关闭。如果日志应用程序没有很好地关闭SentryClient实例,这可能会导致某些日志条目丢失。

执行此操作的选项是async.gracefulshutdown:

async.gracefulshutdown=false

16、Async Queue Size (Advanced)

用于存储未处理事件的默认队列限制为50个项目。队列已满后添加的其他项目将被删除,并且永远不会发送到Sentry服务器。根据环境(如果内存稀疏),能够控制该队列的大小以避免内存问题非常重要。

可以使用async.queuesize选项设置最大值:

async.queuesize=100

这意味着如果与Sentry服务器的连接断开,则只要服务器备份,就会存储和处理最近的100个事件。

特殊值-1可用于启用无限制队列。请注意网络连接或Sentry服务器问题可能意味着您的进程将耗尽内存。

17、Async Threads Count (Advanced)

默认情况下,异步连接使用的线程池包含JVM可用的每个处理器一个线程。

可以使用async.threads选项手动设置线程数(例如,如果只需要一个线程):

async.threads=1

18、Async Threads Priority (Advanced)

在大多数情况下,向Sentry发送日志并不像平滑运行的应用程序那么重要,因此线程具有最低优先级。

可以使用async.priority选项自定义此值以增加这些线程的优先级:

async.priority=10

19、Compression

默认情况下,发送到Sentry的内容在发送之前会被压缩。但是,压缩和编码数据会增加一个小的CPU和内存命中,如果与Sentry的连接快速可靠,则可能没有用。

根据项目的限制(例如,具有有限连接的移动应用程序,Sentry托管在外部网络上),预先压缩数据或不压缩数据可能很有用。

可以使用选项压缩手动启用/禁用压缩

compression=false

20、Max Message Size

默认情况下,只将消息的前1000个字符发送到服务器。可以使用maxmessagelength选项更改此设置。

maxmessagelength=1500

21、Timeout (Advanced)

设置超时以避免阻塞Sentry线程,因为建立连接花费的时间太长。

可以使用超时(以毫秒为单位)手动设置超时长度:

timeout=10000

22、Using a Proxy

如果您的应用程序需要通过HTTP代理发送出站请求,则可以通过JVM网络属性或Sentry选项配置代理信息。

例如,使用JVM网络属性(影响整个JVM进程),

java \
  # if you are using the HTTP protocol \
  -Dhttp.proxyHost=proxy.example.com \
  -Dhttp.proxyPort=8080 \
  \
  # if you are using the HTTPS protocol \
  -Dhttps.proxyHost=proxy.example.com \
  -Dhttps.proxyPort=8080 \
  \
  # relevant to both HTTP and HTTPS
  -Dhttp.nonProxyHosts=”localhost|host.example.com” \
  \
  MyApp

有关代理属性的更多信息,请参阅Java Networking and Proxies。

或者,使用Sentry选项(仅影响Sentry HTTP客户端,在共享应用程序容器内部有用),

http.proxy.host=proxy.example.com
http.proxy.port=8080

23、用户自定义配置

有时,您可能需要Java SDK中未包含的自定义功能。最常见的方法是创建自己的SentryClientFactory实例,如下例所示。

(1)实现

public class MySentryClientFactory extends DefaultSentryClientFactory {
    @Override
    public SentryClient createSentryClient(Dsn dsn) {
        SentryClient sentryClient = new SentryClient(createConnection(dsn), getContextManager(dsn));

        /*
         Create and use the ForwardedAddressResolver, which will use the
         X-FORWARDED-FOR header for the remote address if it exists.
          */
        ForwardedAddressResolver forwardedAddressResolver = new ForwardedAddressResolver();
        sentryClient.addBuilderHelper(new HttpEventBuilderHelper(forwardedAddressResolver));

        sentryClient.addBuilderHelper(new ContextBuilderHelper(sentryClient));
        return configureSentryClient(sentryClient, dsn);
    }
}

(2)用法

要使用自定义SentryClientFactory实现,请使用factory选项:

factory=my.company.SentryClientFactory

您的工厂类需要在类路径中使用零参数构造函数,否则将引发错误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 可以很方便地集成 Sentry,以下是集成步骤: 1. 在 `pom.xml` 文件添加 Sentry 依赖: ```xml <dependency> <groupId>io.sentry</groupId> <artifactId>sentry-spring-boot-starter</artifactId> <version>3.1.0</version> </dependency> ``` 2. 在 `application.properties` 或 `application.yml` 文件配置 Sentry: ```properties sentry.dsn=YOUR_DSN sentry.release=YOUR_RELEASE_VERSION sentry.environment=YOUR_ENVIRONMENT ``` 其,`YOUR_DSN` 是你的 Sentry DSN(Data Source Name),`YOUR_RELEASE_VERSION` 是你的应用版本号,`YOUR_ENVIRONMENT` 是你的应用环境(如 `production`、`development` 等)。 3. 创建一个全局异常处理器类,用于捕获异常并发送到 Sentry: ```java import io.sentry.Sentry; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.servlet.ModelAndView; @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ModelAndView handleException(Exception e) { // 发送异常信息到 Sentry Sentry.captureException(e); // 返回错误页面或其他处理方式 ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("error"); modelAndView.addObject("errorMessage", "An error occurred"); return modelAndView; } } ``` 以上步骤完成后,当应用发生异常时,Sentry 将会自动捕获并发送相应的异常信息。你可以登录 Sentry 平台查看应用的异常报告和性能指标。 希望以上信息对你有帮助!如果你还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值