Counter可以统计事件发生次数
Summary可以统计每个标签的发生次数,例如可以用于统计每个用户的调用次数
Histogram分桶统计,可以每个桶的调用时间耗时
demo
# HELP requests_latency_seconds Request latency in seconds.
# TYPE requests_latency_seconds summary
requests_latency_seconds_count{aLabel="aLabelValue",} 4.0
requests_latency_seconds_sum{aLabel="aLabelValue",} 0.14344206399999998
# HELP redisRabbitmqConsumerReceiveCounter redisRabbitmqConsumerReceiveCounter
# TYPE redisRabbitmqConsumerReceiveCounter counter
redisRabbitmqConsumerReceiveCounter 4.0
# HELP requests_histogram_latency_seconds Request latency in seconds.
# TYPE requests_histogram_latency_seconds histogram
requests_histogram_latency_seconds_bucket{le="0.005",} 3.0
requests_histogram_latency_seconds_bucket{le="0.01",} 3.0
requests_histogram_latency_seconds_bucket{le="0.025",} 3.0
requests_histogram_latency_seconds_bucket{le="0.05",} 3.0
requests_histogram_latency_seconds_bucket{le="0.075",} 3.0
requests_histogram_latency_seconds_bucket{le="0.1",} 3.0
requests_histogram_latency_seconds_bucket{le="0.25",} 4.0
requests_histogram_latency_seconds_bucket{le="0.5",} 4.0
requests_histogram_latency_seconds_bucket{le="0.75",} 4.0
requests_histogram_latency_seconds_bucket{le="1.0",} 4.0
requests_histogram_latency_seconds_bucket{le="2.5",} 4.0
requests_histogram_latency_seconds_bucket{le="5.0",} 4.0
requests_histogram_latency_seconds_bucket{le="7.5",} 4.0
requests_histogram_latency_seconds_bucket{le="10.0",} 4.0
requests_histogram_latency_seconds_bucket{le="+Inf",} 4.0
requests_histogram_latency_seconds_count 4.0
requests_histogram_latency_seconds_sum 0.14249414600000004
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/io.prometheus/simpleclient -->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient</artifactId>
<version>0.9.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.prometheus/simpleclient_common -->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_common</artifactId>
<version>0.9.0</version>
</dependency>
package com.zhenzhen.demo.springboot.config.endpoint;
import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.exporter.common.TextFormat;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Collections;
import java.util.Set;
/**
* @author zhen.yin
* @title:
* @description:
* @date 2020/11/14 14:12
*/
@Endpoint(id="my-prometheus-endpoint")
@Configuration
public class MyPrometheusEndpoint {
@ReadOperation
public String endpoint() {
return this.writeRegistry(Collections.emptySet());
}
public String writeRegistry(Set<String> metricsToInclude) {
try {
Writer writer = new StringWriter();
TextFormat.write004(writer, CollectorRegistry.defaultRegistry.filteredMetricFamilySamples(metricsToInclude));
return writer.toString();
} catch (IOException var3) {
throw new RuntimeException("Writing metrics failed", var3);
}
}
}
management:
endpoints:
web:
exposure:
include: my-prometheus-endpoint
health:
defaults:
enabled: false
package com.zhenzhen.demo.springboot.controller;
import java.util.Date;
import io.prometheus.client.Counter;
import io.prometheus.client.Histogram;
import io.prometheus.client.SimpleTimer;
import io.prometheus.client.Summary;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.zhenzhen.demo.springboot.common.utils.BeanValidatorUtil;
import com.zhenzhen.demo.springboot.condition.HelloCondition;
import com.zhenzhen.demo.springboot.dto.HelloDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.java.Log;
@RestController
@Api(description = "hello的控制器")
@Log
public class HelloController {
private static final Counter Hello_Counter = Counter.build()
.name("hello_counter").help("hello_counter").register();
static final Summary requestLatency = Summary.build()
.name("requests_latency_seconds")
.help("Request latency in seconds.")
.labelNames("aLabel")
.register();
static final Histogram requestHistogramLatency = Histogram.build()
.name("requests_histogram_latency_seconds").help("Request latency in seconds.").register();
@GetMapping("/hello")
@ApiOperation(value="hello 方法")
public HelloDto hello(HelloCondition helloCondition) {
SimpleTimer requestTimer = new SimpleTimer();
Histogram.Timer requestHistogramTimer = requestHistogramLatency.startTimer();
try {
Hello_Counter.inc();
BeanValidatorUtil.check(helloCondition);
log.info("输入参数"+helloCondition);
return new HelloDto("真哥", new Date());
} finally {
requestHistogramTimer.observeDuration();
//这里可以根据参数输入lable
requestLatency.labels("aLabelValue").observe(requestTimer.elapsedSeconds());
}
}
}
http://localhost:9300/actuator/my-prometheus-endpoint
http://localhost:9300/actuator/my-prometheus-endpoint
因篇幅问题不能全部显示,请点此查看更多更全内容