ロギングとモニタリング

VMware 用 Google Distributed Cloud(ソフトウェアのみ)では、クラウドベースのマネージド サービス、オープンソース ツール、サードパーティの商用ソリューションとの互換性の検証など、クラスタのロギングとモニタリングに関して複数のオプションが用意されています。このドキュメントでは、これらのオプションについて説明し、環境に適したソリューションを選択するための基本的なガイダンスを示します。

Google Distributed Cloud のオプション

Google Distributed Cloud には、ロギングとモニタリングのオプションがいくつかあります。

Cloud Logging と Cloud Monitoring

Google Cloud Observability(旧称 Stackdriver)は、Google Cloud の組み込みオブザーバビリティ ソリューションです。フルマネージドのロギング ソリューション、指標の収集、モニタリング、ダッシュボード、アラートが提供されます。Cloud Monitoring は、クラウドベースの GKE クラスタと同様の方法で、Google Distributed Cloud クラスタをモニタリングします。

モニタリングとロギングの範囲のほか、収集された指標のレベルに対して、クラスタ内エージェントを構成できます。

  • ロギングとモニタリングのスコープは、システム コンポーネントのみ(デフォルト)、またはシステム コンポーネントとアプリケーションに設定できます。
  • 収集された指標のレベルは、最適化された指標のセットまたは完全な指標に対して構成できます。

詳細については、このドキュメントの Anthos clusters on VMware のロギング エージェントとモニタリング エージェントの構成をご覧ください。

Cloud Logging と Cloud Monitoring は、簡単に構成でき、強力な単一のクラウドベースのオブザーバビリティ ソリューションを求めているお客様に理想的なソリューションです。Google Distributed Cloud 上のみでのワークロードの実行、または GKE と Google Distributed Cloud 上でのワークロードの実行をする場合に、Logging と Monitoring を強くおすすめします。Google Distributed Cloud と標準のオンプレミス インフラストラクチャで実行されるコンポーネントがあるアプリケーションの場合は、アプリケーションのエンドツーエンドのビューのために、その他のソリューションも検討できます。

サードパーティのソリューション

Google は、サードパーティのロギングおよびモニタリング ソリューション プロバイダと協力して、Google Distributed Cloud とサードパーティの製品が適切に連動するよう支援しています。Datadog、Elastic、Splunk などの製品があります。今後もサードパーティの製品が検証され、追加される予定です。

Google Distributed Cloud でサードパーティ ソリューションを使用する方法については、以下をご覧ください。

Google Distributed Cloud のロギングとモニタリングの仕組み

新しい管理者クラスタまたはユーザー クラスタを作成すると、各クラスタに Logging エージェントと Monitoring エージェントがインストールされ、有効になります。これらのエージェントは、構成可能なスコープであるシステム コンポーネントに関するデータを収集します。

Google Cloud コンソールに収集したデータを表示するには、表示するログと指標を保存する Cloud プロジェクトを構成する必要があります。

各クラスタの Logging エージェントと Monitoring エージェントは次のとおりです。

  • GKE 指標エージェントgke-metrics-agent)。Cloud Monitoring API に指標を送信する DaemonSet。

  • Log Forwarderstackdriver-log-forwarder)。各マシンから Cloud Logging にログを転送する Fluent Bit DeamonSet。Log Forwarder は、ログエントリをノードにローカルでバッファリングして、最大 4 時間再送信します。バッファがいっぱいになるか、Log Forwarder が Cloud Logging API に 4 時間以上アクセスできない場合、ログは削除されます。

  • グローバル GKE 指標エージェントgke-metrics-agent-global)。Cloud Monitoring API に指標を送信する Deployment。

  • Metadata agentstackdriver-metadata-agent)。Pod、Deployment、Node などの Kubernetes リソースのメタデータを Stackdriver Resource Metadata API に送信する Deployment。このデータは、デプロイメント名、ノード名、さらには Kubernetes サービス名でクエリを実行できるようにすることで、指標のクエリを強化するために使用されます。

  • kube-state-metrics。API サーバーをリッスンし、オブジェクトの状態に関する指標を生成する Deployment。

  • node-exporter。ハードウェアと OS の指標を生成する DaemonSet。

