选型相关
应用性能监控支持什么语言?
接入应用是否需要修改代码?
应用性能监控支持多种接入方案,由于编程语言之间特性上的差异,接入工作量也存在比较大的差别。
Java 语言有最成熟的自动接入方案,针对常用的架构和组件都做了自动埋点,埋点覆盖范围非常高,接入过程中可以实现零代码侵入。
Python、Node.js、PHP、.Net 等语言也有自动接入方案,但在埋点覆盖度低于 Java 语言,可能需要修改代码引入自定义埋点。
C++、Erlang 等语言暂时没有自动接入方案,需要修改代码手动接入。
应用性能监控支持什么框架和组件?
理论上支持所有的框架和组件。自动接入方案对常用的框架和组件进行了自动埋点,但对于其他框架和组件,用户也可以修改代码引入自定义埋点,具体请参考特定语言的接入方案。
可以接入部署在其他云的应用吗?
应用性能监控支持混合云部署的场景,只需要确保网络连通性,就可以接入部署在其他云以及线下数据中心的应用。您可以选择通过公网接入点进行上网,或通过腾讯云私有网络等方案上报到内网接入点。
接入应用需要用到的探针和 SDK 是由腾讯云提供的吗?
针对 Java 语言,应用性能监控 APM 提供了腾讯云增强版 OpenTelemetry Java 探针(TencentCloud-OTel Java Agent),在埋点密度、高阶诊断、性能保护、企业级能力等方面做了重要的增强。接入其他语言应用需要用到的探针和 SDK 由开源社区提供,腾讯云不参与开源探针和 SDK 的演进与迭代。
探针需要打到容器镜像中吗?
确保应用能够访问到探针文件即可,不一定需要打到容器镜像中。
是否兼容 OpenTracing 协议?
OpenTracing 标准与 OpenCensus 标准合并后,诞生了 OpenTelemetry 协议标准。应用性能监控 APM 遵循 OpenTelemetry 协议标准,所以可以兼容 OpenTracing 协议。
我应该选择 OpenTelemetry 方案还是 Skywalking 方案?
OpenTelemetry 提供了统一可观测性标准,相比 Skywalking 方案,OpenTelemetry 方案具有更丰富的生态,更活跃的社区,并且支持更多的语言和框架。所以在接入应用的时候,OpenTelemetry 是首选的方案。如果您在之前对 Skywalking 比较熟悉,或者希望从开源 Skywalking 快速迁移到腾讯云应用性能监控 APM,也可以基于 Skywalking 方案接入。
此外,针对 Java语言,应用性能监控 APM 还提供了腾讯云增强版 OpenTelemetry Java 探针(TencentCloud-OTel Java Agent),在埋点密度、高阶诊断、性能保护、企业级能力等方面做了重要的增强。因此,强烈建议 Java 应用 通过腾讯云增强版 OpenTelemetry Java 探针接入 或者选择 K8s 环境自动接入。
之前使用 Skywalking,如何迁移到应用性能监控?
应用性能监控已兼容 Skywalking 协议标准,您只需要修改上报地址,并在 Resource 的参数中填入业务系统的 Token,即可完成迁移。
之前使用开源 OpenTelemetry 方案,如何迁移到应用性能监控?
应用性能监控已兼容 OpenTelemetry 协议标准,您只需要修改上报地址,并在 Resource 的参数中填入业务系统的 Token,即可完成迁移。
是否支持通过 OpenTelemetry 协议标准上报指标(Metrics)和日志(Logs)?
OpenTelemetry 协议标准中定义了链路、指标、日志三种遥测数据,APM 支持链路(Traces)数据的上报和存储,并在基于链路数据计算各类指标。
APM 暂不支持接收应用上报的日志(Logs),建议您关闭 Log Exporter,并将应用日志输出到日志服务(CLS)中。您可以参考 链路与日志关联分析 配置 APM 与日志服务(CLS)的集成,实现链路与日志关联分析。
接入相关
需要自行下载探针和 SDK 吗?
对于部署在容器服务 TKE 上的 Java、Python、Node.js、.Net 应用,APM 提供自动接入方案,可以在应用部署到 TKE 之后实现探针自动注入,方便应用快速接入。其他情况下,请自行下载探针和 SDK 并安装。
安装探针以后,日志中有报错:Failed to export spans
大概率和 Token 填写有关系,请参考接入文档正确填写 Token。对于 OpenTelemetry 方案,Token 需要和应用名
service.name
,以及其他实例属性一起填入到 Resource Attributes 中。通过 TKE 环境自动接入,同一个 TKE 集群的应用可以上报到不同业务系统吗?
可以的。TKE 集群在安装 tencent-opentelemetry-operator 的时候,需要指定默认业务系统。在应用工作负载中,可以通过添加
cloud.tencent.com/apm-token
这个 annotation 上报到特定的业务系统。如果应用工作负载不设置 cloud.tencent.com/apm-token
,则上报到默认业务系统。通过 TKE 环境自动接入,同一个 TKE 集群的应用可以上报到不同地域吗?
不可以。TKE 集群在安装 tencent-opentelemetry-operator 的时候,需要指定接入点。应用级别不能指定接入点。
APM 控制台安装 tencent-opentelemetry-operator 失败
APM 控制台更新 tencent-opentelemetry-operator 失败
tencent-opentelemetry-operator 安装成功,但应用还是接入失败
请确保语言以及框架的版本符合要求。此外,请确保 annotation 添加在工作负载的
spec.template.metadata.annotations
中,而不是 metadata.annotations
。更新 tencent-opentelemetry-operator 会影响已经接入的应用吗?
不会。
tencent-opentelemetry-operator 更新之后,无法接入应用
用户提交更新操作后,Operator 的更新需要几分钟的时间,在这个过程中,新启动的应用实例是无法接入的。因为 Operator 在更新没有完成的情况下,无法通过捕捉应用 Pod 的创建事件注入探针。您只需要等待 Operator 更新完成之后,重新创建应用 Pod,就可以接入应用。
可以跨地域接入应用吗?
可以,只要网络是连通的,就能实现跨地域接入。可以选择公网接入,或引入申请私有连接(Private Link)来打通 VPC 网络。
通过 TKE 环境自动接入,可以跨地域吗?
可以自定义应用实例名吗?
在接入的时候,通过设置 Resource 的
host.name
属性,就能自定义应用实例名。在大多数场景下,IP 地址都可以作为应用实例名,但如果系统中的 IP 地址存在重复的情况,就需要使用其他唯一标识定义实例名称,例如主机 IP + 容器名
的方式。通过 OpenTelemetry-Python 接入 Python 应用,在控制台看到的实例名不是 IP 地址
OpenTelemetry-Python 方案没有自动获取 IP 地址作为实例名,请通过 Resource 的
host.name
属性进行主动设置。Java 应用可以直接使用 OpenTelemetry 社区的探针吗?
可以,但不推荐。应用性能监控 APM 提供腾讯云增强版 OpenTelemetry Java 探针(TencentCloud-OTel Java Agent),在埋点密度、高阶诊断、性能保护、企业级能力等方面做了重要的增强。推荐使用腾讯云增强版 OpenTelemetry Java 探针,如果直接使用 OpenTelemetry 社区的探针,会存在一定的功能缺失。
控制台功能相关
什么是业务系统?
业务系统用于分类管理应用,每个业务系统有唯一的 Token,应用接入的时候需要指定 Token。可以在业务系统级别设置存储时长、上报限额等参数,也可以基于业务系统实现权限管理和分账,不同业务系统之间的监控数据完全隔离。
如何划分业务系统?
由于不同业务系统之间的监控数据完全隔离,可以基于隔离原则划分业务系统。如果两组应用之间不可能存在相互调用关系,可以把它们划分到2个业务系统中进行管理。按不同的环境划分业务系统是一种典型的使用场景,可以为开发环境、测试环境、生产环境各创建一个业务系统。另外一种典型的使用场景是按业务域划分业务系统,前提是这些业务域之间不存在相互调用。
如何理解应用?
在应用性能监控 APM 中,应用是最重要实体,多个使用相同应用名接入的进程,会表现为相同应用下的多个实例。所以应用是一个逻辑组合,在微服务架构中,可以等同为一个服务,包含多个对等的实例。
可以在多个业务系统中使用同一个应用名吗?
可以。
可以通过日志关联功能将日志输出到 CLS 吗?
日志关联功能实现了日志与链路的关联查询,方便用户定位问题。用户需要自行接入腾讯云日志服务 CLS,并在日志体中输出
trace_id
字段。接入了 Go 应用,为什么无法使用应用诊断功能?
应用诊断功能是腾讯云增强版 OpenTelemetry Java 探针(TencentCloud-OTel Java Agent)的增强能力,目前只能用于 Java 应用。
在日志中打印 TraceId,需要引入新的依赖吗?
如果使用腾讯云增强版 OpenTelemetry Java 探针接入,不需要引入任何新的依赖,只需要修改日志配置文件中的 pattern,就能实现日志中注入 TraceId 和 SpanId。具体请参见 OpenTelementry 增强版 Java 探针。
数据相关
P99耗时为何不准确?
应用性能监控 APM 基于线性分布假设算法计算分位数,其结果是预估值,并不能保持精确;而最大耗时一定是精确的。此算法与 Prometheus 计算分位数采用的算法是一致的,是业界普遍采用的算法,具体请参见 Prometheus 分位数误差。当样本数比较少时,可能会出现 P99耗时统计与实际情况出现偏差的情况。
为什么只有链路数据,没有指标数据?
可能和上报的 Span 数据中缺少 Span 类型有关。在自定义埋点的情况下,请确保上报的 Span 都设置了
span.kind
,且取值为 Client
、Server
、Consumer
、Producer
、Internal
之一。为什么会出现断链的情况?
如下几种情况会导致调用链中断:
1. 腾讯云增强版 OpenTelemetry Java 探针实现了熔断保护机制,在应用负载特别高的时候,临时关闭了数据上报。关于熔断保护机制的详情,请参见 腾讯云增强版 OpenTelemetry 探针熔断保护机制。
2. 腾讯云增强版 OpenTelemetry Java 探针限制了每秒最多上报5000条 Span,超过的部分会被丢弃。
3. 探针或 SDK 的自动埋点机制没有覆盖到相关的框架或组件,需要通过自定义埋点进行增强。
什么是 Apdex ?
Apdex 全称是 Application Performance Index,是由 Apdex 联盟开发的用于评估应用性能的工业标准。Apdex 标准从用户的角度出发,对应用响应时间的表现,转为可量化范围为0 - 1的满意度评价。
Apdex 的计算规则是什么?
首先根据应用性能评估确定应用响应时间的最低门槛为 Apdex 阈值,然后根据实际响应时间获得3种不同的性能表现:
满意(Satisfied):应用响应时间低于或等于 Apdex 阈值。
可容忍(Tolerating):应用响应时间大于 Apdex 阈值,但同时小于或等于4倍的 Apdex 阈值。
沮丧(Frustrated):应用响应时间大于4倍的 Apdex 阈值。
Apdex =(满意数+可容忍数/2)/ 总样本量
应用性能监控支持链路采样吗?
在数据库调用分析中,为什么 SQL 会被截断?
在数据库调用分析和 SQL 分析视图中,SQL 语句以维度信息的方式保存在 APM 的指标数据中,以实现基于 SQL 语言的统计分析。为了避免过长的维度信息导致指标聚合结果难以理解,APM 将维度信息的值限制在256个字符,因此 SQL 语句中超出256个字符的部分将会被截断。
SQL 截断仅存在于 APM 的指标数据中,其完整内容依然保存在每次调用对应的 Span 中。您可以通过关联查询找到对应的链路以及 Span,在链路详情视图中获取完整的 SQL 语句。
在接口分析中,为什么接口名称中部分内容会被替换为{LONG_NUM}等标识?
当一个应用中的接口名称具有比较高的基数(Cardinality)时,就会发生维度发散问题,严重影响用户体验。APM 引入了多项预置的收敛规则,将同类型的接口进行合并,以降低接口名称的基数,以提升统计分析的数据价值以及用户体验。关于接口名称自动收敛的更多详情,请参见 关于接口名称自动收敛。
在数据库调用分析等功能中,APM 使用类似的技术对 SQL 语句进行了自动收敛。自动收敛仅影响指标数据,接口名称和 SQL 语句的原始值依然保存在 Span 数据中,您可以通过关联查询找到对应的调用链,获取原始的接口名以及 SQL 语句。
为什么应用的 CPU 利用率和 top 命令所看到的进程 CPU 利用率不一样?
APM 获取的 CPU 利用率来源于探针的持续上报,在观察视角、数据精度上,都和操作系统中直接获取的 CPU 利用率存在差异。以腾讯云增强版 Java 探针为例,CPU 利用率的计算公式为:JVM 使用的 CPU 时间片段 / 时间周期 / CPU 核数。其中,时间周期为1分钟,JVM 使用的 CPU 时间片段取自 JMX 的
OperatingSystemMXBean.getProcessCpuTime()
。在实际使用中,我们可以忽略两者的差异,更多的关注数据的相对变化。
费用相关
应用性能监控如何收费?
应用性能监控可以免费试用吗?
可以。新用户有15天试用期,15天内上报限额为1亿 Span,链路存储时长为7天。
什么情况下适合套餐包(预付费)计费模式?
需要满足如下条件:
1. 套餐包模式下,链路将按10%比例进行采样,保留全部异常链路,而且不会影响指标的准确性。
2. 用户对 Agent 的数量有明确的预期。
3. Agent 的平均数据上报量比较大,导致按量付费模式成本比较高。
套餐包模式中的 Agent 怎么理解?
一个 Agent 对应一个接入 APM 的应用进程。
Agent * Hour 是什么意思?
Agent * Hour 是套餐包模式的计费单位。每个应用进程接入 APM 后,每个小时将消耗1个 Agent * Hour,举例:10个应用进程接入 APM,每天将消耗10*24=240个 Agent * Hour。
套餐包可以叠加购买吗?
可以,确保在有效期内用完就行。
链路数据存储多久?
试用期默认存储7天,正式计费后您可以按需选择30天以内的任意时长。
指标数据存储多久?
30天。