ASM内置多个监控指标以及丰富的指标维度来帮助您更好的了解应用的运行情况。本文介绍如何使用WASM插件为ASM中已有的监控指标新增自定义维度。
背景信息
ASM内置了多个默认的监控指标(比如:istio_requests_total、istio_request_duration_milliseconds等),并且这些监控指标都有默认的一些维度(比如:source_workload、destination_workload、response_code等)。您可以参考https://help.aliyun.com/zh/asm/user-guide/observability-settings#fcf66e001a00h来配置网格代理生成的监控指标。基于这些监控指标信息,您可以构建丰富的仪表盘以及一些告警规则。
如果默认的维度并不能满足您的需求,ASM提供了强大的扩展机制,您可以基于请求或响应信息自行编写处理逻辑,将处理后的结果添加到监控指标的维度中。这种方式有极高的自由度,您可以将任意信息添加到维度中。
示例说明
本文将演示如何使用WASM插件扩展监控指标的维度信息。
示例的请求如下:
# YXNtLXRlc3QtdXNlcgo=是"asm-test-user"进行base64编码后的结果 curl ${ASM网关IP}:80/status/418 --header "user-name:YXNtLXRlc3QtdXNlcgo="
本文将演示使用Rust开发WASM插件,将请求头中的user-name进行base64解码,然后将user-name作为一个维度添加到istio_requests_total指标中。
其他语言和Rust插件调用的API类似,如果你使用其他语言编写WASM插件,请自行查阅对应的SDK文档。
前提条件
- 已添加集群到ASM实例,且ASM实例版本为1.18及以上。
- 已启用Sidecar注入。具体操作,请参见配置Sidecar注入策略。
- 已创建入口网关。
- 已部署httpbin应用,且可以正常访问。具体操作,请参见部署httpbin应用。
步骤一:编写插件并将其应用至httpbin应用
该示例插件的示例代码:https://github.com/AliyunContainerService/asm-labs/tree/main/rust-add-metrics-tag,您可以自行下载查看。
插件编译及部署,请参考:https://help.aliyun.com/zh/asm/user-guide/developing-a-wasm-plugin-for-grid-agents-using-rust。
这个插件中的主要步骤就是调用了一个SetProperty
函数,将解析的结果设置为一个filter_state。
步骤二:修改可观测配置,输出自定义维度
进入对应ASM示例页面,选择左侧“可观测配置”,找到对应的“监控指标设置”,请分别为CLIENT和SERVER侧的REQUEST_COUNT指标添加自定义维度。点击“编辑维度”,按照下图所示进行配置:
确认配置后,点击提交。
该步骤会将WASM插件设置的filter_state添加到指标维度中。
步骤三:发起访问测试,并查看结果
测试命令:
curl ${ASM网关IP}:80/status/418 --header "user-name:YXNtLXRlc3QtdXNlcgo=" -=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`
访问完毕之后,使用对应ACK集群的kubeconfig,查看httpbin pod对应的prometheus指标。
kubectl exec deployments/httpbin -it -c istio-proxy -- curl localhost:15000/stats/prometheus | grep istio_requests_total # TYPE istio_requests_total counter istio_requests_total{reporter="destination",source_workload="sleep",source_canonical_service="sleep",source_canonical_revision="latest",source_workload_namespace="default",source_principal="spiffe://cluster.local/ns/default/sa/sleep",source_app="sleep",source_version="unknown",source_cluster="xxxxxxxxxx",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="xxxxxxxxxx",request_protocol="http",response_code="418",grpc_response_status="",response_flags="-",connection_security_policy="mutual_tls",user_name="asm-test-user"} 1
之后您可以在Prometheus中基于该维度查看特定用户的各种统计信息。