让我们说我的春季微服务处理数据。每当发生成功的处理事件时,对于指标,我都会更新千分尺计数器。这已注册到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
这样我就可以最后运行summary()函数。
更新 现在,我可以通过获取服务实例ID从所有实例中获取数据。但这带来了一个新问题-由于我一次又一次地重新启动服务,并且每次服务ID都会更改,因此如何从“仅活动”服务中获取数据?
从进程开始。*。status.success.count表示所有服务的总计数-无效或有效
答案 0 :(得分:0)
切勿使用实例ID进行聚合。实例重新启动后,实例ID将更改。 (将instance-id仅用于记录/调试/保存记录。)
使用service-id进行聚合。
对于千分尺,您可以在常用标签中添加服务名称。
registry.config().commonTags("service", "xyz-service");
公共标记是在注册表级别定义的,并且与该注册表关联的每个度量标准都将添加公共标记。
而且,对于已死还是活着的情况:该指标在实例还活着时被推送。因此,如果您想知道某个步骤运行了多少次,则需要考虑该计数。
要从活动实例中获取数据,请使用时间过滤器。这将返回该持续时间内处于活动状态的实例推送的数据(为什么?因为已死实例不推送指标)。