使用遙測 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
啟用存取日誌記錄
$ 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
存取日誌提供者,除了預設設定之外,我們不設定任何其他內容。停用特定工作負載的存取日誌
您可以使用以下配置來停用
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
使用工作負載模式篩選存取日誌
您可以使用以下配置來停用
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
使用 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
設定使用 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
使用 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 協定發送存取日誌,如此處所述。
清理
移除所有遙測 API
$ kubectl delete telemetry --all -A
移除
loki
$ kubectl delete -f @samples/addons/loki.yaml@ -n istio-system $ kubectl delete -f @samples/open-telemetry/loki/otel.yaml@ -n istio-system
從叢集中解除安裝 Istio
$ istioctl uninstall --purge --skip-confirmation