全部產品
Search
文件中心

Alibaba Cloud Service Mesh:可觀測配置

更新時間:Aug 29, 2024

服務網格ASM提供日誌、監控指標、鏈路追蹤維度可觀測配置功能。您可以通過ASM控制台為全域、命名空間或指定工作負載自訂相關配置,例如日誌輸出的格式、指標的維度、是否啟用特定監控指標、設定鏈路追蹤的採樣率等。本文介紹如何使用可觀測配置功能。

前提條件

已建立ASM執行個體,且版本為1.17.2.35及以上。具體操作,請參見建立ASM執行個體升級ASM執行個體

作用範圍

類型

說明

全域

全域配置支援日誌、監控指標、鏈路追蹤設定。全域配置只有一份,無法刪除。僅全域配置支援鏈路追蹤設定。

命名空間

為命名空間建立專有的可觀測配置。每個命名空間只能有一份命名空間級可觀測配置。

自訂

通過工作負載選取器選定一個自訂配置的生效範圍。每個工作負載至多被一個自訂配置選中。

操作步驟

全域

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇可觀測管理中心 > 可觀測配置

  3. 可觀測配置頁面,單擊全域頁簽,按需配置日誌、監控指標和鏈路追蹤,然後單擊提交

    您可以單擊下表的連結,查看配置的詳細說明。

    配置地區

    說明

    日誌設定

    監控指標設定

    鏈路追蹤設定

命名空間

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇可觀測管理中心 > 可觀測配置

  3. 可觀測配置頁面,單擊命名空間頁簽,單擊建立,選擇目標命名空間,按需配置日誌和監控指標,然後單擊建立

    您可以單擊下表的連結,查看配置的詳細說明。

    配置地區

    說明

    日誌設定

    監控指標設定

自訂

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇可觀測管理中心 > 可觀測配置

  3. 可觀測配置頁面,單擊自訂頁簽,選擇目標命名空間,單擊建立,輸入名稱匹配標籤,按需配置日誌和監控指標,然後單擊建立

    您可以單擊下表的連結,查看配置的詳細說明。

    配置地區

    說明

    日誌設定

    監控指標設定

日誌設定說明

日誌設定包括啟用或禁用訪問日誌輸出、設定日誌輸出形式、自訂日誌格式、日誌過濾。

啟用或禁用訪問日誌輸出

  1. 日誌設定地區,按需開啟或關閉啟用日誌輸出開關。

    • 開啟開關,服務網格資料平面Sidecar或網關會將訪問日誌輸出至容器標準輸出。

    • 關閉開關,服務網格資料平面Sidecar或網關停止將日誌輸出到容器標準輸出。

  2. 在資料平面Sidecar容器的標準輸出查看日誌。

    下文以使用kubectl查看訪問日誌為例進行說明。

    1. 執行以下命令,查看Sidecar日誌。

      kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1

      展開查看樣本輸出

      {
          "authority_for":"47.110.XX.XXX",
          "bytes_received":"0",
          "bytes_sent":"22382",
          "downstream_local_address":"192.168.0.29:80",
          "downstream_remote_address":"221.220.XXX.XXX:0",
          "duration":"80",
          "istio_policy_status":"-",
          "method":"GET",
          "path":"/static/favicon.ico",
          "protocol":"HTTP/1.1",
          "request_id":"0f2cf829-3da5-4810-a618-08d9745d****",
          "requested_server_name":"outbound_.8000_._.httpbin.default.svc.cluster.local",
          "response_code":"200",
          "response_flags":"-",
          "route_name":"default",
          "start_time":"2023-06-30T04:00:36.841Z",
          "trace_id":"-",
          "upstream_cluster":"inbound|80||",
          "upstream_host":"192.168.0.29:80",
          "upstream_local_address":"127.0.X.X:55879",
          "upstream_response_time":"79",
          "upstream_service_time":"79",
          "upstream_transport_failure_reason":"-",
          "user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.X.X Safari/537.36",
          "x_forwarded_for":"221.220.XXX.XXX"
      }
    2. 執行以下命令,查看入口網關日誌。

      kubectl -n istio-system logs istio-ingressgateway-6cff9b6b58-r**** --tail 1

      展開查看樣本輸出

      {
          "authority_for":"47.110.XX.XXX",
          "bytes_received":"0",
          "bytes_sent":"22382",
          "downstream_local_address":"192.168.0.63:80",
          "downstream_remote_address":"221.220.XXX.XXX:64284",
          "duration":"81",
          "istio_policy_status":"-",
          "method":"GET",
          "path":"/static/favicon.ico",
          "protocol":"HTTP/1.1",
          "request_id":"0f2cf829-3da5-4810-a618-08d9745d****",
          "requested_server_name":"-",
          "response_code":"200",
          "response_flags":"-",
          "route_name":"httpbin",
          "start_time":"2023-06-30T04:00:36.841Z",
          "trace_id":"-",
          "upstream_cluster":"outbound|8000||httpbin.default.svc.cluster.local",
          "upstream_host":"192.168.0.29:80",
          "upstream_local_address":"192.168.0.63:36140",
          "upstream_response_time":"81",
          "upstream_service_time":"81",
          "upstream_transport_failure_reason":"-",
          "user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.X.X Safari/537.36",
          "x_forwarded_for":"221.220.XXX.XXX"
      }
  3. (可選)通過Container Service控制台查看訪問日誌。

    如果您使用阿里雲Container Service叢集,還可以通過Container Service控制台查看訪問日誌。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 容器組

    3. 容器組頁面,單擊目標Pod名稱,然後在頁面下方單擊日誌頁簽,查看訪問日誌。

