使用遙測 API 設定存取日誌

遙測 API 作為 Istio 的一級 API 已經有一段時間了。先前,使用者必須在 Istio 配置的 MeshConfig 區段中設定遙測。

開始之前

  • 請按照安裝指南中的指示設定 Istio。

  • 部署 curl 範例應用程式,作為發送請求的測試來源。如果您已啟用自動 Sidecar 注入,請執行以下命令來部署範例應用程式

    壓縮檔
    $ kubectl apply -f @samples/curl/curl.yaml@
    

    否則,請先手動注入 Sidecar,然後使用以下命令部署 curl 應用程式

    壓縮檔
    $ kubectl apply -f <(istioctl kube-inject -f @samples/curl/curl.yaml@)
    
  • SOURCE_POD 環境變數設定為您的來源 Pod 名稱

    $ export SOURCE_POD=$(kubectl get pod -l app=curl -o jsonpath={.items..metadata.name})
    
  • 啟動 httpbin 範例。

    如果您已啟用自動 Sidecar 注入,請部署 httpbin 服務

    壓縮檔
    $ kubectl apply -f @samples/httpbin/httpbin.yaml@
    

    否則,您必須在部署 httpbin 應用程式之前手動注入 Sidecar

    壓縮檔
    $ kubectl apply -f <(istioctl kube-inject -f @samples/httpbin/httpbin.yaml@)
    

安裝

在此範例中,我們將把日誌發送到 Grafana Loki,因此請確保已安裝它

壓縮檔壓縮檔壓縮檔
$ istioctl install -f @samples/open-telemetry/loki/iop.yaml@ --skip-confirmation
$ kubectl apply -f @samples/addons/loki.yaml@ -n istio-system
$ kubectl apply -f @samples/open-telemetry/loki/otel.yaml@ -n istio-system

開始使用遙測 API

  1. 啟用存取日誌記錄

    $ cat <<EOF | kubectl apply -n istio-system -f -
    apiVersion: telemetry.istio.io/v1
    kind: Telemetry
    metadata:
      name: mesh-logging-default
    spec:
      accessLogging:
      - providers:
        - name: otel
    EOF
    

    上述範例使用內建的 envoy 存取日誌提供者,除了預設設定之外,我們不設定任何其他內容。

  2. 停用特定工作負載的存取日誌

    您可以使用以下配置來停用 curl 服務的存取日誌

    $ cat <<EOF | kubectl apply -n default -f -
    apiVersion: telemetry.istio.io/v1
    kind: Telemetry
    metadata:
      name: disable-curl-logging
      namespace: default
    spec:
      selector:
        matchLabels:
          app: curl
      accessLogging:
      - providers:
        - name: otel
        disabled: true
    EOF
    
  3. 使用工作負載模式篩選存取日誌

    您可以使用以下配置來停用 httpbin 服務的入站存取日誌

    $ cat <<EOF | kubectl apply -n default -f -
    apiVersion: telemetry.istio.io/v1
    kind: Telemetry
    metadata:
      name: disable-httpbin-logging
    spec:
      selector:
        matchLabels:
          app: httpbin
      accessLogging:
      - providers:
        - name: otel
        match:
          mode: SERVER
        disabled: true
    EOF
    
  4. 使用 CEL 表達式篩選存取日誌

    以下配置僅在回應碼大於或等於 500 時顯示存取日誌

    $ cat <<EOF | kubectl apply -n default -f -
    apiVersion: telemetry.istio.io/v1alpha1
    kind: Telemetry
    metadata:
      name: filter-curl-logging
    spec:
      selector:
        matchLabels:
          app: curl
      accessLogging:
      - providers:
        - name: otel
        filter:
          expression: response.code >= 500
    EOF
    
  5. 設定使用 CEL 表達式的預設篩選存取日誌

    以下配置僅在回應碼大於或等於 400,或者請求傳送到 BlackHoleCluster 或 PassthroughCluster 時顯示存取日誌:注意:xds.cluster_name 僅在 Istio 1.16.2 及更高版本中可用

    $ cat <<EOF | kubectl apply -f -
    apiVersion: telemetry.istio.io/v1alpha1
    kind: Telemetry
    metadata:
      name: default-exception-logging
      namespace: istio-system
    spec:
      accessLogging:
      - providers:
        - name: otel
        filter:
          expression: "response.code >= 400 || xds.cluster_name == 'BlackHoleCluster' ||  xds.cluster_name == 'PassthroughCluster' "
    
    EOF
    
  6. 使用 CEL 表達式篩選健康檢查存取日誌

    以下配置僅在日誌不是由 Amazon Route 53 健康檢查服務產生時顯示存取日誌。注意:request.useragent 是 HTTP 流量特有的,因此為了避免中斷 TCP 流量,我們需要檢查該欄位是否存在。如需更多資訊,請參閱CEL 類型檢查

    $ cat <<EOF | kubectl apply -f -
    apiVersion: telemetry.istio.io/v1alpha1
    kind: Telemetry
    metadata:
      name: filter-health-check-logging
    spec:
      accessLogging:
      - providers:
        - name: otel
        filter:
          expression: "!has(request.useragent) || !(request.useragent.startsWith("Amazon-Route53-Health-Check-Service"))"
    EOF
    

    如需更多資訊,請參閱為數值使用表達式

使用 OpenTelemetry 提供者

Istio 支援使用 OpenTelemetry 協定發送存取日誌,如此處所述。

清理

  1. 移除所有遙測 API

    $ kubectl delete telemetry --all -A
    
  2. 移除 loki

    壓縮檔壓縮檔
    $ kubectl delete -f @samples/addons/loki.yaml@ -n istio-system
    $ kubectl delete -f @samples/open-telemetry/loki/otel.yaml@ -n istio-system
    
  3. 從叢集中解除安裝 Istio

    $ istioctl uninstall --purge --skip-confirmation
    
此資訊是否有用?
您是否有任何改進建議?

感謝您的回饋!