pod和svc的自動發現和監控
按照之前的方法來部署prometheus監控ingress-Nginx和redis我們實際發現,一個一個去配置job很麻煩,不如自動發現pod和svc,把新生成的pod和svc等資源,自動加入到系統的pod和svc監控中去。
實際上我們使用的官方k8s部署prometheus已經幫我們完成,如果其他方法安裝的prometheus沒有自動發現,也可以把這些生成自動發現。例如PrometheusOprater方式
cat prometheus/prometheus-configmap.yaml …. - job_name: kubernetes-service-endpoints kubernetes_sd_configs: - role: endpoints relabel_configs: - action: keep regex: true source_labels: - __meta_kubernetes_service_annotation_prometheus_io_scrape - action: replace regex: (https?) source_labels: - __meta_kubernetes_service_annotation_prometheus_io_scheme target_label: __scheme__ - action: replace regex: (.+) source_labels: - __meta_kubernetes_service_annotation_prometheus_io_path target_label: __metrics_path__ - action: replace regex: ([^:]+)(?::\d+)?;(\d+) replacement: $1:$2 source_labels: - __address__ - __meta_kubernetes_service_annotation_prometheus_io_port target_label: __address__ - action: labelmap regex: __meta_kubernetes_service_label_(.+) - action: replace source_labels: - __meta_kubernetes_namespace target_label: kubernetes_namespace - action: replace source_labels: - __meta_kubernetes_service_name target_label: kubernetes_name ….. - job_name: kubernetes-pods kubernetes_sd_configs: - role: pod relabel_configs: - action: keep regex: true source_labels: - __meta_kubernetes_pod_annotation_prometheus_io_scrape - action: replace regex: (.+) source_labels: - __meta_kubernetes_pod_annotation_prometheus_io_path target_label: __metrics_path__ - action: replace regex: ([^:]+)(?::\d+)?;(\d+) replacement: $1:$2 source_labels: - __address__ - __meta_kubernetes_pod_annotation_prometheus_io_port target_label: __address__ - action: labelmap regex: __meta_kubernetes_pod_label_(.+) - action: replace source_labels: - __meta_kubernetes_namespace target_label: kubernetes_namespace - action: replace source_labels: - __meta_kubernetes_pod_name target_label: kubernetes_pod_name
要想自動發現集群中的 Service,就需要我們在 Service 的annotation區域添加:prometheus.io/scrape=true的聲明
要想自動發現集群中的 pod,也需要我們在 pod 的annotation區域添加:prometheus.io/scrape=true的聲明
例如我們把之前的redis監控給修改一下,做成pod和svc,自動發現
# cat prome-redis.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: redis namespace: kube-system spec: template: metadata: annotations: prometheus.io/scrape: "true" prometheus.io/port: "9121" labels: app: redis spec: containers: - name: redis image: redis:4 resources: requests: cpu: 100m memory: 100Mi ports: - containerPort: 6379 - name: redis-exporter image: oliver006/redis_exporter:latest resources: requests: cpu: 100m memory: 100Mi ports: - containerPort: 9121 --- kind: Service apiVersion: v1 metadata: annotations: prometheus.io/scrape: "true" prometheus.io/port: "9121" name: redis namespace: kube-system spec: selector: app: redis ports: - name: redis port: 6379 targetPort: 6379 - name: prom port: 9121 targetPort: 9121


當然會產生重復,因為采集點是一樣的:9121,實際配置一個就行了,看起來系統配置的pod自動發現更全面。
