statsd java_哪个StatsD客户端应该用于一个java / grails项目?

本文探讨了在Java/Grails项目中集成StatsD监控时,面对不同客户端实现的选择困境。作者分析了Etsy StatsD客户端、grails-statsd插件、Java的statsd客户端和Play statsd插件的优缺点,重点关注并发处理、性能和资源管理。最终,作者考虑编写自定义版本,结合各实现的优点。
摘要由CSDN通过智能技术生成

我正在考虑将StatsD数据收集添加到我的grails应用程序,并查看现有的库和代码让我有点困惑,这将是一个很好的可扩展解决方案.为了将问题放在上下文中,我正在开发一个在线游戏类型项目,我自然会监控用户与游戏引擎的交互,这些将自然地围绕着X用户在窗口内执行交互的特定时刻一秒钟或两秒钟,然后在10-20秒停顿后重复.

这是我对今天可用的选项的分析.

Etsy StatsD客户端示例

可以解决的最简单的事情就是将这个类引入我的项目,并将一个单例实例作为一个spring bean来实现,直接使用它.然而,注意到grails-statsd插件创建了一个客户端实例池,我开始想知道这种方法的可扩展性.

似乎如果许多线程尝试同时发送事件,doSend方法可能会成为一个瓶颈,但是据了解,由于发送UDP数据包的性质,这会发生很快,避免了巨大的开销我们通常与网络连接相关联.

grails-statsd插件

有人已经为包含一些很好的功能(如注释和withTimer方法)的Grails创建了一个StatsD插件.但是我看到,实现方法从示例实现中缺少一些错误修复,例如在String.format的调用上指定语言环境.当一个标准的执行者可以达到类似的效果时,我也不是一个很大的粉丝,只是为了这个目的而拉扯apache commons-pool.

Java的statsd客户端

这是一个替代的纯Java库,通过维护自己的ExecutorService来异步运行.它支持整个StatsD API,包括集合和抽样,但不提供用于配置线程池和队列大小的任何钩子.在出现问题的情况下,对于非关键的事情,如监视,我认为我宁愿有限队列和丢失事件,而不是一个无限队列填满我的堆.

播放statsd插件

现在我不能直接在我的grails项目中使用这个代码,但是我认为看看事情是如何实现的.一般来说,我喜欢StatsdClient.scala中的代码的构建方式,非常干净和可读.也似乎有区域设置的bug,但是其他功能完整的etsy示例.有趣的是,除非有一些Scala魔术,我不明白,这似乎为发送到StatsD的每个数据点创建一个新的套接字.虽然这种方法很好地避免了对象池或执行器线程的必要性,但我无法想象它是非常有效的,可能会在请求线程内执行DNS查找,该请求线程应尽快返回给用户.

问题

>从所有其他实现似乎已经实现了另一个处理并发策略的事实来看,我可以假设Etsy示例对于生产使用来说有点太天真吗?

我的分析在这里是否正确?

>其他人在java / groovy中使用什么是statsd?

到目前为止,只要能够接受公共库依赖关系,现在最好的解决方案就是grails插件,但现在我正在认真考虑在星期天写下我自己的版本,结合每个实现的最佳部分.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值