问题标签 [statsd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
131 浏览

graphite - 统计发送方法

有谁知道 sampleRate 检查和随机数在 Send 方法中的用途,例如在 c# 示例中:

似乎你只会在 else 部分调用代码 - 循环通过统计数据并发送

0 投票
1 回答
483 浏览

metrics - 石墨:长时间使用 holtWintersConfidenceBands(为了准确)但获得最后 x 分钟的数据点

有没有办法在很长一段时间内执行 holtWintersConfidenceBands 但只获得最后 x 分钟的数据点?例如:我想在过去 30 天执行 holtWintersConfidenceBands 函数,但只获得最后 30 分钟的结果。

当然,我可以在我的客户端上进行过滤,但是有没有办法通过 Graphite 服务器本身来实现它?

0 投票
2 回答
2239 浏览

graphite - 石墨计数器的变换

我正在使用incr来自python statsd 客户端的函数。我为该名称发送的密钥已在石墨中注册,但它在图表上显示为一条平线。我需要应用哪些过滤器或转换来获得随时间推移的增量速率?我尝试了一个apply function > transform > integral和一个,apply function > special > aggregate by sum但还没有成功。

0 投票
1 回答
1632 浏览

linux - 使用 Statsd 和 Graphite 进行 Linux 进程监控

我想使用 statsd 和石墨来监视 linux 进程(记录 cpu 和 ram 使用统计数据并在一段时间内以图形方式显示它们)。我已将 statsd 和石墨配置为作为服务运行。

如何将 linux 资源使用统计信息(即 CPU 和 RAM)发送到 statsd,以便可以从石墨 Web UI 以图形方式查看它们?

谢谢。

0 投票
1 回答
135 浏览

graphite - Statsd + Graphie ,显示低频率事件

我正在使用标准Graphite + Statsd堆栈。10 秒 statsD 间隔 + 10 秒石墨保留模式。

我有几个事件每天发生 1K 到 10K 次。我也想在图表中展示它们。但是图表太平了(statsD 的 24 小时范围有 8640 个插槽)。我想显示一个图表来衡量我的事件,例如 events/min 或 events/5min - 现在的默认值是 events / 10s 。是否可以在石墨中更改默认的 statsd 间隔和保留模式。

谢谢

0 投票
1 回答
164 浏览

linux - statsd 当前时间是未来两个小时 - 如何修复?

在石墨中查看我们的 statsd 数据时,图表显示当前时间是未来两个小时。例如,如果我们在上午 9:00 观察石墨,图表会告诉我们现在是上午 11:00。数据按应有的方式排列——如果我们在上午 9:00 有 99 个事件,我们可以在上午 11:00 在图表上看到 99 个事件。

运行 statsd 的主机上的时钟是正确的,我们尝试停止和启动 statsd 进程。关于在哪里寻找解决这个问题的任何其他建议?

0 投票
1 回答
294 浏览

udpclient - 使用 UdpClient 进行日志记录时,它应该是单例吗?

我正在使用 Graphite.NET 记录到 statsD。在底层,它使用 UdpClient 写入 statD 服务器。来源。我认为将其创建为单例是有意义的,因为我会经常记录,而且每次我想记录时创建这个客户端和连接似乎都会有很多开销。这样做有什么缺点吗?如果连接中断会发生什么:会抛出异常吗?下次我尝试使用记录器时,StuctureMap 会重新创建记录器吗?这是我的 SM 配置的样子:

0 投票
3 回答
6977 浏览

java - 我应该为 java/grails 项目使用哪个 StatsD 客户端?

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

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

Etsy StatsD 客户端示例

https://github.com/etsy/statsd/blob/master/examples/StatsdClient.java

“可能工作的最简单的事情”解决方案,我可以将此类拉入我的项目并将单例实例实例化为弹簧 bean 并直接使用它。然而,在注意到 grails-statsd 插件创建了一个客户端实例池之后,我开始怀疑这种方法的可扩展性。

如果许多线程试图同时发送事件,该doSend方法似乎成为瓶颈,但是据我了解,由于发送 UDP 数据包的火和忘记性质,这应该很快发生,避免了巨大的开销我们通常与网络连接相关联。

grails-statsd 插件

https://github.com/charliek/grails-statsd/

有人已经为 grails 创建了一个 StatsD 插件,其中包括一些不错的功能,例如注释和withTimer方法。但是我看到那里的实现缺少示例实现中的一些错误修复,例如在调用String.format. 我也不是为此而引入 apache commons-pool 的忠实粉丝,因为标准 Executor 可以达到类似的效果。

java-statsd-客户端

https://github.com/tim-group/java-statsd-client/

这是一个替代的纯 java 库,它通过维护自己的 ExecutorService 来异步操作。它支持整个 StatsD API,包括集合和采样,但不提供任何用于配置线程池和队列大小的挂钩。在出现问题的情况下,对于诸如监控之类的非关键事物,我认为我更喜欢有限队列和丢失事件,而不是无限队列填满我的堆。

播放 statsd 插件

https://github.com/vznet/play-statsd/

现在我不能直接在我的 grails 项目中使用此代码,但我认为值得一看,看看事情是如何实现的。一般来说,我喜欢代码的StatsdClient.scala构建方式,非常干净易读。似乎也有语言环境错误,但其他功能与 etsy 示例一起完成。有趣的是,除非有一些我不理解的 scala 魔法,否则这似乎会为发送到 StatsD 的每个数据点创建一个新套接字。虽然这种方法很好地避免了对象池或执行线程的必要性,但我无法想象它非常高效,可能会在应该尽快返回给用户的请求线程中执行 DNS 查找。

问题

  1. 从所有其他实现似乎都实现了另一种处理并发的策略这一事实来看,我可以假设 Etsy 示例对于生产使用来说有点太天真了吗?
  2. 我在这里的分析似乎是正确的吗?
  3. 其他人在 java/groovy 中使用 statsd 是什么?

到目前为止,看起来最好的现有解决方案是 grails 插件,只要我可以接受 commons-pool 依赖项,但现在我正在认真考虑在周日编写我自己的版本,该版本结合了每个实现的最佳部分。

0 投票
1 回答
428 浏览

graphite - 在 Graphite 和 statsd 中为每个节点创建一个图

我正在使用带有 statsd 的石墨从我聚集在 ec2 中的应用程序中收集各种数据。除其他事项外,我还有应用程序传递的消息和传递失败的消息的统计信息。因为我的应用程序的消息消费者数量有些不稳定(每隔几天变化一次),我希望能够为每个消费者动态生成这两个统计数据的图表。我使用系统生成的消费者 ID 将消息发布到 statsd/graphite 作为统计信息的一部分:

  • stats.myapp.consumers.<consumerId>.messagesDelivered
  • stats.myapp.consumers.<consumerId>.messagesFailed

我目前使用 consumerId 的通配符生成两个图表:

  • stats.myapp.consumers.*.messagesDelivered
  • stats.myapp.consumers.*.messagesFailed

这对少数消费者来说是可以的,但我目前有超过 300 个并且正在迅速增长。我想做的是通过上述目标(或类似目标)并让石墨为每个唯一 ID 返回一个图表。(我说的是图表,但实际上我得到的是 json 结果)我目前正在使用个人修改版的长颈鹿仪表板,但对其他建议持开放态度。

这甚至是可能的吗?(我想我可以编写一些自定义代码来检索每个 ID,然后每次为每个 ID 生成请求。但如果可能的话,我真的希望尽量减少自定义。)

我确信我可能需要提供更多细节。请让我知道您需要知道什么,或者我是否可能只是对我的要求不满意。

更多细节:

所以,我希望的最终结果是没有一个图表,因为没有更好的术语,300 条线每条代表一个节点。我想为每个节点制作一个图表,每个节点有两条线。一个用于传递的消息,一个用于失败的消息。

当我尝试来自@Matt Self 的解决方案时,我最终得到了一张包含 300 条线的图表。(或者,也许我误解了这个建议?)

0 投票
1 回答
3714 浏览

configuration - 如何使用 statsd 和石墨获得累积计数图?

我正在使用 statsd(来自 git master 分支的最新版本)和石墨(0.9.10)作为后端。

在我的(Django)代码中,我statsd.incr("signups")在用户注册时调用。在 Graphite 的 Web 界面中,我现在在 Graphite/stats/signups 下看到了一个显示每秒注册数的漂亮图表。当我查看 Graphite/stats_counts/signups 下的图表时,我希望看到注册总数,但它看起来像是每 10 秒间隔的注册数(我猜这是 statsd 的刷新间隔)。

确实配置storage-aggregation.conf了,也许我弄错了?另外,我停止了 carbon (不是用stop,而是真的杀死了它,因为显然只是停止它不允许它重新加载配置)。我也删除了/opt/graphite/storage/whisper/stats_counts目录。然后我重新启动了 carbon 守护进程。我仍然得到每 10 秒间隔的注册数量。:-(

这是我的配置:

和这个:

我开始认为我做的一切都是正确的,而且 Graphite 确实在做它应该做的事情。所以问题是:

配置 statsd 和石墨以绘制自一开始以来的注册总数的正确方法是什么?

我想我可以偶尔更改我的 Django 代码来计算用户总数,然后使用 agauge而不是 an incr,但感觉石墨应该能够即时总结它收到的任何内容,而不是就在它聚合数据的时候。

编辑:

使用 Graphite 的 Web 界面,在 Graphite 作曲家中,我将该integral函数应用于基本的“每秒注册数”图(在 Graphite/stats/signups 中),并得到了所需的图(即注册总数)。这是获取累积图的适当方法吗?这很烦人,因为我需要从一开始就选择完整的日期范围,我无法放大图表,否则我只能得到放大部分的积分。:-(