연재 시리즈

EKS 스터디 - 4주차 2편 - pod로깅

악분 2023. 5. 7. 18:34
반응형

pod로깅이란?

pod로깅은 data plane 노드 로그와 노드에서 실행 중인 pod로그를 말합니다. pod로깅은 EKS설정을 지원하지 않습니다. 사용자가 도구를 선택해서 pod로그 수집과 저장 해야 합니다. AWS공식문서에서는 Fluentbit또는 FlunetD 사용하여 pod 수집하고 cloudwatch 전송하는 예제를 제공합니다

fargate는 eks 공식문서를 참조하시길 바랍니다.

설치방법

IAM  policy 설정

worker node IAM role “CloudWatchAgentServerPolicy” policy 부여해야합니다. worker node cloudwatch 접근할 권한이 필요합니다.

 

worker node IAM role [EKS 대시보드 -> compute]에서 설정할 있습니다.

 

node group 선택하고 IAM role 클릭합니다.

 

CloudWatchAgentServerPolicy IAM policy 추가합니다.

 

fluentbit 설치

AWS 에서 제공하는 fluentbit manifest 생성합니다.

 

먼저 namespace를 생성합니다.

# namespace생성
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml

 

그 다음 configmap을 생성합니다.

# configmap생성
ClusterName=cluster-name
RegionName=cluster-region
FluentBitHttpPort='2020'
FluentBitReadFromHead='Off'
[[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On'
[[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || FluentBitHttpServer='On'
kubectl create configmap fluent-bit-cluster-info \
--from-literal=cluster.name=${ClusterName} \
--from-literal=http.server=${FluentBitHttpServer} \
--from-literal=http.port=${FluentBitHttpPort} \
--from-literal=read.head=${FluentBitReadFromHead} \
--from-literal=read.tail=${FluentBitReadFromTail} \
--from-literal=logs.region=${RegionName} -n amazon-cloudwatch

 

마지막으로 fluenetbit를 생성합니다.

# fluenetbit 생성
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit.yaml

 

설치확인

fluentbit 생성하면 amazon-cloudwatch namespace 생성되고 쿠버네티스 리소스가 생성됩니다. 아래 예제는 worker node가 1개여서 pod도 1개만 생성되었습니다.

kubectl -n amazon-cloudwatch get ds,po,configmap

 

fluentbit pod로그를 조회할 오류가 없어야 합니다. 만약 오류가 있다면 IAM policy 올바르게 추가되었는지 확인해보세요.

kubectl -n amazon-cloudwatch logs -l k8s-app=fluent-bit -f

 

AWS cloudwatch에서는 fluenetbit 전송한 pod로그가 보입니다.

 

configmap설정 살펴보기

AWS공식문서에서 제공하는 manifest configmap으로 fluenetbit설정을 했습니다. configmap에는 EKS pod로그와 worker node 정보를 수집하고 cloudwatch 전송하는 설정이 있습니다. pod 속한 컨테이너 로그는 pod 실행하는 worker node 특정경로(/var/log/conatiners/) 저장됩니다. fluenetbit 해당 경로에 있는 로그를 전부 수집합니다.

 

pod로그 확인 예제

1초마다 hello world문자열을 출력하는 pod 배포하고 cloudwatch 보이는지 확인해보겠습니다. 아래 manifest 갖는 pod 배포합니다.

apiVersion: v1
kind: Pod
metadata:
  name: busybox-pod
spec:
  containers:
  - name: busybox
    image: busybox
    resources:
      requests:
        cpu: "100m"
        memory: "64Mi"
      limits:
        cpu: "100m"
        memory: "64Mi"
    args:
    - /bin/sh
    - -c
    - >
      while true; do
        echo "Hello World!";
        sleep 1;
      done

 

그리고 cloudwatch 확인하면 busybox log stream 보입니다. logstream이름이 busybox 이유는, pod이름이 busybox이기 때문입니다. log stream 클릭하여 로그를 확인하면 hello world문자열이 보입니다.

 

log insight 확인하면 시간대별로 쌓인 pod로그를 있습니다.

 

참고자료

  1. aws fluentbit 설치 공식문서: https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html#Container-Insights-FluentBit-setup
  2. eks workshop: https://www.eksworkshop.com/docs/observability/logging/pod-logging/

이하여백

반응형