前言:最近客戶需要監控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
用於添加自定義的抓取目標
所以只需要按照官方的要求寫入配置即可。新建額外抓取的信息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狀態
在grafana中導入9614
號監控模板,數據顯示正常:
靜態配置的方式比較固定,不能針對主機列表動態變化。新增加邊緣節點需要重建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,相關資源已經生成:
參考靜態抓取的方式導入監控面板即可。