- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将时间指标添加到我的 spring-boot web 应用程序中。目前,该应用程序使用 micrometer、prometheus 和 spring-boot-actuator。
我可以通过 http://localhost:8080/actuator/prometheus 连接到我的应用程序并查看默认指标列表,例如:
# HELP jvm_gc_memory_allocated_bytes_total Incremented for an increase in the size of the young generation memory pool after one GC to before the next
# TYPE jvm_gc_memory_allocated_bytes_total counter
jvm_gc_memory_allocated_bytes_total{application="my app",} 0.0
# HELP jvm_classes_loaded_classes The number of classes that are currently loaded in the Java virtual machine
# TYPE jvm_classes_loaded_classes gauge
jvm_classes_loaded_classes{application="my app",} 7581.0
...
太棒了!
但现在我想将计时指标附加到我的一个 Controller 的方法中。我希望这就像在类中添加一个 @Timed
注释一样简单:
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import io.micrometer.core.annotation.Timed;
@RestController
@Timed
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
doWork();
return buildResponse(name);
}
private void doWork() {
try {
Thread.sleep((long) (1000 * Math.random()));
} catch (InterruptedException e) {
}
}
private Greeting buildResponse(String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}
但是,这似乎没有向 http://localhost:8080/actuator/prometheus 端点添加任何指标。
我需要采取哪些步骤才能让端点报告 GreetingController
类的计时指标,尤其是 doWork
和 buildResponse
方法?
-- 更新--
我已经设法获得了我想要的结果,但比我预期的要多做一些工作,我希望有更简单的方法。我明确地将 Timer
对象添加到我想要测量的每个方法中,如下所示:
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@Autowired
MeterRegistry meterRegistry;
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
doWork();
return buildResponse(name);
}
private void doWork() {
Timer timer = meterRegistry.timer(this.getClass().getSimpleName() + ".doWork");
timer.record(() -> {
try {
Thread.sleep((long) (1000 * Math.random()));
} catch (InterruptedException e) {
}
});
}
private Greeting buildResponse(String name) {
AtomicReference<Greeting> response = new AtomicReference<>();
Timer timer = meterRegistry.timer(this.getClass().getSimpleName() + ".buildResponse");
timer.record(() -> {
response.set(new Greeting(counter.incrementAndGet(), String.format(template, name)));
});
return response.get();
}
}
但至少这让我得到了我想要的结果:
# HELP GreetingController_buildResponse_seconds
# TYPE GreetingController_buildResponse_seconds summary
GreetingController_buildResponse_seconds_count{application="my app",} 10.0
GreetingController_buildResponse_seconds_sum{application="my app",} 0.001531409
# HELP GreetingController_buildResponse_seconds_max
# TYPE GreetingController_buildResponse_seconds_max gauge
GreetingController_buildResponse_seconds_max{application="my app",} 2.52253E-4
# HELP GreetingController_doWork_seconds_max
# TYPE GreetingController_doWork_seconds_max gauge
GreetingController_doWork_seconds_max{application="my app",} 0.941169892
# HELP GreetingController_doWork_seconds
# TYPE GreetingController_doWork_seconds summary
GreetingController_doWork_seconds_count{application="my app",} 10.0
GreetingController_doWork_seconds_sum{application="my app",} 4.767700907
有没有更简洁的方法?
最佳答案
注册TimedAspect作为配置类中的 bean:
@Bean
public TimedAspect timedAspect(MeterRegistry meterRegistry) {
return new TimedAspect(meterRegistry);
}
关于prometheus - 在普罗米修斯中显示任意@Timed指标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64613043/
我第一次尝试使用矢量匹配时,我收到一条错误消息,提示“不允许多对多匹配:匹配标签在一侧必须是唯一的”,我不明白为什么。 这是我的表达: sum(rate(container_cpu_usage_sec
我想计算给定指标在时间范围内非零的百分比时间。我知道我可以使用 count_over_time(my_metric[1m]) 但我想要的是 count_over_time(my_metric[1m]
我正在寻找 Prometheus 如何计算“向上”指标的信息 up{job="", instance=""}: 1 if the instance is healthy, i.e. reachable
给定一个具有单调递增值的 Prometheus Counter 对象,我如何生成一个图表,其中值从 0 开始作为 grafana 范围的开始并按标签分组? 伪公式(我怎么想的。我可能是错的) fore
我正在尝试使用普罗米修斯数据源在 Grafana 中绘制条形图。 我的简单查询如下所示: max_over_time(energy_monitor_watthour_today[1d]) 我将 Gra
我有一个 Prometheus 计数器,我想获取它的 率在一个时间范围内(真正的目标是 sum the rate ,有时使用 histogram_quantile 度量)。 但是,我有多台机器运行这种
我正在尝试使用正则表达式添加新标签。名称实例是 pr-na01-na02-A我试图只获取 pr-na01,所以我这样做了: - source_labels: ['__meta_ec2_tag_Na
我要监控的应用程序提供了一个用于健康检查的 api 端点,它以 json 格式响应指标。例如: $ curl https://example.com/api/stats {"status":"suc
我看到没有sink configuration普罗米修斯在此heapster document .有什么简单的方法可以将这两者结合起来进行监控。 最佳答案 Prometheus 使用 pull mod
我要监控的应用程序提供了一个用于健康检查的 api 端点,它以 json 格式响应指标。例如: $ curl https://example.com/api/stats {"status":"suc
我在同一主机上有类似的服务。例如我有两个名为 mysql01 和 mysql02 的 mysql 服务器。我已经安装了两个mysqld_exporter每个 mysql 服务器一个。标签实例的值为 i
我在 grafana 中有一个面板,它显示当前警报(简单查询 ALERTS{alertstate="firing"} with instant=enable 选项)。我想知道第一次触发警报的时间。我该
我们开始使用 Prometheus 和 Grafana 作为监控 Service Fabric 集群的主要工具。为了定位 Prometheus,我们使用 wmi_exporter,带有预定义参数:CP
我们开始使用 Prometheus 和 Grafana 作为监控 Service Fabric 集群的主要工具。为了定位 Prometheus,我们使用 wmi_exporter,带有预定义参数:CP
我将我的 GKE API 服务器升级到 1.6,并且正在将节点升级到 1.6,但遇到了一个障碍...... 我有一个 prometheus 服务器(版本 1.5.2)在由 Kubernetes 部署管
我想知道我是否可以使用普罗米修斯数据中的“信息”(https://github.com/prometheus/client_python#info)指标在 grafana 中显示信息/数据。关于使用该
我有 2 个不同的指标: metric_a 带有字段类型 metric_b 具有字段类型(相同) 我正在尝试总结相同类型的 a 和 b。 如果类型只存在于 metric_a 而不是 metric_b
我在普罗米修斯中有以下标签,如何在模板化时创建通配符查询 类似于“查询”:“label_values(application_*Count_Total,xyx)”。这些值是从 Eclipse Micr
在 Prometheus 的目标页面中,我收到以下错误: 我在 Linux 主机上使用它 普罗米修斯版本: prometheus, version 1.1.2 (branch: master, rev
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
我是一名优秀的程序员,十分优秀!