[TOC]html
prometheus這個後端組件涉及到數據存儲問題(levleDB,代碼裏面添加SDK,直接存儲在本地磁盤),並且咱們有本身的prometheus集羣,所以不太建議直接使用官方自帶的鏡像,而是採用本身的prometheus集羣。git
先看看原理,mixer組件中遙測相關的對外提供的Kubernetes的Service的服務名是istio-telemetry
,mixer對外開放的exporter的數據查詢接口是/metrics;istio-telemetry
開放了42422端口,用來採集istio-mesh指標,開放了9093端口,用來採集mixer自己的指標。查看istio-telemetry這個Service,能夠看到以下配置:github
- name: http-monitoring
port: 9093
- name: prometheus
port: 42422
複製代碼
另外就是還有一個envoy的指標,是經過statsd 轉換爲 prometheus 的,關於statsd exporter的更多信息查看這裏,大致流程以下:json
+----------+ +-------------------+ +--------------+
| 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的日誌能夠發現:api
error initializing configuration '/etc/istio/proxy/envoy-rev0.json': malformed IP address: istio-statsd-prom-bridge
複製代碼
這個時候,能夠經過刪除ingressgateway這個pod,重啓便可生效bash
默認監控指標指的是使用初始配置時,Istio 收集的監控指標(metrics)的詳細信息,能夠經過更改配置來添加和刪除指標,具體配置指標能夠查看config.yaml配置文件中的kind: metric
,這些指標都是經過metric 模板來定義的。微信
prometheus須要採用本身的服務,所以須要禁用,而後配置好相應的,注意服務要打通,能夠採用NodePort方式,也能夠採用ClusterIP(prometheus的Server端要打通網絡),最優的姿式固然就是服務發現。須要將本身的prometheus集羣裏面的配置(scrape_config)的數據採集配置上mixer的地址和採集的端口(共三個端口),而後接口API是/metrics,這樣本身的集羣就可以採集到mixer的數據了:網絡
istio-mesh (istio-mixer.istio-system:42422): 全部 Mixer 生成的網格指標運維
mixer (istio-mixer.istio-system:9093): 全部特定於 Mixer 的指標, 用於監控 Mixer 自己
envoy (istio-mixer.istio-system:9102): envoy 生成的原始統計數據(並從 statsd 轉換爲 prometheus )
pre環境驗證中能夠將istio-telemetry和istio-statsd-prom-bridge的Service的Type的類型改成NodePort,而後經過端口映射查看;須要注意的是若是修改istio-statsd-prom-bridge的Service的Type的類型改成NodePort,則會致使ingressgateway失敗,須要刪除ingressgateway的pod進行重啓生效。
而後能夠經過各自的 /metrics 接口查看數據
上述的方案都是經過NodePort的方式,這樣的話,須要手動配置要採集的目標地址(ip:port/URI),可是線上應用應該要採用prometheus的服務發現功能,自動發現節點並採集,後面這個須要和運維同窗溝通,如何實現自動發現服務
新增Istio組件的採集指標,須要作相關配置,能夠詳見收集指標和日誌
現有Istio默認的監控指標有這些
Istio默認有grafana服務,而且已經有相關面板配置ok,只須要查看,可是由於咱們公司本身已有一套成熟的prometheus+grafana方案,運維配套、權限管理、組織管理等比較成熟,而且運維還須要兼顧容器內的服務和容器外的服務,所以Istio中,更適合採用外部已有的grafana服務。
只是咱們須要將現有Istio提供的這些面板都經過模板方式轉移到運維的grafana中
兩個服務都採用二進制安裝部署
啓動prometheus:./prometheus;訪問prometheus
啓動grafana:/grafana-server ; 訪問grafana
配置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,發現有了數據
先add data source,設置默認的數據源,在setting中的type中選擇prometheus,url選擇地址http://172.31.2.2:9090,而後save and test
在原有grafana系統中,Share dashboard,而後Export到文件,而後再在新的grafana中import Json file,而後選定prometheus便可。這樣默認獲得是DashBoard是沒法編輯的,以下兩個方式能夠調整爲可編輯狀態:
導出的Json File,須要修改editable爲true,不然不能修改只能查看
或者新版能夠經過admin帳號來Make dashboard editable
【"歡迎關注個人微信公衆號:Linux 服務端系統研發,後面會大力經過微信公衆號發送優質文章"】