7.5 ?kube-state-metrics?
安裝和配置?Alertmanager-發(fā)送報(bào)警到?qq?郵箱
cat alertmanager-cm.yaml
kind: ConfigMap
apiVersion: v1
metadata:
? name: alertmanager
? namespace: monitor-sa
data:
? alertmanager.yml: |-
? ? global:
? ? ? resolve_timeout: 1m
? ? ? smtp_smarthost: 'smtp.163.com:25'
? ? ? smtp_from: 'cadr***@163.com'
? ? ? smtp_auth_username: '1815871****'
? ? ? smtp_auth_password: 'BDBPRMLNZGKWRFJP'
? ? ? smtp_require_tls: false
? ? route:? ? ? ? ? ? ? ? ? ? ? #用于配置告警分發(fā)策略
? ? ? group_by: [alertname]? ? # 采用哪個(gè)標(biāo)簽來(lái)作為分組依據(jù)
? ? ? group_wait: 10s? ? ? ? ? ? # 組告警等待時(shí)間。也就是告警產(chǎn)生后等待 10s,如果有同組告警一起發(fā)出
? ? ? group_interval: 10s? ? ? ? #兩組告警的間隔時(shí)間
? ? ? repeat_interval: 10m? ? ? # 重復(fù)告警的間隔時(shí)間,減少相同郵件發(fā)送頻率
? ? ? receiver: default-receiver? #設(shè)置默認(rèn)接受人
? ? receivers:
? ? - name: 'default-receiver'
? ? ? email_configs:
? ? ? - to: '137855***@qq.com'
? ? ? ? send_resolved: true
alertmanager?配置文件解釋說(shuō)明: ??
smtp_smarthost: 'smtp.163.com:25'
#用于發(fā)送郵件的郵箱的?SMTP?服務(wù)器地址+端口?
smtp_from: 'cadr****@163.com'
#這是指定從哪個(gè)郵箱發(fā)送報(bào)警?
smtp_auth_username: '181****'
#這是發(fā)送郵箱的認(rèn)證用戶,不是郵箱名?
smtp_auth_password: 'BDBPRMLNZGKWRFJP'
#這是發(fā)送郵箱的授權(quán)碼而不是登錄密碼?email_configs:
- to: '1378******@qq.com'
#to 后面指定發(fā)送到哪個(gè)郵箱,我發(fā)送到我的?qq?郵箱,大家需要寫(xiě)自己的郵箱地址,不應(yīng)該跟?smtp_from?的郵箱名字重復(fù)
#通過(guò)?kubectl apply?更新文件
kubectl apply -f alertmanager-cm.yaml
cat prometheus-alertmanager-cfg.yaml
kind: ConfigMap
apiVersion: v1
metadata:
? labels:
? ? app: prometheus
? name: prometheus-config
? namespace: monitor-sa
data:
? prometheus.yml: |
? ? rule_files:
? ? - /etc/prometheus/rules.yml
? ? alerting:
? ? ? alertmanagers:
? ? ? - static_configs:
? ? ? ? - targets: ["localhost:9093"]
? ? global:
? ? ? scrape_interval: 15s
? ? ? scrape_timeout: 10s
? ? ? evaluation_interval: 1m
? ? scrape_configs:
? ? - job_name: 'kubernetes-node'
? ? ? kubernetes_sd_configs:
? ? ? - role: node
? ? ? relabel_configs:
? ? ? - source_labels: [__address__]
? ? ? ? regex: '(.*):10250'
? ? ? ? replacement: '${1}:9100'
? ? ? ? target_label: __address__
? ? ? ? action: replace
? ? ? - action: labelmap
? ? ? ? regex: __meta_kubernetes_node_label_(.+)
? ? - job_name: 'kubernetes-node-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-apiserver'
? ? ? 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-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: [__meta_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-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
? ? - job_name: 'kubernetes-schedule'
? ? ? scrape_interval: 5s
? ? ? static_configs:
? ? ? - targets: ['192.168.40.130:10251']
? ? - job_name: 'kubernetes-controller-manager'
? ? ? scrape_interval: 5s
? ? ? static_configs:
? ? ? - targets: ['192.168.40.130:10252']
? ? - job_name: 'kubernetes-kube-proxy'
? ? ? scrape_interval: 5s
? ? ? static_configs:
? ? ? - targets: ['192.168.40.130:10249','192.168.40.131:10249']
? ? - job_name: 'kubernetes-etcd'
? ? ? scheme: https
? ? ? tls_config:
? ? ? ? ca_file: /var/run/secrets/kubernetes.io/k8s-certs/etcd/ca.crt
? ? ? ? cert_file: /var/run/secrets/kubernetes.io/k8s-certs/etcd/server.crt
? ? ? ? key_file: /var/run/secrets/kubernetes.io/k8s-certs/etcd/server.key
? ? ? scrape_interval: 5s
? ? ? static_configs:
? ? ? - targets: ['192.168.40.130:2379']
? rules.yml: |
? ? groups:
? ? - name: example
? ? ? rules:
? ? ? - alert: kube-proxy的cpu使用率大于80%
? ? ? ? expr: rate(process_cpu_seconds_total{job=~"kubernetes-kube-proxy"}[1m]) * 100 > 80
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}組件的cpu使用率超過(guò)80%"
? ? ? - alert:? kube-proxy的cpu使用率大于90%
? ? ? ? expr: rate(process_cpu_seconds_total{job=~"kubernetes-kube-proxy"}[1m]) * 100 > 90
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}組件的cpu使用率超過(guò)90%"
? ? ? - alert: scheduler的cpu使用率大于80%
? ? ? ? expr: rate(process_cpu_seconds_total{job=~"kubernetes-schedule"}[1m]) * 100 > 80
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}組件的cpu使用率超過(guò)80%"
? ? ? - alert:? scheduler的cpu使用率大于90%
? ? ? ? expr: rate(process_cpu_seconds_total{job=~"kubernetes-schedule"}[1m]) * 100 > 90
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}組件的cpu使用率超過(guò)90%"
? ? ? - alert: controller-manager的cpu使用率大于80%
? ? ? ? expr: rate(process_cpu_seconds_total{job=~"kubernetes-controller-manager"}[1m]) * 100 > 80
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}組件的cpu使用率超過(guò)80%"
? ? ? - alert:? controller-manager的cpu使用率大于90%
? ? ? ? expr: rate(process_cpu_seconds_total{job=~"kubernetes-controller-manager"}[1m]) * 100 > 0
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}組件的cpu使用率超過(guò)90%"
? ? ? - alert: apiserver的cpu使用率大于80%
? ? ? ? expr: rate(process_cpu_seconds_total{job=~"kubernetes-apiserver"}[1m]) * 100 > 80
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}組件的cpu使用率超過(guò)80%"
? ? ? - alert:? apiserver的cpu使用率大于90%
? ? ? ? expr: rate(process_cpu_seconds_total{job=~"kubernetes-apiserver"}[1m]) * 100 > 90
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}組件的cpu使用率超過(guò)90%"
? ? ? - alert: etcd的cpu使用率大于80%
? ? ? ? expr: rate(process_cpu_seconds_total{job=~"kubernetes-etcd"}[1m]) * 100 > 80
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}組件的cpu使用率超過(guò)80%"
? ? ? - alert:? etcd的cpu使用率大于90%
? ? ? ? expr: rate(process_cpu_seconds_total{job=~"kubernetes-etcd"}[1m]) * 100 > 90
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}組件的cpu使用率超過(guò)90%"
? ? ? - alert: kube-state-metrics的cpu使用率大于80%
? ? ? ? expr: rate(process_cpu_seconds_total{k8s_app=~"kube-state-metrics"}[1m]) * 100 > 80
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.k8s_app}}組件的cpu使用率超過(guò)80%"
? ? ? ? ? value: "{{ $value }}%"
threshold: "80%"?
? ? ? - alert: kube-state-metrics的cpu使用率大于90%
? ? ? ? expr: rate(process_cpu_seconds_total{k8s_app=~"kube-state-metrics"}[1m]) * 100 > 0
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.k8s_app}}組件的cpu使用率超過(guò)90%"
? ? ? ? ? value: "{{ $value }}%"
threshold: "90%"?
? ? ? - alert: coredns的cpu使用率大于80%
? ? ? ? expr: rate(process_cpu_seconds_total{k8s_app=~"kube-dns"}[1m]) * 100 > 80
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.k8s_app}}組件的cpu使用率超過(guò)80%"
? ? ? ? ? value: "{{ $value }}%"
threshold: "80%"?
? ? ? - alert: coredns的cpu使用率大于90%
? ? ? ? expr: rate(process_cpu_seconds_total{k8s_app=~"kube-dns"}[1m]) * 100 > 90
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.k8s_app}}組件的cpu使用率超過(guò)90%"
? ? ? ? ? value: "{{ $value }}%"
threshold: "90%"?
? ? ? - alert: kube-proxy打開(kāi)句柄數(shù)>600
? ? ? ? expr: process_open_fds{job=~"kubernetes-kube-proxy"}? > 600
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}打開(kāi)句柄數(shù)>600"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: kube-proxy打開(kāi)句柄數(shù)>1000
? ? ? ? expr: process_open_fds{job=~"kubernetes-kube-proxy"}? > 1000
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}打開(kāi)句柄數(shù)>1000"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: kubernetes-schedule打開(kāi)句柄數(shù)>600
? ? ? ? expr: process_open_fds{job=~"kubernetes-schedule"}? > 600
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}打開(kāi)句柄數(shù)>600"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: kubernetes-schedule打開(kāi)句柄數(shù)>1000
? ? ? ? expr: process_open_fds{job=~"kubernetes-schedule"}? > 1000
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}打開(kāi)句柄數(shù)>1000"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: kubernetes-controller-manager打開(kāi)句柄數(shù)>600
? ? ? ? expr: process_open_fds{job=~"kubernetes-controller-manager"}? > 600
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}打開(kāi)句柄數(shù)>600"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: kubernetes-controller-manager打開(kāi)句柄數(shù)>1000
? ? ? ? expr: process_open_fds{job=~"kubernetes-controller-manager"}? > 1000
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}打開(kāi)句柄數(shù)>1000"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: kubernetes-apiserver打開(kāi)句柄數(shù)>600
? ? ? ? expr: process_open_fds{job=~"kubernetes-apiserver"}? > 600
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}打開(kāi)句柄數(shù)>600"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: kubernetes-apiserver打開(kāi)句柄數(shù)>1000
? ? ? ? expr: process_open_fds{job=~"kubernetes-apiserver"}? > 1000
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}打開(kāi)句柄數(shù)>1000"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: kubernetes-etcd打開(kāi)句柄數(shù)>600
? ? ? ? expr: process_open_fds{job=~"kubernetes-etcd"}? > 600
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}打開(kāi)句柄數(shù)>600"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: kubernetes-etcd打開(kāi)句柄數(shù)>1000
? ? ? ? expr: process_open_fds{job=~"kubernetes-etcd"}? > 1000
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? description: "{{$labels.instance}}的{{$labels.job}}打開(kāi)句柄數(shù)>1000"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: coredns
? ? ? ? expr: process_open_fds{k8s_app=~"kube-dns"}? > 600
? ? ? ? for: 2s
? ? ? ? labels:
severity: warnning?
? ? ? ? annotations:
? ? ? ? ? description: "插件{{$labels.k8s_app}}({{$labels.instance}}): 打開(kāi)句柄數(shù)超過(guò)600"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: coredns
? ? ? ? expr: process_open_fds{k8s_app=~"kube-dns"}? > 1000
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? description: "插件{{$labels.k8s_app}}({{$labels.instance}}): 打開(kāi)句柄數(shù)超過(guò)1000"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: kube-proxy
? ? ? ? expr: process_virtual_memory_bytes{job=~"kubernetes-kube-proxy"}? > 2000000000
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "組件{{$labels.job}}({{$labels.instance}}): 使用虛擬內(nèi)存超過(guò)2G"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: scheduler
? ? ? ? expr: process_virtual_memory_bytes{job=~"kubernetes-schedule"}? > 2000000000
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "組件{{$labels.job}}({{$labels.instance}}): 使用虛擬內(nèi)存超過(guò)2G"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: kubernetes-controller-manager
? ? ? ? expr: process_virtual_memory_bytes{job=~"kubernetes-controller-manager"}? > 2000000000
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "組件{{$labels.job}}({{$labels.instance}}): 使用虛擬內(nèi)存超過(guò)2G"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: kubernetes-apiserver
? ? ? ? expr: process_virtual_memory_bytes{job=~"kubernetes-apiserver"}? > 2000000000
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "組件{{$labels.job}}({{$labels.instance}}): 使用虛擬內(nèi)存超過(guò)2G"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: kubernetes-etcd
? ? ? ? expr: process_virtual_memory_bytes{job=~"kubernetes-etcd"}? > 2000000000
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "組件{{$labels.job}}({{$labels.instance}}): 使用虛擬內(nèi)存超過(guò)2G"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: kube-dns
? ? ? ? expr: process_virtual_memory_bytes{k8s_app=~"kube-dns"}? > 2000000000
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "插件{{$labels.k8s_app}}({{$labels.instance}}): 使用虛擬內(nèi)存超過(guò)2G"
? ? ? ? ? value: "{{ $value }}"
? ? ? - alert: HttpRequestsAvg
? ? ? ? expr: sum(rate(rest_client_requests_total{job=~"kubernetes-kube-proxy|kubernetes-kubelet|kubernetes-schedule|kubernetes-control-manager|kubernetes-apiservers"}[1m]))? > 1000
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? team: admin
? ? ? ? annotations:
? ? ? ? ? description: "組件{{$labels.job}}({{$labels.instance}}): TPS超過(guò)1000"
? ? ? ? ? value: "{{ $value }}"
threshold: "1000"?
? ? ? - alert: Pod_restarts
? ? ? ? expr: kube_pod_container_status_restarts_total{namespace=~"kube-system|default|monitor-sa"} > 0
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: warnning
? ? ? ? annotations:
? ? ? ? ? description: "在{{$labels.namespace}}名稱空間下發(fā)現(xiàn){{$labels.pod}}這個(gè)pod下的容器{{$labels.container}}被重啟,這個(gè)監(jiān)控指標(biāo)是由{{$labels.instance}}采集的"
? ? ? ? ? value: "{{ $value }}"
? ? ? ? ? threshold: "0"
? ? ? - alert: Pod_waiting
? ? ? ? expr: kube_pod_container_status_waiting_reason{namespace=~"kube-system|default"} == 1
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? team: admin
? ? ? ? annotations:
? ? ? ? ? description: "空間{{$labels.namespace}}({{$labels.instance}}): 發(fā)現(xiàn){{$labels.pod}}下的{{$labels.container}}啟動(dòng)異常等待中"
? ? ? ? ? value: "{{ $value }}"
threshold: "1"?
? ? ? - alert: Pod_terminated
? ? ? ? expr: kube_pod_container_status_terminated_reason{namespace=~"kube-system|default|monitor-sa"} == 1
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? team: admin
? ? ? ? annotations:
? ? ? ? ? description: "空間{{$labels.namespace}}({{$labels.instance}}): 發(fā)現(xiàn){{$labels.pod}}下的{{$labels.container}}被刪除"
? ? ? ? ? value: "{{ $value }}"
? ? ? ? ? threshold: "1"
? ? ? - alert: Etcd_leader
? ? ? ? expr: etcd_server_has_leader{job="kubernetes-etcd"} == 0
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? team: admin
? ? ? ? annotations:
? ? ? ? ? description: "組件{{$labels.job}}({{$labels.instance}}): 當(dāng)前沒(méi)有l(wèi)eader"
? ? ? ? ? value: "{{ $value }}"
? ? ? ? ? threshold: "0"
? ? ? - alert: Etcd_leader_changes
? ? ? ? expr: rate(etcd_server_leader_changes_seen_total{job="kubernetes-etcd"}[1m]) > 0
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? team: admin
? ? ? ? annotations:
? ? ? ? ? description: "組件{{$labels.job}}({{$labels.instance}}): 當(dāng)前l(fā)eader已發(fā)生改變"
? ? ? ? ? value: "{{ $value }}"
? ? ? ? ? threshold: "0"
? ? ? - alert: Etcd_failed
? ? ? ? expr: rate(etcd_server_proposals_failed_total{job="kubernetes-etcd"}[1m]) > 0
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? team: admin
? ? ? ? annotations:
? ? ? ? ? description: "組件{{$labels.job}}({{$labels.instance}}): 服務(wù)失敗"
? ? ? ? ? value: "{{ $value }}"
? ? ? ? ? threshold: "0"
? ? ? - alert: Etcd_db_total_size
? ? ? ? expr: etcd_debugging_mvcc_db_total_size_in_bytes{job="kubernetes-etcd"} > 10000000000
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? team: admin
? ? ? ? annotations:
? ? ? ? ? description: "組件{{$labels.job}}({{$labels.instance}}):db空間超過(guò)10G"
? ? ? ? ? value: "{{ $value }}"
? ? ? ? ? threshold: "10G"
? ? ? - alert: Endpoint_ready
? ? ? ? expr: kube_endpoint_address_not_ready{namespace=~"kube-system|default"} == 1
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? team: admin
? ? ? ? annotations:
? ? ? ? ? description: "空間{{$labels.namespace}}({{$labels.instance}}): 發(fā)現(xiàn){{$labels.endpoint}}不可用"
? ? ? ? ? value: "{{ $value }}"
? ? ? ? ? threshold: "1"
? ? - name: 物理節(jié)點(diǎn)狀態(tài)-監(jiān)控告警
? ? ? rules:
? ? ? - alert: 物理節(jié)點(diǎn)cpu使用率
? ? ? ? expr: 100-avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by(instance)*100 > 90
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: ccritical
? ? ? ? annotations:
? ? ? ? ? summary: "{{ $labels.instance }}cpu使用率過(guò)高"
description: "{{ $labels.instance }}的cpu使用率超過(guò)90%,當(dāng)前使用率[{{ $value }}],需要排查處理"?
? ? ? - alert: 物理節(jié)點(diǎn)內(nèi)存使用率
? ? ? ? expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100 > 90
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? summary: "{{ $labels.instance }}內(nèi)存使用率過(guò)高"
? ? ? ? ? description: "{{ $labels.instance }}的內(nèi)存使用率超過(guò)90%,當(dāng)前使用率[{{ $value }}],需要排查處理"
? ? ? - alert: InstanceDown
? ? ? ? expr: up == 0
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
annotations:?
? ? ? ? ? summary: "{{ $labels.instance }}: 服務(wù)器宕機(jī)"
? ? ? ? ? description: "{{ $labels.instance }}: 服務(wù)器延時(shí)超過(guò)2分鐘"
? ? ? - alert: 物理節(jié)點(diǎn)磁盤的IO性能
? ? ? ? expr: 100-(avg(irate(node_disk_io_time_seconds_total[1m])) by(instance)* 100) < 60
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? summary: "{{$labels.mountpoint}} 流入磁盤IO使用率過(guò)高!"
? ? ? ? ? description: "{{$labels.mountpoint }} 流入磁盤IO大于60%(目前使用:{{$value}})"
? ? ? - alert: 入網(wǎng)流量帶寬
? ? ? ? expr: ((sum(rate (node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 102400
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? summary: "{{$labels.mountpoint}} 流入網(wǎng)絡(luò)帶寬過(guò)高!"
? ? ? ? ? description: "{{$labels.mountpoint }}流入網(wǎng)絡(luò)帶寬持續(xù)5分鐘高于100M. RX帶寬使用率{{$value}}"
? ? ? - alert: 出網(wǎng)流量帶寬
? ? ? ? expr: ((sum(rate (node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 102400
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? summary: "{{$labels.mountpoint}} 流出網(wǎng)絡(luò)帶寬過(guò)高!"
? ? ? ? ? description: "{{$labels.mountpoint }}流出網(wǎng)絡(luò)帶寬持續(xù)5分鐘高于100M. RX帶寬使用率{{$value}}"
? ? ? - alert: TCP會(huì)話
? ? ? ? expr: node_netstat_Tcp_CurrEstab > 1000
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? summary: "{{$labels.mountpoint}} TCP_ESTABLISHED過(guò)高!"
? ? ? ? ? description: "{{$labels.mountpoint }} TCP_ESTABLISHED大于1000%(目前使用:{{$value}}%)"
? ? ? - alert: 磁盤容量
? ? ? ? expr: 100-(node_filesystem_free_bytes{fstype=~"ext4|xfs"}/node_filesystem_size_bytes {fstype=~"ext4|xfs"}*100) > 80
? ? ? ? for: 2s
? ? ? ? labels:
? ? ? ? ? severity: critical
? ? ? ? annotations:
? ? ? ? ? summary: "{{$labels.mountpoint}} 磁盤分區(qū)使用率過(guò)高!"
? ? ? ? ? description: "{{$labels.mountpoint }} 磁盤分區(qū)使用大于80%(目前使用:{{$value}}%)"
注意:配置文件解釋說(shuō)明
- job_name: 'kubernetes-schedule' scrape_interval: 5s
static_configs:
- targets: ['192.168.1.63:10251']
- job_name: 'kubernetes-controller-manager'
#god63?節(jié)點(diǎn)的?ip:schedule?端口
scrape_interval: 5s
static_configs:
- targets: ['192.168.172.163:10252']?
#god63 節(jié)點(diǎn)的?ip:controller-manager?端口
- job_name: 'kubernetes-kube-proxy'
scrape_interval: 5s
static_configs:
- targets: ['192.168.172.163:10249','192.168.172.164:10249']
#god63?和 god64?節(jié)點(diǎn)的?ip:kube-proxy?端口?- job_name: 'kubernetes-etcd'
scheme: https tls_config:
ca_file: /var/run/secrets/kubernetes.io/k8s-certs/etcd/ca.crt cert_file: /var/run/secrets/kubernetes.io/k8s-certs/etcd/server.crt key_file: /var/run/secrets/kubernetes.io/k8s-certs/etcd/server.key
scrape_interval: 5s static_configs:
- targets: ['192.168.172.163:2379']
#god63?節(jié)點(diǎn)的?ip:etcd?端口
#更新資源清單文件
# kubectl delete -f prometheus-cfg.yaml
configmap "prometheus-config" deleted
# kubectl apply -f prometheus-alertmanager-cfg.yaml?
alertmanager.tar.gz 上傳的?k8s?的各個(gè)節(jié)點(diǎn)
cat prometheus-alertmanager-deploy.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
? name: prometheus-server
? namespace: monitor-sa
? labels:
? ? app: prometheus
spec:
? replicas: 1
? selector:
? ? matchLabels:
? ? ? app: prometheus
? ? ? component: server
? ? #matchExpressions:
? ? #- {key: app, operator: In, values: [prometheus]}
? ? #- {key: component, operator: In, values: [server]}
? template:
? ? metadata:
? ? ? labels:
? ? ? ? app: prometheus
? ? ? ? component: server
? ? ? annotations:
? ? ? ? prometheus.io/scrape: 'false'
? ? spec:
? ? ? nodeName: god64
? ? ? serviceAccountName: monitor
? ? ? containers:
? ? ? - name: prometheus
? ? ? ? image: prom/prometheus:v2.2.1
? ? ? ? imagePullPolicy: IfNotPresent
? ? ? ? command:
? ? ? ? - "/bin/prometheus"
? ? ? ? args:
? ? ? ? - "--config.file=/etc/prometheus/prometheus.yml"
? ? ? ? - "--storage.tsdb.path=/prometheus"
? ? ? ? - "--storage.tsdb.retention=24h"
? ? ? ? - "--web.enable-lifecycle"
? ? ? ? ports:
? ? ? ? - containerPort: 9090
? ? ? ? ? protocol: TCP
? ? ? ? volumeMounts:
? ? ? ? - mountPath: /etc/prometheus
? ? ? ? ? name: prometheus-config
? ? ? ? - mountPath: /prometheus/
? ? ? ? ? name: prometheus-storage-volume
? ? ? ? - name: k8s-certs
? ? ? ? ? mountPath: /var/run/secrets/kubernetes.io/k8s-certs/etcd/
? ? ? - name: alertmanager
? ? ? ? image: prom/alertmanager:v0.14.0
? ? ? ? imagePullPolicy: IfNotPresent
? ? ? ? args:
? ? ? ? - "--config.file=/etc/alertmanager/alertmanager.yml"
? ? ? ? - "--log.level=debug"
? ? ? ? ports:
? ? ? ? - containerPort: 9093
? ? ? ? ? protocol: TCP
? ? ? ? ? name: alertmanager
? ? ? ? volumeMounts:
? ? ? ? - name: alertmanager-config
? ? ? ? ? mountPath: /etc/alertmanager
? ? ? ? - name: alertmanager-storage
? ? ? ? ? mountPath: /alertmanager
? ? ? ? - name: localtime
? ? ? ? ? mountPath: /etc/localtime
? ? ? volumes:
? ? ? ? - name: prometheus-config
? ? ? ? ? configMap:
? ? ? ? ? ? name: prometheus-config
? ? ? ? - name: prometheus-storage-volume
? ? ? ? ? hostPath:
? ? ? ? ? path: /data
? ? ? ? ? type: Directory
? ? ? ? - name: k8s-certs
? ? ? ? ? secret:
? ? ? ? ? secretName: etcd-certs
? ? ? ? - name: alertmanager-config
? ? ? ? ? configMap:
? ? ? ? ? ? name: alertmanager
? ? ? ? - name: alertmanager-storage
? ? ? ? ? hostPath:
? ? ? ? ? path: /data/alertmanager
? ? ? ? ? type: DirectoryOrCreate
? ? ? ? - name: localtime
? ? ? ? ? hostPath:
? ? ? ? ? path: /usr/share/zoneinfo/Asia/Shanghai
生成一個(gè)?etcd-certs,這個(gè)在部署?prometheus?需要
kubectl -n monitor-sa create secret generic etcd-certs --from-file=/etc/kubernetes/pki/etcd/server.key --from-file=/etc/kubernetes/pki/etcd/server.crt --from-file=/etc/kubernetes/pki/etcd/ca.crt
#查看?prometheus?是否部署成功
kubectl get pods -n monitor-sa | grep prometheus
prometheus-server-5bc47cc46d-nzgbn? 1/1? ? Running? ? ? 0? ? ? ? ? 5s
顯示如下,可看到?pod?狀態(tài)是?running,說(shuō)明?prometheus?部署成功
cat alertmanager-svc.yaml
---
apiVersion: v1
kind: Service
metadata:
? labels:
? ? name: prometheus
? ? kubernetes.io/cluster-service: 'true'
? name: alertmanager
? namespace: monitor-sa
spec:
? ports:
? - name: alertmanager
? ? nodePort: 30066 ? ?# 外部機(jī)器可訪問(wèn)的端口。
? ? port: 9093 ? ? ? ? ? ?#kubernetes中的服務(wù)之間訪問(wèn)的端口
? ? protocol: TCP
? ? targetPort: 9093 ? ?# ? ? ??容器的端口(
? selector:
? ? app: prometheus
? sessionAffinity: None
? type: NodePort
kubectl apply -f alertmanager-svc.yaml
#查看?service?在物理機(jī)上映射的端口
kubectl get svc -n monitor-sa
NAME? ? ? ? ? TYPE? ? ? CLUSTER-IP? ? ? EXTERNAL-IP? PORT(S)? ? ? ? ? AGE
alertmanager? NodePort? 10.104.175.75? ? <none>? ? ? ? 9093:30066/TCP? 28m
prometheus? ? NodePort? 10.106.198.175? <none>? ? ? ? 9090:31994/TCP? 22h
注意:上面可以看到?prometheus?的?service?暴漏的端口是?30009,alertmanager?的?service?暴 露的端口是?30066
訪問(wèn)?prometheus?的?web?界面 點(diǎn)擊?status->targets,可看到如下
從上面可以發(fā)現(xiàn)?kubernetes-controller-manager?和?kubernetes-schedule?都顯示連接不上對(duì) 應(yīng)的端口
可按如下方法處理;
vim /etc/kubernetes/manifests/kube-scheduler.yaml?修改如下內(nèi)容:
把--bind-address=127.0.0.1?變成--bind-address=192.168.172.163?把?httpGet:字段下的?hosts?由?127.0.0.1?變成?192.168.172.163?把—port=0?刪除
修改之后在?k8s?各個(gè)節(jié)點(diǎn)執(zhí)行?systemctl restart kubelet
kubectl get cs?顯示如下:
NAME controller-manager scheduler
etcd-0
STATUS Healthy ok
Healthy ok
Healthy {"health":"true"}
ss -antulp | grep :10251
ss -antulp | grep :10252
可以看到相應(yīng)的端口已經(jīng)被物理機(jī)監(jiān)聽(tīng)了 點(diǎn)擊?status->targets,可看到如下
是因?yàn)?kube-proxy?默認(rèn)端口?10249?是監(jiān)聽(tīng)在?127.0.0.1?上的,需要改成監(jiān)聽(tīng)到物理節(jié)點(diǎn)上,按如 下方法修改,線上建議在安裝?k8s?的時(shí)候就做修改,這樣風(fēng)險(xiǎn)小一些:
kubectl edit configmap kube-proxy -n kube-system
把?metricsBindAddress?這段修改成?metricsBindAddress: 0.0.0.0:10249
然后重新啟動(dòng)?kube-proxy?這個(gè)?pod
]# kubectl get pods -n kube-system | grep kube-proxy |awk '{print $1}' | xargs kubectl delete pods -n kube-system
]# ss -antulp |grep :10249
可顯示如下
]# ss -antulp | grep :10249
tcp LISTEN 0 128 [::]:10249
點(diǎn)擊?Alerts,可看到如下
把?kubernetes-etcd?展開(kāi),可看到如下:
FIRING?表示?prometheus?已經(jīng)將告警發(fā)給?alertmanager,在?Alertmanager?中可以看到有一個(gè)?alert。
登錄到?alertmanager web?界面,瀏覽器輸入?192.168.172.163:30066,顯示如下
這樣我在我的?qq?郵箱,就可以收到報(bào)警了
修改?prometheus?任何一個(gè)配置文件之后,可通過(guò)?kubectl apply?使配置生效,執(zhí)行順序如下:?
]# kubectl delete -f alertmanager-cm.yaml
]# kubectl apply -f alertmanager-cm.yaml
]# kubectl delete -f prometheus-alertmanager-cfg.yaml?
# kubectl apply -f prometheus-alertmanager-cfg.yaml?
# kubectl delete-f prometheus-alertmanager-deploy.yaml?
# kubectl apply –f prometheus-alertmanager-deploy.yaml