GKE 用 Cloud Operations への移行

Google Kubernetes Engine(GKE)でのモニタリングとロギングのサポートには 2 つのオプションがあります。

このページでは、これらの 2 つのオプションと、以前の Logging と Monitoring から GKE 用 Cloud Operations への移行に必要な変更点について説明します。

移行のタイミング

既存の Cloud Monitoring と Cloud Logging の構成は、以前の Logging と Monitoring から GKE 用 Cloud Operations にいつでも移行できます。ただし、以前の Logging と Monitoring は GKE バージョン 1.18 でサポートされていません。

次の表に、各 GKE リリース バージョンで使用可能なモニタリングとロギングのオプションをまとめます。

GKE バージョン 以前の Logging と Monitoring GKE 用 Cloud Operations
1.10~1.12.5 デフォルト 使用可能(ベータ版)
1.12.7 デフォルト 使用可能
1.13 デフォルト 使用可能
1.14 使用可能 デフォルト
1.15 使用可能 デフォルト
1.16 計画中(近日提供予定) デフォルト
1.17 計画中(近日提供予定) デフォルト
1.18 利用不可 デフォルト

Legacy Logging と Monitoring の非推奨については、GKE の非推奨に対するレガシー サポートガイドをご覧ください。

GKE 用 Cloud Operations を使用するメリット

GKE 用 Cloud Operations には、次のような重要な利点があります。

  • インフラストラクチャのモニタリングが改善されます。無料枠で GKE ダッシュボードに表示される指標の数が 17 から 44 に増えます。

  • リソースタイプが増え、Kubernetes リソースをより明確に区別できます。また、指標のフィルタリングやグループ化に使用できるメタデータも増えます。

  • GKE 向け SLO モニタリングによりサービス指向モニタリングがサポートされます。

  • Cloud Logging と Cloud Monitoring 間で整合性のあるリソースモデルを使用できます。

  • 新しい GKE 指標を使用してパフォーマンスを改善できます。

変更内容

GKE 用 Cloud Operations は、以前の Logging / Monitoring とは別のリソースモデルを使用して指標、ログ、メタデータを整理します。GKE 用 Cloud Operations を使用するクラスタの主な変更点は次のとおりです。

  • ナビゲーションの変更: Cloud Monitoring ダッシュボードの名前は GKE です。GKE 用 Cloud Operations を使用するクラスタがない場合、このダッシュボードは表示されません。

  • モニタリング対象リソースタイプ名の変更: たとえば、Kubernetes ノードは、gce_instance(Compute Engine VM インスタンス)ではなく、k8s_node(Kubernetes ノード)モニタング対象リソースタイプに表示されます。

  • Kubernetes の指標名の変更: GKE 用 Cloud Operations では、指標タイプの名前は container.googleapis.com/ ではなく kubernetes.io/ という接頭辞で始まります。

  • logEntry メタデータの変更: GKE 用 Cloud Operations ログエントリで、一部の resource.label フィールドと labels フィールドの名前が変更されました。たとえば、resource.labels.namespace_id フィールドの名前は resource.labels.namespace_name に変更されていますが、値は変更されていません。

  • logName の変更: GKE 用 Cloud Operations ログエントリでは、ログ名に stdout または stderr が使用されていますが、以前の Logging と Monitoring ではコンテナ名などのさまざまな名前が使用されています。コンテナ名は、GKE 用 Cloud Operations の resource.labels.container_name でリソースラベルとして引き続き使用できます。

次の表は、上記の変更点をまとめたものです。

変更 (旧)以前の Logging と Monitoring (新)GKE 用 Cloud Operations
ダッシュボード メニュー [ダッシュボード] > [GKE Clusters] [ダッシュボード] > [GKE]
指標の接頭辞 container.googleapis.com kubernetes.io
指標のリソースタイプ gke_container
gce_instance
(なし)
k8s_container
k8s_node
k8s_pod
ログのリソースタイプ container
gke_cluster
gce_instance
gke_nodepool
k8s_container
k8s_cluster
gke_cluster(監査ログのみ)
k8s_node
k8s_pod

リソースタイプの変更

GKE 用 Cloud Operations では、リソースタイプの名前、リソースタイプの表示名、特定のリソースの識別に使用されるラベルの名前が変更されています。次の表は、これらの変更点をまとめたものです。

