- 필수 기능
- 시작하기
- Glossary
- 표준 속성
- Guides
- Agent
- 통합
- 개방형텔레메트리
- 개발자
- API
- Datadog Mobile App
- CoScreen
- Cloudcraft
- 앱 내
- 서비스 관리
- 인프라스트럭처
- 애플리케이션 성능
- APM
- Continuous Profiler
- 스팬 시각화
- 데이터 스트림 모니터링
- 데이터 작업 모니터링
- 디지털 경험
- 소프트웨어 제공
- 보안
- AI Observability
- 로그 관리
- 관리
EKS 기반 AWS Fargate는 쿠버네티스(Kubernetes) 워크로드 실행을 위한 완전관리형 환경을 제공합니다. Kinesis Data Firehose를 EKS의 Fluent Bit 로그 라우터와 함께 사용하여 Datadog에서 로그를 수집할 수 있습니다. 이 가이드에서는 Kinesis Data Firehose를 통해 전달되는 로그 및 클라우드와치(CloudWatch) 로그를 비교하고 Kinesis Data Firehose를 통해 Datadog에 로그를 전송하는 샘플 EKS Fargate 애플리케이션을 살펴봅니다.
다음은 Kinesis Data Firehose 사용과 클라우드와치 로그 전달 사용 간의 주요 차이점입니다.
메타데이터 및 태깅: Kinesis Data Firehose를 사용해 로그를 전송할 때 쿠버네티스(Kubernetes) 네임스페이스 및 컨테이너 ID 등 메타데이터는 구조화된 속성으로 액세스 가능합니다.
AWS 비용: AWS 비용은 개별 사용 사례에 따라 다를 수 있지만 Kinesis Data Firehose 수집은 일반적으로 유사한 클라우드와치 로그 수집보다 저렴합니다.
kubectl
, aws
.fargate-namespace
네임스페이스에 적용된 fargate-profile
Fargate 프로필을 사용하여 클러스터 이름 fargate-cluster
을 지정합니다. 이러한 리소스가 아직 없는 경우 Amazon EKS 시작하기를 사용하여 클러스터를 생성하고 Amazon EKS를 사용하여 AWS Fargate 시작하기를 사용하여 Fargate 프로필 및 포드 실행 역할을 생성합니다.다음 단계에서는 Fluent Bit 및 Kinesis Data Firehose 전송 스트림을 통해 EKS 클러스터에 배포된 샘플 애플리케이션의 로그를 Datadog으로 전송하는 프로세스를 간략하게 설명합니다. Datadog의 표준 쿠버네티스 태그와의 일관성을 최대화하기 위해 선택한 속성을 태그 키에 다시 매핑하라는 지침이 포함되어 있습니다.
container_id
태그를 사용하여 상관관계를 설정합니다.KiDatadog Kinesis Firehose 목적지로 AWS 서비스 로그 전송하기 가이드를 참조하여 Kinesis Firehose Delivery 스트림을 설정하세요.
참고: 소스**를 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
를 사용해 ConfigMap 매니페스트를 적용합니다.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 포드 실행 역할을 검색하고 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
sample-app
포드에 fargate-namespace
네임스페이스가 실행되고 있는지 확인합니다. 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
를 선택하여 Kinesis Data Firehose에서 로그에 대해 필터링합니다.이 설정의 로그에는 Datadog의 표준 Kubernetes 태그와의 일관성을 최대화하기 위해 일부 속성을 다시 매핑하는 작업이 필요합니다.
Datadog 로그 파이프라인 페이지로 이동합니다.
Name EKS Fargate Log Pipeline
및 Filter service:aws source:aws
를 사용하여 새 파이프라인을 생성합니다.
리매퍼 프로세서 4개를 생성하여 다음 속성을 태그 키에 다시 매핑합니다.
다시 매핑할 속성 | 대상 태그 키 |
---|---|
kubernetes.container_name | kube_container_name |
kubernetes.namespace_name | kube_namespace |
kubernetes.pod_name | pod_name |
kubernetes.docker_id | container_id |
이 파이프라인을 생성한 후, 샘플 앱에서 내보낸 로그는 이 예와 같이 태깅됩니다. 쿠버네티스 태그에 다시 매핑된 로그 속성을 포함하게 됩니다.
추가 유용한 문서, 링크 및 기사: