Anthos clusters on AWS(GKE on AWS)の新しいバージョンが 6 月 3 日にリリースされました。詳細については、リリースノートをご覧ください。

Anthos clusters on AWS のロギングとモニタリングを構成する

このトピックでは、Anthos clusters on AWS のユーザー クラスタから Cloud Logging と Cloud Monitoring にログと指標をエクスポートする方法について説明します。

概要

Anthos clusters on AWS でのロギングとモニタリングには、複数の方法があります。Anthos は、Cloud Logging および Cloud Monitoring と統合できます。Anthos はオープンソース Kubernetes をベースにしているため、多くのオープンソース ツール、サードパーティ ツールとの互換性があります。

ロギングとモニタリングの方法

Anthos クラスタのロギングとモニタリングには、いくつかのオプションがあります。

  1. Cloud Logging エージェントと Cloud Monitoring エージェントをデプロイして、Google Cloud Console でワークロードのログをモニタリング、表示する。このトピックでは、このソリューションについて説明します。

  2. Prometheus、Grafana、Elasticsearch などのオープンソース ツールを使用する。このトピックでは、このソリューションについては説明しません。

  3. Datadog などのサードパーティ ソリューションを使用する。このトピックでは、このソリューションについては説明しません。

Cloud Logging と Cloud Monitoring

Anthos、Cloud Logging、Cloud Monitoring を使用すると、クラスタで実行中のワークロードのダッシュボードの作成、アラートの送信、モニタリング、ログの確認ができます。Google Cloud プロジェクトにログと指標を収集するには、Cloud Logging エージェントと Cloud Monitoring エージェントを構成する必要があります。これらのエージェントを構成しなければ、AWS 上の Anthos クラスタはロギングデータやモニタリング データを収集しません。

収集されるデータの種類

構成すると、エージェントはクラスタとクラスタで実行されているワークロードからログと指標データを収集します。これらのデータは Google Cloud プロジェクトに保存されます。ログのアグリゲータとフォワーダをインストールするときに、構成ファイルの project_id フィールドでプロジェクト ID を構成します。

収集されるデータには次の対象が含まれます。

  • 各ワーカーノードのシステム サービスのログ。
  • クラスタで実行されている全ワークロードのアプリケーション ログ。
  • クラスタとシステム サービスの指標。特定の指標の詳細については、Anthos の指標をご覧ください。
  • アプリケーションが Prometheus 取得ターゲットで構成され、prometheus.io/scrapeprometheus.io/pathprometheus.io/port などの構成のアノテーションが付けられている場合は、ポッド用のアプリケーション指標。

エージェントは任意の時点で無効にできます。詳しくは、クリーンアップをご覧ください。 エージェントによって収集されたデータは、Cloud MonitoringCloud Logging のドキュメントの手順に沿って、その他の指標やログデータと同様に管理、削除できます。

ログデータは、構成されている保持ルールに従って保存されます。指標データの保持は、指標タイプによって異なります

ロギングとモニタリングのコンポーネント

Anthos clusters on AWS から Google Cloud にクラスタレベルのテレメトリーをエクスポートするには、次のコンポーネントをクラスタにデプロイします。

  • Stackdriver Log Aggregator(stackdriver-log-aggregator-*)。Cloud Logging にログを送信する Fluentd StatefulSet です。
  • Stackdriver Log Forwarder(stackdriver-log-forwarder-*)。各 Kubernetes ノードから Stackdriver Log Aggregator にログを転送する Fluentbit DaemonSet です。
  • Stackdriver Metrics Collector(stackdriver-prometheus-k8s-*)。Prometheus 指標を Cloud Monitoring に送信するサイドカー コンテナで構成された Prometheus StatefulSet です。サイドカーは、Prometheus サーバーがディスクに保存する指標を読み取る同じ Pod 内の別のコンテナです。コレクタは Cloud Monitoring API を使用して Cloud プロジェクトに指標データを書き込みます。

これらのコンポーネントのマニフェストは、GitHub の anthos-samples リポジトリにあります。

