このページでは、接続クラスタから Cloud Logging と Cloud Monitoring にログと指標をエクスポートする方法について説明します。
仕組み
Google Cloud Observability は、Google Cloudの組み込みオブザーバビリティ ソリューションです。接続クラスタから Google Cloudにクラスタレベルのテレメトリーをエクスポートするには、次のオープンソースのエクスポート エージェントをクラスタにデプロイする必要があります。
- Stackdriver Log Aggregator(stackdriver-log-aggregator-*): Cloud Logging(旧称 Stackdriver Logging)API にログを送信する Fluentd StatefulSet。
- Stackdriver Log Forwarder(stackdriver-log-forwarder-*): 各 Kubernetes ノードから Stackdriver Log Aggregator にログを転送する Fluentbit Daemonset です。
- Stackdriver Metrics Collector(stackdriver-prometheus-k8s-*): Stackdriver Export サイドカー コンテナを使用して構成された Prometheus StatefulSet。Prometheus 指標を Cloud Monitoring(旧 Stackdriver Monitoring)API に送信します。サイドカーは、同じ Pod 内の別のコンテナで、prometheus サーバーがディスクに保存する指標を読み取って Cloud Monitoring API に転送します。
前提条件
- 課金が有効になっている Google Cloud プロジェクト。Cloud Operations の費用については、料金ガイドをご覧ください。 
- このガイドを使用して作成した 1 つの接続クラスタ。クラスタが登録済みかどうかは、次のコマンドで確認します。 - gcloud container fleet memberships list - 出力例: - NAME EXTERNAL_ID eks ae7b76b8-7922-42e9-89cd-e46bb8c4ffe4 
- クラスタにアクセスして - kubectlコマンドを実行できるローカル環境。gcloud を使用して- kubectlをインストールする方法については、GKE のクイックスタートをご覧ください。次のコマンドを実行して、- kubectlを使用して接続クラスタにアクセスできることを確認します。- kubectl cluster-info - 出力例: - Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com 
設定
- サンプル リポジトリのクローンを作成し、このガイド用のディレクトリに移動します。 - git clone https://github.com/GoogleCloudPlatform/anthos-samples cd anthos-samples/attached-logging-monitoring 
- プロジェクト ID 変数を、クラスタを登録したプロジェクトに設定します。 - PROJECT_ID="your-project-id" 
- Cloud Monitoring API と Cloud Logging API に指標とログを書き込む権限を持つ Google Cloud サービス アカウントを作成します。このサービス アカウントのキーを、次のセクションでデプロイするワークロードに追加します。 - gcloud iam service-accounts create anthos-lm-forwarder gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \ --role=roles/logging.logWriter gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \ --role=roles/monitoring.metricWriter
- 作成したサービス アカウントの JSON キーを作成してダウンロードし、そのキーを使用してクラスタの Kubernetes Secret を作成します。 - gcloud iam service-accounts keys create credentials.json \ --iam-account anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com kubectl create secret generic google-cloud-credentials -n kube-system --from-file credentials.json
ロギング エージェントのインストール
- logging/ディレクトリに移動します。- cd logging/ 
- aggregator.yamlを開きます。ファイルの最後にある次の変数を、プロジェクトとクラスタに対応する値に設定します。- project_id [PROJECT_ID] k8s_cluster_name [CLUSTER_NAME] k8s_cluster_location [CLUSTER_LOCATION] - クラスタの場所を確認するには、接続クラスタのメンバーシップ名で次のコマンドを実行し、 - /locations/<location>に表示される場所を取得します。- gcloud container fleet memberships describe eks | grep name - 出力: - name: projects/my-project/locations/global/memberships/eks 
- aggregator.yamlの- volumeClaimTemplates/specで、クラスタの PersistentVolumeClaim- storageClassNameを指定します。EKS と AKS には、必要に応じてコメント化を解除するためのデフォルト値があります。EKS を使用している場合は- gp2です。AKS の場合は- defaultです。- AWS または Azure でカスタムの Kubernetes ストレージ クラスを構成済みで、デフォルト以外のストレージ クラスを使用する場合、または別の標準に準拠したクラスタタイプを使用する場合は、独自の - storageClassNameを追加できます。適切な- storageClassNameは、管理者が- StorageClassを使用してクラスタにプロビジョニングした PersistentVolume(PV)のタイプに基づいています。ストレージ クラスと、他の主要な Kubernetes プロバイダのデフォルトのストレージ クラスの詳細については、Kubernetes のドキュメントをご覧ください。- # storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS 
- ログ アグリゲータとフォワーダーをクラスタにデプロイします。 - kubectl apply -f aggregator.yaml kubectl apply -f forwarder.yaml 
- Pod が起動したことを確認します。Kubernetes ワーカーノードごとに 2 つのアグリゲータ Pod と 1 つのフォワーダー Pod が表示されます。たとえば、4 ノードクラスタの場合、4 つのフォワーダー Pod が表示されます。 - kubectl get pods -n kube-system | grep stackdriver-log - 出力: - stackdriver-log-aggregator-0 1/1 Running 0 139m stackdriver-log-aggregator-1 1/1 Running 0 139m stackdriver-log-forwarder-2vlxb 1/1 Running 0 139m stackdriver-log-forwarder-dwgb7 1/1 Running 0 139m stackdriver-log-forwarder-rfrdk 1/1 Running 0 139m stackdriver-log-forwarder-sqz7b 1/1 Running 0 139m 
- アグリゲータ ログを取得し、ログが Google Cloudに送信されていることを確認します。 - kubectl logs stackdriver-log-aggregator-0 -n kube-system - 出力: - 2020-10-12 14:35:40 +0000 [info]: #3 [google_cloud] Successfully sent gRPC to Stackdriver Logging API. 
- テストアプリケーションをクラスタにデプロイします。これは、負荷生成ツールを含む基本的な HTTP ウェブサーバーです。 - kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml 
- Cloud Logging ダッシュボードで接続クラスタのログを表示できることを確認します。 Google Cloud コンソールで [ログ エクスプローラ] に移動します。 
- ログ エクスプローラで、次のサンプルクエリを [クエリビルダー] フィールドにコピーします。 - ${your-cluster-name}はクラスタ名で置き換えます。[クエリを実行] をクリックします。最近のクラスタログが [クエリ結果] に表示されます。- resource.type="k8s_container" resource.labels.cluster_name="${your-cluster-name}"

