服務網格 ASM(Service Mesh)支持將不同類型的指標進行采集到Prometheus,例如Histogram,Counter等。其中Histogram是Prometheus中的一種重要的數據類型,用于收集和分析分布數據,特別是用于測量請求持續時間、響應大小等指標。Histogram允許記錄一組值及其分布,它不僅可以提供總計數和總值,還允許定義多個Buckets來統計不同范圍的值。本文將介紹如何配置ASM中Histogram類型指標的Buckets。
前提條件
已創建并添加集群到ASM實例,實例版本為1.19及以上。具體操作,請參見添加集群到ASM實例。
通過注解配置指標Buckets
ASM支持工作負載級別的指標Buckets配置,您可以通過為部署的應用Pod添加sidecar.istio.io/statsHistogramBuckets
注解,來配置指定Histogram類型指標的Buckets。
您可以通過添加注解對以下Histogram指標進行配置。
指標類型 | 指標名 |
Istio指標 |
|
Envoy指標 |
|
關于上述指標的詳細說明,請參見Istio Standard Metrics和Envoy Statistics。
以下示例展示了為應用Pod配置Istio和Envoy的cluster.xds-grpc
Histogram指標,將Buckets修改為[1,5,10]
。
kubectl patch pod <POD_NAME> -p '{"metadata":{"annotations":{"sidecar.istio.io/statsHistogramBuckets": {"istiocustom":[1,5,10],"cluster.xds-grpc":[1,5,10]}}}}'
Istio采用前綴匹配的方式對指標名稱進行匹配,例如,配置istiocustom會對所有Istio Histogram類型指標生效。
示例演示
以下演示如何通過添加注解來修改Envoy的xds-grpc
指標Buckets。
部署示例應用
使用以下內容,創建httpbin應用。具體操作,請參見部署httpbin應用。
apiVersion: apps/v1 kind: Deployment metadata: name: httpbin spec: replicas: 1 selector: matchLabels: app: httpbin version: v1 template: metadata: labels: app: httpbin version: v1 spec: containers: - image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/httpbin:0.1.0 imagePullPolicy: IfNotPresent name: httpbin ports: - containerPort: 80
執行以下命令,查看httpbin應用的狀態。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE httpbin-fd686xxxx 2/2 Running 0 2m16s
查看并修改當前指標Buckets
執行以下命令,查看當前httpbin應用的指標Buckets。
kubectl exec -it httpbin-fd686xxxx -c istio-proxy -- curl localhost:15000/stats/prometheus |grep envoy_cluster_upstream_cx_connect_ms_bucket
預期輸出:
envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="0.5"} 10 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="1"} 10 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="5"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="10"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="25"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="50"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="100"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="250"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="500"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="1000"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="2500"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="5000"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="10000"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="30000"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="60000"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="300000"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="600000"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="1800000"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="3600000"} 11 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="+Inf"} 11
可以看到此時
xds-grpc
指標的取值范圍為[0.5,1,5,10,25,50,100,250,500,1000,2500,5000,10000,30000,60000,300000,600000,1800000,3600000]
。執行以下命令修改httpbin應用Pod的
xds-grpc
指標Buckets值。kubectl patch deployment httpbin -p '{"spec":{"template":{"metadata":{"annotations":{"sidecar.istio.io/statsHistogramBuckets":"{\"cluster.xds-grpc\":[1,5,10,25,50,100,250,500,1000,2500,5000,10000]}"}}}}}'
執行以下命令,查看Pod狀態。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE httpbin-85b555xxxx-xxxxx 2/2 Running 0 2m2s
執行以下命令,查看當前httpbin應用的指標Buckets。
kubectl exec -it httpbin-85b555xxxx-xxxxx -c istio-proxy -- curl localhost:15000/stats/prometheus |grep envoy_cluster_upstream_cx_connect_ms_bucket
預期輸出:
envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="1"} 0 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="5"} 1 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="10"} 1 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="25"} 1 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="50"} 1 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="100"} 1 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="250"} 1 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="500"} 1 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="1000"} 1 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="2500"} 1 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="5000"} 1 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="10000"} 1 envoy_cluster_upstream_cx_connect_ms_bucket{cluster_name="xds-grpc",le="+Inf"} 1
可以看到
xds-grpc
指標的取值范圍已改為[1,5,10,25,50,100,250,500,1000,2500,5000,10000]
。