我正在使用下面的代码尝试千分尺。如何配置速率聚合并从应用程序内的给定计数器获取速率聚合数据。通过聚合率,我的意思是之前发布间隔的数据?
final MeterRegistry myRegistry = new SimpleMeterRegistry();
final Random random = new Random();
for (iteration = 0; iteration < 1000; iteration++)
{
final int randomNum = random.nextInt(10);
final Counter myCounter = myRegistry.counter("myTestCounter", "random", Integer.toString(randomNum));
myCounter.increment();
Thread.sleep(100);
}
System.out.println("measure = [" + myRegistry.counter("myTestCounter", "random", "0").measure());
System.out.println("count = [" + myRegistry.counter("myTestCounter", "random", "0").count());
Run Code Online (Sandbox Code Playgroud)
注意:我不想将指标发布到任何监控系统。我想跟踪应用程序本身中每个时间间隔给定标签的请求数量(例如,给定时间间隔的成功/失败请求),并将其用于弹性目的。
我想记录多个指标名称的计数,例如 metricA、metricB、metricC 等等。一种选择是创建多个计数器对象,如下所示
Counter
.builder("metricA")
.register(registry);
Run Code Online (Sandbox Code Playgroud)
然而,这会导致很多我不喜欢的对象。
我想知道是否有一种方法可以使用相同的计数器对象并记录多个指标的计数。
有没有办法创建计数器,然后动态创建标签来获取相同的计数器对象并分别增加这些标签?
这个想法是在监控工具中使用相同的度量(仪表),并在同一图表中的标签周围进行分离。
或者是否有办法创建一个带有 10 个标签的计数器并一次增加一个标签?
我有许多非 spring-boot 服务,它们使用io.prometheus
simpleclient_hotspot
.
我试图获得与这些以及从我的 spring-boot 服务生成的 JVM 指标的奇偶性,这些服务使用 micrometer 的默认设置。
我需要一些额外的千分尺配置才能生成指标,例如:
# TYPE jvm_info gauge
jvm_info{version="
...
jvm_memory_bytes_used
jvm_memory_pool_bytes_max
etc...
Run Code Online (Sandbox Code Playgroud)
?
我很欣赏开箱即用的千分尺正在记录:jvm_memory_used_bytes
它与 simpleclient_hotspot 中相同指标的名称不匹配:(
如果可能的话,我希望实现一致性,并且jvm_info
对于千分尺/弹簧靴特别有用。
我正在尝试以编程方式读取仪表,如下所示:
获取注册表:
MeterRegistry registry = Metrics.globalRegistry.getRegistries().iterator().next();
Run Code Online (Sandbox Code Playgroud)
读取测量值:
double systemCpuUsage = registry.get("system.cpu.usage").gauge().measure().iterator().next().getValue();
Run Code Online (Sandbox Code Playgroud)
问题是有时我会得到NaN
.
我在文档中读到了这一点:为什么我的仪表报告 NaN 或消失?
但我不确定我该怎么做。另外,我正在阅读 Spring Boot 执行器的“内置”仪表(由 公开management.metrics.enable.process.cpu.usage=true
),因此我无法更改它的构造。
有人可以解释一下 MAX 统计数据在下面的回复中指的是什么吗?我没有看到它在任何地方记录。
localhost:8081/actuator/metrics/http.server.requests?tag=uri:/myControllerMethod
Run Code Online (Sandbox Code Playgroud)
回复:
{
"name":"http.server.requests",
"description":null,
"baseUnit":"milliseconds",
"measurements":[
{
"statistic":"COUNT",
"value":13
},
{
"statistic":"TOTAL_TIME",
"value":57.430899
},
{
"statistic":"MAX",
"value":0
}
],
"availableTags":[
{
"tag":"exception",
"values":[
"None"
]
},
{
"tag":"method",
"values":[
"GET"
]
},
{
"tag":"outcome",
"values":[
"SUCCESS"
]
},
{
"tag":"status",
"values":[
"200"
]
},
{
"tag":"commonTag",
"values":[
"somePrefix"
]
}
]
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 Spring boot 2、Kafka 2.1.4,我想在 Spring Boot 执行器的执行器/指标端点中公开 kafka Producer 指标
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>${boot.version}</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
<version>${micrometer.version}</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus
</artifactId>
<version>${micrometer.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
在我的属性文件中,如下所示 # application.properties
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
management.endpoint.metrics.enabled=true
management.endpoint.prometheus.enabled=true
management.metrics.export.prometheus.enabled=true
Run Code Online (Sandbox Code Playgroud)
结果没有kafka生产者指标只有Jvm和Tomcat
http://localhost:8080/actuator/metrics
0 "jvm.memory.max"
1 "jvm.threads.states"
2 "jvm.gc.memory.promoted"
3 "tomcat.cache.hit"
4 "tomcat.servlet.error"
5 "tomcat.cache.access"
6 "jvm.memory.used"
7 "jvm.gc.max.data.size"
8 "jvm.gc.pause"
9 "jvm.memory.committed"
10 "system.cpu.count"
11 "logback.events"
12 "tomcat.global.sent"
13 "jvm.buffer.memory.used"
14 "tomcat.sessions.created"
15 "jvm.threads.daemon"
16 "system.cpu.usage"
17 "jvm.gc.memory.allocated"
18 "tomcat.global.request.max"
19 "tomcat.global.request"
20 "tomcat.sessions.expired" …
Run Code Online (Sandbox Code Playgroud) metrics spring-boot-actuator prometheus kafka-producer-api spring-micrometer
我有一个 springboot Kotlin Web 服务,它使用 Actuator ( spring-boot-starter-actuator
) 和 micrometer ( micrometer-registry-prometheus
) 将指标公开给 prometheus scraper。
为了监视队列中操作的大小,我使用自定义仪表
val gauge = Gauge.build()
.name("operation_queue_size")
.help("Size of queue")
.register(collectorRegistry)
# later
gauge.inc()
# or
gauge.dec()
Run Code Online (Sandbox Code Playgroud)
我想改进这个指标,添加一个代表队列中操作类型的标签,但在 Builder 类上没有找到任何合适的方法。
目标是公开如下指标:
operation_queue_size{op_type="deletions"} 999
operation_queue_size{op_type="insertions"} 999
Run Code Online (Sandbox Code Playgroud)
谢谢。
spring-boot spring-boot-actuator prometheus micrometer spring-micrometer
HibernateMetrics 通过 spring boot 执行器公开不会捕获 SQL 语句。需要 SQL 语句来分析单个查询执行计划。
new HibernateMetrics(sessionFactory, "myapp", Collections.emptyList()).bindTo(registry);
是否有用于此目的的千分尺?
我正在使用弹簧靴 2.3.2。在执行器的帮助下,将应用程序指标发布到指标控制台。我想知道执行器抛光的指标system.cpu.usage
和process.cpu.usage
指标之间有什么区别。
spring-boot spring-boot-actuator micrometer spring-micrometer spring-boot-2
我试图了解 spring micromenter 的按维度/标签功能分组。我正在使用 StepMeterRegistry 并递增计数器,但没有看到所需的结果。
创建计数器为,
final MeterRegistry myRegistry = new StepMeterRegistry(config, Clock.SYSTEM) {...};
final Counter myCounter1 = myRegistry.counter("myTestCounter", "tag1", "value1");
final Counter myCounter2 = myRegistry.counter("myTestCounter", "tag2", "value2");
final Counter myCounter1n2 = myRegistry.counter("myTestCounter", "tag1", "value1", "tag2", "value2");
Run Code Online (Sandbox Code Playgroud)
计数器增量为,
myCounter1.increment();
myCounter2.increment();
myCounter1n2.increment();
Run Code Online (Sandbox Code Playgroud)
当我打印时(步骤持续时间之后),
myCounter1.measure(); => value=1.0
myCounter2.measure(); => value=1.0
myCounter1n2.measure(); => value=1.0
Run Code Online (Sandbox Code Playgroud)
而我期待的是(在步骤持续时间之后),
myCounter1.measure(); => value=2.0
myCounter2.measure(); => value=2.0
myCounter1n2.measure(); => value=1.0
Run Code Online (Sandbox Code Playgroud)
我的理解正确吗?或者我如何实现分组依据(或)选择功能?