Prometheus 给出空的查询结果,尽管单个组件指标可用
Prometheus gives empty query result although individual component metrics are available
在 Grafana 仪表板中显示了一个自定义指标。该指标通过 Prometheus 接收。该指标是通过 Spring Boot Actuator / Micrometer 构建的。
在大约一半的情况下,Prometheus 对指标的查询给出了空结果。在其他情况下,该值有效。那么,这可能与抓取的门槛有关?
分析 Prometheus 使用的查询,结果为空:
http://valid.url/prometheus/api/v1/query?query=last_seconds_since_startime_seconds
结果是:
{"status":"success","data":{"resultType":"vector","result":[]}}
使用此查询显示完整的结果(大约 17 秒后)以及实际值:
http://valid.url/stackname/componentname/actuator/prometheus
文中是:
last_seconds_since_startime_seconds 63.0
环境是SpringBoot、Micrometer、Actuator、Prometheus和Grafana。执行器查询是用 Micrometer 构建的:
Gauge.builder( LAST_SECONDS_SINCE_STARTIME, this,
PrometheusStatistics::secondsSinceStart)
.description("Seconds since last fetch")
.baseUnit("seconds")
.strongReference(true)
.register(meterRegistry);
解决方案是在 prometheus.yml 文件中为 Docker Swarm 中的特定组件更新抓取超时。
全局设置保留默认值10s。
对于特定组件:
- job_name: 'my-component'
metrics_path: /actuator/prometheus
scrape_interval: 30s
scrape_timeout: 25s <== this one
dns_sd_configs:
- names:
- 'tasks.mycomponent'
type: 'A'
port: 8080
在 Grafana 仪表板中显示了一个自定义指标。该指标通过 Prometheus 接收。该指标是通过 Spring Boot Actuator / Micrometer 构建的。
在大约一半的情况下,Prometheus 对指标的查询给出了空结果。在其他情况下,该值有效。那么,这可能与抓取的门槛有关?
分析 Prometheus 使用的查询,结果为空:
http://valid.url/prometheus/api/v1/query?query=last_seconds_since_startime_seconds
结果是:
{"status":"success","data":{"resultType":"vector","result":[]}}
使用此查询显示完整的结果(大约 17 秒后)以及实际值:
http://valid.url/stackname/componentname/actuator/prometheus
文中是:
last_seconds_since_startime_seconds 63.0
环境是SpringBoot、Micrometer、Actuator、Prometheus和Grafana。执行器查询是用 Micrometer 构建的:
Gauge.builder( LAST_SECONDS_SINCE_STARTIME, this,
PrometheusStatistics::secondsSinceStart)
.description("Seconds since last fetch")
.baseUnit("seconds")
.strongReference(true)
.register(meterRegistry);
解决方案是在 prometheus.yml 文件中为 Docker Swarm 中的特定组件更新抓取超时。
全局设置保留默认值10s。
对于特定组件:
- job_name: 'my-component'
metrics_path: /actuator/prometheus
scrape_interval: 30s
scrape_timeout: 25s <== this one
dns_sd_configs:
- names:
- 'tasks.mycomponent'
type: 'A'
port: 8080