設定日誌輸出形式

說明

該功能僅支援1.20.6.36及以上版本的ASM執行個體。關於升級執行個體的具體操作,請參見升級ASM執行個體

日誌設定地區,按需將日誌輸出形式設定為JSONTEXT

  • 設定為JSON,訪問日誌將以JSON字串的形式輸出至容器標準輸出。

  • 設定為TEXT,訪問日誌將以純文字字串的形式輸出至容器標準輸出。

自訂日誌格式

  1. 日誌設定地區,按需選中欄位、修改自訂欄位資訊或在最下方日誌指標右側單擊增加.png表徵圖,新增日誌欄位。

    只有開啟啟用日誌輸出開關,才能自訂日誌格式。在日誌格式地區,預設選中的日誌欄位為預設必選欄位,不支援修改。日誌欄位支援從請求Header、響應Header、Envoy內建值中取值。

    下文以列印請求中的accept-encoding Header為例,配置變數名稱accept-encoding類型請求屬性變數值Accept-Encoding日誌格式.png

  2. 執行以下命令,查看服務網格資料平面組件日誌。

    kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1|grep accept-encoding --color=auto

    展開查看樣本輸出

    {
        "bytes_received":"0",
        "bytes_sent":"9593",
        "downstream_local_address":"192.168.0.29:80",
        "downstream_remote_address":"69.164.XXX.XX:0",
        "duration":"2",
        "istio_policy_status":"-",
        "method":"GET",
        "path":"/",
        "protocol":"HTTP/1.1",
        "request_id":"29939dc9-62be-4ddf-acf6-32cb098d****",
        "requested_server_name":"outbound_.8000_._.httpbin.default.svc.cluster.local",
        "response_code":"200",
        "response_flags":"-",
        "route_name":"default",
        "start_time":"2023-06-30T04:18:19.734Z",
        "trace_id":"-",
        "upstream_cluster":"inbound|80||",
        "upstream_host":"192.168.0.29:80",
        "upstream_local_address":"127.0.X.X:34723",
        "upstream_service_time":"2",
        "upstream_transport_failure_reason":"-",
        "user_agent":"Mozilla/5.0 zgrab/0.x",
        "x_forwarded_for":"69.164.XXX.XX",
        "authority_for":"47.110.XX.XXX",
        "upstream_response_time":"2",
        "accept-encoding":"gzip"
    }

    可以看到步驟1新增的Accept-Encoding Header的值,已被輸出至訪問日誌。

