[英]Aggregate metrics from prometheus endpoint
我有一个在 k8s 集群中运行的服务,我想使用 Prometheus Operator 对其进行监控。 该服务有一个/metrics
端点,它返回简单的数据,例如:
myapp_first_queue_length 12
myapp_first_queue_processing 2
myapp_first_queue_pending 10
myapp_second_queue_length 4
myapp_second_queue_processing 4
myapp_second_queue_pending 0
API 在多个 pod 中运行,在基本Service
object 后面:
apiVersion: v1
kind: Service
metadata:
name: myapp-api
labels:
app: myapp-api
spec:
ports:
- port: 80
name: myapp-api
targetPort: 80
selector:
app: myapp-api
我已经使用kube-prometheus
安装了 Prometheus,并添加了一个ServiceMonitor
object:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: myapp-api
labels:
app: myapp-api
spec:
selector:
matchLabels:
app: myapp-api
endpoints:
- port: myapp-api
path: /api/metrics
interval: 10s
Prometheus 发现所有运行 API 实例的 pod,我可以从 Prometheus 图表中查询这些指标。 到目前为止,一切都很好。
问题是,这些指标是聚合的——每个 API 实例/pod 没有自己的队列,因此没有理由从每个实例收集这些值。 事实上,这似乎会引起混淆——如果 Prometheus 从 10 个 pod 收集相同的值,看起来总值是实际值的 10 倍,除非你知道应用avg
之类的东西。
有没有办法告诉普罗米修斯“这个值已经聚合并且应该始终如此呈现”或者更好的是,告诉普罗米修斯通过该服务的内部负载均衡器只抓取一次值,而不是击中每个吊舱?
编辑
实际的 API 只是一个简单的Deployment
object:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-api
labels:
app: myapp-api
spec:
replicas: 2
selector:
matchLabels:
app: myapp-api
template:
metadata:
labels:
app: myapp-api
spec:
imagePullSecrets:
- name: mysecret
containers:
- name: myapp-api
image: myregistry/myapp:2.0
ports:
- containerPort: 80
volumeMounts:
- name: config
mountPath: "app/config.yaml"
subPath: config.yaml
volumes:
- name: config
configMap:
name: myapp-api-config
在您的情况下,为了避免指标聚合,您可以使用avg()
运算符或PodMonitor而不是ServiceMonitor
,如您的帖子中所述。
PodMonitor
自定义资源定义 (CRD) 允许以声明方式定义应如何监视一组动态 pod。 使用 label 选项定义选择要使用所需配置监视哪些 pod。
这样,它将仅从指定的 pod 中抓取指标。
Prometheus Operator 开发人员正在(截至 2023 年 1 月)开发通用 ScrapeConfig CRD,旨在准确解决您描述的用例: https://github.com/prometheus-operator/prometheus-operator/issues/2787
同时,您可以使用 Prometheus Operator 的“ 附加抓取配置”工具来设置自定义抓取目标。
这个想法是配置的抓取目标在每个抓取周期只会被命中一次,服务 DNS 会将请求负载平衡到服务后面的 N 个 pod 之一,从而避免重复指标。
特别是,您可以按如下方式覆盖kube-prometheus-stack
Helm 值:
prometheus:
prometheusSpec:
additionalScrapeConfigs:
- job_name: 'myapp-api-aggregates':
metrics_path: '/api/metrics'
scheme: 'http'
static_configs:
- targets: ['myapp-api:80']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.