Fargate ログ記録
Fargate の Amazon EKS では、Fluent Bit をベースにした組み込みのログルーターが利用できます。Fluent Bit コンテナをサイドカーとして明示的に実行する必要はなく、この実行は Amazon によって行われます。必要となるのは、ログルーターの設定だけです。設定は専用の ConfigMap
を介して行い、その際は以下の基準を満たす必要があります。
-
名前のついた
aws-logging
-
aws-observability
と呼ばれる専用の名前空間での作成
ConfigMap
を作成すると、Fargate の Amazon EKS は自動的にそれを検出しログルーターの設定を行います。Fargate は、Fluent Bit の AWS のバージョンを使用しています。これは、AWS によって管理される Fluent Bit の上流対応のディストリビューションです。詳細については、GitHub の「AWS for Fluent Bit
ログルーターを使用すると、AWS のさまざまなサービスをログの分析と保管に使用できます。Fargate からは、Amazon CloudWatch、Amazon OpenSearch Service に直接ログをストリーミングできます。また、Amazon Kinesis Data Firehose 経由で Amazon S3、Amazon Kinesis Data Streams、および パートナーツールなどの送信先に、ログをストリーミングすることも可能です。
前提条件
-
Fargate ポッドをデプロイする既存の Kubernetes 名前空間を指定する既存の Fargate プロファイル。詳細については、「クラスターの Fargate プロファイルを作成する」を参照してください。
-
既存の Fargate ポッドの実行ロール。詳細については、「Fargate ポッド実行ロールを作成する」を参照してください。
ログルーターの設定
ログルーターを設定するには
以下のステップでは、すべての
を独自の値に置き換えます。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
セクションを受け入れ、Service
およびInput
セクションは内部で管理します。 -
Parser
セクション。
Filter
、Output
、Parser
以外のセクションを指定すると、そのセクションは拒否されます。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
、およびkubernetes
。 -
ログ記録を有効にするには、サポートされている
Output
プラグインが少なくとも 1 つConfigMap
にあることが必要です。Filter
およびParser
は、ログ記録を有効にするために必要ありません。
また、希望の設定を使用して Amazon EC2 で Fluent Bit を実行し、検証によって発生する問題をトラブルシューティングすることもできます。以下のいずれかの例に従って、
ConfigMap
を作成します。重要 Amazon EKS Fargate のログ記録では、
ConfigMaps
での動的設定をサポートしていません。ConfigMaps
に対する任意の変更は、新しいポッドに対してのみ適用されます。既存のポッドには、これらの変更は適用されません。例を使用して、必要なログ送信先用に
ConfigMap
を作成します。 -
-
前のステップでダウンロードしたポリシー ファイルを使用して、IAM ポリシーを作成します。
aws iam create-policy --policy-name
eks-fargate-logging-policy
--policy-document file://permissions.json -
IAM ポリシーを、Fargate プロファイルに指定されたポッド実行ロールにアタッチします。
をアカウント ID に置き換えます。111122223333
aws iam attach-role-policy \ --policy-arn arn:aws:iam::
111122223333
:policy/eks-fargate-logging-policy
\ --role-nameyour-pod-execution-role
Kubernetes フィルターのサポート
この機能を利用するには、以下の最小限の Kubernetes バージョンとプラットフォームレベル、またはそれ以降が必要です。表に記載されているバージョンより後の Kubernetes とプラットフォームのバージョンがサポートされます。
Kubernetes バージョン | プラットフォームレベル |
---|---|
1.21 | eks.3 |
1.20 | eks.3 |
1.19 | eks.7 |
1.18 | eks.9 |
1.17 | eks.10 |
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
が指定されていない場合、Fluent Bit は API サーバーと通信して最新のメタデータを取得するため、Amazon EKS Fargate は API サーバーの負荷を軽減するためにデフォルト値である 30 分を追加します。
Fluent-bit プロセスログをアカウントに送付するには
Fluent Bit プロセスログは、以下の ConfigMap
を使用して Amazon 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 が起動に失敗するのは、通常、起動中にConfigMap
が Fluent Bit によって解析または受け入れられていないためです。
アプリケーションをテストする
-
サンプルポッドをデプロイします。
-
次の内容をコンピュータ上の
という名前のファイルに保存します。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 を想定して計画する必要があります。
トラブルシューティング
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