【问题标题】:Graphite - Gather metrics only from active service instancesGraphite - 仅从活动服务实例中收集指标
【发布时间】:2019-01-02 10:58:07
【问题描述】:

假设我的 Spring 微服务处理数据。每次成功处理事件发生时,对于指标,我都会更新千分尺计数器。这已注册到 Graphite Registry。

registry = new GraphiteMeterRegistry(new GraphiteConfiguration(), Clock.SYSTEM, HierarchicalNameMapper.DEFAULT);
Counter counter = Counter.builder("process").tag("status","success").register(registry);

到目前为止,听起来不错。但是如果我必须创建和部署我的服务的多个实例呢?

如何从所有实例中获取所有成功事件的总计数?

为了进一步说明我的情况,我记录了每次增量时的 counter.count() 值。这是我看到的->

<Instance 1> <time> <package-name> Count :122
<Instance 2> <time> <package-name> Count :53

所以当我在 graphana 上运行石墨查询时 -

process.status.success.count

我倾向于从这些实例中的任何一个中获取随机计数。

我需要的是一个类似的查询 -

process.service-instance.status.success.count 

这样我就可以在最后运行一个 summarise() 函数。

更新 现在,我可以通过获取服务实例 ID 从所有实例中获取数据。但这带来了一个新问题 - 由于我一次又一次地重新启动我的服务,并且我的服务 ID 每次都在更改,我如何从 ONLY ACTIVE 服务中获取数据?

Since process.*.status.success.count 表示所有服务的总计数 - 死或活

【问题讨论】:

  • 您可以从标签中删除 netflix-eureka。问题与尤里卡无关。
  • 您也可以删除 spring-cloud。这个问题中没有特定于 spring-cloud 的内容。
  • 按照建议删除标签

标签: grafana graphite micrometer


【解决方案1】:

切勿使用实例 ID 进行聚合。当实例重新启动时,实例 ID 将发生变化。 (仅将 instance-id 用于记录/调试/记录保存目的。)

使用 service-id 进行聚合。

对于千分尺,您可以在常用标签中添加服务名称。

registry.config().commonTags("service", "xyz-service");

通用标签在注册表级别定义,与该注册表关联的每个指标都将添加通用标签。

并且,对于死或活的情况:当实例处于活动状态时推送指标。因此,如果您想知道某个步骤运行了多少次,则需要考虑该计数。

要从活动实例中获取数据,请使用时间过滤器。这将返回由在该持续时间内存活的实例推送的数据(为什么?因为死实例不推送指标)。

【讨论】:

  • 感谢您的回复。我得到了带有通用标签的部分,并且已经实现了它。但是,我如何明智地聚合它的 service-id 呢?假设我注册了一个计量器来计算一整天发生的事件。我每天午夜重置这个仪表。我有 4 个这样的服务实例。我如何总结所有事件?
  • 类似SELECT SUM("value") FROM "metric" WHERE "serviceId" = "service-name"?
猜你喜欢
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多