一、Prometheus Operator 介紹
Prometheus Operator 是 CoreOS 開發的基於 Prometheus 的 Kubernetes 監控方案,也可能是目前功能最全面的開源方案。
Prometheus Operator架構圖

二、安裝prometheus operator
測試環境:
[root@k8s-m manifests]# kubectl get node NAME STATUS ROLES AGE VERSION k8s-m Ready master 5h27m v1.15.2 node Ready <none> 5h26m v1.15.2
1、安裝metrucs-server
https://www.cnblogs.com/zhangb8042/p/10204997.html
2、部署Prometheus監控方案
#下載prometheus-operator代碼 git clone https://github.com/AliyunContainerService/prometheus-operator cd prometheus-operator/contrib/kube-prometheus/ #部署Prometheus監控方案 kubectl apply -f manifests/ #查看 [root@k8s-m kube-prometheus]# kubectl get namespaces monitoring NAME STATUS AGE monitoring Active 71s
3、把服務對公網開放(沒有需要的話可以忽略這步)
方法一、
把相對應的service類型改為NodePort(這樣就會映射一個30000-32767的外網端口用於訪問)
#隨機端口 kubectl patch svc prometheus-k8s -n monitoring -p '{"spec":{"type":"NodePort"}}' #指定端口30090 kubectl patch svc prometheus-k8s -n monitoring -p '{"spec":{"type":"NodePort","ports":[{"name":"web","port":9090,"protocol":"TCP","targetPort":"web","nodePort":30090}]}}'
方法二、
使用Proxy的方式臨時訪問
例如:(臨時允許訪問服務器的3000端口,注意:該方法只能是訪問使用了下面這條命令的服務器IP)
kubectl --namespace monitoring port-forward svc/grafana --address='0.0.0.0' 3000
方法三、使用ingress的方式讓外網訪問
開放公網訪問(我用的是nodePort方法)
#grafana使用30030、prometheus使用30090、alertmanager使用30093。成功后瀏覽器訪問即可
#grafana登錄的賬號密碼都是admin
kubectl patch svc grafana -n monitoring -p '{"spec":{"type":"NodePort","ports":[{"name":"http","port":3000,"protocol":"TCP","targetPort":"http","nodePort":30030}]}}' kubectl patch svc prometheus-k8s -n monitoring -p '{"spec":{"type":"NodePort","ports":[{"name":"web","port":9090,"protocol":"TCP","targetPort":"web","nodePort":30090}]}}' kubectl patch svc alertmanager-main -n monitoring -p '{"spec":{"type":"NodePort","ports":[{"name":"web","port":9093,"protocol":"TCP","targetPort":"web","nodePort":30093}]}}'
三、監控模板配置
所有的監控項都在這個文件中(上面git下載的),可以直接刪除或者添加新的監控項(感覺有不少默認的監控模板用不到)
/root/prometheus-operator/contrib/kube-prometheus/manifests/prometheus-rules.yaml
#添加一個監控項,在rometheus-rules.yaml文件的最后添加即可
#在prometheus-rules.yaml文件最后添加上(1分鍾的負載大於1就報警) - name: test-load-1 rules: - alert: test-load-1 expr: node_load1 > 1 for: 2m labels: team: node annotations: summary: "{{$labels.instance}}: load 1 >1" description: "{{$labels.instance}}: job {{$labels.job}} 測試測試 負載大於1" #重新導入配置文件 [root@k8s-m manifests]# kubectl apply -f prometheus-rules.yaml prometheusrule.monitoring.coreos.com/prometheus-k8s-rules configured
四、修改alertmanager的報警方式(郵件方式)
1、創建一個郵件報警的配置文件(25端口不行)
[root@k8s-m ~]# cat alertmanger.yaml global: resolve_timeout: 5m #處理超時時間,默認為5min smtp_smarthost: 'smtp.163.com:465' # 郵箱smtp服務器代理 smtp_from: 'xxxx@163.com' # 發送郵箱名稱 smtp_auth_username: 'xxxx@163.com' # 郵箱名稱 smtp_auth_password: 'xxxxxxxxx' #郵箱密碼 smtp_require_tls: false route: group_by: ['alertname'] # 報警分組名稱 group_wait: 10s # 最初即第一次等待多久時間發送一組警報的通知 group_interval: 10s # 在發送新警報前的等待時間 repeat_interval: 1m # 發送重復警報的周期 receiver: 'email' # 發送警報的接收者的名稱,以下receivers name的名稱 receivers: - name: 'email' # 警報 email_configs: # 郵箱配置 - to: 'xxxxxx@163.com' # 接收警報的email配置 inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']
2、將alertmanger.yaml(上面創建的) 配置文件進行base64編碼
cat alertmanger.yaml|base64
3、把alertmanager配置的文件創建成一個Opaque(把剛才配置文件base64編碼的內容放入secret配置中,記得刪除換行符,要把所有內容放在一行中)
注意:除了data中的和我這里不一樣,其它的不要改。(因為本質上是修改原先Opaque的內容)
[root@k8s-m ~]# cat alertmanager-secret.yaml apiVersion: v1 data: alertmanager.yaml: Z2xvYmFsOiAKICByZXNvbHZlX3RpbWVvdXQ6IDVtICPlpITnkIbotoXml7bml7bpl7TvvIzpu5jorqTkuLo1bWlvbScgIyDlj5HpgIHpgq7nrrHlkI3np7AKICBzbXRwX2F1dGhfdXNl name: alertmanager-main namespace: monitoring type: Opaque
4、導入
[root@k8s-m ~]# kubectl apply -f alertmanager-secret.yaml
secret/alertmanager-main configured
5、查看與測試
達到了報警條件

查看郵箱


