/api/v1/apm 前缀,并要求 Bearer Token。
streams.query。平台调用方在受保护的 _sys 范围可以使用 sys.telemetry.read。写入服务定义、错误状态、服务等级目标和 APM 设置需要 apm.manage。上报发布需要 apm.deploy。
端点
路径参数必须经过 URL 编码。请使用列表响应返回的准确
transaction 名称或错误 fingerprint。
通用查询参数
过滤值不能为空,且不能超过 192 字节。查询范围不能超过配置的最大值,默认是 30 天(
[apm].max_query_range_days)。
排序字段
/overview 接受相同过滤条件与分辨率,但不分页。详情、版本对比和健康端点也不返回分页列表。
查询概览
red、trend、service_health、services、top_transactions、top_dependencies、top_errors 和 recent_versions,以及通用 meta 对象,另外还有:
读取洞察
GET /api/v1/apm/insights 接收通用的时间范围和过滤参数,返回 meta 以及:
每条发现包含:
判断条件见洞察与调查。
列出服务并分页
items 中每个服务对应一个条目:
next_cursor 或 previous_cursor 原样传回同一个端点,并保持过滤条件、时间范围、排序字段和方向不变。游标带签名并绑定原始请求上下文,不要解码或修改。
条目中的 traces 对象重述了该条目的服务、版本、事务、依赖和错误过滤条件以及时间范围,客户端可据此打开对应的链路。
读取 RED 指标
每个汇总都带有red 对象,包含范围内的请求、错误和耗时数据。
服务摘要和事务摘要带有
apdex_threshold_micros,即计算 Apdex 时使用的 T。服务摘要还带有 health 和 health_reasons:每项超过阈值的指标,含 metric(error_rate 或 p95)、level、value 和 threshold。服务摘要还带有 sparkline(每个时间桶的请求数、错误数和 p95),以及 current_version 和 current_version_since(最近出现的版本及其首次出现时间)。服务或事务详情带有 latency_distribution:包含请求的直方图桶,每个为 lower_micros、upper_micros 和 count,并收窄到最快和最慢的请求。
维护服务定义
服务定义记录服务归谁负责、有多重要。它按namespace 和服务名保存,在所有环境中都适用,并且可以在服务上报之前存在。
保存不会改动定义的
key_transactions,关键事务每次只增减一个。响应是保存后的定义,含 namespace、name、key_transactions、updated_by 和 updated_at。DELETE 返回 204;服务没有定义时返回 404。
标记关键事务
key: true 把端点加入 key_transactions,false 将其移除;状态已经如此时不做任何改动。服务还没有定义时会自动创建。每个服务最多 50 个关键事务,溢出行 __other__ 不能标为关键事务。响应是改动后的定义。
读取服务的数据覆盖
GET /api/v1/apm/services/{service}/coverage 需要 namespace 和 environment,可选 to(当前时间范围的终点,单位微秒,默认为当前时间)。它查看 to 之前的一天,每个结果保留五分钟。
missing 表示没有找到。unknown 表示查看失败或超过三秒。rum 不会是 missing:样本调用链只能说明有会话到达服务,不能说明没有。
读取服务的运行情况
GET /api/v1/apm/services 和 GET /api/v1/apm/services/{service} 返回的每个服务摘要带有 profile,取自时间范围内上报过的实例;设置了 version 参数时只统计该版本的实例。每个列表按共享该值的实例数排序,最多 5 项,格式为 { "value": "1.8.2", "instances": 4 }。
GET /api/v1/apm/services/{service}/instances 逐个列出实例,最近上报的在前,最多 500 个。参数为 namespace、environment,以及可选的 version、from、to;缺少服务或环境时返回 400。每项包含 instance_id(依次取 service.instance.id、k8s.pod.name、host.name)、version、first_seen_at、last_seen_at、attributes(实例最后一次上报的属性),以及它在时间范围内处理的请求:red(与摘要相同,Apdex 按服务的阈值计算)和 sparkline。超过实例上限的实例合并为一项,其 instance_id 为 __other__。在保存实例信息之前就处理过请求的实例,attributes 为空。
设置错误分组的状态
status 为 open、investigating、resolved 或 ignored。assignee_id 为组织成员或 null,team_id 为组织中的团队或 null。last_seen_at 可选,表示调用方最后看到该分组的时间,单位为微秒。设为 resolved 时会把当前时间记为 resolved_at。
错误摘要以 issue 携带状态,从未设置时为 null。已解决的分组在 resolved_at 之后再次出现时,issue.regressed 为 true,unresolved 筛选会保留这些分组。为投影不认识的指纹设置状态会返回 404。
维护服务等级目标
服务等级目标(SLO)承诺某个环境中的一个服务或其某个端点,在滚动窗口内达标请求所占的比例。各项指标的含义见服务等级目标。POST 和 PUT 返回保存后的 SLO,含 id、created_by、created_at、updated_by 和 updated_at。GET /api/v1/apm/slos 以状态的形式返回组织的所有 SLO;同时传入 namespace、service 和 environment 可只保留一个服务的 SLO。窗口截至调用时刻,因此不适用通用的时间范围参数。
GET /api/v1/apm/slos/{id} 返回 status 和 history。history 按时间从早到晚,为窗口内每个有请求的 UTC 自然日给出一项,含微秒单位的 day_start、sli、good_requests 和 total_requests。
DELETE 返回 204。仍有告警规则监控该 SLO(例如它的燃烧率告警)时返回 409,需先删除这些规则。监控 SLO 的告警规则是指标为 slo_burn_rate 的 APM 规则,见创建规则。
区分同名事务
不同事务种类可能使用相同名称。请传入可选的kind 参数指定目标:
http、rpc、messaging、span 和 other。名称被多个服务或种类共用时,返回 400,消息为 APM transaction identity is ambiguous; provide service, namespace, environment, and kind。
比较版本
请提供两个不同的baseline 和 candidate,并添加 service 过滤条件以比较单个服务。
baseline 与 candidate 两侧(各有 version、sample_count 和 red),以及 delta、status、regressed_transactions 和 regressed_errors。每个回退列表最多 20 项。
缺少
candidate 或 baseline,或者两个版本相同,都会返回 400。
读取服务的版本
GET /api/v1/apm/services/{service} 返回 versions,即时间范围内出现过的版本。每个版本带有 red(它在时间范围内的表现)和 verdict(与同一服务中在它之前首次出现的版本相比的结论),判定方式与版本对比相同:
最早出现的版本没有
verdict。请求中的版本筛选不会缩小这些数据:每个版本都从整个服务读取。
读取错误发生的分布
GET /api/v1/apm/errors 在分页结果旁返回 breakdown,统计 status 筛选保留的全部分组(不只是当前页),GET /api/v1/apm/errors/{fingerprint} 返回该分组的 breakdown。它包含 versions、environments 和 languages,每项是 value 与 count(出现次数)的列表,次数多的在前。span 没有上报的值为空字符串;前七个值之后的其余值合计为 __other__。语言取自服务的 telemetry.sdk.language。
维护错误聚合规则
规则在错误出现时按类型、抛出位置和端点之外的方式分组。规则按position 顺序匹配,第一条匹配的规则生效。
响应为带有
id、position、updated_by 和 updated_at 的规则。一个组织最多保留 100 条规则。PUT /api/v1/apm/error-rules/order 接收 {"ids": [...]},把这些规则按给定顺序排在最前,其余规则排在其后,并按新顺序返回规则。
修改在保存它的节点上立即生效,在其他节点上 30 秒内生效,作用于此后出现的错误;已有的分组保持不变。
读取服务地图
GET /api/v1/apm/map 接收通用的时间范围、environment 和 namespace 参数,返回 nodes、edges、namespaces(该环境中服务的命名空间)、environments(全部环境)和 truncated(只保留了最繁忙的 400 个节点时为 true)。
服务之间的调用取自服务图,P95 取其最慢一分钟的值;其余取自 APM 分桶。
GET /api/v1/apm/map/edge 在相同参数之外接收 source 和 target 两个节点 id,返回 kind、red、trend、operations(name、kind、red)、every_caller(操作是被调服务所有调用方的端点时为 true)和 errors(被调服务的错误分组)。
读取服务的影响范围
GET /api/v1/apm/blast-radius 必须带 service,另外接收通用的时间范围和 environment 参数。它读取该环境的整张地图,不受 Namespace 限制,返回 meta、service(服务自己的节点,时间范围内地图上没有该服务时省略)、upstream(调用它的,最多三层)和 downstream(它调用或发布到的,最多两层)。每一侧最多 30 个节点,不健康的在前;和上一时段相比已经消失的调用不计入。
上报与列出发布
POST /api/v1/apm/deployments 接收 JSON 格式的发布,返回 201 和这次发布,并补上 id、created_by 和 created_at。字段、限制和 CI 示例见部署。服务名和环境按组织的命名规则、环境映射和别名处理。仓库地址保存时会遮盖其中的密码。配置变更和功能开关把 kind 设为 configuration 或 feature_flag,不需要 version。
GET /api/v1/apm/deployments 接收 service、namespace、environment、from 和 to(微秒时间范围),按时间从新到旧最多返回 200 次发布。没有 Namespace 或环境的发布会出现在所有 Namespace 或环境的列表中。
维护 APM 设置
GET /api/v1/apm/settings 返回组织的设置;PUT 整体替换设置,并返回保存后的内容:
default。各项限制和作用见 APM 设置。保存后在保存它的节点上立即生效,在其他节点上 30 秒内生效。
平台的基数上限通过 GET 和 PUT /api/v1/settings/apm_limits 读取和替换,需要 sys.settings.manage。请求体包含 services_per_org_hour、transactions_per_service_hour、dependencies_per_service_hour、operations_per_dependency_hour、error_groups_per_service_hour、versions_per_service_hour 和 instances_per_service_hour,每项范围 1 到 100000。
检查投影健康状态
GET /api/v1/apm/health 报告投影是否在运行,以及是否健康。
degraded 为 true,last_error 说明原因。queue_drops、flush_failures 或 cardinality_rejections 持续增长,可以解释数据中的缺口。
阅读响应元数据
每个端点都返回通用meta 对象:
activation_boundary: true表示projection_started_at之前的数据不完整。data_quality.partial: true表示数据不完整,不能按完整零值解读。- 检查
gaps,确认是否发生队列、存储库、刷写、迟到数据、基数或关闭失败。 - 使用
last_complete_bucket_at判断最近数据是否仍在完成处理中。 - 依赖高基数明细前,请检查
overflow_dimensions。
错误
APM 指南
为服务接入埋点,并在界面中调查性能问题。
链路采集
发送用于生成 APM 的 OpenTelemetry trace。