リソースタイプの変更
(旧)以前の Logging と Monitoring のリソースタイプ (新)GKE 用 Cloud Operations のリソースタイプ
表の脚注:
1 モニタリング(のみ)に使用される新しいリソースタイプで、instance_idmetadata.system_labelsnode_name になっています。
2 zone は、このコンテナまたはインスタンスのロケーションを表します。location は、クラスタ マスターノードのロケーションを表します。
3 metadata.system_labels.node_name は、ロギングの k8s_container リソースタイプで使用できません。ログをノード名で検索することはできません。
4 gce_instance リソースタイプは、Kubernetes ノードと Kubernetes 以外の VM インスタンスを表す場合があります。GKE 用 Cloud Operations にアップグレードすると、ノード関連での使用時は新しいリソースタイプ k8s_node を使用するように変更されます。kubeletdockerkube-proxystartupscriptnode-problem-detector という名前のノードレベルのログも使用されます。
5 k8s_podk8s_cluster ノードには、以前の Logging と Monitoring のサポートにないログが含まれている場合があります。
Monitoring のみ:
gke_container (GKE コンテナ)

ラベル:
  cluster_name
  container_name
  instance_id1
  namespace_id
  pod_id
  project_id
  zone2

Logging のみ:
container (GKE コンテナ)

ラベル:
  cluster_name
  container_name
  instance_id1
  namespace_id
  pod_id
  project_id
  zone2

Monitoring と Logging:
k8s_container (Kubernetes コンテナ)

ラベル:
  cluster_name
  container_name
  metadata.system_labels.node_name3
  namespace_name
  pod_name
  project_id
  location2

Logging のみ::
gce_instance (Compute Engine VM インスタンス)4

ラベル:
  cluster_name
  instance_id
  project_id
  zone2
Monitoring と Logging
k8s_node4(Kubernetes ノード)

ラベル:
  cluster_name
  node_name
  project_id
  location2
 
(なし)
Monitoring と Logging:
k8s_pod5(Kubernetes ポッド)

ラベル:
  cluster_name
  namespace_name
  pod_name
  project_id
  location2

Logging のみ
gke_cluster(GKE_cluster)

ラベル:
  cluster_name
  project_id
  location

Monitoring と Logging:
k8s_cluster5(Kubernetes クラスタ)

ラベル:
  cluster_name
  project_id
  location

必要なご対応

ここでは、GKE 用 Cloud Operations でのリソースモデルの変更点と、以前のモニタリングとロギング構成に対する影響について具体的に説明します。

GKE 用 Cloud Operations にクラスタを移行するには、次の操作を行う必要があります。

  1. Logging と Monitoring の構成を特定する: 以前の Logging / Monitoring と GKE 用 Cloud Operations の間で変更された値を使用している Logging と Monitoring の構成を特定します。

  2. Logging と Monitoring の構成を更新する: Logging と Monitoring の構成を更新して、GKE 用 Cloud Operations で行われた変更を反映します。

  3. GKE クラスタ構成を更新する: GKE 用 Cloud Operations の設定を使用するように GKE クラスタを更新します。

以前の Logging / Monitoring と GKE 用 Cloud Operations の間でリソースモデルと logName が変更されているため、リソースモデルの変更を参照する Logging または Monitoring の構成も更新する必要があります。移行では、以下を含む Logging と Monitoring の構成の更新が必要になる場合があります。

  • カスタム ダッシュボード
  • チャート
  • グループのフィルタ
  • 通知ポリシー
  • ログシンク
  • ログの除外
  • Cloud Logging と Cloud Monitoring のログベースの指標

モニタリング リソースの移行

移行ステータス ダッシュボードの使用

GKE 用 Cloud Operations への移行の一環としての Logging の構成に必要な変更については、ロギング構成の更新をご覧ください。

GKE 用 Cloud Operations への移行中に更新する必要がある Cloud Monitoring 構成を特定するには、次の手順に従います。

  1. Cloud Console で、[Monitoring] に移動します。

    [Monitoring] に移動

  2. Monitoring のナビゲーション パネルで [設定] をクリックし、[Kubernetes Migration Status] タブを選択します。

次のサンプル ダッシュボードは、1 つのアラート ポリシーを更新する必要があることを示しています。

