Fargate ログ記録 - Amazon EKS

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

Fargate ログ記録

Amazon EKS を搭載した は、組み込みのログFargateルーターをサポートしています。つまり、インストールまたは維持するサイドカーコンテナはありません。ログルーターを使用すると、ログの分析とストレージAWSに のさまざまなサービスを使用できます。ログはFargate、 から Amazon CloudWatch、、 のAmazon Elasticsearch Service宛先 (、Amazon Amazon Kinesis Data Firehose Data Amazon S3Streams、 パートナーツールなど) Kinesis に直接ストリーミングできます。 Fargate は、 によって管理される Fluent Bit のアップストリーム準拠のディストリビューションである Fluent Bit AWS 用の のバージョンを使用しますAWS。詳細については、「 AWS for Fluent Bit on 」を参照してくださいGitHub。

Prerequisites

  • 既存の Amazon EKS クラスター。クラスターは、次のいずれかのプラットフォームバージョン (またはそれ以降のバージョン) を実行している必要があります。

    EKS バージョン プラットフォームのバージョン
    1.18 eks.3
    1.17 eks.5
    1.16 eks.5
    1.15 eks.6

    これらのいずれかのプラットフォームバージョン以降に既存のクラスターがない場合は、「」を参照してクラスターを の使用を開始するAmazon EKSデプロイします。

  • Fargate ポッドをデプロイする既存の Kubernetes 名前空間を指定する既存の Fargate プロファイル。詳細については、「 」を参照してください。クラスターの Fargate プロファイルを作成する.

任意の送信先にログを送信するには

コンテナログの送信先を定義するConfigMapデータ値を使用して、 Amazon EKS をFluent Confクラスターに適用します。Fluent Conf は Fluent Bit です。高速かつ軽量のログプロセッサ設定言語で、コンテナログを選択したログの宛先にルーティングするために使用されます。詳細については、Fluent Bit ドキュメントの「設定ファイル」を参照してください。

次の手順では、 <example values> を独自の値に置き換えます。

  1. Kubernetes 名前空間を作成します。

    1. 以下の内容をコンピュータ上の aws-observability-namespace.yaml という名前のファイルに保存します。名前は である必要がありますaws-observability

      kind: Namespace apiVersion: v1 metadata: name: aws-observability labels: aws-observability: enabled
    2. 名前空間を作成します。

      kubectl apply -f aws-observability-namespace.yaml
  2. 次のいずれかの宛先にFargateログを送信するように Kubernetes を設定します。作成する ConfigMap は 名前aws-observability空間で作成する必要があります。

    1. (オプション) にログを送信しますCloudWatch。を使用するときは、2 つの出力オプションがありますCloudWatch。

      • cloudwatch_logs – C で記述された出力プラグイン。

      • cloudwatch – Golang で記述された出力プラグイン。

      次の例は、 cloudwatch_logs プラグインを使用して にログを送信する方法を示していますCloudWatch。

      1. 以下の内容を という名前のファイルに保存しますaws-logging-cloudwatch-configmap.yaml

        kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability labels: data: output.conf: | [OUTPUT] Name cloudwatch_logs Match * region <us-east-1> log_group_name fluent-bit-cloudwatch log_stream_prefix from-fluent-bit- auto_create_group true
      2. マニフェストをクラスターに適用します。

        kubectl apply -f aws-logging-cloudwatch-configmap.yaml
      3. CloudWatch IAM ポリシーをコンピュータにダウンロードします。でポリシーhttps://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/cloudwatchlogs/permissions.jsonを表示することもできますGitHub。

        curl -o permissions.json https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/cloudwatchlogs/permissions.json
    2. (オプション) にログを送信しますAmazon Elasticsearch Service。C で記述されたプラグインである es 出力を使用できます。次の例は、プラグインを使用してログを Elasticsearch に送信する方法を示しています。

      1. 以下の内容を という名前のファイルに保存しますaws-logging-elasticsearch-configmap.yaml

        kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability labels: data: output.conf: | [OUTPUT] Name es Match * Host 192.168.2.3 Port 9200 Index my_index Type my_type AWS_Auth On AWS_Region <us-east-1>
      2. マニフェストをクラスターに適用します。

        kubectl apply -f aws-logging-elasticsearch-configmap.yaml
      3. Elasticsearch IAM ポリシーをコンピュータにダウンロードします。でポリシーhttps://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/amazon-elasticsearch/permissions.jsonを表示することもできますGitHub。

        curl -o permissions.json https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/amazon-elasticsearch/permissions.json
    3. (オプション) にログを送信しますKinesis Data Firehose。を使用するときは、2 つの出力オプションがありますKinesis Data Firehose。

      • kinesis_firehose – C で記述された出力プラグイン。

      • firehose – Golang で記述された出力プラグイン。

      次の例は、 kinesis_firehose プラグインを使用して にログを送信する方法を示していますKinesis Data Firehose。

      1. 以下の内容を という名前のファイルに保存しますaws-logging-firehose-configmap.yaml

        kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability labels: data: output.conf: | [OUTPUT] Name kinesis_firehose Match * region <us-east-1> delivery_stream my-stream-firehose
      2. マニフェストをクラスターに適用します。

        kubectl apply -f aws-logging-firehose-configmap.yaml
      3. Kinesis Data Firehose IAM ポリシーをコンピュータにダウンロードします。でポリシーhttps://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/kinesis-firehose/permissions.jsonを表示することもできますGitHub。

        curl -o permissions.json https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/kinesis-firehose/permissions.json
  3. IAM ポリシーを作成します。

    aws iam create-policy --policy-name <eks-fargate-logging-policy> --policy-document file://permissions.json
  4. IAM プロファイルに指定されたポッド実行ロールにFargateポリシーをアタッチします。を アカウント ID <111122223333> に置き換えます。

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::<111122223333>:policy/<eks-fargate-logging-policy> \ --role-name <your-pod-execution-role>
  5. サンプルポッドをデプロイします。

    1. 以下の内容をコンピュータ上のyamlファイルに保存します。

      apiVersion: apps/v1 kind: Deployment metadata: name: sample-app namespace: <same-namespace-as-your-fargate-profile> spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - name: http containerPort: 80
    2. マニフェストをクラスターに適用します。

      kubectl apply -f <name-of-file-from-previous-step>.yaml
  6. ログの送信先のツールを使用してログを表示します。

