- 重要な情報
- はじめに
- 用語集
- ガイド
- エージェント
- インテグレーション
- OpenTelemetry
- 開発者
- API
- CoScreen
- アプリ内
- Service Management
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
AWS Fargate on EKS は、Kubernetes ワークロードを実行するためのフルマネージドエクスペリエンスを提供します。Kinesis Data Firehose は、EKS の Fluent Bit ログルーターと併用することで、Datadog でログを収集することができます。このガイドでは、Kinesis Data Firehose と CloudWatch ログによるログ転送の比較、および Kinesis Data Firehose を通じて Datadog にログを送信する EKS Fargate アプリケーションのサンプルについて説明します。
Kinesis Data Firehose と CloudWatch のログ転送を使用した場合の主な違いは以下の通りです。
メタデータとタグ付け: Kinesis Data Firehose でログを送信する際に、Kubernetes ネームスペースやコンテナ ID などのメタデータを構造化された属性としてアクセスできます。
AWS のコスト: AWS のコストは個々のユースケースによって異なりますが、Kinesis Data Firehose の取り込みは、同等の Cloudwatch Log の取り込みよりも一般的に安価です。
kubectl
と aws
のコマンドラインツールを使用します。fargate-cluster
という名前で、fargate-profile
という名前の Fargate プロファイルが fargate-namespace
というネームスペースに適用されているものとします。これらのリソースがまだない場合は、Amazon EKS の概要でクラスターを作成し、Amazon EKS を使った AWS Fargate の概要で Fargate プロファイルとポッドの実行ロールを作成します。以下の手順は、Fluent Bit と Kinesis Data Firehose デリバリーストリームを通じて、EKS クラスターにデプロイされたサンプルアプリケーションから Datadog にログを送信するプロセスの概要を説明するものです。Datadog の標準的な Kubernetes タグとの一貫性を最大化するために、選択した属性をタグキーに再マップする手順も含まれています。
container_id
タグを使った相関のために、リマッパープロセッサーの適用を行います。Kinesis Firehose Delivery の設定方法は、Datadog Kinesis Firehose の宛先を使用して AWS サービスログを送信するのガイドをご参照ください。
注: Source を Direct PUT
に設定します。
aws-observability
ネームスペースを作成します。kubectl create namespace aws-observability
aws-logging-configmap.yaml
として作成します。配信ストリームの名前を代入してください。apiVersion: v1
kind: ConfigMap
metadata:
name: aws-logging
namespace: aws-observability
data:
filters.conf: |
[FILTER]
Name kubernetes
Match kube.*
Merge_Log On
Buffer_Size 0
Kube_Meta_Cache_TTL 300s
flb_log_cw: 'true'
output.conf: |
[OUTPUT]
Name kinesis_firehose
Match kube.*
region <REGION>
delivery_stream <YOUR-DELIVERY-STREAM-NAME>
kubectl
を使用します。kubectl apply -f aws-logging-configmap.yaml
allow_kinesis_put_permission.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"firehose:PutRecord",
"firehose:PutRecordBatch"
],
"Resource":
"arn:aws:firehose:<REGION>:<ACCOUNTID>:deliverystream/<DELIVERY-STREAM-NAME>"
}
]
}
a. ポリシーを作成します。
aws iam create-policy \
--policy-name FluentBitEKSFargate \
--policy-document file://allow_kinesis_put_permission.json
b. Fargate Pod Execution Role を取得し、IAM ポリシーをアタッチします。
POD_EXEC_ROLE=$(aws eks describe-fargate-profile \
--cluster-name fargate-cluster \
--fargate-profile-name fargate-profile \
--query 'fargateProfile.podExecutionRoleArn' --output text |cut -d '/' -f 2)
aws iam attach-role-policy \
--policy-arn arn:aws:iam::<ACCOUNTID>:policy/FluentBitEKSFargate \
--role-name $POD_EXEC_ROLE
ログを生成して Kinesis パイプラインをテストするには、EKS Fargate クラスターにサンプルワークロードをデプロイします。
sample-deployment.yaml
を作成します。sample-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-app
namespace: fargate-namespace
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
fargate-namespace
ネームスペースを作成します。 kubectl create namespace fargate-namespace
kubectl
を使用します。 kubectl apply -f sample-deployment.yaml
fargate-namespace
で sample-app
ポッドが動作していることを確認します。 kubectl get pods -n fargate-namespace
期待される出力:
NAME READY STATUS RESTARTS AGE
sample-app-6c8b449b8f-kq2qz 1/1 Running 0 3m56s
sample-app-6c8b449b8f-nn2w7 1/1 Running 0 3m56s
sample-app-6c8b449b8f-wzsjj 1/1 Running 0 3m56s
kubectl describe pod
を使用して、Fargate のログ機能が有効であることを確認します。 kubectl describe pod <POD-NAME> -n fargate-namespace |grep Logging
期待される出力:
Logging: LoggingEnabled
Normal LoggingEnabled 5m fargate-scheduler Successfully enabled logging for pod
kubectl logs -l app=nginx -n fargate-namespace
期待される出力:
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2023/01/27 16:53:42 [notice] 1#1: using the "epoll" event method
2023/01/27 16:53:42 [notice] 1#1: nginx/1.23.3
2023/01/27 16:53:42 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2023/01/27 16:53:42 [notice] 1#1: OS: Linux 4.14.294-220.533.amzn2.x86_64
2023/01/27 16:53:42 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1024:65535
2023/01/27 16:53:42 [notice] 1#1: start worker processes
...
source:aws
を選択します。この構成からのログは、Datadog の標準的な Kubernetes タグとの一貫性を最大化するために、いくつかの属性をリマップする必要があります。
Datadog Log Pipelines のページに移動します。
Name EKS Fargate Log Pipeline
と Filter service:aws source:aws
で新しいパイプラインを作成します。
以下の属性をタグキーにリマップするための Remapper プロセッサーを 4 つ作成します。
リマップする属性 | ターゲットタグキー |
---|---|
kubernetes.container_name | kube_container_name |
kubernetes.namespace_name | kube_namespace |
kubernetes.pod_name | pod_name |
kubernetes.docker_id | container_id |
このパイプラインを作成すると、サンプルアプリが出力するログは、この例のようにログ属性が Kubernetes タグにリマップされてタグ付けされるようになります。
お役に立つドキュメント、リンクや記事: