Kubernetes プラットフォームで Application Signals を有効にする - Amazon CloudWatch

Kubernetes プラットフォームで Application Signals を有効にする

Amazon EKS 以外の Kubernetes システムで実行されているアプリケーションを有効にするには、このセクションの手順に従ってください。Application Signals は、Java、Python、および .NET アプリケーションをサポートしています。

要件

  • Kubernetes クラスター上で、Application Signals を有効にできる管理者アクセス許可が付与されていること。

  • Kubernetes クラスターが実行されている環境に AWS CLI がインストールされていること。AWS CLI のインストールについては、「AWS CLI の最新バージョンを使用してインストールまたは更新を行う」で詳しく確認できます。

  • kubectl と Helm がローカルターミナルにインストールされていること。詳細については、 kubectl Helm のドキュメントを参照してください。

ステップ 1: アカウントで Application Signals を有効にする

このアカウントで Application Signals をまだ有効にしていない場合は、サービスの検出に必要なアクセス権限を Application Signals に付与する必要があります。このためには、次の操作を行います。この操作はアカウントごとに 1 回のみ必要です。

特定のアプリケーション向けに Application Signals を有効にするには
  1. CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

  2. ナビゲーションペインで [Services (サービス)] を選択します。

  3. [サービスの検出を開始] を選択します。

  4. チェックボックスを選択し、[サービスの検出を開始] を選択します。

    自分のアカウントでこのステップを初めて完了すると、[AWSServiceRoleForCloudWatchApplicationSignals] サービスリンクロールが作成されます。このロールによって、Application Signals に次のアクセス権限が付与されます。

    • xray:GetServiceGraph

    • logs:StartQuery

    • logs:GetQueryResults

    • cloudwatch:GetMetricData

    • cloudwatch:ListMetrics

    • tag:GetResources

    このロールの詳細については、「CloudWatch Application Signals のサービスリンクロールのアクセス許可」を参照してください。

ステップ 2: クラスターに CloudWatch エージェントオペレータをインストールする

CloudWatch エージェントオペレータをインストールすると、オペレータや CloudWatch エージェント、その他の自動計測機能がクラスターにインストールされます。これを行うには、次のコマンドを入力します。$REGION を AWS リージョンに置き換えます。$YOUR_CLUSTER_NAME を、Application Signals ダッシュボードでのクラスターの表示名に置き換えます。

helm repo add aws-observability https://aws-observability.github.io/helm-charts helm install amazon-cloudwatch-operator aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch --create-namespace \ --set region=$REGION \ --set clusterName=$YOUR_CLUSTER_NAME

詳細については、GitHub の「amazon-cloudwatch-observability」を参照してください。

ステップ 3: Kubernetes クラスターの AWS 認証情報を設定する

重要

Kubernetes クラスターが Amazon EC2 上にホストされている場合は、このセクションをスキップして ステップ 4: アノテーションを追加する に進むことができます。

Kubernetes クラスターがオンプレミスにホストされている場合は、このセクションの手順を使用して Kubernetes 環境に AWS 認証情報を追加する必要があります。

