このドキュメントでは、Google Cloud Observability が Telemetry API によって取り込まれたログデータの Logging モニタリング対象リソースタイプを特定するために使用するルールについて説明します。モニタリング対象リソースはログデータのソースを表し、LogEntry ではラベルを使用して表されます。Google Cloud Observability は、OTLP リソース属性を使用してこれらのラベルの値を決定します。
OTLP 形式のログデータの一般的な構造
Telemetry API を使用してログデータを Google Cloud に送信する場合、このデータは OTLP と一貫性のある形式である必要があります。このデータの一般的な構造は次のとおりです。
"resourceLogs": [
{
"resource": {
"attributes": [...]
},
"scopeLogs": [
{
"logRecords": [...]
}
]
}
]
OpenTelemetry は個々のログをバッチ処理します。各ログは logRecord 構造で表され、ログのソースに関する情報は resource 構造で表されます。
Google Cloud Observability が resourceLogs オブジェクトを受け取ると、logRecord ごとに 1 つの LogEntry が作成されます。個々のログのコレクションでソース情報をバッチ処理する OTLP とは異なり、各 LogEntry 構造には、ログのソースとログ自体に関する情報が含まれています。
OTLP 形式のログデータの構造の詳細については、OpenTelemetry の logs.proto をご覧ください。
Google Cloud リソース検出機能を使用して OTLP リソース属性を設定する
OTLP ログデータで OTLP リソース属性を設定するには、Google Cloud リソース検出機能を使用します。これらの検出機能は、テレメトリーの送信元を記述する OTLP リソース属性をテレメトリーに付加します。
コレクタベースのエクスポートでは、コレクタのプロセッサの一部としてリソース検出を構成します。たとえば、コレクタで 2 つのリソース検出器を指定できます。
resourcedetection: detectors: ["env", "gcp"]次のドキュメントでは、指標データまたはトレースデータをエクスポートするコレクタの例を示します。
- コレクタをデプロイして使用する: 指標データを Telemetry API に送信する方法について説明します。
- Google が構築した OpenTelemetry Collector を Google Kubernetes Engine にデプロイする: Google Kubernetes Engine で実行されている場合にログ、指標、トレースデータを収集する方法について説明します。コレクタは、トレースデータを Telemetry API に送信し、指標データを Prometheus エクスポータに送信します。
直接エクスポートを使用している場合は、言語に適した Google Cloudリソース検出ツールを使用します。
リソースラベルの設定方法
各ログエントリには、ログエントリのソースを識別する一連のラベルが含まれています。これは、ロギング モニタリング対象リソースとも呼ばれます。次の図は、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 フィールドと 1 つ以上の 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