Metrics with Micrometer metrics

预计阅读时间:3分钟

"度量标准"功能允许您配置" 度量标准"以获取有关服务器和传入请求的有用信息. 此实现使用需要JRE 8或更高版本的千分尺.

此功能定义在类io.ktor.metrics.MicrometerMetrics在神器io.ktor:ktor-metrics-micrometer:$ktor_version .
dependencies { implementation "io.ktor:ktor-metrics-micrometer:$ktor_version" }
dependencies { implementation("io.ktor:ktor-metrics-micrometer:$ktor_version") }
<project> ... <dependencies> <dependency> <groupId>io.ktor</groupId> <artifactId>ktor-metrics-micrometer</artifactId> <version>${ktor.version}</version> <scope>compile</scope> </dependency> </dependencies> </project>

Exposed Metrics

根据您的支持时间表数据库,此度量标准的名称可能会有所不同,以遵循命名约定.

ktor.http.server.requests.active

活动计量器会统计到服务器的并发http请求的数量. 该指标没有标签.

ktor.http.server.requests

计时器测量每个请求的时间. 此功能为此计时器提供了以下标签:

  • 客户端请求的URL的address<host>:<port>
  • method :http方法(例如GETPOST
  • route :处理请求路径的ktor路由(例如/vehicles/23847/tires/frontright /vehicles/{id}/tires/{tire} ).
  • status :发送到客户端的响应的http状态代码(例如200404 ).
  • exception :当处理程序在响应客户端之前引发ExceptionThrowable时,抛出Exception的类名,否则返回n/a . 此功能无法识别处理程序在响应客户端之后引发的异常.

Installing

"度量标准"功能要求您在安装时指定一个MeterRegistry . 出于测试目的,您可以使用SimpleMeterRegistry ,在更高效的环境中,您可以根据时间轴数据库供应商选择任何注册表 .

install(MicrometerMetrics) {
   registry = SimpleMeterRegistry()
}

Meter Binders

千分尺提供了一些低级指标. 这些是通过MeterBinder提供的. 默认情况下,此功能会安装一个指标列表,但是如果您不想安装此功能,则可以添加自己的指标或提供一个空列表.请安装任何MeterBinder .

install(MicrometerMetrics) {
   registry = SimpleMeterRegistry()
   meterBinders = listOf(
            ClassLoaderMetrics(),
            JvmMemoryMetrics(),
            JvmGcMetrics(),
            ProcessorMetrics(),
            JvmThreadMetrics(),
            FileDescriptorMetrics()
   )
}

Distribution Statistic Configuration

千分尺提供了多种配置和显示直方图的方式. 您可以公开(客户端)百分位数或直方图计数器(时间线数据库在服务器端计算百分位数). 尽管所有后端均支持百分位数,但它们的内存占用量更为昂贵(),并且无法在多个维度上进行汇总. 直方图计数器可以聚合,但并非所有后端都支持它们. 完整的文档可以在这里找到.

默认情况下,此功能提供的计时器显示50%,90%,95%和99%的百分位数. 要更改此配置,您可以配置一个DistributionStatisticConfig ,该配置将应用于此功能的所有计时器.

install(MicrometerMetrics) {
    registry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)
    
    distributionStatisticConfig = DistributionStatisticConfig.Builder()
                .percentilesHistogram(true)
                .maximumExpectedValue(Duration.ofSeconds(20).toNanos())
                .sla(
                    Duration.ofMillis(100).toNanos(),
                    Duration.ofMillis(500).toNanos()
                )
                .build()
}

Customizing Timers

要为每个计时器定制标签,您可以配置一个为每个请求调用的lamda,并可以扩展该计时器的构建器. 请注意,标签值的每个唯一组合都会产生一个自己的指标. 因此,不建议将具有高基数的属性(例如资源ID)放入标记中.

install(MicrometerMetrics) {
    registry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)
    
    timers { call, exception ->
        this.tag("tenant", call.request.headers["tenantId"])
    }
}

by  ICOPY.SITE