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
您的工厂类需要在类路径中使用零参数构造函数,否则将引发错误。