我正在尝试使用 Prometheus 监控使用 Express 构建的 Node.js API,但在导出指标时遇到问题,因为它通过 Docker Swarm 在服务器上运行,大约有 6 个副本。我尝试配置 dns_sd_configs,但每个实例都会创建一个新计数器。我想将它们分组以在Grafana中创建图表,例如2XX请求、5XX请求等
我的服务名称是 backend-server,我想从端口 9464 和端点 /api/metrics 抓取数据。我按如下方式配置了 prometheus.yaml:
- job_name: 'dockerswarm'
dockerswarm_sd_configs:
- host: unix:///var/run/docker.sock
role: tasks
relabel_configs:
# Only keep containers that should be running.
- source_labels: [__meta_dockerswarm_task_desired_state]
regex: running
action: keep
# Only keep containers with the specific service name.
- source_labels: [__meta_dockerswarm_service_name]
regex: backend-server
action: keep
- source_labels: [__meta_dockerswarm_node_address]
target_label: __address__
replacement: $1:9464/api/metrics
它没有抛出任何错误,但它没有出现在我的应用程序的目标中......
root@srv:~# docker service ls | grep backend
z5bnz2t5riw8 backend-server replicated 6/6 xx/xx/backend-server:x *:3000->3000/tcp
root@srv:~# docker service ls | grep promethe
8zlh5kwfx8ks prometheus replicated 1/1 prom/prometheus:v2.52.0 *:9090->9090/tcp
我按如下方式配置它以使其工作。
scrape_configs:
- job_name: cadvisor
scrape_interval: 1m
static_configs:
- targets:
- cadvisor:8080
- job_name: node
scrape_interval: 1m
static_configs:
- targets: ['host.docker.internal:9100', 'victoria.consorcio.local:9100']
- job_name: backend
scrape_interval: 15s
metrics_path: /victoria/api/metrics
dns_sd_configs:
- names:
- 'tasks.backend-server'
type: 'A'
port: 9464
但是计数器会为每个实例创建一个。
error_counter_total{instance="10.0.1.15:9464", job="backend", method="POST", status="401"}
error_counter_total{instance="10.0.1.16:9464", job="backend", method="POST", status="401"}
Prometheus 容器已成功抓取所有 6 个副本。因此,您可以简单地使用 PromQL 在 Grafana 仪表板中对结果进行聚合和分组。
例如,您可以使用以下查询在 Grafana 中创建一个面板,以对所有节点上 500 个响应代码的计数进行求和:
sum(error_counter_total{job="backend", method="POST", status="500"})
.
您可以在此处查看其他聚合运算符。