次のコマンドを実行すると、すべての Deployment エージェントを確認できます。

  kubectl --kubeconfig CLUSTER_KUBECONFIG get deployments -l "managed-by=stackdriver" --all-namespaces

ここで、CLUSTER_KUBECONFIG はクラスタの kubeconfig ファイルのパスです。

このコマンドの出力は、次のようになります。

gke-metrics-agent-global                      1/1     Running   0   4h31m
stackdriver-metadata-agent-cluster-level      1/1     Running   0   4h31m

次のコマンドを実行すると、すべての DaemonSet エージェントを確認できます。

  kubectl --kubeconfig CLUSTER_KUBECONFIG get daemonsets -l "managed-by=stackdriver" --all-namespaces

このコマンドの出力は、次のようになります。

gke-metrics-agent                             1/1     Running   0   4h31m
stackdriver-log-forwarder                     1/1     Running   0   4h31m

Google Distributed Cloud のロギング エージェントとモニタリング エージェントの構成

Google Distributed Cloud でインストールされたエージェントは、設定と構成に応じ、ククラスタに関する問題の管理とトラブルシューティングを行うために、システム コンポーネントに関するデータを収集します。

システム コンポーネントのみ(デフォルトのスコープ)

インストール時、エージェントは、Google 提供のシステム コンポーネントのログと指標を収集します。これには、パフォーマンス詳細(CPU やメモリの使用率など)や同様のメタデータが含まれます。管理クラスタ内のすべてのワークロード、およびユーザー クラスタでは、コンポーネントに kube-system、gke-system、gke-connect、istio-system、config-management-system Namespace のワークロードが含まれます。次のセクションで説明するように、エージェントを構成することも、無効にすることもできます。

ログと指標を収集するスコープは、アプリケーションが含まれるように拡大することもできます。アプリケーションのロギングとモニタリングを有効にする手順を確認するには、ユーザー アプリケーションの Logging と Monitoring の有効化をご覧ください。

最適化された指標(デフォルト指標)

デフォルトでは、クラスタで実行される指標エージェントは、コンテナ、kubelet、kube-state-metrics の最適化された一連の指標を収集して Google Cloud Observability(旧称 Stackdriver)に報告します。

この最適化された一連の指標を収集するために必要なリソースは少ないため、全体的なパフォーマンスと拡張性を向上させることができます。モニタリング対象のオブジェクトは大量にあるため、コンテナレベルと kube レベルの指標ではこれが特に重要です。

最適化された指標からは、次のコンテナ指標が除外されます。

  • container_cpu_cfs_periods_total
  • container_cpu_cfs_throttled_periods_total
  • container_cpu_load_average_10s
  • container_cpu_system_seconds_total
  • container_cpu_user_seconds_total
  • container_fs_io_current
  • container_fs_io_time_seconds_total
  • container_fs_io_time_weighted_seconds_total
  • container_fs_read_seconds_total
  • container_fs_reads_bytes_total
  • container_fs_reads_merged_total
  • container_fs_reads_total
  • container_fs_sector_reads_total
  • container_fs_sector_writes_total
  • container_fs_write_seconds_total
  • container_fs_writes_bytes_total
  • container_fs_writes_merged_total
  • container_fs_writes_total
  • container_last_seen
  • container_memory_cache
  • container_memory_failcnt
  • container_memory_mapped_file
  • container_memory_max_usage_bytes
  • container_memory_swap
  • container_network_receive_packets_dropped_total
  • container_network_receive_packets_total
  • container_network_transmit_packets_dropped_total
  • container_network_transmit_packets_total
  • container_start_time_seconds
  • container_spec_cpu_period
  • container_spec_cpu_quota
  • container_spec_cpu_shares
  • container_spec_memory_limit_bytes
  • container_spec_memory_reservation_limit_bytes
  • container_spec_memory_swap_limit_bytes
  • container_start_time_seconds
  • container_tasks_state

Google Distributed Cloud 指標の完全なセットは、GKE Enterprise の指標に記載されています。

