自訂 Istio 指標

此任務將說明如何自訂 Istio 產生的指標。

Istio 會產生遙測資料,供各種儀表板使用,以幫助您視覺化您的網格。例如,支援 Istio 的儀表板包括:

預設情況下,Istio 定義並產生一組標準指標(例如 requests_total),但您也可以使用 遙測 API 自訂它們並建立新的指標。

開始之前

在您的叢集中安裝 Istio 並部署應用程式。或者,您可以設定自訂統計資料作為 Istio 安裝的一部分。

此任務中,將使用 Bookinfo 範例應用程式作為範例應用程式。有關安裝說明,請參閱部署 Bookinfo 應用程式

啟用自訂指標

若要自訂遙測指標,例如將 request_hostdestination_port 維度新增至閘道和 Sidecar 在輸入和輸出方向發出的 requests_total 指標,請使用以下方式:

$ cat <<EOF > ./custom_metrics.yaml
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: namespace-metrics
spec:
  metrics:
  - providers:
    - name: prometheus
    overrides:
    - match:
        metric: REQUEST_COUNT
      tagOverrides:
        destination_port:
          value: "string(destination.port)"
        request_host:
          value: "request.host"
EOF
$ kubectl apply -f custom_metrics.yaml

驗證結果

將流量發送到網格。對於 Bookinfo 範例,請在您的 Web 瀏覽器中訪問 http://$GATEWAY_URL/productpage 或執行以下命令:

$ curl "http://$GATEWAY_URL/productpage"

使用以下命令驗證 Istio 是否為您的新維度或修改過的維度產生資料:

$ kubectl exec "$(kubectl get pod -l app=productpage -o jsonpath='{.items[0].metadata.name}')" -c istio-proxy -- curl -sS 'localhost:15000/stats/prometheus' | grep istio_requests_total

例如,在輸出中,找到指標 istio_requests_total 並驗證它是否包含您的新維度。

使用運算式取得值

指標設定中的值是常見的運算式,這表示您必須在 JSON 中使用雙引號來括住字串,例如 “'字串值'”。 與 Mixer 運算式語言不同,不支援管道符號 (|) 運算子,但您可以使用 hasin 運算子來模擬它,例如:

has(request.host) ? request.host : "unknown"

如需更多資訊,請參閱 通用運算式語言

Istio 會公開所有標準 Envoy 屬性。對等中繼資料可用作輸出方向的 upstream_peer 和輸入方向的 downstream_peer 屬性,包含以下欄位:

欄位類型
名稱字串Pod 的名稱。
命名空間字串Pod 執行的命名空間。
標籤映射工作負載標籤。
擁有者字串工作負載擁有者。
工作負載名稱字串工作負載名稱。
平台中繼資料映射具有前綴鍵的平台中繼資料。
istio_version字串Proxy 的版本識別碼。
mesh_id字串網格的唯一識別碼。
app_containerslist<string>應用程式容器的簡短名稱清單。
cluster_id字串此工作負載所屬的叢集識別碼。

例如,要在輸出設定中使用的對等 app 標籤的運算式為 upstream_peer.labels['app'].value

清除

若要刪除 Bookinfo 範例應用程式及其設定,請參閱 Bookinfo 清理

此資訊是否實用?
您有任何改進建議嗎?

感謝您的回饋!