prometheus operator(Kubernetes 集群監控)


一、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、查看與測試

達到了報警條件

查看郵箱

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM