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

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

猜你喜欢

转载自blog.csdn.net/u013702678/article/details/83214480