Fluent Bit を Amazon EKS のコンテナインサイトと統合する場合のセットアップの問題をトラブルシューティングする方法を教えてください。

所要時間2分
0

Fluent Bit を Amazon Elastic Kubernetes Service (Amazon EKS) 用の Amazon CloudWatch Container Insights と統合する際の設定に関する問題をトラブルシューティングしたいと考えています。

簡単な説明

**注:**Fluentd の代わりに Fluent Bit を使用するのがベストプラクティスです。詳細については、「CloudWatch Logs にログを送信」を参照してください。

Fluent Bit がコンテナログを CloudWatch ログに配信できるようにするには、Fluent Bit に AWS Identity and Access Management (IAM) 権限を付与する必要があります。詳細については、「前提条件の確認」を参照してください。

Fluent bit で Container Insights を使用するには、サービスアカウント (IRSA) の IAM ロールを設定してから、Container Insights を EKS クラスターにデプロイします。

解決策

Fluent Bit による Container Insights のセットアップ

CloudWatchAgentServerPolicy AWS マネージドポリシーを使用して、cloudwatch-agentfluent-bit のサービスアカウントを作成します。

次の手順を実行します。

  1. 次のコマンドを実行して環境変数を設定します。

    export CLUSTER=clustername
    export AWS_REGION=awsregion

    **注:**clusternameawsregion を独自のクラスター名と AWS リージョンに置き換えます。

  2. 次の eksctl コマンドを実行して、IRSA で CloudWatch-agent サービスアカウントを作成します。

    eksctl create iamserviceaccount \
        --name cloudwatch-agent \
        --namespace amazon-cloudwatch \
        --cluster $CLUSTER \
        --attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \
        --approve \
        --override-existing-serviceaccounts
  3. 次の eksctl コマンドを実行して、IRSA で Fluent Bit サービスアカウントを作成します。

    eksctl create iamserviceaccount \
        --name fluent-bit \
        --namespace amazon-cloudwatch \
        --cluster $CLUSTER \
        --attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \
        --approve \
        --override-existing-serviceaccounts
  4. クイックスタートを使用して Container Insights をデプロイするには、次のコマンドを実行します。

    :ClusterName=<my-cluster-name>
    RegionName=<my-cluster-region>
    FluentBitHttpPort='2020'
    FluentBitReadFromHead='Off'
    [[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On'
    [[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || FluentBitHttpServer='On'
    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/quickstart/cwagent-fluent-bit-quickstart-enhanced.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/;s/{{region_name}}/'${RegionName}'/;s/{{http_server_toggle}}/"'${FluentBitHttpServer}'"/;s/{{http_server_port}}/"'${FluentBitHttpPort}'"/;s/{{read_from_head}}/"'${FluentBitReadFromHead}'"/;s/{{read_from_tail}}/"'${FluentBitReadFromTail}'"/' | kubectl apply -f -

    **注:**my-cluster-namemy-cluster-region を独自のクラスター名とリージョンに置き換えてください。上記のコマンドは、CloudWatch エージェントと Fluent Bit の ClusterRoleClusterRoleBindingConfigMapDaemonSet を作成します。

  5. 次のコマンドを実行して、CloudWatch エージェントと Fluent Bit がデプロイされていることを確認します。

    kubectl get pods -n amazon-cloudwatch

デプロイが完了すると、CloudWatch エージェントはロググループ /AWS/ContainerInsights/Cluster_Name/performance を作成します。

Fluent Bit はロググループ /aws/containerinsights/Cluster_Name/application, /aws/containerinsights/Cluster_Name/host/aws/containerinsights/Cluster_Name/dataplane を作成します。

Fluent Bit の設定に関する問題のトラブルシューティング

Fluent Bit ポッドがクラッシュする

Fluent Bit ポッドのログにエラーメッセージがないかどうかを確認するには、次の手順を実行します。

  1. 次のコマンドを実行して、Fluent Bit ポッドからイベントを検索します。

    kubectl -n amazon-cloudwatch logs -l k8s-app=fluent-bit
    kubectl -n amazon-cloudwatch describe pod fluent_pod pod_name
  2. cluster-info が正確で、構文の誤りがないことを確認します。

  3. クラスター名とリージョンの値がすべて設定されていることを確認します。詳細については、GitHub ウェブサイトの「amazon-cloudwatch-container-insights」を参照してください。

**Fluent Bit が CloudWatch にログを送信しません **

トラブルシューティングを行うには、次の手順を実行してください。

  1. 出力プラグインが Fluent Bit 設定ファイルに正しく設定されていることを確認します。データシップエラーがないかどうかを確認するには、次のコマンドを実行して Fluent Bit ポッドのログを表示します。

    kubectl -n amazon-cloudwatch logs fluent_pod_name
  2. Fluent Bit ポッドに、ロググループを作成してログを CloudWatch にストリーミングするために必要な IAM 権限があることを確認します。fluent-bit のサービスアカウントでアノテーションが付けられた IAM ロールに CloudWatchAgentServerPolicy IAM ポリシーをアタッチする必要があります。
    IRSA を使用した場合は、IAM ロールをワーカーノードにアタッチする必要があります。詳細については、「Amazon EKS の IRSA エラーをトラブルシューティングする方法を教えてください」を参照してください。

特定のアプリケーションログが表示されない場合は、アプリケーションが実行できることを確認してください。次に、アプリケーションが他のタイプのログを生成できるかどうかを確認します。アプリケーションが実行されてログが生成されたら、fluent-bit ポッドのログをチェックして、特定のエラーが CloudWatch に送信されていないかどうかを確認します。

Fluent Bit ポッドが CreateContainerConfigError ステータスで動かなくなる

次のコマンドを実行すると、正確なエラーメッセージが表示されます。

kubectl describe pod pod_name -n amazon-cloudwatch

コマンドの出力の [イベント] セクションで、次のようなエラーメッセージを探します。

Error syncing pod ("fluent-bit-xxxxxxx"), skipping: failed to "StartContainer" with CreateContainerConfigError: "configmap \"fluent-bit-config\" not found"

上記のエラーメッセージが表示される場合は、Fluent Bit の ConfigMap (fluent-bit-config) が見つかりません。この記事の「Fluent Bit による Container Insights のセットアップ」セクションのステップ 4 を繰り返します。

関連情報

クラスターメトリクスを収集するように CloudWatch エージェントをセットアップする

CloudWatch エージェントと Fluent Bit によるクイックスタート

GitHub ウェブサイトでデバッグログを有効にする

AWS公式
AWS公式更新しました 1年前