最適化された指標からは、次の kubelet 指標が除外されます。

  • kubelet_runtime_operations_duration_seconds
  • kubelet_runtime_operations_errors
  • kubelet_runtime_operations_duration_seconds
  • kubelet_runtime_operations_latency_microseconds
  • kubelet_runtime_operations_latency_microseconds_count
  • kubelet_runtime_operations_latency_microseconds_sum
  • rest_client_request_duration_seconds
  • rest_client_request_latency_seconds

Google Distributed Cloud 指標の完全なセットは、GKE Enterprise の指標に記載されています。

最適化された指標からは、次の kube-state-metrics 指標が除外されます。

  • kube_certificatesigningrequest_cert_length
  • kube_certificatesigningrequest_condition
  • kube_certificatesigningrequest_created
  • kube_certificatesigningrequest_labels
  • kube_configmap_annotations
  • kube_configmap_info
  • kube_configmap_labels
  • kube_configmap_metadata_resource_version
  • kube_daemonset_annotations
  • kube_daemonset_created
  • kube_daemonset_labels
  • kube_daemonset_metadata_generation
  • kube_daemonset_status_observed_generation
  • kube_deployment_annotations
  • kube_deployment_created
  • kube_deployment_labels
  • kube_deployment_spec_paused
  • kube_deployment_spec_strategy_rollingupdate_max_surge
  • kube_deployment_spec_strategy_rollingupdate_max_unavailable
  • kube_deployment_status_condition
  • kube_deployment_status_replicas_ready
  • kube_endpoint_annotations
  • kube_endpoint_created
  • kube_endpoint_info
  • kube_endpoint_labels
  • kube_endpoint_ports
  • kube_horizontalpodautoscaler_annotations
  • kube_horizontalpodautoscaler_info
  • kube_horizontalpodautoscaler_labels
  • kube_horizontalpodautoscaler_metadata_generation
  • kube_horizontalpodautoscaler_status_condition
  • kube_job_annotations
  • kube_job_complete
  • kube_job_created
  • kube_job_info
  • kube_job_labels
  • kube_job_owner
  • kube_job_spec_completions
  • kube_job_spec_parallelism
  • kube_job_status_completion_time
  • kube_job_status_start_time
  • kube_job_status_succeeded
  • kube_lease_owner
  • kube_lease_renew_time
  • kube_limitrange
  • kube_limitrange_created
  • kube_mutatingwebhookconfiguration_info
  • kube_namespace_labels
  • kube_networkpolicy_annotations
  • kube_networkpolicy_labels
  • kube_networkpolicy_spec_egress_rules
  • kube_networkpolicy_spec_ingress_rules
  • kube_node_annotations
  • kube_node_role
  • kube_persistentvolume_annotations
  • kube_persistentvolume_labels
  • kube_persistentvolumeclaim_access_mode
  • kube_persistentvolumeclaim_annotations
  • kube_persistentvolumeclaim_labels
  • kube_pod_annotations
  • kube_pod_completion_time
  • kube_pod_container_resource_limits
  • kube_pod_container_resource_requests
  • kube_pod_container_state_started
  • kube_pod_created
  • kube_pod_init_container_info
  • kube_pod_init_container_resource_limits
  • kube_pod_init_container_resource_requests
  • kube_pod_init_container_status_last_terminated_reason
  • kube_pod_init_container_status_ready
  • kube_pod_init_container_status_restarts_total
  • kube_pod_init_container_status_running
  • kube_pod_init_container_status_terminated
  • kube_pod_init_container_status_terminated_reason
  • kube_pod_init_container_status_waiting
  • kube_pod_init_container_status_waiting_reason
  • kube_pod_labels
  • kube_pod_owner
  • kube_pod_restart_policy
  • kube_pod_spec_volumes_persistentvolumeclaims_readonly
  • kube_pod_start_time
  • kube_poddisruptionbudget_annotations
  • kube_poddisruptionbudget_created
  • kube_poddisruptionbudget_labels
  • kube_poddisruptionbudget_status_expected_pods
  • kube_poddisruptionbudget_status_observed_generation
  • kube_poddisruptionbudget_status_pod_disruptions_allowed
  • kube_replicaset_annotations
  • kube_replicaset_created
  • kube_replicaset_labels
  • kube_replicaset_metadata_generation
  • kube_replicaset_owner
  • kube_replicaset_status_observed_generation
  • kube_resourcequota_created
  • kube_secret_annotations
  • kube_secret_info
  • kube_secret_labels
  • kube_secret_metadata_resource_version
  • kube_secret_type
  • kube_service_annotations
  • kube_service_created
  • kube_service_info
  • kube_service_labels
  • kube_service_spec_type
  • kube_statefulset_annotations
  • kube_statefulset_created
  • kube_statefulset_labels
  • kube_statefulset_status_current_revision
  • kube_statefulset_status_update_revision
  • kube_storageclass_annotations
  • kube_storageclass_created
  • kube_storageclass_info
  • kube_storageclass_labels
  • kube_validatingwebhookconfiguration_info
  • kube_validatingwebhookconfiguration_metadata_resource_version
  • kube_volumeattachment_created
  • kube_volumeattachment_info
  • kube_volumeattachment_labels
  • kube_volumeattachment_spec_source_persistentvolume
  • kube_volumeattachment_status_attached
  • kube_volumeattachment_status_attachment_metadata

