使用WASM插件扩展ASM中监控指标的维度信息

简介: ASM提供多个内置监控指标及其维度,帮助用户了解应用运行状态。本文介绍如何通过WASM插件为ASM的监控指标添加自定义维度,如将请求头中的user-name解码后作为新维度加入istio_requests_total指标中,以实现更精细的监控与分析。

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文档。

前提条件

步骤一:编写插件并将其应用至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指标添加自定义维度。点击“编辑维度”,按照下图所示进行配置:

image.png

确认配置后,点击提交。

该步骤会将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中基于该维度查看特定用户的各种统计信息。

目录
相关文章
|
4月前
|
负载均衡 NoSQL Redis
不增加 GPU,首 Token 延迟下降50%|LLM 服务负载均衡的新实践
针对LLM服务的特点,Higress AI网关以插件形式提供了面向LLM服务的负载均衡算法,包括全局最小请求数负载均衡、前缀匹配负载均衡以及GPU感知负载均衡,能够在不增加硬件成本的前提下,提升系统的吞吐能力、降低响应延迟,并实现更公平、高效的任务调度。
504 135
|
SQL 关系型数据库 MySQL
TiDB支持的SQL语法概述
【2月更文挑战第28天】本章将对TiDB所支持的SQL语法进行概述,涵盖其主要的语法特性和功能。我们将从基本的SQL语句到更复杂的查询和操作,逐步介绍TiDB的SQL语法,帮助读者更好地理解和使用TiDB进行数据库操作。
1189 0
|
负载均衡 Kubernetes Java
MSE-Nacos测评
MSE-Nacos测评
766 0
|
2月前
|
人工智能 运维 Serverless
函数计算 × MSE Nacos : 轻松托管你的 MCP Server
本文将通过一个具体案例,演示如何基于 MCP Python SDK 开发一个标准的 MCP Server,并将其部署至函数计算。在不修改任何业务代码的前提下,通过控制台简单配置,即可实现该服务自动注册至 MSE Nacos 企业版,并支持后续的动态更新与统一管理。
626 50
|
Prometheus 监控 Cloud Native
hyperf| hyperf/metric 上手指南
这期又开始聊微服务的基础设施之一: 实时监控. 更准确的说法, 基于 prometheus 的实时监控. 关于技术选型这里就不多啰嗦啦, 很多时候「从众」或者「用脚投票」往往是最有效的
1056 0
|
12月前
|
存储 人工智能 运维
AI + 可观测最佳实践:让业务从“看见”到“洞察”
本文介绍了AI Ops的概念及其在提升系统运维效率、洞察力和可观测性方面的作用。主要内容分为三个部分:一是监控、观测与洞察的区别及挑战,强调了数据整合和语义对齐的重要性;二是AI与计算如何重塑可观测性,通过UModel数字图谱和多模态存储分析架构实现数据联通;三是最佳实践与未来展望,展示了阿里云AI Stack可观测解决方案的应用案例,并总结了可观测性的四个发展阶段,最终愿景是借助AI力量让每个人成为多领域的专家。
|
8月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
469 12
|
运维 JavaScript Linux
容器内的Nodejs应用如何获取宿主机的基础信息-系统、内存、cpu、启动时间,以及一个df -h的坑
本文介绍了如何在Docker容器内的Node.js应用中获取宿主机的基础信息,包括系统信息、内存使用情况、磁盘空间和启动时间等。核心思路是将宿主机的根目录挂载到容器,但需注意权限和安全问题。文章还提到了使用`df -P`替代`df -h`以获得一致性输出,避免解析错误。
532 1
|
Prometheus 监控 Cloud Native
基于Docker安装Grafana和Prometheus
Grafana 是一款用 Go 语言开发的开源数据可视化工具,支持数据监控和统计,并具备告警功能。通过 Docker 部署 Grafana 和 Prometheus,可实现系统数据的采集、展示和告警。默认登录用户名和密码均为 admin。配置 Prometheus 数据源后,可导入主机监控模板(ID 8919)进行数据展示。
796 2
|
前端开发 JavaScript Docker
拿下奇怪的前端报错(五):SyntaxError: Unexpected token ‘??=‘或‘xxx‘ - 基于容器搭建开发环境或许是更好的选择
在前端开发中,同时维护多个项目时可能会遇到不同Node.js版本的问题。低版本Node.js可能导致依赖无法安装或启动失败,而高版本Node.js则可能引起第三方库的兼容性问题。推荐使用Docker搭建独立的开发环境,以避免版本不一致带来的困扰。
3517 1