Prometheus-Operator監控Nginx Ingress


前言:最近客戶需要監控ingress流量,在查閱資料后成功部署,記錄下部署的過程及遇到的問題。

暴露ingress的監控端口

默認情況下nginx-ingress的監控指標端口為10254,監控路徑為其下的/metrics。調整配置ingress-nginx的配置文件,打開service及pod的10254端口。

在官方的部署文件中的Service段中添加一段監聽10254端口的配置,命名為https-metrics

spec:
  type: ClusterIP
  ports:
    - name: https-webhook
      port: 443
      targetPort: webhook
    - name: https-metrics
      port: 10254
      targetPort: 10254

同時在deployment段中開放pod的10254端口,命名為metrics

ports:
  - name: http
    containerPort: 80
    protocol: TCP 
  - name: https
    containerPort: 443 
    protocol: TCP 
  - name: webhook
    containerPort: 8443
    protocol: TCP 
  - name: metrics
    containerPort: 10254
    protocol: TCP

靜態抓取

prometheus-prometheus.yaml的配置文件中,官方內置了一個字段additionalScrapeConfigs用於添加自定義的抓取目標

https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#PrometheusSpec

所以只需要按照官方的要求寫入配置即可。新建額外抓取的信息prometheus-additional.yaml

- job_name: nginx-ingress
  metrics_path: /metrics
  scrape_interval: 5s
  static_configs:
  - targets:
    - 172.16.200.102:10254
    - 172.16.200.103:10254
    - 172.16.200.104:10254

抓取的目標制定為targets列表,創建secret對象ingress-nginx-additional-configs引用該配置

$ kubectl create secret generic ingress-nginx-additional-configs --from-file=./prometheus-additional.yaml -n monitoring

promethes-prometheus.yaml中添加additionalScrapeConfigs引用創建的secret

serviceAccountName: prometheus-k8s
   serviceMonitorNamespaceSelector: {}
   serviceMonitorSelector: {}
   version: v2.11.0
   additionalScrapeConfigs:
     name: ingress-nginx-additional-configs
     key: prometheus-additional.yaml

重建promethes配置:

$ kubectl delete -f ./prometheus-prometheus.yaml && kubectl apply -f ./prometheus-prometheus.yaml

打開promethes的UI頁面,訪問/targets路徑發現相關的節點的狀態已經為up狀態

image-20210309161147110

在grafana中導入9614號監控模板,數據顯示正常:

prometheus-ingress

靜態配置的方式比較固定,不能針對主機列表動態變化。新增加邊緣節點需要重建secretingress-nginx-additional-configs,十分不便。

servicemonitors抓取

針對使用Operator模式部署的prometheus,有一個名為servicemonitors.monitoring.coreos.com的CRD資源,可以仿照這個資源中某個項進行ingress-nginx的數據抓取

[root@master-1 ~]# kubectl -n monitoring get servicemonitors.monitoring.coreos.com 
NAME                      AGE
alertmanager              4d22h
coredns                   4d22h
grafana                   4d22h
kube-apiserver            4d22h
kube-controller-manager   4d22h
kube-scheduler            4d22h
kube-state-metrics        4d22h
kubelet                   4d22h
node-exporter             4d22h
prometheus                4d22h
prometheus-operator       4d22h

定義ingress-nginx的配置文件:

$ cat ingress-nginx.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: nginx-ingress
  namespace: monitoring
  labels:
    app.kubernetes.io/component: controller
spec:
  jobLabel: app.kubernetes.io/component
  endpoints:
  - port: https-metrics                        #之前定義的ingress的監控端口,一定要用名稱。不能使用數字
    interval: 10s 
  selector:
    matchLabels:
      app.kubernetes.io/component: controller  #該標簽匹配ingress-nginx-controller的pod
  namespaceSelector:
    matchNames:
    - ingress-nginx                            #指定ingress控制器的名稱空間為ingress-nginx

創建該資源

$ kubectl apply -f ./ingress-nginx.yaml

打開prometheues的監控面板下的/targets,相關資源已經生成:

image-20210309170151240

參考靜態抓取的方式導入監控面板即可。

參考文檔


免責聲明!

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



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