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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 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中基于该维度查看特定用户的各种统计信息。

目录
相关文章
|
6月前
|
存储 Go
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
本文将探讨几个热门的 go 日志库如 logrus、zap 和官网的 slog,我将分析这些库的的关键设计元素,探讨它们是如何支持日志轮转与切割功能的配置。
283 0
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
|
3月前
|
监控 前端开发 Serverless
现代化 Web 应用构建问题之观测站点的PV、UV和API异常等指标如何解决
现代化 Web 应用构建问题之观测站点的PV、UV和API异常等指标如何解决
49 2
|
3月前
|
存储 Prometheus 监控
Prometheus 的扩展与集成
【8月更文第29天】Prometheus 是一款非常强大的监控系统,它不仅能够采集和存储时间序列数据,还提供了丰富的生态系统来扩展其功能。本文将介绍如何通过自定义 Exporters 和集成中间件(如 Thanos)来扩展 Prometheus 的能力。
59 0
|
3月前
|
存储 Kubernetes 数据可视化
在K8S中,如何使用 EFK 实现日志的统一管理?
在K8S中,如何使用 EFK 实现日志的统一管理?
|
6月前
|
Prometheus 监控 Kubernetes
在服务网格ASM中,如何实现限流防护的指标监控
阿里云服务网格ASM支持通过本地限流和全局限流两种方式对网格内服务以及网关实现流量限流防护。在使用限流防护的过程中,如何对限流的相关行为进行指标监控呢?本文主要介绍相关的实践示例。
|
存储 消息中间件 监控
代码级别监控:常见的全链路监控工具介绍
代码级别监控:常见的全链路监控工具介绍
|
负载均衡 测试技术 数据处理
阿里云服务网格ASM的流量标签及路由功能之(4): 基于ASM实现全链路灰度发布
当您需要在多个服务间实现全链路的灰度发布时,可以通过配置TrafficLabel来识别流量特征,将网关入口流量分为正常流量和灰度流量。灰度流量特征会在请求调用链经过的各个服务间进行传递,从而实现全链路灰度发布。本文介绍如何通过TrafficLabel能力来实现微服务的全链路灰度发布。
425 0
阿里云服务网格ASM的流量标签及路由功能之(4): 基于ASM实现全链路灰度发布
|
运维 监控 微服务
在ASM中为应用服务启用SLO(1):服务等级目标SLO概览
服务等级目标 (SLO) 提供了一种形式化的方式来描述、衡量和监控微服务应用程序的性能、质量和可靠性。SLO 为应用开发和平台团队、运维团队提供了一个共享的质量基准,作为衡量服务水平质量以及持续改进的参考。SLO 由一个或多个服务等级指标 (SLI) 组成。使用 SLI 组合定义的 SLO 允许团队以更精确和相关的方式描述服务健康状况。 阿里云服务网格ASM提供了开箱即用的基于服务等级目标SLO的监控和告警能力,用于监控应用服务之间调用的延迟和错误率特征。
646 1
在ASM中为应用服务启用SLO(1):服务等级目标SLO概览
|
6月前
|
SQL 运维 监控
基于访问日志构建应用服务的SLO监控
背景随着系统自动化的不断深入,核心业务系统的日益复杂,服务开发运维人员越来越迫切的需要了解系统的当前状态,在出现异常时及时了解服务异常原因以及评估业务的受损情况。服务提供方以及使用者都可以基于该关键指标实时观测系统状态,及观测到解服务异常。下面我们以OSS访问日志为例,来看下如何计算特定服务的可用性...
基于访问日志构建应用服务的SLO监控
|
Prometheus 监控 Kubernetes
在ASM中为应用服务启用SLO(4):导入生成的规则到Prometheus中执行SLO
服务等级目标SLO可以用于衡量服务的水平。用户可以基于Prometheus指标手动定义SLO,但过程相对繁琐。ASM服务网格提供了生成SLO以及配套的告警规则的能力,能够通过自定义资源YAML配置的方式简化这一流程。本文将介绍如何将生成的规则导入到Prometheus中以及如何执行SLO。
317 0
在ASM中为应用服务启用SLO(4):导入生成的规则到Prometheus中执行SLO
下一篇
无影云桌面