我正在localhost上运行一个服务,该服务将指标导出到Docker上运行的Prometheus容器。我可以通过Prometheus的/graph端点看到我的指标已正确注册、抓取和显示。但是,我找不到Prometheus的/metrics端点上报告的指标。
我的服务使用Prometheus Java客户机在localhost:8081/metrics上公开度量。我的服务在localhost:8081/metrics
上公开如下:
public class Main {
private HTTPServer server;
public static final int SERVER_PORT = 8081;
/**
* Initiates the Prometheus Exposer HTTP Server.
*/
public void main(String args[]) {
try {
server = new HTTPServer(SERVER_PORT);
} catch (IOException e) {
throw new IllegalStateException("could not start metrics server:\t" + e);
}
io.prometheus.client.Gauge gauge = io.prometheus.client.Gauge
.build()
.namespace("some_namespace")
.subsystem("some_subsystem")
.name("some_name")
.help("helpMessage")
.register();
int i = 0;
while (true) {
try {
Thread.sleep(1000);
gauge.set(i++);
} catch (InterruptedException ex) {
System.err.println("Thread sleep issue, breaking the loop");
break;
}
}
}
/**
* Terminates the Prometheus Exposer HTTP Server.
*/
public void terminate() {
try {
server.close();
} catch (Exception e) {
throw new IllegalStateException("could not stop metrics server:\t" + e);
}
}
}
我正在使用Prometheus Docker文件,并使用以下配置运行该文件:
version: '2.1'
networks:
monitor-net:
driver: bridge
volumes:
prometheus_data: {}
services:
prometheus:
image: prom/prometheus:v2.22.1
container_name: prometheus
volumes:
- ./prometheus:/etc/prometheus
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--storage.tsdb.retention.time=200h'
- '--web.enable-lifecycle'
restart: unless-stopped
expose:
- 9090
networks:
- monitor-net
labels:
org.label-schema.group: "monitoring"
我的prometheus.yml
文件配置如下:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'my_job'
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
static_configs:
- targets: [ 'host.docker.internal:8081' ]
我可以看到Prometheus在“/metrics”端点上收集并报告与“my_job”关联的多个Prometheus本机指标。但是,我通过Prometheus Java客户端注册的计量器指标只能通过“/graph”端点访问。以下是显示在“/metrics”端点上的此类Prometheus本机指标的示例:
# TYPE prometheus_target_sync_length_seconds summary
prometheus_target_sync_length_seconds{scrape_job="my_job",quantile="0.01"} 0.000311125
prometheus_target_sync_length_seconds{scrape_job="my_job"",quantile="0.05"} 0.000311125
prometheus_target_sync_length_seconds{scrape_job="my_job",quantile="0.5"} 0.000311125
prometheus_target_sync_length_seconds{scrape_job="my_job"",quantile="0.9"} 0.000311125
prometheus_target_sync_length_seconds{scrape_job="my_job"",quantile="0.99"} 0.000311125
我还检查了:
Prometheus配置文件具有适用于我的应用程序的正确目标和擦除配置。Prometheus和我的应用程序的日志中没有与指标收集相关的错误或警告。指标正在以Prometheus文本格式导出。指标正在通过Prometheus配置为擦除的正确终结点和端口导出。我仍然不确定为什么我的指标没有显示在“/metrics”上终结点。我将继续调查并解决此问题。
1条答案
按热度按时间5hcedyr01#
哦,你搞错了。
http://localhost:9090/metrics
是你的prometheus示例的url。它会显示prometheus自身的指标,比如多少数据被抓取,多少数据被存储等等。它不应该显示prometheus收集的数据。所以你找到的指标只是prometheus花了多少时间抓取你的数据。实际上,您需要的是在
http://localhost:9090/api/v1
上访问Prometheus API并查询有关指标的数据,但是一旦您了解了如何运行查询(这也可以在/graph端点上完成),您可能需要像Grafana这样的可视化工具。回到你的问题:它正在按设计工作。
见