Istio採集指標prometheus+grafana方案

吳德寶AllenWu發表於2018-10-19

[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的服務發現功能,自動發現節點並採集,後面這個需要和運維同學溝通,如何實現自動發現服務

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

  1. 如何動態的處理prometheus的服務發現

相關文章