ARMS标签功能支持以一种全新的维度,组织并观察应用监控指标、调用链、日志等数据。本文介绍如何将应用接入标签中心,实现基于应用标签的应用筛选和权限管理,并在应用详情和Grafana视图页面通过实例标签筛选应用监控数据。
前提条件
已将应用接入ARMS应用监控。具体操作,请参见应用监控接入概述。
对于Java应用,还需满足以下要求:
对于容器集群应用,请确认ack-onepilot组件的版本在v3.0.4或以上且ARMS探针版本在v2.7.3.5或以上。
对于其他环境应用,请确认ARMS探针版本在v2.7.3.5或以上,您可以在ARMS控制台 页面下的探针版本发布说明页签获取最新的ARMS探针安装包。
标签类型
目前ARMS应用监控提供两种维度的标签:应用标签和实例标签,请您根据使用场景选择合适的标签类型。应用标签和实例标签都采用键值对(Key-Value)的数据结构,可以同时添加多个键值对。
应用标签
作用于ARMS应用上,您可以在ARMS控制台 页面查看或修改应用标签。通过应用标签,可以实现应用筛选、应用权限管理、成本分账等方面的需求。
实例标签
在ARMS的设计中,一个应用可以包含多个应用实例,每个应用实例都代表一个应用进程,它们通过相同的应用名接入到ARMS中。不同于应用标签,实例标签作用在应用实例上,对于同属一个应用的不同应用实例,它们可以拥有不同的实例标签。
对于Kubernetes环境下自动接入ARMS应用监控的应用实例,ARMS会默认写入如下实例标签:
标签Key | 说明 |
workloadKind | 应用实例所在的工作负载的类型,例如Deployment。 |
workloadName | 应用实例所在的工作负载的名字。 |
clusterName | 应用实例所在的K8s集群名。 |
namespace | 应用实例所在的K8s命名空间。 |
version | 镜像的tag。 可被自定义实例标签覆盖。 |
agentVersion | 探针版本。 |
除了默认实例标签外,您还可以添加自定义实例标签。同时,实例标签还会完整地继承应用标签,ARMS为应用实例产生的监控数据中,都会带上对应的实例标签。
自定义实例标签的Key建议满足Prometheus命名规范,即符合正则规则:^[a-zA-Z_][a-zA-Z0-9_]*$
。对于不符合正则规则的Key,ARMS探针会采用下划线(_)对不合规片段进行替代处理,例如:1key:1value
会被替换为_key:1value
。
示例:
如下图所示,应用my-app包含两个实例,ARMS为实例B生成的指标数据中包含的标签为{env: Dev, team: Observability, app: my-app, workloadKind: Deployment, workloadName: my-app, clusterName: ClusterA, namespace: nsA, gitVersion: 1.0.2}
。
添加自定义实例标签
为部署在Kubernetes集群中的应用添加自定义实例标签
方式一(推荐):通过Pod Label方式注入自定义实例标签
对于部署在Kubernetes环境中自动安装ARMS探针的应用,可以通过Pod Label添加自定义实例标签。
这种方式同时适合部署在阿里云容器服务ACK环境和通用Kubernetes环境中的应用。ACK环境和通用Kubernetes环境自动安装探针的操作,请参见应用监控接入概述。
以部署在ACK环境中的应用为例:
在容器服务管理控制台目标集群下的无状态或有状态页面顶部选择目标命名空间,然后在目标应用右侧选择 ,在编辑YAML对话框中添加自定义标签后单击更新。应用实例将触发重启,并加入新的实例标签。
方式二:通过Pod环境变量方式注入自定义实例标签
Java应用如需使用该方式,探针版本需要在4.0.0及以上版本。
对于某些pod创建后才能获取到的自定义标签(如podName),您可以通过在应用容器的启动脚本中增加操作系统环境变量来实现自定义实例标签的注入,具体方式如下:
为您的应用容器增加一个名为ARMS_HOST_TAGS的环境变量,值为您的实例标签,多个标签之间使用
key1:value1&key2:value2
的格式输入,例如:export ARMS_HOST_TAGS="gitVersion:1.0.2&ip:192.168.1.101"
。在环境变量生效后,再启动应用进程。
为手动安装探针的应用添加自定义实例标签
Java应用
方式一:添加-D命令行参数
请在您的Java应用启动参数中添加-Darms.host.tags="${yourLabel}"
。
请将${yourLabel}
替换为您需要添加的实例标签,多个标签之间使用key1:value1&key2:value2
的格式输入,例如:-Darms.host.tags="gitVersion:1.0.2&ip:192.168.1.101"
。
方式二:修改配置文件
探针版本为低于4.0.0
修改探针安装包中arms-agent.config配置文件的profiler.tags.customtags字段,可以添加自定义实例标签,多个标签之间使用
key1:value1&key2:value2
的格式输入,例如:#profiler.tags.customtags=key1:value1&key2:value2 profiler.tags.customtags=gitVersion:1.0.2&ip:192.168.1.101
重启应用进程。
探针版本高于4.0.0
在任意目录下新建一个.properties后缀的配置文件,在配置文件中增加profiler.tags.customtags字段,value指定为您需要添加的实例标签,多个标签之间使用
key1:value1&key2:value2
的格式输入,例如:#profiler.tags.customtags=key1:value1&key2:value2 profiler.tags.customtags=gitVersion:1.0.2&ip:192.168.1.101
在您的Java应用启动参数中添加
-Dotel.javaagent.configuration-file=${path/to/config/file}
。请将
${path/to/config/file}
替换为您刚刚创建的配置文件全路径,例如:-Dotel.javaagent.configuration-file=/home/admin/config/agent-config.properties
。重启应用进程。
Golang应用
声明环境变量,然后重启应用进程。
#export PROFILER_TAGS_CUSTOMTAGS=key1:value1
export PROFILER_TAGS_CUSTOMTAGS=gitVersion:1.0.2
K8s环境下通过Pod Label注入应用标签
Java应用仅3.0.16及以上版本的ack-onepilot组件支持通过Pod Label注入应用标签。
如果Pod Label带有app.customAppKey.
前缀,则会被识别为应用标签,而不是实例标签。
例如以下代码,ARMS会为这个工作负载接入的应用加上应用标签env: dev。
template:
metadata:
labels:
app.customAppKey.env: dev
app: mall-gateway
armsPilotAutoEnable: 'on'
aliyun.com/app-language: golang # Go应用必填,标明此应用是Go应用。Java应用无需设置。
armsPilotCreateAppName: mall-gateway
在ARMS中,应用是一种聚合概念,代表多个应用实例的集合。1个应用可以拥有多个应用实例,也可以来自于多个工作负载,或者多个K8s集群。所以,通过Pod Label注入应用标签只能作为DevOps场景下的便捷操作,存在一定的局限性。
通过Pod Label注入的应用标签只增不减,如果要修改或删除已有的标签key,需要在修改YAML文件之后,再通过ARMS控制台或OpenAPI进行操作。
多个工作负载接入同一个ARMS应用的情况下,通过Pod Label注入的应用标签会造成冲突,用户需要自行确保应用标签的一致性。
使用应用标签
应用筛选
在ARMS应用列表,以及创建告警规则等功能中,可以基于应用标签快捷筛选应用。
基于标签的权限管理
基于应用标签管理RAM权限,具体操作,请参见应用监控自定义RAM授权策略。
使用实例标签
在应用详情中根据实例标签过滤监控数据
登录ARMS控制台,在左侧导航栏选择 。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
说明语言列的图标含义如下:
:接入应用监控的Java应用。
:接入应用监控的Golang应用。
:接入应用监控的Python应用。
-:接入可观测链路 OpenTelemetry 版的应用。
在应用详情的多个页面中,都可以根据实例标签过滤监控数据,例如根据镜像版本号进行对比分析。
在Grafana视图页面通过标签查询监控指标
登录ARMS控制台,在左侧导航栏选择 。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
说明语言列的图标含义如下:
:接入应用监控的Java应用。
:接入应用监控的Golang应用。
:接入应用监控的Python应用。
-:接入可观测链路 OpenTelemetry 版的应用。
在左侧导航栏单击Grafana视图,在右侧页面顶部选择不同的标签,查看对应的监控指标。