移行ダッシュボードの表示。

指標名の変更

次の表に、指標名の違いを示します。名前が container.googleapis.com/ で始まる指標は、kubernetes.io/ で始まる新しい指標名に変更する必要があります。

新しい指標名には、接頭辞以外にも異なる点があります。 kubernetes.io で新しい指標を確認してください

指標名の変更
(旧)以前の Logging と Monitoring の指標 (新)GKE 用 Cloud Operations の指標
以前の GKE 指標
container.googleapis.com/

:
  .../container/cpu/utilization
  .../container/uptime
  .../container/memory/bytes_total
Kubernetes Engine Monitoring の指標
kubernetes.io/

:
  .../container/cpu/request_utilization
  .../container/uptime
  .../node/memory/total_bytes
  .../node/cpu/total_cores

リソース グループの変更

独自のリソース グループを定義し、上記のリソースタイプの変更の表にある以前の Logging と Monitoring のいずれかのリソースタイプを使用する場合は、これらのタイプを対応する GKE 用 Cloud Operations のリソースタイプに変更します。リソース グループにカスタムグラフが含まれている場合は、これらも変更する必要があります。

カスタムグラフとダッシュボードの変更

独自のカスタムグラフとダッシュボードを定義し、上記のリソースタイプの変更の表にある以前の Logging と Monitoring のリソースタイプ、または上記の指標名の変更の表にある以前の Logging と Monitoring の指標を使用している場合は、これらのタイプと指標を対応する GKE 用 Cloud Operations のタイプと指標に変更します。

カスタムグラフとダッシュボードを変更する場合、GKE 移行ステータス ダッシュボードを使用すると便利です。

  1. Cloud Console で、GKE クラスタを含む Google Cloud プロジェクトを選択して、GKE 用 Cloud Operations に更新します。

    Cloud Console に移動

  2. [モニタリング] を選択します。

  3. 移行ステータスにアクセスするには、Monitoring のナビゲーション パネルで [設定] をクリックし、[Kubernetes Migration Status] タブを選択します。

アラート ポリシーの変更

アラート ポリシーを定義し、上記のリソースタイプの変更の表にある以前の Logging と Monitoring のリソースタイプ、または上記の指標名の変更の表にある以前の Logging と Monitoring の指標を使用している場合は、これらのタイプと指標を対応する GKE 用 Cloud Operations のタイプと指標に変更します。

アラート ポリシーと稼働時間チェックのアップグレードでは、実行と検証が最も難しい作業になる場合があります。こうした変更を行うタイミングが問題となります。まず、ポリシー構成の変更をタイミング(クラスタをアップグレードする前か後か)が問題になります。クラスタを更新した後は古いポリシーが失敗し、クラスタを更新する前は新しいポリシーが失敗します。

このため、更新前にポリシーを変更するのではなく、既存のポリシーのまま更新を行い、更新後に変更内容を使用して新しいポリシーを作成することを検討してください。これにより、更新の影響を受けるポリシーと受けないポリシーを特定できます。

また、次の点も考慮してください。

  • ポリシーを調べ、更新後のクラスタが安定した状態で動作するまでに要するデータの蓄積時間を予測します。

  • 更新前に、ポリシーや個々の指標がどのように機能しているかを把握しておきます。これにより、更新後の動作との比較が可能になります。

ロギング リソースの移行

ログエントリの内容の変更

GKE 用 Cloud Operations に更新すると、ログエントリの特定の情報が別の名前のフィールドに移動することがあります。これは、ログベースの指標、ログシンク、ログ除外で使用されるログクエリで発生することがあります。

次のログエントリの変更の表に、新しいフィールドとラベルを示します。概要は次のとおりです。

  • フィルタの logName フィールドを確認します。GKE 用 Cloud Operations のログエントリでは、ログ名に stdout または stderr が使用されていますが、以前の Logging と Monitoring では、コンテナ名など、さまざまな名前が使用されます。コンテナ名がリソースラベルとして使用される場合があります。
  • ログエントリの labels フィールドを確認してください。このフィールドに、metadata ログエントリ フィールドに含まれていた情報が含まれる可能性があります。
  • ログエントリの resource.labels フィールドを確認してください。新しいリソースタイプには追加のラベル値があります。