前提事項

  1. 課金を有効にした Google Cloud プロジェクト。費用の詳細については、Google Cloud のオペレーション スイート料金をご覧ください。

    プロジェクトで Cloud Logging API と Cloud Monitoring API を有効にすることも必要です。

  2. Anthos clusters on AWS 環境(Connect に登録されたユーザー クラスタを含む)。クラスタが登録済みであることは、次のコマンドを実行して確認します。

    gcloud container hub memberships list
    

    クラスタが登録済みの場合、Cloud SDK はクラスタの名前と ID を出力します。

    NAME       EXTERNAL_ID
    cluster-0  1abcdef-1234-4266-90ab-123456abcdef
    

    クラスタの一覧が表示されない場合は、Connect を使用したクラスタへの接続をご覧ください。

  3. マシンに git コマンドライン ツールをインストールします。

踏み台インスタンスに接続する

Anthos clusters on AWS リソースに接続するには、次の手順を行います。既存の AWS VPC(または VPC への直接接続)があるか、管理サービスの作成時に専用の VPC を作成したかに基づいて、以下の手順を行います。

既存の VPC

既存の VPC への直接接続または VPN 接続がある場合は、このトピックのコマンドから env HTTP_PROXY=http://localhost:8118 行を省略します。

専用の VPC

専用の VPC で管理サービスを作成すると、AWS 上の Anthos クラスタにパブリック サブネットの踏み台インスタンスが含まれています。

管理サービスに接続するには、次の手順を行います。

  1. AWS 上の Anthos クラスタ構成のディレクトリに移動します。このディレクトリは、管理サービスをインストールしたときに作成したものです。

    cd anthos-aws

  2. トンネルを開くには、bastion-tunnel.sh スクリプトを実行します。トンネルは localhost:8118 に転送されます。

    踏み台インスタンスへのトンネルを開くには、次のコマンドを実行します。

    ./bastion-tunnel.sh -N
    

    SSH トンネルからのメッセージがこのウィンドウに表示されます。接続を閉じる準備ができたら、Ctrl+C を使用するか、ウィンドウを閉じて処理を停止します。

  3. 新しいターミナルを開き、anthos-aws ディレクトリに移動します。

    cd anthos-aws
  4. kubectl を使用してクラスタに接続できることを確認します。

    env HTTPS_PROXY=http://localhost:8118 \
    kubectl cluster-info
    

    出力には、Management Service API サーバーの URL が含まれます。

Google Cloud のオペレーション スイートの設定

クラスタを構成する前に、次の手順を行います。

  1. サンプル リポジトリのクローンを作成し、anthos-samples/aws-logging-monitoring ディレクトリに移動します。

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/aws-logging-monitoring
    
  2. クラスタを登録した Google Cloud プロジェクトに、環境変数を設定します。

    PROJECT_ID="PROJECT_ID"
    

    PROJECT_ID を実際のプロジェクト ID に置き換えます。

  3. gcloud コマンドライン ツールを使用して、指標とログを 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
    
  4. 作成したサービス アカウントの鍵を作成してダウンロードします。

    gcloud iam service-accounts keys create credentials.json \
      --iam-account anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com
    
  5. anthos-aws ディレクトリから anthos-gke を使用して、コンテキストをユーザー クラスタに切り替える。

    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    CLUSTER_NAME は、ユーザー クラスタ名に置き換えます。

  6. kubectl コマンドライン ツールを使用して、クラスタ内に鍵のコンテンツで Secret を作成します。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl create secret generic google-cloud-credentials \
      -n kube-system --from-file credentials.json
    

ログ アグリゲータとフォワーダのインストール