モニタリング エージェントのインストール
- logging/ディレクトリから- monitoring/ディレクトリに移動します。- cd ../monitoring 
- prometheus.yamlを開きます。- stackdriver-prometheus-sidecar/argsで、環境に合わせて次の変数を設定します。- "--stackdriver.project-id=[PROJECT_ID]" "--stackdriver.kubernetes.location=[CLUSTER_LOCATION]" "--stackdriver.generic.location=[CLUSTER_LOCATION]" "--stackdriver.kubernetes.cluster-name=[CLUSTER_NAME]" 
- prometheus.yaml の - volumeClaimTemplates/specで、ロギング エージェントのインストールの説明に従って、クラウド プロバイダに一致する- storageClassNameのコメントを解除します。- # storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS 
- エクスポータ サイドカーで構成された stackdriver-prometheus StatefulSet をクラスタにデプロイします。 - kubectl apply -f server-configmap.yaml kubectl apply -f sidecar-configmap.yaml kubectl apply -f prometheus.yaml 
- stackdriver-prometheusPod が実行されていることを確認するには、次のコマンドを使用します。- watch kubectl get pods -n kube-system | grep stackdriver-prometheus - stackdriver-prometheus-k8s-0 2/2 Running 0 5h24m 
- Stackdriver Prometheus サイドカー コンテナのログを取得して、Pod が起動したことを確認します。 - kubectl logs stackdriver-prometheus-k8s-0 -n kube-system stackdriver-prometheus-sidecar - level=info ts=2020-11-18T21:37:24.819Z caller=main.go:598 msg="Web server started" level=info ts=2020-11-18T21:37:24.819Z caller=main.go:579 msg="Stackdriver client started" 
- クラスタの指標が Cloud Monitoring に正常にエクスポートされていることを確認します。 Google Cloud コンソールで [Metrics Explorer] に移動します。 
- [クエリエディタ] をクリックし、次のコマンドを実行します。 - ${your-project-id}と- ${your-cluster-name}は、実際のプロジェクトとクラスタの情報に置き換えます。[クエリを実行] をクリックします。- 1.0.が表示されます。- fetch k8s_container | metric 'kubernetes.io/anthos/up' | filter resource.project_id == '${your-project-id}' && (resource.cluster_name =='${your-cluster-name}') | group_by 1m, [value_up_mean: mean(value.up)] | every 1m

クリーンアップ
- このガイドで作成したリソースをすべて削除するには: - kubectl delete -f logging kubectl delete -f monitoring kubectl delete secret google-cloud-credentials -n kube-system kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml rm -r credentials.json gcloud compute service-accounts delete anthos-lm-forwarder