Google Distributed Cloud 指標の完全なセットは、GKE Enterprise の指標に記載されています。

最適化された kube-state-metrics 指標を無効にするには(非推奨)、Stackdriver カスタム リソースの optimizedMetrics フィールドを false に設定します。Stackdriver カスタム リソースの変更について詳しくは、Stackdriver コンポーネント リソースの構成をご覧ください。デフォルトで除外されているものを含むすべての Google Distributed Cloud 指標については、GKE Enterprise の指標をご覧ください。

Stackdriver を有効または無効にする

Stackdriver カスタム リソースを有効または無効にすることで、ロギングとモニタリングのエージェントを完全に有効または無効にできます。この機能はプレビュー版です。

ロギング エージェントとモニタリング エージェントを無効にする前に、Google Cloud サポートの SLA に与える影響の詳細についてのサポートページをご覧ください。

Logging と Monitoring エージェントは、ストレージと保持の構成に応じて、ローカルに保存されたデータを取得します。データは、そのプロジェクトへのデータの書き込みを承認されたサービス アカウントを使用して、インストール時に指定された Google Cloud プロジェクトに複製されます。前述のように、これらのエージェントはいつでも無効にできます。

また、ロギングとモニタリング エージェントが Cloud Logging と Cloud Monitoring に送信されたデータを管理、削除することもできます。詳細については、Cloud Monitoring のドキュメントをご覧ください。

Logging と Monitoring の構成要件

Cloud Logging と Cloud Monitoring のデータを表示するには、表示するログと指標を保存する Google Cloud プロジェクトを構成する必要があります。この Google Cloud プロジェクトは、logging-monitoring プロジェクトと呼ばれます。

  1. logging-monitoring プロジェクトで、次の API を有効にします。

  2. logging-monitoring プロジェクトの logging-monitoring サービス アカウントに、次の IAM ロールを付与します。

    • logging.logWriter
    • monitoring.metricWriter
    • stackdriver.resourceMetadata.writer
    • monitoring.dashboardEditor
    • opsconfigmonitoring.resourceMetadata.writer

料金

GKE Enterprise のシステムログと指標は無料です。コントロール プレーン ログ、コントロール プレーンの指標、Kube 状態指標のキュレートされたサブセットは、GKE Enterprise が有効なプロジェクトでクラスタ作成時に登録された Google Cloud 上の GKE クラスタに対してデフォルトで有効になっています。コントロール プレーン ログには Cloud Logging の料金が発生しますが、デフォルトで有効な指標は追加料金なしで含まれています。

含まれる GKE のログと指標の一覧については、収集されるログ使用可能な指標をご覧ください。

Google Distributed Cloud クラスタでは、GKE Enterprise のシステムログと指標には次のものが含まれます。

  • 管理クラスタ内のすべてのコンポーネントのログと指標
  • ユーザー クラスタ内の次の名前空間のコンポーネントのログと指標: kube-systemgke-systemgke-connectknative-servingistio-systemmonitoring-systemconfig-management-systemgatekeeper-systemcnrm-system

詳細については、Google Cloud Observability の料金をご覧ください。

Cloud Logging の指標のクレジットについては、販売担当者にお問い合わせください

次のステップ