腾讯云可观测平台 自定义应用实例属性

在应用接入 APM 的时候,针对每个应用实例,用户可以自定义一系列实例属性,以实现基于实例属性的查询过滤以及数据聚合。在应用实例生成的可观测数据中,都会附加上对应的实例属性信息。例如,在 APM 提供的应用详情功能中,用户可以基于实例属性对目标实例进行筛选,分析特定 K8s 集群、K8s 工作负载、应用镜像版本下的性能表现。在 APM 提供的容器监控、CVM 监控等功能中,需要通过实例属性关联其他云产品,实现一体化可。

相关产品
腾讯云可观测平台 产品页,含版本规格、价格与购买入口。

一、APM 支持的实例属性

属性名 Key 是否必填 可以自动注入的场景
实例名 host.name 是 通过腾讯云增强版 Java 探针接入通过 SkyWalking 方案接入TKE 环境通过 tencent-opentelemetry-operator 一键接入
CVM 所在地域 cvm.region 否 通过腾讯云增强版 Java 探针接入
CVM 实例 ID cvm.instance.id 否 通过腾讯云增强版 Java 探针接入
TKE 所在地域 k8s.region 否 TKE 环境通过 tencent-opentelemetry-operator 一键接入
TKE 集群 ID k8s.cluster.id 否 TKE 环境通过 tencent-opentelemetry-operator 一键接入
K8s 节点 IP k8s.node.ip 否 TKE 环境通过 tencent-opentelemetry-operator 一键接入
K8s 命名空间 k8s.namespace.name 否 TKE 环境通过 tencent-opentelemetry-operator 一键接入
K8s Deployment 名 k8s.deployment.name 否 TKE 环境通过 tencent-opentelemetry-operator 一键接入
K8s Pod 名 k8s.pod.name 否 TKE 环境通过 tencent-opentelemetry-operator 一键接入
K8s Pod IP k8s.pod.ip 否 TKE 环境通过 tencent-opentelemetry-operator 一键接入
应用版本 service.version 否 TKE 环境通过 tencent-opentelemetry-operator 一键接入
自定义字段1 custom_key_1 否 –
自定义字段2 custom_key_2 否 –
自定义字段3 custom_key_3 否 –

二、手动设置实例属性

注意:说明:

在应用接入的时候,实例属性需要连同 token 和 service.name,一起填入到 Resource Attributes 中。在 OpenTelemetry 标准中,Resource Attributes 以键值对的方式体现应用实例的基本信息。用户可以通过环境变量设置实例属性,也可以在接入代码中设置实例属性,具体的设置方式和接入应用时设置 token 和 service.name 的方式一致。

三、方式一:通过环境变量设置实例属性

将实例属性添加到环境变量 OTEL_RESOURCE_ATTRIBUTES 中,最终 OTEL_RESOURCE_ATTRIBUTES 会表现为类似 key1=value1,key2=value2,key3=value3 的形式。

参考如下代码设置 k8s.region 和 k8s.cluster.id 两个实例属性:

export OTEL_RESOURCE_ATTRIBUTES="service.name=myService,token=myToken"export OTEL_RESOURCE_ATTRIBUTES="$OTEL_RESOURCE_ATTRIBUTES,k8s.region=ap-guangzhou,k8s.cluster.id=cls-7i2n4axx"

对于部署在 Kubernetes 的应用(没有使用 tencent-opentelemetry-operator 一键接入),也可以在工作负载 Yaml 文件中通过 OTEL_RESOURCE_ATTRIBUTES 环境变量设置实例属性,参考如下代码片段:

spec: containers: – env: – name: OTEL_RESOURCE_ATTRIBUTES value: "service.name=myService,token=myToken,k8s.region=ap-guangzhou,k8s.cluster.id=cls-7i2n4axx"

对于 TKE 环境通过 tencent-opentelemetry-operator 一键接入的应用,可以在工作负载 Yaml 文件中设置没有被自动注入的实例属性,参考如下代码片段:

spec: containers: – env: – name: OTEL_RESOURCE_ATTRIBUTES value: "custom_key_1=value1,custom_key_2=value_2,cvm.region=ap-guangzhou,cvm.instance.id=ins-3flvdptq"

注意:说明:

注意:对于 TKE 环境通过 tencent-opentelemetry-operator 一键接入的应用,除了可以自动注入的实例属性外,token 和 service.name 也已经自动注入,请勿在 Yaml 文件中通过 OTEL_RESOURCE_ATTRIBUTES 环境变量进行覆盖。

四、方式二:在接入代码中设置实例属性

如果通过代码接入应用,可以直接在接入代码中设置实例属性,以 Go 应用为例:

package telemetryimport ( "context" "errors" "os" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/sdk/resource")func NewResource(ctx context.Context) (*resource.Resource, error) { token := os.Getenv("APM_TOKEN") if token == "" { return nil, errors.New("No Token") } return resource.New(ctx, resource.WithAttributes( attribute.String("token", token), attribute.String("service.name", "my-service"), attribute.String("host.name", "10.10.0.1"), attribute.String("k8s.region", "ap-guangzhou"), attribute.String("k8s.cluster.id", "cls-7i2n4ace"), ), )}

五、如何动态获取 Pod 名称和 Pod IP?

由于 Pod 名称、Pod IP、节点 IP 等信息需要在 Pod 创建后才能确定,在部署工作负载的时候,你可以通过 Kubernetes Downward API 进行动态获取,将这些信息写到环境变量中备用,方便在手动设置实例属性的时候进行引用。

spec: containers: – env: – name: POD_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name – name: POD_IP valueFrom: fieldRef: apiVersion: v1 fieldPath: status.podIP – name: NODE_IP valueFrom: fieldRef: apiVersion: v1 fieldPath: status.hostIP

保存到环境变量后,可以直接引用,例如:

spec: containers: – env: – name: OTEL_RESOURCE_ATTRIBUTES value: "service.name=myService,token=myToken,k8s.pod.ip=$(POD_IP),k8s.pod.name=$(POD_NAME)"

注意:说明:

注意:对于 TKE 环境通过 tencent-opentelemetry-operator 一键接入的应用,Pod 名称、Pod IP、节点 IP 等实例属性都已经自动注入,请勿在 Yaml 文件中通过 OTEL_RESOURCE_ATTRIBUTES 环境变量进行覆盖。

赞 (0)
上一篇 5天前
下一篇 5天前