このセクションでは、クラスタに Stackdriver Log Aggregator と Stackdriver Log Forwarder をインストールします。

  1. anthos-samples/aws-logging-monitoring/ ディレクトリから、logging/ ディレクトリに移動します。

    cd logging/
    
  2. aggregator.yaml ファイルを編集します。ファイルの下部にある次の変数を見つけて編集します。

    project_id PROJECT_ID
    k8s_cluster_name CLUSTER_NAME
    k8s_cluster_location GC_REGION
    

    以下を置き換えます。

    • PROJECT_ID: プロジェクト ID。
    • CLUSTER_NAME: クラスタの名前(例: cluster-0
    • GC_REGION: ログを保存する Google Cloud リージョン。AWS リージョンに近接したリージョンを選択します。詳細については、グローバル ロケーション - リージョンとゾーン(例: us-central1)をご覧ください。
  3. (省略可)ワークロード、クラスタ内のノードの数、ノードあたりの Pod 数に応じて、メモリと CPU のリソース リクエストを設定する必要があります。詳細については、推奨される CPU とメモリ割り当てをご覧ください。

  4. anthos-aws ディレクトリから anthos-gke を使用して、コンテキストをユーザー クラスタに切り替える。

    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    CLUSTER_NAME は、ユーザー クラスタ名に置き換えます。

  5. ログ アグリゲータとフォワーダをクラスタにデプロイします。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f aggregator.yaml
    
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f forwarder.yaml
    
  6. kubectl を使用して、Pod が起動されたことを確認します。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get pods -n kube-system | grep stackdriver-log
    

    2 つのアグリゲータ Pod と、ノードプール内のノードごとにフォワーダ Pod が 1 つずつ表示されます。たとえば、6 ノードクラスタでは、6 つのフォワーダ Pod と 2 つのアグリゲータ Pod が表示されます。

    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
    stackdriver-log-forwarder-w4dhn              1/1     Running   0          139m
    stackdriver-log-forwarder-wrfg4              1/1     Running   0          139m
    
  7. kubectl を使用して、ログが Google Cloud に送信されていることを確認します。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl logs stackdriver-log-aggregator-0 -n kube-system
    

    出力には、Google Cloud に送信された情報ログが含まれます。

    2021-01-02 03:04:05 +0000 [info]: #3 [google_cloud] Successfully sent gRPC to Stackdriver Logging API.
    

ログ転送のテスト

このセクションでは、負荷ジェネレータを備えた基本的な HTTP ウェブサーバーを含むワークロードをクラスタにデプロイします。次に、ログが Cloud Logging に存在することをテストします。

ウェブサーバー負荷ジェネレータのマニフェストは、このワークロードをインストールする前に確認できます。

  1. ウェブサーバーと負荷ジェネレータをクラスタにデプロイします。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f  https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
    
  2. Cloud Logging ダッシュボードでクラスタのログを表示できることを確認するには、Google Cloud Console の [ログ エクスプローラ] に移動します。

    [ログ エクスプローラ] に移動

  3. 次のサンプルクエリを [クエリビルダー] フィールドにコピーします。

    resource.type="k8s_container" resource.labels.cluster_name="CLUSTER_NAME"
    

    CLUSTER_NAME はクラスタ名で置き換えます。

  4. [実行] をクリックします。最近のクラスタログが [クエリ結果] の下に表示されます。

    Google Cloud のオペレーション スイートのクラスタログ

  5. ログがクエリ結果に表示されることを確認したら、負荷生成ツールとウェブサーバーを削除します。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
    
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
    

指標コレクタのインストール

このセクションでは、Cloud Monitoring にデータを送信するエージェントをインストールします。

  1. anthos-samples/aws-logging-monitoring/logging/ ディレクトリから、anthos-samples/aws-logging-monitoring/monitoring/ ディレクトリに移動します。

    cd ../monitoring
    
  2. テキスト エディタで prometheus.yaml を開きます。このファイルには、Stackdriver-Prometheus サイドカーの構成を含むマニフェストが含まれています。

    stackdriver-prometheus-k8s という名前の StatefulSet を見つけます。spec.args で、実際の環境に合わせて次の変数を設定します。

    "--stackdriver.project-id=PROJECT_ID"
    "--stackdriver.kubernetes.location=GC_REGION"
    "--stackdriver.generic.location=GC_REGION"
    "--stackdriver.kubernetes.cluster-name=CLUSTER_NAME"
    

    以下を置き換えます。

    • PROJECT_ID: プロジェクト ID。
    • GC_REGION: ログを保存する Google Cloud リージョン。AWS リージョンに近接したリージョンを選択します。詳細については、グローバル ロケーション - リージョンとゾーンをご覧ください(例: us-central1)。
    • CLUSTER_NAME: クラスタの名前。
  3. (省略可)ワークロード、クラスタ内のノードの数、ノードあたりの Pod 数に応じて、メモリと CPU のリソース リクエストを設定する必要があります。詳細については、推奨される CPU とメモリ割り当てをご覧ください。

  4. stackdriver-prometheus StatefulSet とエクスポータ サイドカーをクラスタにデプロイします。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f server-configmap.yaml
    
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f sidecar-configmap.yaml
    
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f prometheus.yaml
    
  5. kubectl ツールを使用して、stackdriver-prometheus Pod が動作していることを確認します。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get pods -n kube-system | grep stackdriver-prometheus
    

    kubectl ツールによって、stackdriver-prometheus Pod のステータスが出力されます。

    stackdriver-prometheus-k8s-0         2/2     Running   0          5h24m
    
  6. kubectl ツールを使用して stackdriver-prometheus ログを取得し、Pod が起動されたことを確認します。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl logs stackdriver-prometheus-k8s-0 -n kube-system \
      stackdriver-prometheus-sidecar
    

    出力には、ワークロードからのステータス メッセージが含まれます。

    level=info ts=2021-01-02T03:04:05.678Z caller=main.go:598 msg="Web server started"
    level=info ts=2021-01-02T03:04:05.678Z caller=main.go:579 msg="Stackdriver client started"
    
  7. クラスタの指標が Cloud Monitoring にエクスポートされていることを確認するには、Google Cloud Console の Metrics Explorer に移動します。

    Metrics Explorer に移動

  8. Metrics Explorer で、[Query Editor] をクリックし、次のコマンドをコピーします。

    fetch k8s_container
    | metric 'kubernetes.io/anthos/up'
    | filter
        resource.project_id == 'PROJECT_ID'
        && (resource.cluster_name =='CLUSTER_NAME')
    | group_by 1m, [value_up_mean: mean(value.up)]
    | every 1m
    

    以下を置き換えます。

  9. [クエリを実行] をクリックします。グラフに 1.0. と表示され、クラスタが稼働中であることが示されます。

    クラスタのモニタリング

Cloud Monitoring でのダッシュボードの作成

このセクションでは、クラスタ内のコンテナ ステータスをモニタリングする Cloud Monitoring ダッシュボードを作成します。

  1. anthos-samples/aws-logging-monitoring/monitoring/ ディレクトリから、anthos-samples/aws-logging-monitoring/monitoring/dashboards ディレクトリに移動します。

    cd dashboards
    
  2. pod-status.jsonCLUSTER_NAME 文字列のインスタンスは、クラスタ名に置き換えます。

    sed -i "s/CLUSTER_NAME/CLUSTER_NAME/g" pod-status.json
    

    CLUSTER_NAME はクラスタ名で置き換えます。

  3. 次のコマンドを実行して、構成ファイルを含むカスタム ダッシュボードを作成します。

    gcloud monitoring dashboards create --config-from-file=pod-status.json
    
  4. ダッシュボードが作成されたことを確認するには、Google Cloud Console の Cloud Monitoring ダッシュボードに移動します。

    ダッシュボードに移動

    新しく作成したダッシュボードを、CLUSTER_NAME (Anthos cluster on AWS) pod status 形式の名前で開きます。

クリーンアップ

このセクションでは、クラスタからロギング コンポーネントとモニタリング コンポーネントを削除します。

  1. Google Cloud Console のダッシュボード一覧ビューで、ダッシュボード名に関連付けられている削除ボタンをクリックしてモニタリング ダッシュボードを削除します。

  2. anthos-samples/aws-logging-monitoring/ ディレクトリに移動します。

    cd anthos-samples/aws-logging-monitoring
    
  3. このガイドで作成したすべてのリソースを削除するには、次のコマンドを実行します。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f logging/
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f monitoring/
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete secret google-cloud-credentials -n kube-system
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -n kube-system \
        pvc/stackdriver-log-aggregator-persistent-volume-claim-stackdriver-log-aggregator-0
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -n kube-system \
        pvc/stackdriver-log-aggregator-persistent-volume-claim-stackdriver-log-aggregator-1
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -n kube-system \
        pvc/stackdriver-prometheus-data-stackdriver-prometheus-k8s-0
    
    rm -r credentials.json
    gcloud iam service-accounts delete anthos-lm-forwarder
    

推奨する CPU とメモリの割り当て

このセクションでは、ロギングとモニタリングに使用される個別のコンポーネントに推奨の CPU と割り当てについて説明します。次の各表は、ノードサイズの範囲があるクラスタの CPU リクエストとメモリ リクエストの一覧です。表内に示されたファイルでコンポーネントのリソース リクエストを設定します。

詳細については、Kubernetes のベスト プラクティス: リソースのリクエストと制限およびコンテナのリソースの管理をご覧ください。

1 ~ 3 ノード

ファイル リソース CPU リクエスト CPU 制限 メモリ リクエスト メモリ制限
monitoring/prometheus.yaml prometheus-server 100m 390m 330Mi 該当なし
monitoring/prometheus.yaml stackdriver-prometheus-sidecar 25m 340m 370Mi 該当なし
logging/aggregator.yaml stackdriver-log-aggregator 70m 170m 1150Mi 該当なし
logging/forwarder.yaml stackdriver-log-forwarder 30m 100m 100Mi 600Mi

4 ~ 10 ノード

ファイル リソース CPU リクエスト CPU 制限 メモリ リクエスト メモリ制限
monitoring/prometheus.yaml prometheus-server 120m 390m 420Mi 該当なし
monitoring/prometheus.yaml stackdriver-prometheus-sidecar 40m 340m 400Mi 該当なし
logging/aggregator.yaml stackdriver-log-aggregator 70m 170m 1300Mi 該当なし
logging/forwarder.yaml stackdriver-log-forwarder 50m 100m 100Mi 600Mi

11 ~ 25 ノード

ファイル リソース CPU リクエスト CPU 制限 メモリ リクエスト メモリ制限
monitoring/prometheus.yaml prometheus-server 150m 390m 500Mi 該当なし
monitoring/prometheus.yaml stackdriver-prometheus-sidecar 200m 340m 600Mi 該当なし
logging/aggregator.yaml stackdriver-log-aggregator 80m 300m 1500Mi 該当なし
logging/forwarder.yaml stackdriver-log-forwarder 60m 100m 100Mi 600Mi

25 ~ 50 ノード

ファイル リソース CPU リクエスト CPU 制限 メモリ リクエスト メモリ制限
monitoring/prometheus.yaml prometheus-server 150m 390m 650Mi 該当なし
monitoring/prometheus.yaml stackdriver-prometheus-sidecar 200m 340m 1500Mi 該当なし
logging/aggregator.yaml stackdriver-log-aggregator 150m 170m 1600Mi 該当なし
logging/forwarder.yaml stackdriver-log-forwarder 60m 100m 100Mi 600Mi

51 ~ 100 ノード

ファイル リソース CPU リクエスト CPU 制限 メモリ リクエスト メモリ制限
monitoring/prometheus.yaml prometheus-server 160m 500m 1800Mi 該当なし
monitoring/prometheus.yaml stackdriver-prometheus-sidecar 200m 500m 1900Mi 該当なし
logging/aggregator.yaml stackdriver-log-aggregator 220m 1100m 1600Mi 該当なし
logging/forwarder.yaml stackdriver-log-forwarder 60m 100m 100Mi 600Mi

100 ノード超

ファイル リソース CPU リクエスト CPU 制限 メモリ リクエスト メモリ制限
monitoring/prometheus.yaml prometheus-server 400m 該当なし 6500Mi 該当なし
monitoring/prometheus.yaml stackdriver-prometheus-sidecar 400m 該当なし 7500Mi 該当なし
logging/aggregator.yaml stackdriver-log-aggregator 450m 該当なし 1700Mi 該当なし
logging/forwarder.yaml stackdriver-log-forwarder 60m 100m 100Mi 600Mi

次のステップ

Cloud Logging について学習する

Cloud Monitoring について学習する