±à¼ÍƼö: |
±¾ÎĽ«×ܽáÒ»ÏÂÎÒÃÇĿǰʹÓÃPrometheus¶ÔKubernetes¼¯Èº¼à¿ØµÄʵ¼ù¡£
ÎÒÃÇÑ¡ÔñPrometheus×÷Ϊ¼à¿ØÏµÍ³Ö÷ÒªÔÚÒÔϸ÷²ãÃæÊµÏÖ¼à¿Ø£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚKubernetesÖÐÎÄÉçÇø£¬ÓÉ»ðÁú¹ûÈí¼þDelores±à¼ÍƼö¡£ |
|
»ù´¡ÉèÊ©²ã£º¼à¿Ø¸÷¸öÖ÷»ú·þÎñÆ÷×ÊÔ´(°üÀ¨KubernetesµÄNodeºÍ·ÇKubernetesµÄNode)£¬ÈçCPU,ÄÚ´æ,ÍøÂçÍÌͺʹø¿íÕ¼ÓÃ,´ÅÅÌI/OºÍ´ÅÅÌʹÓõÈÖ¸±ê¡£
Öмä¼þ²ã£º¼à¿Ø¶ÀÁ¢²¿ÊðÓÚKubernetes¼¯ÈºÖ®ÍâµÄÖмä¼þ£¬ÀýÈ磺MySQL¡¢Redis¡¢RabbitMQ¡¢ElasticSearch¡¢NginxµÈ¡£
Kubernetes¼¯Èº£º¼à¿ØKubernetes¼¯Èº±¾ÉíµÄ¹Ø¼üÖ¸±ê
Kubernetes¼¯ÈºÉϲ¿ÊðµÄÓ¦Óãº¼à¿Ø²¿ÊðÔÚKubernetes¼¯ÈºÉϵÄÓ¦ÓÃ
1.»ù´¡ÉèÊ©²ãºÍÖмä¼þ²ãµÄ¼à¿Ø
ÆäÖлù´¡ÉèÊ©²ã¼à¿ØÖ¸±êµÄÀÈ¡¿Ï¶¨ÊÇÀ´ÔÚPrometheusµÄnode_exporter£¬ÒòΪÎÒÃÇÒª¼à¿ØµÄ·þÎñÆ÷½Úµã¼È°üº¬Kubernetes½ÚµãÓÖ°üº¬ÆäËû²¿Êð¶ÀÁ¢Öмä¼þµÄ½Úµã£¬ ËùÒÔÎÒÃDz¢Ã»Óн«node_exporterÒÔdaemonsetµÄÐÎʽ²¿Êðµ½k8sÉÏ£¬¶øÊÇʹÓÃansible½«node_exporterÒÔ¶þ½øÖƵÄÐÎʽ²¿Êðµ½ËùÓÐÒª¼à¿ØµÄ·þÎñÆ÷ÉÏ¡£ ¶ø¸ºÔð´Ónode_exporterÀȡָ±êµÄPrometheusÒ²ÊÇÓÃansible¶ÀÁ¢²¿ÊðÔÚKubernetes¼¯ÈºÍⲿµÄ¡£PrometheusµÄÅäÖÃÎļþprometheus.ymlʹÓÃansibleµÄj2Ä£°åÉú³É¡£
Öмä²ãµÄ¼à¿ØºÍ»ù´¡ÉèÊ©²ã¼à¿ØÀàËÆ£¬Ê¹ÓÃansibleÔÚ¸÷¸öÖмä¼þËùÔÚµÄÖ÷»úÉϲ¿Êð¸÷¸öÖмä¼þµÄexporter£¬ÈÔȻʹÓÃÉÏÃæÔÚKubernetes¼¯ÈºÍⲿµÄÕâ¸öPrometheus´ÓÕâЩexporterÀȡָ±ê£¬PrometheusµÄÅäÖÃÎļþprometheus.ymlʹÓÃansibleµÄj2Ä£°åÉú³É¡£
2.Kubernetes¼¯ÈºµÄ¼à¿Ø
ҪʵÏÖ¶ÔKubernetes¼¯ÈºµÄ¼à¿Ø£¬ÒòΪKubernetesµÄrbac»úÖÆÒÔ¼°Ö¤ÊéÈÏÖ¤£¬µ±È»ÊǰÑPrometheus²¿ÊðÔÚKubernetes¼¯ÈºÉÏ×î·½±ã¡£¿ÉÊÇÎÒÃÇĿǰµÄ¼à¿ØÏµÍ³ÊÇÒÔk8s¼¯ÈºÍⲿµÄPrometheusΪÖ÷µÄ£¬grafanaºÍ¸æ¾¯¶¼ÊÇʹÓÃÕâ¸öÍⲿµÄPrometheus£¬Èç¹û»¹ÐèÒªÔÚKubernetes¼¯ÈºÄÚ²¿²¿ÊðÒ»¸öPrometheusµÄ»°Ò»¶¨Òª°ÑËüͰÍⲿµÄPrometheusÁªºÏÆðÀ´£¬ºÃÔÚPrometheusÖ§³ÖFederation¡£
2.1 PrometheusµÄFederation¼ò½é
FederationÔÊÐíÒ»¸öPrometheus´ÓÁíÒ»¸öPrometheusÖÐÀȡijЩָ¶¨µÄʱÐòÊý¾Ý¡£FederationÊÇPrometheusÌṩµÄÀ©Õ¹»úÖÆ£¬ÔÊÐíPrometheus´ÓÒ»¸ö½ÚµãÀ©Õ¹µ½¶à¸ö½Úµã£¬Êµ¼ÊʹÓÃÖÐÒ»°ã»áÀ©Õ¹³ÉÊ÷×´µÄ²ã¼¶½á¹¹¡£ÏÂÃæÊÇPrometheus¹Ù·½ÎĵµÖжÔfederationµÄÅäÖÃʾÀý£º
- job_name:
'federate'
scrape_interval: 15s
honor_labels: true
metrics_path: '/federate'
params:
'match[]':
- '{job="prometheus"}'
- '{__name__=~"job:.*"}'
static_configs:
- targets:
- 'source-prometheus-1:9090'
- 'source-prometheus-2:9090'
- 'source-prometheus-3:9090' |
Õâ¶ÎÅäÖÃËùÊôµÄPrometheus½«´Ósource-prometheus-1 ~ 3Õâ3¸öPrometheusµÄ/federate¶ËµãÀÈ¡¼à¿ØÊý¾Ý¡£ match[]²ÎÊýÖ¸¶¨ÁËÖ»ÀÈ¡´øÓÐjob=¡±prometheus±êÇ©µÄÖ¸±ê£¬»òÕßÃû³ÆÒÔjob¿ªÍ·µÄÖ¸±ê¡£
2.2 ÔÚKubernetesÉϲ¿ÊðPrometheus
Ç°ÃæÒѾ½éÉÜÁ˽«Ê¹ÓÃPrometheus federationµÄÐÎʽ£¬k8s¼¯ÈºÍⲿµÄPrometheus´Ók8s¼¯ÈºÖÐPrometheusÀÈ¡¼à¿ØÊý¾Ý£¬ÍⲿµÄPrometheus²ÅÊÇ¼à¿ØÊý¾ÝµÄ´æ´¢¡£ k8s¼¯ÈºÖв¿ÊðPrometheusµÄÊý¾Ý´æ´¢²ã¿ÉÒÔ¼òµ¥µÄʹÓÃemptyDir,Êý¾ÝÖ»±£Áô24Сʱ(»ò¸ü¶Ìʱ¼ä)¼´¿É£¬²¿ÊðÔÚk8s¼¯ÈºÉϵÄÕâ¸öPrometheusʵÀý¼´Ê¹·¢Éú¹ÊÕÏÒ²¿ÉÒÔ·ÅÐĵÄÈÃËüÔÚ¼¯Èº½ÚµãÖÐÆ¯ÒÆ¡£
ÔÚk8sÉϲ¿ÊðPrometheusÊ®·Ö¼òµ¥£¬Ö»ÐèÒªÏÂÃæ4¸öÎļþ£ºprometheus.rbac.yml, prometheus.config.yml, prometheus.deploy.yml, prometheus.svc.yml¡£ ÏÂÃæ¸øµÄÀý×ÓÖн«Prometheus²¿Êðµ½kube-systemÃüÃû¿Õ¼ä¡£
prometheus.rbac.yml¶¨ÒåÁËPrometheusÈÝÆ÷·ÃÎÊk8s apiserverËùÐèµÄServiceAccountºÍClusterRole¼°ClusterRoleBinding£¬²Î¿¼PrometheusÔ´ÂëÖпâÖеÄÀý×Ó:
apiVersion:
rbac. authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: prometheus
rules:
- apiGroups: [""]
resources:
- nodes
- nodes/proxy
- services
- endpoints
- pods
verbs: ["get", "list", "watch"]
- apiGroups:
- extensions
resources:
- ingresses
verbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics"]
verbs: ["get"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus
namespace: kube-system
---
apiVersion: rbac. authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: prometheus
roleRef:
apiGroup: rbac. authorization.k8s.io
kind: ClusterRole
name: prometheus
subjects:
- kind: ServiceAccount
name: prometheus
namespace: kube-system |
prometheus.config.yml configmapÖеÄprometheusµÄÅäÖÃÎļþ£¬²Î¿¼PrometheusÔ´ÂëÖпâÖеÄÀý×Ó:
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-config
namespace: kube-system
data:
prometheus.yml: |
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'kubernetes-apiservers'
kubernetes_sd_configs:
- role: endpoints
scheme: https
tls_config:
ca_file: /var/run/secrets /kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets /kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels: [__meta_kubernetes_namespace,
__meta_kubernetes_service_name, __meta_kubernetes _endpoint_port_name]
action: keep
regex: default;kubernetes;https
- job_name: 'kubernetes-nodes'
kubernetes_sd_configs:
- role: node
scheme: https
tls_config:
ca_file: /var/run/ secrets/kubernetes.io /serviceaccount/ca.crt
bearer_token_file: /var/run/secrets /kubernetes.io/serviceaccount/token
relabel_configs:
- action: labelmap
regex: __meta_kubernetes _node_label_(.+)
- target_label: __address__
replacement: kubernetes. default.svc:443
- source_labels: [__meta_kubernetes_node_name]
regex: (.+)
target_label: __metrics_path__
replacement: /api/v1/nodes/${1} /proxy/metrics
- job_name: 'kubernetes-cadvisor'
kubernetes_sd_configs:
- role: node
scheme: https
tls_config:
ca_file: /var/run/secrets /kubernetes.io /serviceaccount/ca.crt
bearer_token_file: /var/run/secrets /kubernetes.io/serviceaccount/token
relabel_configs:
- action: labelmap
regex: __meta_kubernetes _node_label_(.+)
- target_label: __address__
replacement: kubernetes. default.svc:443
- source_labels: [__meta_kubernetes_node_name]
regex: (.+)
target_label: __metrics_path__
replacement: /api/v1 /nodes/${1}/proxy /metrics/cadvisor
- job_name: 'kubernetes- service-endpoints'
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
- source_labels: [__meta_ kubernetes_service _annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_ kubernetes_service _annotation_prometheus_io_scheme]
action: replace
target_label: __scheme__
regex: (https?)
- source_labels: [__met a_kubernetes_service _annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_service_annotation _prometheus_io_port]
action: replace
target_label: __address__
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
- action: labelmap
regex: __meta_kubernetes _service_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_service_name]
action: replace
target_label: kubernetes_name
- job_name: 'kubernetes-services'
kubernetes_sd_configs:
- role: service
metrics_path: /probe
params:
module: [http_2xx]
relabel_configs:
- source_labels: [__meta_kubernetes_service _annotation_prometheus_io_probe]
action: keep
regex: true
- source_labels: [__address__]
target_label: __param_target
- target_label: __address__
replacement: blackbox -exporter.example.com:9115
- source_labels: [__param_target]
target_label: instance
- action: labelmap
regex: __meta_kubernetes _service_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_service_name]
target_label: kubernetes_name
- job_name: 'kubernetes-ingresses'
kubernetes_sd_configs:
- role: ingress
relabel_configs:
- source_labels: [__meta_kubernetes_ingress _annotation_prometheus_io_probe]
action: keep
regex: true
- source_labels: [__meta_kubernetes_ingress_scheme, __address__,__meta_ kubernetes_ingress_path]
regex: (.+);(.+);(.+)
replacement: ${1}://${2}${3}
target_label: __param_target
- target_label: __address__
replacement: blackbox- exporter.example.com:9115
- source_labels: [__param_target]
target_label: instance
- action: labelmap
regex: __meta_kubernetes _ingress_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_ingress_name]
target_label: kubernetes_name
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod _annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_pod _annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_pod_ annotation_prometheus_io_port]
action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
target_label: __address__
- action: labelmap
regex: __meta_kubernetes _pod_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_pod_name]
action: replace
target_label: kubernetes_pod_name |
prometheus.deploy.yml¶¨ÒåPrometheusµÄ²¿Êð£º
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
labels:
name: prometheus-deployment
name: prometheus
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: prometheus
template:
metadata:
labels:
app: prometheus
spec:
containers:
- image: harbor.frognew .com/prom/prometheus:2.0.0
name: prometheus
command:
- "/bin/prometheus"
args:
- "--config.file=/etc /prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--storage.tsdb.retention=24h"
ports:
- containerPort: 9090
protocol: TCP
volumeMounts:
- mountPath: "/prometheus"
name: data
- mountPath: "/etc/prometheus"
name: config-volume
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 500m
memory: 2500Mi
serviceAccountName: prometheus
imagePullSecrets:
- name: regsecret
volumes:
- name: data
emptyDir: {}
- name: config-volume
configMap:
name: prometheus-config |
prometheus.svc.yml¶¨ÒåPrometheusµÄServic£¬ÐèÒª½«PrometheusÒÔNodePort, LoadBalancer»òʹÓÃIngress±©Â¶µ½¼¯ÈºÍⲿ£¬ÕâÑùÍⲿµÄPrometheus²ÅÄÜ·ÃÎÊËü£º
---
kind: Service
apiVersion: v1
metadata:
labels:
app: prometheus
name: prometheus
namespace: kube-system
spec:
type: NodePort
ports:
- port: 9090
targetPort: 9090
nodePort: 30003
selector:
app: prometheus |
2.3 ÅäÖÃPrometheus Federation
Íê³ÉKubernetes¼¯ÈºÉϵÄPrometheusµÄ²¿ÊðÖ®ºó£¬ÏÂÃæ½«ÅäÖü¯ÈºÍⲿµÄPrometheusʹÆä´Ó¼¯ÈºÄÚ²¿µÄPrometheusÀÈ¡Êý¾Ý¡£ ʵ¼ÊÉÏÖ»ÐèÒÔ¾²Ì¬ÅäÖõÄÐÎʽÌí¼ÓÒ»¸öjob¾Í¿ÉÒÔ£º
- job_name:
'federate'
scrape_interval: 15s
honor_labels: true
metrics_path: '/federate'
params:
'match[]':
- '{job=~"kubernetes-.*"}'
static_configs:
- targets:
- '<nodeip>:30003' |
×¢ÒâÉÏÃæµÄÅäÖÃÊÇÍⲿPrometheusÀÈ¡k8s¼¯ÈºÉÏÃæËùÓÐÃû³ÆÒÔkubernetes-µÄjobµÄ¼à¿ØÊý¾Ý¡£
2.4 Kubernetes¼¯ÈºGrafana Dashboard
¼à¿ØDashboardʹÓÃKubernetes cluster monitoring (via Prometheus)Õâ¸ö¼´¿É¡£ ÁíÍâ¹ØÓÚPodºÍDeployment»¹ÓÐÕâÁ½¸öDashboard£ºKubernetes Pod MetricsºÍKubernetes Deployment metrics¡£
2.5 Kubernetes¼¯Èº¸æ¾¯¹æÔò
¿ÉÒÔ¶ÔapiserverºÍkubeletÁ½¸ö¹Ø¼ü×é¼þµÄ´æ»î״̬½øÐÐ¼à¿Ø£¬¹æÔòÈçÏ£º
up{job=~"kubernetes- apiservers|kubernetes-nodes |kubernetes-cadvisor"}
== 0 |
¸ü¶àµÄ¸æ¾¯¹æÔò¿ÉÒÔͨ¹ý²é¿´ÉÏÃæ2.4ÖеÄgrafana dashboardÖÐ¼à¿ØµÄ¹Ø¼üÖ¸±ê£¬Ñ¡ÔñºÍºÏÊʵÄÖ¸±ê½øÐÐÉèÖã¬Êµ¼ÊÉÏÒ»Ì×ºÃµÄ¼à¿ØÏµÍ³µÄ¼à¿ØÖ¸±êºÍ¸æ¾¯¹æÔò²¢²»ÊÇÔ½¶àÔ½ºÃ¡£
3.Kubernetes¼¯ÈºÉϲ¿ÊðÓ¦ÓÃµÄ¼à¿Ø
Kubernetes¼¯ÈºÉϲ¿ÊðÓ¦ÓÃµÄ¼à¿ØÐèÒª´ÓÁ½¸ö·½Ã棺
Kubernetes¼¯ÈºÉÏPod, DaemonSet, Deployment, Job, CronJobµÈ¸÷ÖÖ×ÊÔ´¶ÔÏóµÄ״̬ÐèÒª¼à¿Ø£¬ÕâÒ²·´Ó³ÁËʹÓÃÕâЩ×ÊÔ´²¿ÊðµÄÓ¦ÓõÄ״̬¡£µ«Í¨¹ý²é¿´Ç°ÃæPrometheus´Ók8s¼¯ÈºÀÈ¡µÄÖ¸±ê(ÕâЩָ±êÖ÷ÒªÀ´×ÔapiserverºÍkubeletÖм¯³ÉµÄcAdvisor)£¬²¢Ã»ÓоßÌåµÄ¸÷ÖÖ×ÊÔ´¶ÔÏóµÄ״ָ̬±ê¡£¶ÔÓÚPrometheusÀ´Ëµ£¬µ±È»ÊÇÐèÒªÒýÈëеÄexporterÀ´±©Â¶ÕâЩָ±ê£¬KubernetesÌṩÁËÒ»¸ökube-state-metricsÕýʽÎÒÃÇÐèÒª¡£
Kubernetes¼¯ÈºÉÏÓ¦ÓÃÄÚ²¿µÄ¼à¿Ø£¬Õâ¸öÓë¾ßÌåÓ¦ÓõĿª·¢ÓïÑÔ£¬¿ª·¢¿ò¼ÜºÍ¾ßÌå¼¼Êõ½ôÃÜÏà¹Ø£¬±ÈÈçJavaÓ¦ÓõÄJVM¼à¿Ø£¬GoÓ¦ÓõÄGC¼à¿ØµÈµÈ£¬Õâ¸öÐèÒªÓ¦ÓÃ×ÔÉí×÷ΪExporter±©Â¶ÕâЩָ±ê»òÔÚÓ¦ÓõÄPodÖÐÆðÒ»¸öexporterµÄsidecarÈÝÆ÷¡£
ÕâÀォÖ÷Òª½éÉÜkube-state-metrics£¬¶ø¶ÔÓÚÓ¦ÓÃÄÚ²¿µÄ¼à¿ØÊµ¼ùºó±ßÓÐʱ¼äÔÙµ¥¶À×ܽᡣkube-state-metricsʹÓÃkubernetesµÄgoÓïÑÔ¿Í»§¶Ëclient-go¿ÉÒÔ´ÓKubernetes¼¯ÈºÖлñÈ¡¸÷ÖÖ×ÊÔ´¶ÔÏóµÄÖ¸±ê¡£
3.1 ÔÚKubernetesÉϲ¿Êðkube-state-metrics
kube-state-metricsÒѾ¸ø³öÁËÔÚKubernetes²¿ÊðµÄmanifest¶¨ÒåÎļþ£¬¾ßÌåµÄÎļþ¶¨Òå¶¼ÔÚÕâÀï¡£
½«kube-state-metrics²¿Êðµ½KubernetesÉÏÖ®ºó£¬¾Í»á·¢ÏÖKubernetes¼¯ÈºÖеÄPrometheus»áÔÚkubernetes-service-endpointsÕâ¸öjobÏÂ×Ô¶¯·þÎñ·¢ÏÖkube-state-metrics£¬²¢¿ªÊ¼ÀÈ¡metrics£¬µ±È»¼¯ÈºÍⲿµÄPrometheusÒ²ÄÜ´Ó¼¯ÈºÖеÄPrometheusÀÈ¡µ½ÕâЩÊý¾ÝÁË¡£ÕâÊÇÒòΪÉÏ2.2ÖÐprometheus.config.ymlÖÐPrometheusµÄÅäÖÃÎļþjob kubernetes-service-endpointsµÄÅäÖ᣶ø²¿Êðkube-state-metricsµÄmanifest¶¨ÒåÎļþkube-state-metrics-service.yaml¶Ôkube-state-metricsServiceµÄ¶¨Òå°üº¬annotation prometheus.io/scrape: ¡®true¡¯£¬Òò´Ëkube-state-metricsµÄendpoint¿ÉÒÔ±»Prometheus×Ô¶¯·þÎñ·¢ÏÖ¡£
¹ØÓÚkube-state-metrics±©Â¶µÄËùÓÐ¼à¿ØÖ¸±ê¿ÉÒԲο¼ kube-state-metricsµÄÎĵµkube-state-metrics Documentation¡£
3.2 ¸æ¾¯¹æÔò
ĿǰÎÒÃǸù¾Ý´Ókube-state-metrics»ñÈ¡µÄ¼à¿ØÖ¸±ê£¬Öƶ¨ÁËÒÔϸ澯¹æÔò£º
´æÔÚÖ´ÐÐʧ°ÜµÄJob: kube_job_status_failed {job=¡±kubernetes-service-endpoints¡±, k8s_app=¡±kube-state-metrics¡±}==1
¼¯Èº½Úµã״̬´íÎó: kube_node_status_condition {condition=¡±Ready¡±,status!=¡±true¡±}==1
¼¯Èº½ÚµãÄÚ´æ»ò´ÅÅÌ×ÊÔ´¶Ìȱ: kube_node_status_condition {condition=~¡±OutOfDisk|MemoryPressure |DiskPressure¡±,status!=¡±false¡±}==1
¼¯ÈºÖдæÔÚʧ°ÜµÄPVC£ºkube_persistentvolumeclaim _status_phase{phase=¡±Failed¡±}==1
¼¯ÈºÖдæÔÚÆô¶¯Ê§°ÜµÄPod£º kube_pod_status_phase{phase=~¡±Failed|Unknown¡±}==1
×î½ü30·ÖÖÓÄÚÓÐPodÈÝÆ÷ÖØÆô: changes(kube_pod_container_status_restarts[30m])>0
ÆäÖйØÓÚPod״̬µÄµÄ¸æ¾¯ÓÈÎªÖØÒª£¬¿ÉÒÔÔÚJenkinsÍê³ÉCI/CD×Ô¶¯·¢²¼ºó£¬²»ÓÃÊØÔÚKubernetes DashboardÅÔ±ßÈ·ÈÏÕâ¸öDeployment¹ØÁªµÄPodÒѾȫ²¿Æô¶¯£¬ÒòΪÈç¹û³öÏÖÎÊÌâÊÇ»áÊÕµ½PrometheusµÄ¸æ¾¯µÄ¡£
|