オンプレミスの Kubernetes クラスターのアクセス許可を設定するには
  1. オンプレミスホストにアクセス許可を付与するために使用する IAM ユーザーを作成します。

    1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

    2. [ユーザー][ユーザーの作成] の順に選択します。

    3. [ユーザー詳細] で、[ユーザー名] に新しい IAM ユーザーの名前を入力します。これは、ホストの認証に使用される AWS のサインイン名です。その後、[Next] (次へ) を選択します。

    4. [アクセス許可の設定] ページの [権限オプション] で、[ポリシーを直接アタッチする] を選択します。

    5. [アクセス許可ポリシー] リストから、CloudWatchAgentServerPolicy ポリシーを選択して、ユーザーに追加します。次いで、[次へ] を選択します。

    6. [確認と作成] ページで、ユーザー名に問題がなく、CloudWatchAgentServerPolicy ポリシーが [許可の概要] に含まれていることを確認します。

    7. [ユーザーの作成] を選択します。

  2. AWS アクセスキーとシークレットキーを作成して取得します。

    1. IAM コンソールのナビゲーションペインで、[ユーザー] を選択し、前のステップで作成したユーザーのユーザー名を選択します。

    2. ユーザーのページで、[セキュリティ認証情報] タブを選択します。次に、[アクセスキー] セクションで、[アクセスキーを作成] を選択します。

    3. [アクセスキーの作成ステップ 1] で、[コマンドラインインターフェイス (CLI)] を選択します。

    4. [アクセスキーの作成ステップ 2] で、必要に応じてタグを入力して [次へ] を選択します。

    5. [アクセスキーの作成ステップ 3] で、[.csv ファイルをダウンロード] を選択し、.csv ファイルに IAM ユーザーのアクセスキーとシークレットアクセスキーを含めて保存します。この情報は、次のステップで必要になります。

    6. [完了] をクリックします。

  3. 次のコマンドを入力して、オンプレミスホストで AWS 認証情報を設定します。ACCESS_KEY_IDSECRET_ACCESS_ID を、前のステップでダウンロードした .csv ファイルに新しく生成したアクセスキーとシークレットアクセスキーに置き換えます。デフォルトでは、認証情報ファイルは /home/user/.aws/credentials. に保存されます。

    $ aws configure --profile AmazonCloudWatchAgent AWS Access Key ID [None]: ACCESS_KEY_ID AWS Secret Access Key [None]: SECRET_ACCESS_ID Default region name [None]: MY_REGION Default output format [None]: json
  4. Helm チャートを使用して、新規に作成した AWS 認証情報シークレットを、CloudWatch エージェントがインストールしたカスタムリソースに追加します。

    kubectl edit amazoncloudwatchagent cloudwatch-agent -n amazon-cloudwatch
  5. ファイルエディタを開いたままにして、デプロイの上部に次の設定を追加して、CloudWatch エージェントコンテナに AWS 認証情報をマウントします。パス /home/user/.aws/credentials をローカルの AWS ファイルシステム上の場所に置き換えます。

    apiVersion: cloudwatch.aws.amazon.com/v1alpha1 kind: AmazonCloudWatchAgent metadata: name: cloudwatch-agent namespace: amazon-cloudwatch spec: volumeMounts: - mountPath: /rootfs volumeMounts: - name: aws-credentials mountPath: /root/.aws readOnly: true volumes: - hostPath: path: /home/user/.aws/credentials name: aws-credentials ---

ステップ 4: アノテーションを追加する

次のステップでは、Kubernetes ワークロードまたは名前空間に言語固有のアノテーションを追加して、CloudWatch Application Signals でアプリケーションを計測します。このアノテーションは、アプリケーションの計測を自動的に開始してメトリクス、トレース、ログを Application Signals に送信します。

Application Signals のアノテーションを追加するには
  1. アノテーションには次の 2 つのオプションがあります。

    • ワークロードへのアノテーション: クラスター内の 1 つのワークロードの計測を自動的に開始します。

    • 名前空間へのアノテーション: 選択した名前空間にデプロイしたすべてのワークロードに対し自動的に計測を開始します。

    以上のいずれかのオプションを選択し、次の適切な手順に従います。

  2. 1 つのワークロードに注釈を追加するには、次のいずれかのコマンドを入力します。$WORKLOAD_TYPE$WORKLOAD_NAME をワークロードの値に置き換えます。

    • Java ワークロードの場合:

      kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-java": "true"}}}}}'
    • Python ワークロードの場合:

      kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-python": "true"}}}}}'

      Python アプリケーションには、追加で必要な設定があります。詳細については、「Application Signals を有効にしたが、その後、Python アプリケーションを起動できない」を参照してください。

    • .NET ワークロードの場合:

      kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-dotnet": "true"}}}}}'
      注記

      Alpine Linux (linux-musl-x64) ベースのイメージでの .NET ワークロードに対して Application Signals を有効にするには、さらに以下の注釈を追加します。

      instrumentation.opentelemetry.io/otel-dotnet-auto-runtime: "linux-musl-x64"
    • (プレビュー) Node.js ワークロードの場合:

      kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-nodejs": "true"}}}}}'
  3. 名前空間内のすべてのワークロードにアノテーションを追加するには、次のいずれかのコマンドを入力します。$NAMESPACE を名前空間の名前に置き換えます。

    名前空間に Java、Python、および .NET ワークロードが含まれている場合は、すべての注釈を名前空間に追加します。

    • 名前空間に Java ワークロードがある場合:

      kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-java=true
    • 名前空間に Python ワークロードがある場合:

      kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-python=true

      Python アプリケーションには、追加で必要な設定があります。詳細については、「Application Signals を有効にしたが、その後、Python アプリケーションを起動できない」を参照してください。

    • 名前空間に .NET ワークロードがある場合:

      kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-dotnet=true
    • (プレビュー) 名前空間に Node.js ワークロードがある場合:

      kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-nodejs=true

    アノテーションを追加したら、次のコマンドを入力して、名前空間内のすべてのポッドを再起動します。

    kubectl rollout restart
  4. 前のステップが完了したら、CloudWatch コンソールで、[Application Signals][サービス] の順に選択します。ダッシュボードが開いて、Application Signals が収集したデータが表示されます。データが表示されるまでに数分かかる場合があります。

    [サービス] ビューの詳細については、「Application Signals を使用したアプリケーションの運用状態のモニタリング」を参照してください。