日誌過濾

日誌設定地區下方,按需選中啟用日誌過濾以啟用日誌過濾,然後在下方日誌運算式文字框輸入日誌過濾運算式。未能與運算式匹配的請求對應的訪問日誌將不會輸出。

例如,如果您希望只輸出Response Http Status >=400的請求日誌,則運算式為response.code >= 400。詳細資料,請參見CEL運算式和常用欄位

CEL運算式和常用欄位

日誌過濾運算式為標準CEL(Common Expression Language)運算式。CEL運算式的常用欄位如下。更多資訊,請參見CELEnvoy

屬性

類型

說明

request.path

string

請求路徑。

request.url_path

string

不包含Query的請求路徑。

request.host

string

URL中的主機名稱部分。

request.method

string

要求方法。

request.headers

map<string, string>

以全小寫Header名索引的全部Request Header。

request.useragent

string

User Agent頭的值。

request.time

timestamp

請求首個位元組到達的時間。

request.id

string

請求ID。

request.protocol

string

請求協議,取值為HTTP/1.0HTTP/1.1HTTP/2HTTP/3

request.query

string

請求URL中的Query串。

response.code

int

HTTP響應的返回碼。

response.code_details

string

響應代碼詳細資料。

response.grpc_status

int

響應中的gRPC狀態代碼。

response.headers

map<string, string>

以全小寫Header名索引的全部Response Header。

response.size

int

Response Body的大小,單位為byte。

response.total_size

int

Response訊息的完整大小,單位為byte。

監控指標設定說明

監控指標設定包括啟用或禁用監控指標產生、指標維度。

啟用或禁用監控指標產生

監控指標分為CLIENT側指標和SERVER側指標。

  • CLIENT側指標:Sidecar作為用戶端主動發起請求時所產生的指標資料,網關指標也屬於CLIENT類別。

  • SERVER側指標:Sidecar作為服務端被動接受訪問時所產生的指標資料。

  1. 監控指標設定地區的CLIENT側指標SERVER側指標列,按需選中或取消選中目標指標對應的啟用

    • 啟用指標:服務網格資料平面Sidecar或網關會將該指標通過15020連接埠的/stats/prometheus路徑進行暴露。

    • 不啟用指標:該指標不會通過上述連接埠進行暴露。

  2. 執行以下命令,查看Sidecar或網關暴露的監控指標。

    您可以通過kubectl命令在Sidecar或網關容器內執行curl命令,訪問本地15020連接埠的/stats/prometheus路徑,查看匯出的監控指標。

    kubectl exec httpbin-5c5944c58c-w**** -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus|head -n 10

    樣本輸出:

    # TYPE istio_agent_cert_expiry_seconds gauge
    istio_agent_cert_expiry_seconds{resource_name="default"} 46725.287654548
    # HELP istio_agent_endpoint_no_pod Endpoints without an associated pod.
    # TYPE istio_agent_endpoint_no_pod gauge
    istio_agent_endpoint_no_pod 0
    # HELP istio_agent_go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
    # TYPE istio_agent_go_gc_duration_seconds summary
    istio_agent_go_gc_duration_seconds{quantile="0"} 5.0149e-05
    istio_agent_go_gc_duration_seconds{quantile="0.25"} 9.8807e-05
    ......

指標維度

指標攜帶的維度可以表達更豐富的資訊。您可以利用這些維度在Prometheus中篩選出目標指標。例如,您可以通過source_app指標來篩選請求用戶端為特定應用的指標。

編輯預設維度

您可以通過以下步驟對預設維度進行編輯。

  1. 監控指標設定地區的CLIENT側指標SERVER側指標列,單擊已啟用指標對應的編輯維度

  2. 自訂CLIENT 維度配置自訂SERVER 維度配置對話方塊,按需選中或取消選中匯出指標的維度,然後單擊確認

