本文档介绍了 Google Cloud Observability 如何使用规则来确定
Logging 受监控的资源类型,以用于
由 Telemetry API 注入的日志数据。受监控的资源描述了
日志数据的来源,在 LogEntry 中,它使用
标签表示。Google Cloud Observability 使用 OTLP 资源属性来确定这些标签的值。
OTLP 格式的日志数据的一般结构
当日志数据使用 Telemetry API 发送到 Google Cloud 时,此 数据必须采用与 OTLP 一致的格式。此数据的一般结构如下所示:
"resourceLogs": [
{
"resource": {
"attributes": [...]
},
"scopeLogs": [
{
"logRecords": [...]
}
]
}
]
请注意,OpenTelemetry 会批量处理各个日志,每个日志都由 logRecord 结构表示,其中包含有关这些日志来源的信息,这些信息由 resource 结构表示。
当 Google Cloud Observability 收到 resourceLogs 对象时,它会为每个 logRecord 构建一个
LogEntry。与 OTLP 将来源信息与一系列单独的日志进行批处理不同,每个 LogEntry 结构都包含有关日志来源和日志本身的信息。
如需详细了解 OTLP 格式的日志数据的结构,
请参阅 OpenTelemetry logs.proto。
使用 Google Cloud 资源检测器设置 OTLP 资源属性
如需在 OTLP 日志数据中设置 OTLP 资源属性,请使用 Google Cloud 资源检测器。这些检测器会将描述遥测数据来源的 OTLP 资源属性附加到遥测数据:
对于基于收集器的导出,请将资源检测配置为收集器处理器的一部分。例如,您的收集器可能会指定两个资源检测器:
resourcedetection: detectors: ["env", "gcp"]以下文档提供了导出指标或跟踪记录数据的收集器示例:
- 部署和使用收集器: 介绍了如何将指标数据发送到 Telemetry API。
- 在 Google Kubernetes Engine 上部署 Google 构建的 OpenTelemetry 收集器: 介绍了在 Google Kubernetes Engine 上运行时如何收集日志、指标和跟踪记录数据。 收集器会将跟踪记录数据发送到 Telemetry API,并将指标数据发送到 Prometheus 导出器。
如果您使用的是直接导出,请使用适合您语言的 Google Cloud 资源检测器:
资源标签的设置方式
每个日志条目都包含一组标签,用于标识日志条目的来源,也称为 Logging 受监控的资源。 以下示例展示了 Google Kubernetes Engine 的标签。
resource: {
labels: {
cluster_name: "my-cluster"
container_name: "server"
location: "us-central1"
namespace_name: "default"
pod_name: "my-pod"
project_id: "my-project"
}
type: "k8s_container"
}
如图所示,受监控的资源具有 type 字段和一个或多个 labels。
受监控的资源的标签至少包含 project_id 或 resource_container。
下表介绍了 Google Cloud Observability 用于将 OTLP 资源属性映射到受监控的资源的规则。该表按顺序排列。也就是说,如果资源属性包含 cloud.platform 且值为 gcp_compute_engine,则受监控的资源类型将设置为 gce_instance。如需确定受监控的资源的标签值,Google Cloud Observability 会使用资源属性的优先级列表。
当没有可用的资源属性时,标签的值为空字符串。
| 附加到日志记录的 OTLP 属性 和值 |
Cloud Logging 受监控的资源类型 |
根据 OTLP 资源属性确定的受监控的资源标签值(按优先级) |
|---|---|---|
cloud.platform的值为 gcp_compute_engine |
gce_instance |
|
cloud.platform的值为 gcp_app_engine |
gae_app |
|
cloud.platform的值为 aws_ec2 |
aws_ec2_instance |
|
cloud.platform的值为 gcp_bare_metal_solution |
baremetal instance |
|
service.name 和service.instance.id不为空 |
generic_task |
|
faas.name 和faas.instance不为空 |
generic_task |
|
k8s.cluster.name 和k8s.container.name不为空 |
k8s_container |
|
k8s.cluster.name 和k8s.pod.name不为空 |
k8s_pod |
|
k8s.cluster.name 和k8s.node.name不为空 |
k8s_node |
|
k8s.cluster.name不为空 |
k8s_cluster |
|
| 没有其他标签匹配 | generic_node |
|
推断项目或资源容器 ID 标签值
所有 Logging 受监控的资源类型都具有 project_id 标签或 resource_container 标签。
系统会按顺序搜索以下属性,以确定这些标签的值:
project_idgcp.project.idgcp.project_idgcp.dest_project_idgcp.resource.containerresource_containercloud.account.idcloud.account_id