ログエントリの変更
(旧)以前の Logging と Monitoring のログエントリ (新)GKE 用 Cloud Operations のログエントリ
表の脚注:
1 リソースラベルは、特定のクラスタやノードなど、指標を生成する特定のリソースを表します。
2 labels フィールドは、GKE 用 Cloud Operations で新しいログエントリに表示されますが、以前の Logging と Monitoring のログエントリに表示される場合があります。GKE 用 Cloud Operations では、移行前の metadata ログエントリ フィールドの情報を保存するために、このエントリを使用しています。
ログエントリ リソース
resource.labels(リソースラベル1
ログエントリ リソース
resource.labels(リソースラベル1
ログエントリのメタデータ
labels(ログエントリのラベル2

ラベル(例)
  compute.googleapis.com/resource_name:
    "fluentd-gcp-v3.2.0-d4d9p"

  container.googleapis.com/namespace_name:
    "kube-system"

  container.googleapis.com/pod_name:
    "fluentd-gcp-scaler-8b674f786-d4pq2"

  container.googleapis.com/stream:
    "stdout"
ログエントリのメタデータ
labels

ラベル(例)
  k8s-pod/app:
    "currencyservice"

  k8s-pod/pod-template-hash:
    "5a67f17c"

  k8s-pod/istio_io/rev:
    "default"

  k8s-pod/service_istio_io/canonical-name:
    "currencyservice"

ログの例:

コンテナ リソースタイプの変更:

赤い太字のテキストは、以前の Logging / Monitoring と GKE 用 Cloud Operations のリソースモデルの違いを示しています。

リソースモデル ログの例:
以前の Logging と Monitoring

{
  "insertId": "fji4tsf1a8o5h",
  "jsonPayload": {
    "pid": 1,
    "name": "currencyservice-server",
    "v": 1,
    "message": "conversion request successful",
    "hostname": "currencyservice-6995d74b95-zjkmj"
  },
  "resource": {
    "type": "container",
    "labels": {
      "project_id": "my-test-project",
      "cluster_name": "my-test-cluster",
      "pod_id": "currencyservice-6995d74b95-zjkmj",
      "zone": "us-central1-c",
      "container_name": "server",
      "namespace_id": "default",
      "instance_id": "1234567890"
    }
  },
  "timestamp": "2020-10-02T19:02:47.575434759Z",
  "severity": "INFO",
  "labels": {
    "container.googleapis.com/pod_name": "currencyservice-6995d74b95-zjkmj",
    "compute.googleapis.com/resource_name": "gke-legacy-cluster-default-pool-c534acb8-hvxk",
    "container.googleapis.com/stream": "stdout",
    "container.googleapis.com/namespace_name": "default"
  },
  "logName": "projects/my-test-project/logs/server",
  "receiveTimestamp": "2020-10-02T19:02:50.972304596Z"
}
GKE 用 Cloud Operations

{
  "insertId": "mye361s5zfcl55amj",
  "jsonPayload": {
    "v": 1,
    "name": "currencyservice-server",
    "pid": 1,
    "hostname": "currencyservice-5b69f47d-wg4zl",
    "message": "conversion request successful"
  },
  "resource": {
    "type": "k8s_container",
    "labels": {
      "container_name": "server",
      "project_id": "my-test-project",
      "pod_name": "currencyservice-5b69f47d-wg4zl",
      "namespace_name": "onlineboutique",
      "location": "us-central1-c",
      "cluster_name": "my-prod-cluster"

    }
  },
  "timestamp": "2020-10-02T18:41:55.359669767Z",
  "severity": "INFO",
  "labels": {
    "k8s-pod/service_istio_io/canonical-revision": "latest",
    "k8s-pod/security_istio_io/tlsMode": "istio",
    "k8s-pod/app": "currencyservice",
    "k8s-pod/pod-template-hash": "5b69f47d",
    "k8s-pod/istio_io/rev": "default",
    "k8s-pod/service_istio_io/canonical-name": "currencyservice"
  },
  "logName": "projects/my-test-project/logs/stdout",
  "receiveTimestamp": "2020-10-02T18:41:57.930654427Z"
}
クラスタ リソースタイプの変更:

赤い太字のテキストは、以前の Logging / Monitoring と GKE 用 Cloud Operations のリソースモデルの違いを示しています。

リソースモデル ログの例:
以前の Logging と Monitoring

{
  "insertId": "962szqg9uiyalt",
  "jsonPayload": {
    "type": "Normal",
    "involvedObject": {
      "apiVersion": "policy/v1beta1",
      "uid": "a1bc2345-12ab-12ab-1234-123456a123456",
      "resourceVersion": "50968",
      "kind": "PodDisruptionBudget",
      "namespace": "knative-serving",
      "name": "activator-pdb"
    },
    "apiVersion": "v1",
    "reason": "NoPods",
    "source": {
      "component": "controllermanager"
    },
    "message": "No matching pods found",
    "kind": "Event",
    "metadata": {
      "selfLink": "/api/v1/namespaces/knative-serving/events/activator-pdb.163a42fcb707c1fe",
      "namespace": "knative-serving",
      "name": "activator-pdb.163a42fcb707c1fe",
      "uid": "a1bc2345-12ab-12ab-1234-123456a123456",
      "creationTimestamp": "2020-10-02T19:17:50Z",
      "resourceVersion": "1917"
    }
  },
  "resource": {
    "type": "gke_cluster",
    "labels": {
      "project_id": "my-test-project",
      "location": "us-central1-c",
      "cluster_name": "my-prod-cluster"
    }
  },
  "timestamp": "2020-10-02T21:33:20Z",
  "severity": "INFO",
  "logName": "projects/my-test-project/logs/events",
  "receiveTimestamp": "2020-10-02T21:33:25.510671123Z"
}
GKE 用 Cloud Operations

{
  "insertId": "1qzipokg6ydoesp",
  "jsonPayload": {
    "involvedObject": {
      "uid": "a1bc2345-12ab-12ab-1234-123456a123456",
      "name": "istio-telemetry",
      "apiVersion": "autoscaling/v2beta2",
      "resourceVersion": "90505937",
      "kind": "HorizontalPodAutoscaler",
      "namespace": "istio-system"
    },
    "source": {
      "component": "horizontal-pod-autoscaler"
    },
    "kind": "Event",
    "type": "Warning",
    "message": "missing request for cpu",
    "metadata": {
      "resourceVersion": "3071416",
      "creationTimestamp": "2020-08-22T14:18:59Z",
      "name": "istio-telemetry.162d9ce2894d6642",
      "selfLink": "/api/v1/namespaces/istio-system/events/istio-telemetry.162d9ce2894d6642",
      "namespace": "istio-system",
      "uid": "a1bc2345-12ab-12ab-1234-123456a123456"
    },
    "apiVersion": "v1",
    "reason": "FailedGetResourceMetric"
  },
  "resource": {
    "type": "k8s_cluster",
    "labels": {
      "project_id": "my-test-project"
      "location": "us-central1-a",
      "cluster_name": "my-prod-cluster1",
    }
  },
  "timestamp": "2020-10-02T21:39:07Z",
  "severity": "WARNING",
  "logName": "projects/my-test-project/logs/events",
  "receiveTimestamp": "2020-10-02T21:39:12.182820672Z"
}
   

ノード リソースタイプの変更:

赤い太字のテキストは、以前の Logging / Monitoring と GKE 用 Cloud Operations のリソースモデルの違いを示しています。

リソースモデル ログの例:
以前の Logging と Monitoring

{
  "insertId": "16qdegyg9t3n2u5",
  "jsonPayload": {
    "SYSLOG_IDENTIFIER": "kubelet",
    [...]
    "PRIORITY": "6",
    "_COMM": "kubelet",
    "_GID": "0",
    "_MACHINE_ID": "9565f7c82afd94ca22612c765ceb1042",
    "_SYSTEMD_UNIT": "kubelet.service",
    "_EXE": "/home/kubernetes/bin/kubelet"
  },
  "resource": {
    "type": "gce_instance",
    "labels": {
      "instance_id": "1234567890",
      "zone": "us-central1-a",
      "project_id": "my-test-project"
    }
  },
  "timestamp": "2020-10-02T21:43:14.390150Z",
  "labels": {
    "compute.googleapis.com/resource_name": "gke-legacy-monitoring-default-pool-b58ff790-29rr"
  },
  "logName": "projects/my-test-project/logs/kubelet",
  "receiveTimestamp": "2020-10-02T21:43:20.433270911Z"
}
   
GKE 用 Cloud Operations

{
  "insertId": "kkbgd6e5tmkpmvjji",
  "jsonPayload": {
    "SYSLOG_IDENTIFIER": "kubelet",
   [...]
    "_CAP_EFFECTIVE": "3fffffffff",
    "_HOSTNAME": "gke-standard-cluster-1-default-pool-f3929440-f4dy",
    "PRIORITY": "6",
    "_COMM": "kubelet",
    "_TRANSPORT": "stdout",
    "_GID": "0",
    "MESSAGE": "E1002 21:43:14.870346    1294 pod_workers.go:190] Error syncing pod 99ba1919-d633-11ea-a5ea-42010a800113 (\"stackdriver-metadata-agent-cluster-level-65655bdbbf-v5vjv_kube-system(99ba1919-d633-11ea-a5ea-42010a800113)\"), skipping: failed to \"StartContainer\" for \"metadata-agent\" with CrashLoopBackOff: \"Back-off 5m0s restarting failed container=metadata-agent pod=stackdriver-metadata-agent-cluster-level-65655bdbbf-v5vjv_kube-system(99ba1919-d633-11ea-a5ea-42010a800113)\""
  },
  "resource": {
    "type": "k8s_node",
    "labels": {
      "cluster_name": "my-prod-cluster-1",
      "location": "us-central1-a",
      "node_name": "gke-standard-cluster-1-default-pool-f3929440-f4dy"
       "project_id": "my-test-project",
    }
  },
  "timestamp": "2020-10-02T21:43:14.870426Z",
  "logName": "projects/my-test-project/logs/kubelet",
  "receiveTimestamp": "2020-10-02T21:43:20.788933199Z"
}

ロギング構成の更新

このセクションでは、GKE 用 Cloud Operations への移行の一環として Cloud Logging の構成に必要な変更について説明します。

ロギングクエリ

Cloud Logging でクエリを使用してログの検索とフィルタリングを行い、上記のリソースタイプの変更の表にある以前の Logging と Monitoring リソースタイプを使用している場合は、これらのタイプを対応する GKE 用 Cloud Operations のタイプに変更します。

ログベースの指標

独自のログベースの指標を定義し、上記の指標名の変更の表またはリソースタイプの変更の表にある以前の Logging と Monitoring の指標タイプまたはリソースタイプを使用している場合は、これらの指標とリソースタイプを対応する GKE 用 Cloud Operations のタイプに変更します。

次の gcloud ツールコマンドを使用すると、ログベースの指標を見つけることができます。

  gcloud logging metrics list --filter='filter~resource.type=\"container\" OR filter~resource.type=container'

  gcloud logging metrics list --filter='filter~resource.labels.namespace_id'

  gcloud logging metrics list --filter='filter~resource.labels.pod_id'

  gcloud logging metrics list --filter='filter~resource.labels.zone'
ログのエクスポート

ログをエクスポートし、エクスポートで上記のリソースタイプの変更の表にある以前の Logging と Monitoring のリソースタイプを使用する場合は、対応する GKE 用 Cloud Operations のリソースタイプを使用するようにエクスポートを変更します。

次の gcloud コマンドライン ツールコマンドを使用すると、影響を受ける Logging シンクを見つけることができます。

  gcloud logging sinks list --filter='filter~resource.type=\"container\" OR filter~resource.type=container'

  gcloud logging sinks list --filter='filter~resource.labels.namespace_id'

  gcloud logging sinks list --filter='filter~resource.labels.pod_id'

  gcloud logging sinks list --filter='filter~resource.labels.zone'
ログの除外

ログを除外し、除外フィルタで上記のリソースタイプの変更の表にある以前の Logging と Monitoring のリソースタイプを使用する場合は、対応する GKE 用 Cloud Operations のリソースタイプを使用するように除外フィルタを変更します。

ログの除外の表示については、除外フィルタの表示のガイドをご覧ください。

ログの保存場所の変更

Cloud Logging では、ログは生成元のリソースタイプで保存されます。これらのタイプは GKE 用 Cloud Operations で変更されています。ログを検索する場合は、GKE Container などの以前の Logging と Monitoring のタイプではなく、Kubernetes Container などの新しいリソースタイプを使用してください。

次のステップ