Istio採集指標prometheus+grafana方案

[TOC]html

Istio採集指標prometheus+grafana方案

Istio的prometheus支持

prometheus在Istio中的現狀

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默認的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

【"歡迎關注個人微信公衆號:Linux 服務端系統研發,後面會大力經過微信公衆號發送優質文章"】

個人微信公衆號
相關文章
相關標籤/搜索