可觀測配置
服務(wù)網(wǎng)格ASM提供日志、監(jiān)控指標(biāo)、鏈路追蹤維度的可觀測配置功能。您可以通過ASM控制臺為全局、命名空間或指定工作負載自定義相關(guān)配置,例如日志輸出的格式、指標(biāo)的維度、是否啟用特定監(jiān)控指標(biāo)、設(shè)置鏈路追蹤的采樣率等。本文介紹如何使用可觀測配置功能。
前提條件
已創(chuàng)建ASM實例,且版本為1.17.2.35及以上。具體操作,請參見創(chuàng)建ASM實例或升級ASM實例。
作用范圍
類型 | 說明 |
全局 | 全局配置支持日志、監(jiān)控指標(biāo)、鏈路追蹤設(shè)置。全局配置只有一份,無法刪除。僅全局配置支持鏈路追蹤設(shè)置。 |
命名空間 | 為命名空間創(chuàng)建專有的可觀測配置。每個命名空間只能有一份命名空間級可觀測配置。 |
自定義 | 通過工作負載選擇器選定一個自定義配置的生效范圍。每個工作負載至多被一個自定義配置選中。 |
操作步驟
全局
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標(biāo)實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在可觀測配置頁面,單擊全局頁簽,按需配置日志、監(jiān)控指標(biāo)和鏈路追蹤,然后單擊提交。
您可以單擊下表的鏈接,查看配置的詳細說明。
配置區(qū)域
說明
命名空間
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標(biāo)實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在可觀測配置頁面,單擊命名空間頁簽,單擊創(chuàng)建,選擇目標(biāo)命名空間,按需配置日志和監(jiān)控指標(biāo),然后單擊創(chuàng)建。
您可以單擊下表的鏈接,查看配置的詳細說明。
配置區(qū)域
說明
自定義
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標(biāo)實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在可觀測配置頁面,單擊自定義頁簽,選擇目標(biāo)命名空間,單擊創(chuàng)建,輸入名稱和匹配標(biāo)簽,按需配置日志和監(jiān)控指標(biāo),然后單擊創(chuàng)建。
您可以單擊下表的鏈接,查看配置的詳細說明。
配置區(qū)域
說明
日志設(shè)置說明
日志設(shè)置包括啟用或禁用訪問日志輸出、設(shè)置日志輸出形式、自定義日志格式、日志過濾。
啟用或禁用訪問日志輸出
在日志設(shè)置區(qū)域,按需打開或關(guān)閉啟用日志輸出開關(guān)。
打開開關(guān),服務(wù)網(wǎng)格數(shù)據(jù)平面Sidecar或網(wǎng)關(guān)會將訪問日志輸出至容器標(biāo)準輸出。
關(guān)閉開關(guān),服務(wù)網(wǎng)格數(shù)據(jù)平面Sidecar或網(wǎng)關(guān)停止將日志輸出到容器標(biāo)準輸出。
在數(shù)據(jù)平面Sidecar容器的標(biāo)準輸出查看日志。
下文以使用kubectl查看訪問日志為例進行說明。
執(zhí)行以下命令,查看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" }
執(zhí)行以下命令,查看入口網(wǎng)關(guān)日志。
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" }
(可選)通過容器服務(wù)控制臺查看訪問日志。
如果您使用阿里云容器服務(wù)集群,還可以通過容器服務(wù)控制臺查看訪問日志。
登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在容器組頁面,單擊目標(biāo)Pod名稱,然后在頁面下方單擊日志頁簽,查看訪問日志。
設(shè)置日志輸出形式
該功能僅支持1.20.6.36及以上版本的ASM實例。關(guān)于升級實例的具體操作,請參見升級ASM實例。
在日志設(shè)置區(qū)域,按需將日志輸出形式設(shè)置為JSON或TEXT。
設(shè)置為JSON,訪問日志將以JSON字符串的形式輸出至容器標(biāo)準輸出。
設(shè)置為TEXT,訪問日志將以純文本字符串的形式輸出至容器標(biāo)準輸出。
自定義日志格式
在日志設(shè)置區(qū)域,按需選中字段、修改自定義字段信息或在最下方日志指標(biāo)右側(cè)單擊圖標(biāo),新增日志字段。
只有打開啟用日志輸出開關(guān),才能自定義日志格式。在日志格式區(qū)域,默認選中的日志字段為默認必選字段,不支持修改。日志字段支持從請求Header、響應(yīng)Header、Envoy內(nèi)置值中取值。
下文以打印請求中的accept-encoding Header為例,配置變量名稱為accept-encoding,類型為請求屬性,變量值為Accept-Encoding。
執(zhí)行以下命令,查看服務(wù)網(wǎng)格數(shù)據(jù)平面組件日志。
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的值,已被輸出至訪問日志。
日志過濾
在日志設(shè)置區(qū)域下方,按需選中啟用日志過濾以激活日志過濾,然后在下方日志表達式文本框輸入日志過濾表達式。未能與表達式匹配的請求對應(yīng)的訪問日志將不會輸出。
例如,如果您希望只輸出Response Http Status >=400
的請求日志,則表達式為response.code >= 400
。詳細信息,請參見CEL表達式和常用字段。
CEL表達式和常用字段
日志過濾表達式為標(biāo)準CEL(Common Expression Language)表達式。CEL表達式的常用字段如下。更多信息,請參見CEL和Envoy。
屬性 | 類型 | 說明 |
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 | 請求首個字節(jié)到達的時間。 |
request.id | string | 請求ID。 |
request.protocol | string | 請求協(xié)議,取值為 |
request.query | string | 請求URL中的Query串。 |
response.code | int | HTTP響應(yīng)的返回碼。 |
response.code_details | string | 響應(yīng)代碼詳細信息。 |
response.grpc_status | int | 響應(yīng)中的gRPC狀態(tài)碼。 |
response.headers | map<string, string> | 以全小寫Header名索引的全部Response Header。 |
response.size | int | Response Body的大小,單位為byte。 |
response.total_size | int | Response消息的完整大小,單位為byte。 |
監(jiān)控指標(biāo)設(shè)置說明
監(jiān)控指標(biāo)設(shè)置包括啟用或禁用監(jiān)控指標(biāo)生成、指標(biāo)維度。
啟用或禁用監(jiān)控指標(biāo)生成
監(jiān)控指標(biāo)分為CLIENT側(cè)指標(biāo)和SERVER側(cè)指標(biāo)。
CLIENT側(cè)指標(biāo):Sidecar作為客戶端主動發(fā)起請求時所產(chǎn)生的指標(biāo)數(shù)據(jù),網(wǎng)關(guān)指標(biāo)也屬于CLIENT類別。
SERVER側(cè)指標(biāo):Sidecar作為服務(wù)端被動接受訪問時所產(chǎn)生的指標(biāo)數(shù)據(jù)。
在監(jiān)控指標(biāo)設(shè)置區(qū)域的CLIENT側(cè)指標(biāo)或SERVER側(cè)指標(biāo)列,按需選中或取消選中目標(biāo)指標(biāo)對應(yīng)的啟用。
啟用指標(biāo):服務(wù)網(wǎng)格數(shù)據(jù)平面Sidecar或網(wǎng)關(guān)會將該指標(biāo)通過15020端口的
/stats/prometheus
路徑進行暴露。不啟用指標(biāo):該指標(biāo)不會通過上述端口進行暴露。
執(zhí)行以下命令,查看Sidecar或網(wǎng)關(guān)暴露的監(jiān)控指標(biāo)。
您可以通過kubectl命令在Sidecar或網(wǎng)關(guān)容器內(nèi)執(zhí)行curl命令,訪問本地15020端口的
/stats/prometheus
路徑,查看導(dǎo)出的監(jiān)控指標(biāo)。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 ......
指標(biāo)維度
指標(biāo)攜帶的維度可以表達更豐富的信息。您可以利用這些維度在Prometheus中篩選出目標(biāo)指標(biāo)。例如,您可以通過source_app指標(biāo)來篩選請求客戶端為特定應(yīng)用的指標(biāo)。
編輯默認維度
您可以通過以下步驟對默認維度進行編輯。
在監(jiān)控指標(biāo)設(shè)置區(qū)域的CLIENT側(cè)指標(biāo)或SERVER側(cè)指標(biāo)列,單擊已啟用指標(biāo)對應(yīng)的編輯維度。
在自定義CLIENT 維度配置或自定義SERVER 維度配置對話框,按需選中或取消選中導(dǎo)出指標(biāo)的維度,然后單擊確認。
例如,當(dāng)未關(guān)閉任何維度的情況下,通過kubectl在Sidecar或網(wǎng)關(guān)容器內(nèi)執(zhí)行curl命令,訪問本地15020端口的/stats/prometheus
路徑,查看導(dǎo)出的監(jiān)控指標(biāo)。
kubectl exec httpbin-5c5944c58c-w**** -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus
以其中一個istio_request_bytes_sum(對應(yīng)控制面板的REQUEST_SIZE指標(biāo))為例,可以看到其中包含了所有的維度。
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側(cè)默認REQUEST_SIZE指標(biāo),只保留response_code維度,通過kubectl在Sidecar或網(wǎng)關(guān)容器內(nèi)執(zhí)行curl命令,訪問本地15020端口的/stats/prometheus
路徑,查看導(dǎo)出的監(jiān)控指標(biāo)。可以看到其中只包含了response_code維度。
istio_request_bytes_sum{response_code="200"} 16550
添加自定義維度
您可以通過以下步驟添加自定義維度:
在監(jiān)控指標(biāo)設(shè)置區(qū)域的CLIENT側(cè)指標(biāo)或SERVER側(cè)指標(biāo)列,單擊已啟用指標(biāo)對應(yīng)的編輯維度。
在自定義CLIENT 維度配置或自定義SERVER 維度配置對話框的自定義維度選項中,編輯指標(biāo)的維度名稱和取值,然后單擊確認。
例如,在SERVER側(cè)編輯REQUEST_SIZE指標(biāo)的自定義維度,添加維度名稱為request_path,維度取值為request.path后,通過kubectl命令在Sidecar或網(wǎng)關(guān)容器內(nèi)執(zhí)行curl命令,訪問本地15020端口的/stats/prometheus
路徑,查看導(dǎo)出的監(jiān)控指標(biāo)。可以看出,此時指標(biāo)中包含自定義維度request_path。
istio_request_bytes_sum{response_code="200",request_path="/spec.json"} 5800
您可以通過移除業(yè)務(wù)不需要的默認維度來減少Envoy和Prometheus的內(nèi)存消耗,但通常大多數(shù)維度都需要保留,因此監(jiān)控指標(biāo)設(shè)置區(qū)域僅展示被移除的維度。
鏈路追蹤設(shè)置說明
鏈路追蹤設(shè)置包括采樣百分比、自定義標(biāo)簽。該功能僅支持全局配置。
采樣百分比
您可以自定義鏈路追蹤的采樣百分比,即觸發(fā)上報鏈路追蹤的請求的比例。設(shè)置為0表示關(guān)閉鏈路追蹤,沒有任何請求會觸發(fā)上報。
自定義標(biāo)簽
您可以自定義上報的鏈路追蹤Span攜帶的標(biāo)簽。在鏈路追蹤設(shè)置區(qū)域,單擊新增自定義標(biāo)簽,配置名稱、類型和值。
類型取值包括固定值、請求Header和環(huán)境變量。類型的說明及標(biāo)簽配置示例如下。
類型 | 說明 | 標(biāo)簽配置示例 |
固定值 | 固定值類型標(biāo)簽的值將固定為您設(shè)置的值。 |
|
請求Header | 請求Header標(biāo)簽的值將以您指定的請求Header的值作為標(biāo)簽值。若Header在請求中不存在,則使用默認值作為標(biāo)簽值。 例如,從Header User-Agent中獲取標(biāo)簽值,當(dāng)Header不存在時則將標(biāo)簽值設(shè)置為默認值unknow。 |
|
環(huán)境變量 | 環(huán)境變量標(biāo)簽將從工作負載的指定環(huán)境變量中獲取標(biāo)簽值。若環(huán)境變量在工作負載中不存在,則使用默認值作為標(biāo)簽值。 例如,從環(huán)境變量ENV中獲取標(biāo)簽值,當(dāng)環(huán)境變量不存在時則將標(biāo)簽值設(shè)置為默認值unknow。 |
|