本文档介绍了使用 Telemetry (OTLP) API 发送到 Google Cloud 项目的指标数据如何映射到 Cloud Monitoring 结构。此 API 实现了 OpenTelemetry OTLP 协议。当您使用 otlphttp 导出器和 OpenTelemetry 收集器对应用进行插桩时,或者当您使用 OpenTelemetry SDK 时,可以将数据发送到此 API。
OpenTelemetry 是一个受 Google Cloud支持的开源项目,配备 Google Cloud工程师来确保支持注入和直观呈现遥测数据。
Cloud Monitoring 中的 OTLP 指标
当使用 OpenTelemetry 收集器和 otlphttp 导出器将指标注入到 Cloud Monitoring 中,或者使用 OpenTelemetry SDK 直接发送指标时,OTLP 指标会映射到 Cloud Monitoring 指标结构。本节介绍以下内容:
受监控的资源映射
所有指标点都使用 Prometheus 映射以 Google Cloud Managed Service for Prometheus 的格式写入。
Prometheus 映射
Prometheus 指标需要使用受监控的资源类型 prometheus_target。
prometheus_target 资源类型上的以下标签用于在 Monarch 中对数据进行架构化和高效存储。您为这些属性指定的值越精确,查询能力和可伸缩性就越好。
我们强烈建议您在为这些标签设置值时尽可能明确,不过我们已实现后备逻辑,以便在没有明确值的情况下使用。
下表按优先级顺序列出了标签的值来源:
prometheus-target 标签 |
使用的值(按优先级顺序) |
|---|---|
location(必需) |
|
cluster |
|
namespace |
|
job |
|
instance如果为空,则拒绝该点 |
|
指标映射
指标会转换为 Prometheus 时间序列格式。指标名称不得包含网域,或者必须包含网域prometheus.googleapis.com。
转换后,指标名称将包含 prometheus.googleapis.com 前缀和基于 OTLP 点类型的其他后缀。生成的 Cloud Monitoring 指标具有以下结构:
prometheus.googleapis.com/{metric_name}/{suffix}
此外,对于每个唯一的 OpenTelemetry 资源,转换会添加一个 target_info 指标,其中包含除 service.name、service.instance.id 和 service.namespace 之外的所有资源属性。
所有 OTLP INT64 指标都会转换为 Cloud Monitoring 中的 DOUBLE 值类型,即使收集器将值类型指定为 INT64 也是如此。做出此更改是因为,一旦时序进入 Monarch,您就无法更改值类型。支持 INT64 值最常见的后果是,您最终会遇到只能通过删除指标来解决的冲突。
Prometheus 指标映射
指标类型对应关系如下:
- OTLP 衡量指标会映射到 Cloud Monitoring 衡量指标。
- OTLP Sum 映射如下:
- OTLP 直方图会映射到 Cloud Monitoring 分布,其指标类型为累积或增量,具体取决于
aggregation_temporality的值。 - OTLP 摘要指标会扩展为每个组成部分(
count、sum和每个quantile)的各个时序。
下表总结了指标映射:
| OTLP 点种类 | 监控 指标种类 | 监控 值类型 | 后缀 | 备注 |
|---|---|---|---|---|
| 仪表盘 | 仪表盘 | DOUBLE | /gauge | |
| GAUGE (metric.metadata["prometheus.type"]="unknown") | 仪表盘 | DOUBLE | /unknown | Prometheus 未知项由 OpenTelemetry 收集器拆分为计数器和计量器。 |
| SUM(单调递增,累计) | 累计 | DOUBLE | /counter | |
| SUM (monotonic, CUMULATIVE, metric.metadata["prometheus.type"]="unknown") | 累计 | DOUBLE | /unknown:counter | Prometheus 未知项由 OpenTelemetry 收集器拆分为计数器和计量器。 |
| SUM(单调递增,DELTA) | DELTA | DOUBLE | /delta | |
| SUM(非单调,累计) | 仪表盘 | DOUBLE | /gauge | |
| 直方图(累计) | 累计 | 具有显式分桶的分布 | /histogram | |
| 指数直方图(累计) | 累计 | 具有指数分桶的分布 | /histogram | |
| 直方图(增量) | DELTA | 具有显式分桶的分布 | /histogram:delta | |
| 指数直方图 (DELTA) | DELTA | 具有指数分桶的分布 | /histogram:delta | |
| 摘要 (总和、数量、分位数) |
累计 累计 测量 |
DOUBLE DOUBLE DOUBLE |
_sum/summary:counter _count/summary /summary |
系统会将汇总数据点写入多个时序,一个用于计数,一个用于总和,其余用于每个计算出的分位数。分位数指标也会生成一个 quantile 标签。 |
googlemanagedprometheus 指标导出器与 Telemetry API 之间的区别
Telemetry API (telemetry.googleapis.com) 处理指标的方式与 googlemanagedprometheus 指标导出器不同:
Telemetry API 允许在指标名称中使用英文句点 (
.) 和斜杠 (/) 字符。googlemanagedprometheus导出器会将所有这些字符的实例转换为下划线 (_) 字符。例如,一个名为prometheus.googleapis.com/foo.bar/gauge的 OTLP 指标由 OTLP 导出器原封不动地导出,但由googlemanagedprometheus导出器导出为prometheus.googleapis.com/foo_bar/gauge。当指标被注入时,Cloud Monitoring 会根据名称创建指标描述符。由于注入途径处理句点 (
.) 和斜杠 (/) 字符的方式不同,因此使用googlemanagedprometheus指标导出器注入的指标与使用otlphttp指标导出器注入的指标的指标描述符会有所不同。如果您同时使用这两种提取路径,则会有两组指标;在查询时,为了获得完整的结果,您必须手动合并 Prometheus 和 OTLP 版本的指标的结果。如果指标具有单位,Telemetry API 不会将单位附加到指标名称,也不会将
_total后缀附加到计数器。因此,使用 Telemetry API 导出为prometheus.googleapis.com/foo/counter的指标会通过googlemanagedprometheus导出器导出为prometheus.googleapis.com/foo_seconds_total/counter。这种差异也适用于_total和_ratio后缀。该 API 会为从指数直方图派生的分布值合成
sum_of_squared_deviation值。googlemanagedprometheus指标导出器不会为指数直方图设置此字段。该 API 会将所有整数点值转换为 Prometheus 指标的双精度值。
如果
scope_version或scope_name标签的值为空,则相应 API 不会设置这些标签。
在何处查看注入的数据
您可以使用 Metrics Explorer 页面查看通过 Telemetry API 注入的指标数据。如需了解如何查看指标数据并绘制图表,请参阅使用 Metrics Explorer 创建图表。