例如,當未關閉任何維度情況下,通過kubectl在Sidecar或網關容器內執行curl命令,訪問本地15020連接埠的/stats/prometheus路徑,查看匯出的監控指標。

kubectl exec httpbin-5c5944c58c-w**** -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus

以其中一個istio_request_bytes_sum(對應控制台的REQUEST_SIZE指標)為例,可以看到其中包含了所有的維度。

istio_request_bytes_sum{reporter="destination",source_workload="istio-ingressgateway",source_canonical_service="unknown",source_canonical_revision="latest",source_workload_namespace="istio-system",source_principal="spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway",source_app="istio-ingressgateway",source_version="unknown",source_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",destination_workload="httpbin",destination_workload_namespace="default",destination_principal="spiffe://cluster.local/ns/default/sa/httpbin",destination_app="httpbin",destination_version="v1",destination_service="httpbin.default.svc.cluster.local",destination_canonical_service="httpbin",destination_canonical_revision="v1",destination_service_name="httpbin",destination_service_namespace="default",destination_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",request_protocol="http",response_code="200",grpc_response_status="",response_flags="-",connection_security_policy="mutual_tls"} 18000

修改SERVER側預設REQUEST_SIZE指標,只保留response_code維度,通過kubectl在Sidecar或網關容器內執行curl命令,訪問本地15020連接埠的/stats/prometheus路徑,查看匯出的監控指標。可以看到其中只包含了response_code維度。

istio_request_bytes_sum{response_code="200"} 16550

添加自訂維度

您可以通過以下步驟添加自訂維度:

  1. 監控指標設定地區的CLIENT側指標SERVER側指標列,單擊已啟用指標對應的編輯維度

  2. 自訂CLIENT 維度配置自訂SERVER 維度配置對話方塊的自訂維度選項中,編輯指標的維度名稱和取值,然後單擊確認

例如,在SERVER側編輯REQUEST_SIZE指標的自訂維度,添加維度名稱為request_path,維度取值為request.path後,通過kubectl命令在Sidecar或網關容器內執行curl命令,訪問本地15020連接埠的/stats/prometheus路徑,查看匯出的監控指標。可以看出,此時指標中包含自訂維度request_path

istio_request_bytes_sum{response_code="200",request_path="/spec.json"} 5800
重要

您可以通過移除業務不需要的預設維度來減少Envoy和Prometheus的記憶體消耗,但通常大多數維度都需要保留,因此監控指標設定地區僅展示被移除的維度。

鏈路追蹤設定說明

鏈路追蹤設定包括採樣百分比、自訂標籤。該功能僅支援全域配置。

採樣百分比

您可以自訂鏈路追蹤的採樣百分比,即觸發上報鏈路追蹤的請求的比例。設定為0表示關閉鏈路追蹤,沒有任何請求會觸發上報。

自訂標籤

您可以自訂上報的鏈路追蹤Span攜帶的標籤。在鏈路追蹤設定地區,單擊新增自訂標籤,配置名稱類型

類型取值包括固定值、請求Header和環境變數。類型的說明及標籤配置樣本如下。

類型

說明

標籤配置樣本

固定值

固定實值型別標籤的值將固定為您設定的值。

  • 名稱:env

  • 類型:固定值

  • :prod

請求Header

請求Header標籤的值將以您指定的請求Header的值作為標籤值。若Header在請求中不存在,則使用預設值作為標籤值。

例如,從Header User-Agent中擷取標籤值,當Header不存在時則將標籤值設定為預設值unknow。

  • 名稱:useragent

  • 類型:請求Header

    • header名稱:User-Agent

    • 預設值:unknow

環境變數

環境變數標籤將從工作負載的指定環境變數中擷取標籤值。若環境變數在工作負載中不存在,則使用預設值作為標籤值。

例如,從環境變數ENV中擷取標籤值,當環境變數不存在時則將標籤值設定為預設值unknow。

  • 名稱:env

  • 類型:環境變數

    • 環境變數名稱:ENV

    • 預設值:unknow