サイズに関する考慮事項

ログには最大 50 MB のメモリを計画することをお勧めします。アプリケーションが非常に高いスループットでログを生成することが予想される場合は、最大 100 MB まで計画する必要があります。

Troubleshooting

ロギング機能が何らかの理由で有効になっているか無効になっているかを確認するには (例: 無効な ConfigMap)、および無効になっている理由を確認するには、 でポッドイベントを確認しますkubectl describe pod <pod_name>。 出力には、次の出力例のように、ログ記録が有効かどうかを明確にするポッドイベントが含まれる場合があります。

... Annotations: CapacityProvisioned: 0.25vCPU 0.5GB Logging: LoggingDisabled: LOGGING_CONFIGMAP_NOT_FOUND kubernetes.io/psp: eks.privileged ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning LoggingDisabled <unknown> fargate-scheduler Disabled logging because aws-logging configmap was not found. configmap "aws-logging" not found

ポッドイベントは、設定に応じて期間とともにエフェメラルになります。を使用してポッドの注釈を表示することもできますkubectl describe pod <pod-name>。 ポッドの注釈には、ログ記録機能が有効か無効か、および理由に関する情報があります。

検証戦略

一般的な に含まれるメインセクションFluent ConfService、、、InputFilter、 ですOutputFilterOutput、および Parser Service Input は によって生成されますFargate。 は、 Fargate で指定された Filter Output、、および Parser のみを検証しますFluent ConfFilter、、Outputおよび 以外のセクションParserは無視されます。次のルールはFilter、、Output、および Parser フィールドを検証するために使用されます。

  1. [FILTER] [OUTPUT], 、、および は、対応する各キー ([PARSER]、、filters.confおよび ) で指定output.confする必要がありますparsers.conf。 たとえば、 は 未満[FILTER]にする必要がありますfilters.conf。 の下に多数の [FILTER]を含めることができますfilters.conf[OUTPUT] と についても同様です[PARSER]

  2. Fargate は、各セクションの必須キーを検証します。Name および match は、 [FILTER] および ごとに必要です[OUTPUT]Name および format は、 ごとに必要です[PARSER]。 キーでは大文字と小文字は区別されません。

  3. などの環境変数${ENV_VAR}は、 では使用できませんconfigmap

  4. インデントはfilters.conf、、、output.confおよび それぞれの 内のディレクティブまたはキーと値のペアのいずれかで同じである必要がありますparsers.conf。 キーと値のペアは、 ディレクティブよりもインデントされる必要があります。

  5. Fargate は、サポートされているフィルタ grep、、、、parserrecord_modifierrewrite_tagthrottlenestおよび に対して検証modifyします。

  6. Fargate は、サポートされている出力 es、、、、firehosekinesis_firehosecloudwatchcloudwatch_logsおよび に対して検証kinesisします。

  7. ログ記録を有効にするには、サポートされているプラグインOutputを少なくとも 1 つ で指定ConfigMapする必要があります。Filter ログ記録を有効にするために と Parser は必要ありません。

の詳細については、Fluent Bit ドキュメントのFluent Conf「設定ファイルhttps://docs.fluentbit.io/manual/administration/configuring-fluent-bit/configuration-file」を参照してください。また、必要な設定Amazon EC2を使用して で Fluent Bit を実行し、検証に起因する問題のトラブルシューティングを行うこともできます。