Skip to content

以下示例来自github

创建一个实例deploy,创建的pod带有labels: app: example-app

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: example-app
  template:
    metadata:
      labels:
        app: example-app
    spec:
      containers:
      - name: example-app
        image: fabxc/instrumented_app
        ports:
        - name: web
          containerPort: 8080

创建对应的svc

yaml
kind: Service
apiVersion: v1
metadata:
  name: example-app
  labels:
    app: example-app
spec:
  selector:
    app: example-app
  ports:
  - name: web
    port: 8080

该svc选取label为app: example-app

ServiceMonitor来进行监控

使用ServiceMonitor来对其进行监控

该ServiceMonitor对选中所有label为 app: example-app的svc,并且自己有一个label为team: frontend,可以在这个ServiceMonitor中写下所有前端团队的svc,这样就简单了许多

yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: example-app
  labels:
    team: frontend
spec:
  selector:
    matchLabels:
      app: example-app
  endpoints:
  - port: web

修改prometheus或者创建新的

通过spec.serviceMonitorSelector来对上面写的ServiceMonitor来进行监控

yaml
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: prometheus
spec:
  serviceAccountName: prometheus
  serviceMonitorSelector:
    matchLabels:
      team: frontend
  resources:
    requests:
      memory: 400Mi
  enableAdminAPI: false

总结

通过prometheus选中svcMonitor,svcMonitor选中svc,svc选中pod,进行对pod的监控,通过label来进行监控

使用PodMonitors进行pod监控

和ServiceMonitor不一样,PodMonitors不需要创建svc,使用spec.selector告诉prometheus哪些pod需要监控

PodMonitors

yaml
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: example-app
  labels:
    team: frontend
spec:
  selector:
    matchLabels:
      app: example-app
  podMetricsEndpoints:
  - port: web

和svcMonitor相同,这里需要修改spec.podMonitorSelector

yaml
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: prometheus
spec:
  serviceAccountName: prometheus
  podMonitorSelector:
    matchLabels:
      team: frontend
  resources:
    requests:
      memory: 400Mi
  enableAdminAPI: false