是否有办法在使用时监听 /metricsendpointhttps://quarkus.io/guides/micrometer?
我想收集一些需要调用不同API的指标。。。而不是制定时间表(https://quarkus.io/guides/scheduler-reference)...
例:
首先,/metrics
为我们提供了:
# HELP test_metric_a
# TYPE test_metric_a gauge
test_metric_a{namespace="test123",user="admin",} 1.0
test_metric_a{namespace="testabc",user="admin",} 1.0
# HELP test_metric_b
# TYPE test_metric_b gauge
test_metric_b 0.0
其次,/metrics
可能给出:
# HELP test_metric_a
# TYPE test_metric_a gauge
test_metric_a 0.0
# HELP test_metric_b
# TYPE test_metric_b gauge
test_metric_b{namespace="testabc",user="admin",} 2.0
如何使用https://quarkus.io/guides/micrometer调用Kubernetes API,因为应用程序中可能没有任何更改导致仪表/注册表更新,但外部事件或时间流逝将导致状态(所需的度量输出)更改。。。
请注意,自定义度量(请参见下面的注释)只被调用一次(我猜它是单例的?)。理想情况下,我希望在每次回答/metrics
时调用它。。。
进一步编辑以显示仪表的创建/更新方式:
@ApplicationScoped
public class MyMetrics {
private final MeterRegistry registry;
MyMetrics(MeterRegistry registry) {
this.registry = registry;
}
//...
// somehow call this whenever /metrics is hit?
protected void updateGauges() {
// use KubernetesClient to query K8s API to gather some customer resources, then process that list... etc...
// there is a loop over the below for user/namespace pairs in the tags
//final Tags tags = getTags();
//int count = getCount();
//registry.gauge("test_metric_a", tags, count);
// so this could roll out to something like:
registry.gauge("test_metric_a", Tags.of("user", "user1", "namespace", "ns1"), 1);
registry.gauge("test_metric_a", Tags.of("user", "user2", "namespace", "ns1"), 2);
registry.gauge("test_metric_a", Tags.of("user", "user1", "namespace", "ns2"), 1);
registry.gauge("test_metric_b", Tags.of("user", "user1", "namespace", "ns1"), 1);
registry.gauge("test_metric_b", Tags.of("user", "user2", "namespace", "ns1"), 1);
}
}
...也许这些仪表
可能是计数器
。。。但问题仍然是。。。
好啊正如我在评论中所说,当收集指标时(例如普罗米修斯的情况下,当endpoint被刮伤时),会观察到量具的值。
如果您正在谈论添加包含类似名称空间的标记,那么common tags示例可能会为您提供一些信息,您可以预先计算标签:
registry.config().commonTags("stack", "prod", "region", "us-east-1");
这将向所有指标添加这些标签,但您可以使用MeterFilter来更具选择性(例如,仅向匹配某些条件的指标添加标签)。
new MeterFilter() {
@Override
public Meter.Id map(Meter.Id id) {
if(id.getName().startsWith("test")) {
return id.withName("extra." + id.getName()).withTag("extra.tag", "value");
}
return id;
}
}
https://micrometer.io/docs/concepts#_common_tags
如果试图根据从Kubernetes API检索到的数据更新标记/标签值,则需要运行定期任务(例如计划任务),使用新标记重新注册仪表。
请注意,对于已被垃圾收集的仪表,测微计将忽略或返回NaN(取决于您使用的注册表),因此,如果您希望使用以前的标记值注册的仪表保持不变,则需要使其成为强引用。
我有一个Spring 3 Web应用程序,它实现了两个拦截器。我正在使用一个带有@Configuration注释的配置类。代码如下: 无论我将拦截器添加到注册表的顺序是什么,allIntericetor的preHandle函数总是在home Intericetor的preHandle之前调用。有人知道如何控制拦截器调用的顺序吗? 谢谢
Tendermint 可以报告和提供普罗米修斯指标,而普罗米修斯指标反过来也可以被普罗米修斯收集器消耗。 默认情况下禁用此功能。 要启用普罗米修斯指标,请设置你的配置文件 instrumentation.prometheus=true 。默认情况下,指标将在 26660 端口的 /metrics 下提供。 监听地址可以在配置文件中更改(参见 instrumentation.prometheus\_
指标(Metric) 一个指标视图为每个查询聚合显示一个单一的数字: 指标聚合: Count 计数 聚合返回所选索引模式中元素的原始计数。 Average 该聚合返回数字字段的平均值 。从下拉菜单中选择一个字段。 Sum 总和 聚合返回数字字段的总和。从下拉菜单中选择一个字段。 Min 最小值 聚合返回数字字段的最小值。从下拉菜单中选择一个字段。 Max 最大值 聚合返回数字字段的最大值。从下拉菜
我为普罗米修斯和Actuator添加了依赖项: 但是,如果我去endpoint /actuator/promehteuslog4j2_events_total指标是不到位的,即使我还添加了log4j2依赖从Spring Boot启动器,我错过了一些额外的配置吗?
Spring Cloud Stream为粘合剂提供健康指标。它以binders的名义注册,可以通过设置management.health.binders.enabled属性启用或禁用。
Kubernetes中需要考虑三个级别的度量集合—节点、Pod和在Pod中运行的应用程序。 对于节点和应用程序指标,我有非常有效的解决方案,但我仍停留在pod指标上。 我尝试过cAdvisor和Kube状态指标,但它们都没有给我想要的东西。Kube状态指标仅提供已知的信息,例如pod CPU限制和请求。cAdvisor不会将pod标签插入容器名称,因此我无法知道哪个pod行为不端。 给定一个pod