本文档介绍了如何使用遥测 (OTLP) API (telemetry.googleapis.com) 将 OTLP 格式的日志提取到 Cloud Logging 中,并在其中将其存储为日志条目。如需查看示例,请参阅将 OTLP 格式的日志写入 Telemetry API。
您还可以通过使用 SDK 或 OpenTelemetry 收集器的应用将日志发送到 Telemetry API。
如需了解适用于日志、指标和轨迹的 Telemetry API,请参阅 Telemetry (OTLP) API 参考文档。
协议支持
OTLP 端点支持所有 OTLP 协议,包括 http/protobuf、http/json 和 grpc。从 OpenTelemetry 收集器导出时,您可以使用任何协议。不过,由于大多数 SDK 导出器不支持动态令牌刷新,如果您直接从 SDK 导出,我们建议您仅使用 gRPC OTLP 导出器,而不要使用 HTTP 导出器,
结算
使用 Telemetry API 提取日志时,Cloud Logging 存储空间和结算值可能会发生变化。采用 JSON 格式的 OTLP 日志请求具有以下一般结构:
"resourceLogs": [
{
"resource": {
"attributes": [...]
},
"scopeLogs": [
{
"scope": { ...}
"logRecords": [...]
}
]
}
]
每个 logRecords 数组中的每个项都会成为一个 Cloud Logging 日志条目。如果同时满足以下两个条件,则 Google Cloud 项目
的存储和结算方面会发生最大变化:
resource字段包含大量必需的键和值属性。这些资源属性用于确定生成的LogEntry中的受监控的资源。受监控的资源由 Cloud Logging 受监控的资源类型及其关联标签的值组成。某些受监控的资源类型只有很少的标签,但有些资源类型有很多标签。如需详细了解哪些属性是注入 OTLP 格式日志所必需的,请参阅 OTLP 属性到资源类型的映射。
scopeLogs字段包含logRecords数组中的大量项。
为了支持提取 OTLP 格式的日志,Cloud Logging LogEntry 结构包含一个额外的字段 otel。OTLP 和 Cloud Logging 数据模型并不完全匹配,因此 otel 字段包含来自传入 OTLP 请求的 OTLP 资源、范围和实体的副本。
例如,如果您向 Telemetry API 发送如下所示的 OTLP resourceLog,则每个生成的日志条目都包含一个 resource 字段(用于受监控的资源)和一个 otel 字段,如其他标签页所示:
resourceLog
{
"resourceLogs": [
{
"resource": {
"attributes": [
{
"key": "gcp.project_id",
"value": { "stringValue": "PROJECT_ID" }
},
{
"key": "gcp.resource_type",
"value": { "stringValue": "global" }
}
]
},
"scopeLogs": [
{
"scope": {
"name": "my.library",
"version": "1.0.0",
"attributes": [
{
"key": "my.scope.attribute",
"value": { "stringValue": "some scope attribute" }
}
]
},
"logRecords": [ ... ]
}
]
}
]
}
resource
{
...
"resource": {
"labels": {
"project_id": "PROJECT_ID"
},
"type": "global"
},
...
}
otel
{
...
"otel": {
"resource": {
"attributes": {
"gcp.project_id": "PROJECT_ID",
"gcp.resource_type": "global"
}
},
"scope": {
"attributes": {
"my.scope.attribute": "some scope attribute"
},
"name": "my.library",
"version": "1.0.0"
}
},
...
}
Cloud Logging 无法将其他资源与日志条目相关联,因此有关 OTLP 资源、范围和实体的所有信息都必须复制到每个日志条目。
这种复制可尽可能多地保留原始请求中的信息,并将其添加到生成的日志条目中。但重复也意味着 otel 字段会重复使用日志条目的 monitored-resource (resource) 字段中也使用的资源信息。日志条目的 resource 字段是可收费的,但 otel 字段中重复的资源信息不可收费。
如果您在 OTLP 请求中包含大量日志记录,则必须将 OTLP 信息复制到每个生成的日志条目的 resource 和 otel 字段中。虽然 otel 字段副本的存储空间不收费,但 resource 字段的其他副本的存储空间会收费。如果您在请求中包含大量 OTLP logRecords,日志条目中可收费的 resource 字段的数量会随着每个请求中每个 resource 的 OTLP logRecords 数量的增加而增加。
为了最大限度地减少存储的额外信息,建议您在每个请求中发送一个 logRecord 项。
限制和配额
如需了解与使用 Telemetry API 进行日志记录相关的限制和配额,请参阅日志注入的限制和配额。
使用 Telemetry API 注入日志时,还需遵守 Cloud Logging 配额和限制。