[TOC]
Istio採集指標prometheus+grafana方案
Istio的prometheus支援
prometheus在Istio中的現狀
prometheus這個後端元件涉及到資料儲存問題(levleDB,程式碼裡面新增SDK,直接儲存在本地磁碟),而且我們有自己的prometheus叢集,因此不太建議直接使用官方自帶的映象,而是採用自己的prometheus叢集。
先看看原理,mixer元件中遙測相關的對外提供的Kubernetes的Service的服務名是istio-telemetry
,mixer對外開放的exporter的資料查詢介面是/metrics;istio-telemetry
開放了42422埠,用來採集istio-mesh指標,開放了9093埠,用來採集mixer本身的指標。檢視istio-telemetry這個Service,可以看到如下配置:
- name: http-monitoring
port: 9093
- name: prometheus
port: 42422
複製程式碼
另外就是還有一個envoy的指標,是通過statsd 轉換為 prometheus 的,關於statsd exporter的更多資訊檢視這裡,大體流程如下:
+----------+ +-------------------+ +--------------+
| StatsD |---(UDP/TCP repeater)--->| statsd_exporter |<---(scrape /metrics)---| Prometheus |
+----------+ +-------------------+ +--------------+
複製程式碼
在Istio中,這個對外提供的服務名是Istio-statsd-prom-bridge
,通過9102埠對外提供服務,通過kubectl get svc -n istio-system istio-statsd-prom-bridge
可以檢視到詳細資訊:
apiVersion: v1
kind: Service
metadata:
name: Istio-statsd-prom-bridge
namespace: Istio-system
labels:
chart: mixer-1.0.0
release: RELEASE-NAME
Istio: statsd-prom-bridge
spec:
ports:
- name: statsd-prom
port: 9102
- name: statsd-udp
port: 9125
protocol: UDP
selector:
Istio: statsd-prom-bridge
複製程式碼
這裡,如果修改istio-statsd-prom-bridge這個服務的Service type型別,則可能導致ingressgateway失敗,因為istio-statsd-prom-bridge的IP失效異常了。檢視ingressgateway的日誌可以發現:
error initializing configuration '/etc/istio/proxy/envoy-rev0.json': malformed IP address: istio-statsd-prom-bridge
複製程式碼
這個時候,可以通過刪除ingressgateway這個pod,重啟即可生效
Istio預設的metric監控指標
預設監控指標指的是使用初始配置時,Istio 收集的監控指標(metrics)的詳細資訊,可以通過更改配置來新增和刪除指標,具體配置指標可以檢視config.yaml配置檔案中的kind: metric
,這些指標都是通過metric 模板來定義的。
接入外部prometheus叢集的方案
prometheus需要採用自己的服務,因此需要禁用,然後配置好相應的,注意服務要打通,可以採用NodePort方式,也可以採用ClusterIP(prometheus的Server端要打通網路),最優的姿勢當然就是服務發現。需要將自己的prometheus叢集裡面的配置(scrape_config)的資料採集配置上mixer的地址和採集的埠(共三個埠),然後介面API是/metrics,這樣自己的叢集就能夠採集到mixer的資料了:
-
istio-mesh (istio-mixer.istio-system:42422): 所有 Mixer 生成的網格指標
- 如果不要Mixer元件,則可以不進行監控,也沒有這樣的資料
- 這個是istio-telemetry元件提供的功能
-
mixer (istio-mixer.istio-system:9093): 所有特定於 Mixer 的指標, 用於監控 Mixer 本身
- 這個是istio-policy 元件提供的功能
-
envoy (istio-mixer.istio-system:9102): envoy 生成的原始統計資料(並從 statsd 轉換為 prometheus )
- 這個是istio-statsd-prom-bridge元件提供的服務
pre環境驗證中可以將istio-telemetry和istio-statsd-prom-bridge的Service的Type的型別改為NodePort,然後通過埠對映檢視;需要注意的是如果修改istio-statsd-prom-bridge的Service的Type的型別改為NodePort,則會導致ingressgateway失敗,需要刪除ingressgateway的pod進行重啟生效。
然後可以通過各自的 /metrics 介面檢視資料
如何處理prometheus服務發現
上述的方案都是通過NodePort的方式,這樣的話,需要手動配置要採集的目標地址(ip:port/URI),但是線上應用應該要採用prometheus的服務發現功能,自動發現節點並採集,後面這個需要和運維同學溝通,如何實現自動發現服務
新增Istio的prometheus採集指標
新增Istio元件的採集指標,需要做相關配置,可以詳見收集指標和日誌
現有Istio預設的監控指標有這些
接入外部的grafana系統
Istio預設有grafana服務,並且已經有相關皮膚配置ok,只需要檢視,但是因為我們公司自己已有一套成熟的prometheus+grafana方案,運維配套、許可權管理、組織管理等比較成熟,並且運維還需要兼顧容器內的服務和容器外的服務,因此Istio中,更適合採用外部已有的grafana服務。
只是我們需要將現有Istio提供的這些皮膚都通過模板方式轉移到運維的grafana中
實戰部署外部自有系統
1. Mac安裝部署prometheus + grafana
兩個服務都採用二進位制安裝部署
-
啟動prometheus:./prometheus;訪問prometheus
-
啟動grafana:/grafana-server ; 訪問grafana
- 【預設密碼:admin:admin】
- 【new密碼:admin:123456】
- 新增資料來源,新增prometheus的資料來源
2. 配置prometheus的scrape_configs
配置prometheus的scrape_configs,新增Istio相關的採集
- job_name: 'Istio'
metrics_path: '/metrics'
static_configs:
- targets: ['172.31.2.2:32398']
labels:
group: 'Istio-mesh'
- targets: ['172.31.2.2:32697']
labels:
group: 'mixer'
- targets: ['172.31.2.2:32744']
labels:
group: 'envoy'
複製程式碼
然後重啟prometheus,通過http://172.31.36.68:9090/config
檢視
然後檢視採集指標,搜尋isito,發現有了資料
3. 配置grafana的DataSource
先add data source,設定預設的資料來源,在setting中的type中選擇prometheus,url選擇地址http://172.31.2.2:9090,然後save and test
3. 配置grafana
在原有grafana系統中,Share dashboard,然後Export到檔案,然後再在新的grafana中import Json file,然後選定prometheus即可。這樣預設得到是DashBoard是無法編輯的,如下兩個方式可以調整為可編輯狀態:
-
匯出的Json File,需要修改editable為true,否則不能修改只能檢視
-
或者新版可以通過admin賬號來Make dashboard editable
- Setting -> General -> Make Editable
問題 & TODO
- 如何動態的處理prometheus的服務發現