[TOC]
Istio采集指標prometheus+grafana方案
Istio的prometheus支持
prometheus在Istio中的現(xiàn)狀
prometheus這個后端組件涉及到數(shù)據(jù)存儲問題(levleDB尚猿,代碼里面添加SDK怎憋,直接存儲在本地磁盤)枫夺,而且我們有自己的prometheus集群至非,因此不太建議直接使用官方自帶的鏡像,而是采用自己的prometheus集群盒发。
先看看原理订歪,mixer組件中遙測相關(guān)的對外提供的Kubernetes的Service的服務(wù)名是istio-telemetry
滔韵,mixer對外開放的exporter的數(shù)據(jù)查詢接口是/metrics;istio-telemetry
開放了42422端口颖变,用來采集istio-mesh指標生均,開放了9093端口,用來采集mixer本身的指標腥刹。查看istio-telemetry這個Service疯特,可以看到如下配置:
- name: http-monitoring
port: 9093
- name: prometheus
port: 42422
另外就是還有一個envoy的指標,是通過statsd 轉(zhuǎn)換為 prometheus 的肛走,關(guān)于statsd exporter的更多信息查看這里漓雅,大體流程如下:
+----------+ +-------------------+ +--------------+
| StatsD |---(UDP/TCP repeater)--->| statsd_exporter |<---(scrape /metrics)---| Prometheus |
+----------+ +-------------------+ +--------------+
在Istio中,這個對外提供的服務(wù)名是Istio-statsd-prom-bridge
朽色,通過9102端口對外提供服務(wù)邻吞,通過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這個服務(wù)的Service type類型葫男,則可能導致ingressgateway失敗抱冷,因為istio-statsd-prom-bridge的IP失效異常了。查看ingressgateway的日志可以發(fā)現(xiàn):
error initializing configuration '/etc/istio/proxy/envoy-rev0.json': malformed IP address: istio-statsd-prom-bridge
這個時候梢褐,可以通過刪除ingressgateway這個pod旺遮,重啟即可生效
Istio默認的metric監(jiān)控指標
默認監(jiān)控指標指的是使用初始配置時针余,Istio 收集的監(jiān)控指標(metrics)的詳細信息弄诲,可以通過更改配置來添加和刪除指標轰枝,具體配置指標可以查看config.yaml配置文件中的kind: metric
舰罚,這些指標都是通過metric 模板來定義的朴肺。
接入外部prometheus集群的方案
prometheus需要采用自己的服務(wù)玷室,因此需要禁用俏扩,然后配置好相應的花颗,注意服務(wù)要打通丈积,可以采用NodePort方式筐骇,也可以采用ClusterIP(prometheus的Server端要打通網(wǎng)絡(luò)),最優(yōu)的姿勢當然就是服務(wù)發(fā)現(xiàn)江滨。需要將自己的prometheus集群里面的配置(scrape_config)的數(shù)據(jù)采集配置上mixer的地址和采集的端口(共三個端口)铛纬,然后接口API是/metrics,這樣自己的集群就能夠采集到mixer的數(shù)據(jù)了:
-
istio-mesh (istio-mixer.istio-system:42422): 所有 Mixer 生成的網(wǎng)格指標
- 如果不要Mixer組件唬滑,則可以不進行監(jiān)控告唆,也沒有這樣的數(shù)據(jù)
- 這個是istio-telemetry組件提供的功能
-
mixer (istio-mixer.istio-system:9093): 所有特定于 Mixer 的指標, 用于監(jiān)控 Mixer 本身
- 這個是istio-policy 組件提供的功能
-
envoy (istio-mixer.istio-system:9102): envoy 生成的原始統(tǒng)計數(shù)據(jù)(并從 statsd 轉(zhuǎn)換為 prometheus )
- 這個是istio-statsd-prom-bridge組件提供的服務(wù)
pre環(huán)境驗證中可以將istio-telemetry和istio-statsd-prom-bridge的Service的Type的類型改為NodePort莫秆,然后通過端口映射查看;需要注意的是如果修改istio-statsd-prom-bridge的Service的Type的類型改為NodePort悔详,則會導致ingressgateway失敗镊屎,需要刪除ingressgateway的pod進行重啟生效。
然后可以通過各自的 /metrics 接口查看數(shù)據(jù)
如何處理prometheus服務(wù)發(fā)現(xiàn)
上述的方案都是通過NodePort的方式茄螃,這樣的話缝驳,需要手動配置要采集的目標地址(ip:port/URI),但是線上應用應該要采用prometheus的服務(wù)發(fā)現(xiàn)功能归苍,自動發(fā)現(xiàn)節(jié)點并采集用狱,后面這個需要和運維同學溝通,如何實現(xiàn)自動發(fā)現(xiàn)服務(wù)
prometheus的服務(wù)發(fā)現(xiàn)類別可以參考
新增Istio的prometheus采集指標
新增Istio組件的采集指標拼弃,需要做相關(guān)配置夏伊,可以詳見收集指標和日志
現(xiàn)有Istio默認的監(jiān)控指標有這些
接入外部的grafana系統(tǒng)
Istio默認有g(shù)rafana服務(wù),并且已經(jīng)有相關(guān)面板配置ok吻氧,只需要查看溺忧,但是因為我們公司自己已有一套成熟的prometheus+grafana方案,運維配套盯孙、權(quán)限管理鲁森、組織管理等比較成熟,并且運維還需要兼顧容器內(nèi)的服務(wù)和容器外的服務(wù)振惰,因此Istio中歌溉,更適合采用外部已有的grafana服務(wù)。
只是我們需要將現(xiàn)有Istio提供的這些面板都通過模板方式轉(zhuǎn)移到運維的grafana中
實戰(zhàn)部署外部自有系統(tǒng)
1. Mac安裝部署prometheus + grafana
兩個服務(wù)都采用二進制安裝部署
啟動prometheus:./prometheus骑晶;訪問prometheus
-
啟動grafana:/grafana-server ; 訪問grafana
- 【默認密碼:admin:admin】
- 【new密碼:admin:123456】
- 添加數(shù)據(jù)源痛垛,添加prometheus的數(shù)據(jù)源
2. 配置prometheus的scrape_configs
配置prometheus的scrape_configs,新增Istio相關(guān)的采集
- 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,發(fā)現(xiàn)有了數(shù)據(jù)
3. 配置grafana的DataSource
先add data source羽圃,設(shè)置默認的數(shù)據(jù)源乾胶,在setting中的type中選擇prometheus,url選擇地址http://172.31.2.2:9090朽寞,然后save and test
3. 配置grafana
在原有g(shù)rafana系統(tǒng)中,Share dashboard斩郎,然后Export到文件脑融,然后再在新的grafana中import Json file,然后選定prometheus即可缩宜。這樣默認得到是DashBoard是無法編輯的肘迎,如下兩個方式可以調(diào)整為可編輯狀態(tài):
導出的Json File甥温,需要修改editable為true,否則不能修改只能查看
-
或者新版可以通過admin賬號來Make dashboard editable
- Setting -> General -> Make Editable
問題 & TODO
- 如何動態(tài)的處理prometheus的服務(wù)發(fā)現(xiàn)
【"歡迎關(guān)注我的微信公眾號:Linux 服務(wù)端系統(tǒng)研發(fā)妓布,后面會大力通過微信公眾號發(fā)送優(yōu)質(zhì)文章"】