[我正在使用头盔prometheus-operator图表:https://github.com/helm/charts/blob/master/stable/prometheus-operator/values.yaml,并且我希望它可以像以前一样通过从硬编码服务名称和values.yml中的端口来从golang api获取自定义指标。文件:
scrape_configs:
- job_name: 'custom-api'
static_configs:
- targets: ['custom-api-service.backend.svc.cluster.local:8000']
但是,随着我拥有更多的微服务,我知道它也可以使用_meta
标签动态地完成。例:__meta_kubernetes_service_name
但是,我还没有弄清楚我应该从values.yaml文件中进行哪些修改以使其正常工作。
[Grafana正在从custom-api
获取我的CPU和内存使用率,但是custom-api
未显示在Prometheus仪表板的目标选项卡中,这很奇怪...
这些是我的服务:
apiVersion: v1
kind: Service
metadata:
name: custom-api-service
namespace: backend
labels:
service: custom-api-service
spec:
type: NodePort
ports:
- port: 8000
targetPort: 8000
nodePort: 30080
protocol: TCP
name: custom-api
selector:
component: goapi
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: servicemonitor
namespace: backend
labels:
service: servicemonitor
spec:
selector:
matchLabels:
service: custom-api-service
endpoints:
- port: custom-api
您将必须创建一个Service monitor CRD才能抓取指标。
假设您有一个k8s服务(在这里为example-app
),该服务用于与您的微服务进行通信。确保您的微服务在某个端口公开了Prometheus指标,并且k8s服务还包括该端口(此处为prom
)。
kind: Service
apiVersion: v1
metadata:
name: example-app
labels:
app: example-app
spec:
selector:
app: example-app
ports:
- name: prom
port: 8080
- name: other-port
port: xxxx
此服务对象由ServiceMonitor发现,后者以相同的方式进行选择。您需要确保serviceMonitor对象的matchLabels
与服务的metadata.labels
相匹配。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: example-app
labels:
team: frontend
spec:
selector:
matchLabels:
app: example-app
endpoints:
- port: prom
一旦创建了serviceMonitor对象,操作员控制器将为您完成其余工作(即,更新Prometheus配置)。您也可以通过serviceMonitor对象提供自定义配置。
更多详细信息,请访问Getting started with Prometheus operator。