このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
クラスターの AWS Fargate ログ記録を開始する
重要
Amazon EKS を使用した AWS Fargate は、AWS GovCloud (米国東部) および AWS GovCloud (米国西部) ではご利用いただけません。
Fargate の Amazon EKS では、Fluent Bit をベースにした組み込みのログルーターが利用できます。Fluent Bit コンテナをサイドカーとして明示的に実行する必要はなく、この実行は Amazon によって行われます。必要となるのは、ログルーターの設定だけです。設定は専用の ConfigMap
を介して行い、その際は以下の基準を満たす必要があります。
-
名前のついた
aws-logging
-
aws-observability
と呼ばれる専用の名前空間での作成 -
5,300 文字以内にしてください。
ConfigMap
を作成すると、Fargate の Amazon EKS は自動的にそれを検出しログルーターの設定を行います。Fargate は、Fluent Bit の AWS のバージョンを使用しています。これは、AWS によって管理される Fluent Bit の上流対応のディストリビューションです。詳細については、GitHub の「AWS 用の Fluent Bit
ログルーターを使用すると、AWS のさまざまなサービスをログの分析と保管に使用できます。Fargate からは、Amazon CloudWatch、Amazon OpenSearch Service に対し直接ログをストリーミングできます。また、Amazon Data Firehose
前提条件
-
Fargate Pods をデプロイする既存の Kubernetes 名前空間を指定する既存の Fargate プロファイルです。詳細については、「ステップ 3: クラスターの Fargate プロファイルを作成する」を参照してください。
-
既存の Fargate Pod の実行ロールです。詳細については、「ステップ 2: Fargate Pod 実行ロールを作成する」を参照してください。
ログルーターの設定
ログルーターを設定するには
以下のステップでは、すべての
を独自の値に置き換えます。example value
-
aws-observability
という名前の専用の Kubernetes 名前空間を作成します。-
次の内容をコンピュータ上の
という名前のファイルに保存します。aws-observability-namespace
.yamlname
の値はaws-observability
である必要があり、aws-observability: enabled
ラベルが必須です。kind: Namespace apiVersion: v1 metadata: name: aws-observability labels: aws-observability: enabled
-
名前空間を作成します。
kubectl apply -f
aws-observability-namespace
.yaml
-
-
データ値
Fluent Conf
を使用してConfigMap
を作成し、コンテナログを送信先に送ります。Fluent Conf とは Fluent Bit であり、コンテナログを任意のログ送信先にルーティングするために使用される、高速で軽量なログプロセッサ設定言語です。詳細については、Fluent Bit ドキュメントの「Configuration File」(設定ファイル) を参照してください。 重要
典型的な
Fluent Conf
に含まれている主なセクションは、Service
Input
、Filter
およびOutput
です。ただし、Fargate のログルータでは、以下だけを受け入れます。-
Filter
およびOutput
セクション。 -
Parser
セクション。
他のセクションを提供した場合、拒否されます。
Fargate ログルーターは
Service
およびInput
セクションを管理します。次のInput
セクションがありますが、これらは変更できず、ConfigMap
には必要ありません。ただし、メモリバッファー制限やログに適用されるタグなどの洞察は得られます。[INPUT] Name tail Buffer_Max_Size 66KB DB /var/log/flb_kube.db Mem_Buf_Limit 45MB Path /var/log/containers/*.log Read_From_Head On Refresh_Interval 10 Rotate_Wait 30 Skip_Long_Lines On Tag kube.*
ConfigMap
の作成時は、以下の (Fargate がフィールドの検証に使用する) ルールを考慮に入れます。-
[FILTER]
、[OUTPUT]
および[PARSER]
は、それぞれが対応するキーにより指定する必要があります。例:[FILTER]
がfilters.conf
の下にある必要があります。filters.conf
には、複数の[FILTER]
を含められます。また、[OUTPUT]
および[PARSER]
セクションは、それぞれと対応するキーの下に置く必要があります。複数の[OUTPUT]
セクションを指定することで、ログを異なる送信先に同時にルーティングできます。 -
Fargate は各セクションに必要なキーを検証します。
Name
およびmatch
がそれぞれの[FILTER]
および[OUTPUT]
に必要です。Name
およびformat
がそれぞれの[PARSER]
に必要です。キーの大文字と小文字は区別されません。 -
${ENV_VAR}
などの環境変数はConfigMap
では許可されていません。 -
インデントは、それぞれの
filters.conf
、output.conf
、およびparsers.conf
の中で、ディレクティブまたはキーと値のペアで同じである必要があります。キーと値のペアは、ディレクティブよりも深いインデントにする必要があります。 -
Fargate は、サポートされている次のフィルターに対して検証します。
grep
、parser
、record_modifier
、rewrite_tag
、throttle
、nest
、modify
、およびkubernetes
。 -
Fargate は、サポートされている次の出力に対して検証します。
es
、firehose
、kinesis_firehose
、cloudwatch
、cloudwatch_logs
、およびkinesis
。 -
ログ記録を有効にするには、サポートされている
Output
プラグインが少なくとも 1 つConfigMap
にあることが必要です。Filter
およびParser
は、ログ記録を有効にするために必要ありません。
また、希望の設定を使用して Amazon EC2 で Fluent Bit を実行し、検証によって発生する問題をトラブルシューティングすることもできます。以下のいずれかの例に従って、
ConfigMap
を作成します。重要
Amazon EKS Fargate のログ記録では、
ConfigMaps
での動的設定をサポートしていません。ConfigMaps
に対する変更はすべて、新しい Pods に対してのみ適用されます。既存の Pods に変更は適用されません。例を使用して、必要なログ送信先用に
ConfigMap
を作成します。注記
また、Amazon Kinesis Data Streams をログの宛先として使用できます。Kinesis Data Streams を使用する場合は、ポッド実行ロールに
kinesis:PutRecords
権限が付与されていることを確認してください。詳細については、Fluent Bit: 公式マニュアルの Amazon Kinesis Data Streams の「アクセス許可」を参照してください。 -
-
前のステップでダウンロードしたポリシー ファイルを使用して、IAM ポリシーを作成します。
aws iam create-policy --policy-name
eks-fargate-logging-policy
--policy-document file://permissions.json -
次のコマンドを使用して、Fargate プロファイルに指定されたポッド実行ロールに IAM ポリシーを添付します。
をアカウント ID に置き換えます。111122223333
を Pod の実行ロールに置き換えます (詳細については、「ステップ 2: Fargate Pod 実行ロールを作成する」を参照してください)。AmazonEKSFargatePodExecutionRole
aws iam attach-role-policy \ --policy-arn arn:aws:iam::
111122223333
:policy/eks-fargate-logging-policy
\ --role-nameAmazonEKSFargatePodExecutionRole
Kubernetes フィルターのサポート
この機能には、最低限、次の Kubernetes バージョンとプラットフォームレベル以上が必要です。
Kubernetes バージョン | プラットフォームレベル |
---|---|
1.23 以降 | eks.1 |
Fluent Bit Kubernetes フィルターを使用すると、ログファイルに Kubernetes メタデータを追加できます。フィルターの詳細については、「Fluent Bit ドキュメント」の「Kubernetes
filters.conf: | [FILTER] Name kubernetes Match kube.* Merge_Log On Buffer_Size 0 Kube_Meta_Cache_TTL
300
s
重要
-
Kube_URL
、Kube_CA_File
、Kube_Token_Command
、およびKube_Token_File
はサービス所有の設定パラメータであるため、指定しないでください。Amazon EKS Fargate がこれらの値を設定します。 -
Kube_Meta_Cache_TTL
は、Fluent Bit が最新のメタデータを取得するために API サーバーと通信するまで待機する時間です。Kube_Meta_Cache_TTL
が指定されていない場合、Amazon EKS Fargate は API サーバーの負荷を軽減するためにデフォルト値である 30 分を追加します。
Fluent Bit プロセスログをアカウントに送付するには
オプションで、Fluent Bit プロセスログを、次の ConfigMap
を使用して Amazon CloudWatch に送付できます。Fluent Bit プロセスログを CloudWatch に送信するには、追加のログの取り込みおよびストレージのコストがかかります。
をクラスターのある AWS リージョン に置き換えます。region-code
kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability labels: data: # Configuration files: server, input, filters and output # ====================================================== flb_log_cw: "true" # Ships Fluent Bit process logs to CloudWatch. output.conf: | [OUTPUT] Name cloudwatch Match kube.* region
region-code
log_group_name fluent-bit-cloudwatch log_stream_prefix from-fluent-bit- auto_create_group true
ログは CloudWatch でクラスターが存在する AWS リージョン にあります。ロググループ名は
で、Fluent Bit のログストリーム名は my-cluster
-fluent-bit-logsfluent-bit-
です。podname
-pod-namespace
注記
-
プロセスログは、Fluent Bit プロセスが正常に開始された場合にのみ送付されます。Fluent Bit の起動中に障害が発生すると、プロセスログを取得できません。プロセスログは CloudWatch にのみ送付できます。
-
プロセスログのアカウントへの送付をデバッグするには、前に使用した
ConfigMap
を適用して、プロセスログを取得します。Fluent Bit が起動に失敗するのは通常、開始時に Fluent Bit がConfigMap
を解析しないか、受け付けないためです。
Fluent Bit プロセスログの送信を停止するには
Fluent Bit プロセスログを CloudWatch に送信するには、追加のログの取り込みおよびストレージのコストがかかります。既存の ConfigMap
設定でプロセスログを除外するには、次のステップを実行します。
-
Fargate ログ記録を有効にした後、Amazon EKS クラスターの Fluent Bit プロセスログ用に自動的に作成された CloudWatch ロググループを見つけます。これはフォーマット
{cluster_name}-fluent-bit-logs
に従います。 -
CloudWatch ロググループ内の各 Pod's のプロセスログ用に作成された既存の CloudWatch ログストリームを削除します。
-
ConfigMap
を編集してflb_log_cw: "false"
を設定します。 -
クラスター内の既存の Pods を再起動します。
アプリケーションをテストする
-
サンプル Pod をデプロイします。
-
次の内容をコンピュータ上の
という名前のファイルに保存します。sample-app
.yamlapiVersion: 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 -
マニフェストをクラスターに適用します。
kubectl apply -f
sample-app
.yaml
-
-
ConfigMap
で設定した送信先を使用して、NGINX ログを表示します。
サイズに関する考慮事項
ログルーター用のメモリは、最大 50 MBに収まるようにすることをお勧めします。アプリケーションで非常に高いスループットでログが生成されることが予想される場合は、最大 100 MB を想定して計画する必要があります。
トラブルシューティング
ログ記録の機能が有効か無効かを確認するには、Pod イベントを
でチェックしてください。kubectl describe pod
pod_name
ConfigMap
が無効になっているなど何らかの理由で無効の場合は、その理由を確認できます。出力には、次の出力例のように、ログ記録が有効かどうかを明確にする Pod イベントが含まれる場合があります。
[...]
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
Pod イベントは一時的なもので、その期間は設定によります。
を使用して、Pod's アノテーションを表示することもできます。Pod アノテーションには、ログ記録機能が有効か無効か、またその理由に関する情報があります。kubectl describe pod
pod-name