본문 바로가기

DevOps

[AWS EKS] (10) EKS 스터디 4주차 ( Control-plane )

CloudNet@팀의 EKS 스터디 AEWS 2기에 작성된 자료를 토대로 작성합니다.

 

Control-plane 로깅 

 

Control Plane logging 

😍 Addon 으로 ClusterWatch를  EKS와 함께 사용 할 수 있습니다.

  • 로그는 CloudWatch의 각 Amazon EKS 클러스터에 대한 로그 스트림으로 그룹으로 전송
  • AWS 관리 콘솔, AWS CLI(버전 1.16.139 이상) 또는 Amazon EKS API를 사용하여 클러스터별로 각 로그 유형을 활성화 또는 비활성화
  • Amazon EKS 컨트롤 플레인 로깅을 사용하는 경우, 실행하는 각 클러스터에 대한 표준 Amazon EKS 요금과 클러스터에서 CloudWatch Logs로 전송되는 모든 로그에 대한 표준 CloudWatch Logs 데이터 수집 및 저장 비용이 청구
  • 비싸서 오픈소스를 마니 씀 (Opensearch)

 

1. control-plane logging 활성화 

# 모든 로깅 활성화
aws eks update-cluster-config --region ap-northeast-2 --name $CLUSTER_NAME \
    --logging '{"clusterLogging":[{"types":["api","audit","authenticator","controllerManager","scheduler"],"enabled":true}]}'

# 로그 그룹 확인
aws logs describe-log-groups | jq

# 로그 tail 확인 : aws logs tail help
aws logs tail /aws/eks/$CLUSTER_NAME/cluster | more

# 신규 로그를 바로 출력
aws logs tail /aws/eks/$CLUSTER_NAME/cluster --follow

# 필터 패턴
aws logs tail /aws/eks/$CLUSTER_NAME/cluster --filter-pattern <필터 패턴>

# 로그 스트림이름
aws logs tail /aws/eks/$CLUSTER_NAME/cluster --log-stream-name-prefix <로그 스트림 prefix> --follow
aws logs tail /aws/eks/$CLUSTER_NAME/cluster --log-stream-name-prefix kube-apiserver --follow
aws logs tail /aws/eks/$CLUSTER_NAME/cluster --log-stream-name-prefix kube-apiserver-audit --follow
aws logs tail /aws/eks/$CLUSTER_NAME/cluster --log-stream-name-prefix kube-scheduler --follow
aws logs tail /aws/eks/$CLUSTER_NAME/cluster --log-stream-name-prefix authenticator --follow
aws logs tail /aws/eks/$CLUSTER_NAME/cluster --log-stream-name-prefix kube-controller-manager --follow
aws logs tail /aws/eks/$CLUSTER_NAME/cluster --log-stream-name-prefix cloud-controller-manager --follow
kubectl scale deployment -n kube-system coredns --replicas=1
kubectl scale deployment -n kube-system coredns --replicas=2

# 시간 지정: 1초(s) 1분(m) 1시간(h) 하루(d) 한주(w)
aws logs tail /aws/eks/$CLUSTER_NAME/cluster --since 1h30m

# 짧게 출력
aws logs tail /aws/eks/$CLUSTER_NAME/cluster --since 1h30m --format short

 

2. api 서버 로깅 

aws logs tail /aws/eks/$CLUSTER_NAME/cluster --log-stream-name-prefix kube-apiserver --follow

 

 

다음과 같은 로그 정보가 왜 중요할까요? 

  • 예를 들어서, 프로메테우스에 kube-API-server 404 error의 수치가 높아지게 되면 알람을 받게 됩니다. 그럼 다음과 같이 EKS logging(controlplane)을 활용하던지 아니면 EFK와 같이 로그 저장하고 시각화 하는 솔루션들을 사용해서 해당 수치가 어떻게 높아졌는지를 확인할수 있습니다.

3. CloudWatch 사용법 

  • 그룹에 여러 개의 로그 스트림이 표시

로그 스트림 중 하나를 선택하면 EKS 제어 플레인에서 CloudWatch Logs로 전송되는 항목 확인

 

✅    Cloudwatch Log insight 실습하기                                                                                                                                            

  • CloudWatch 로그 인사이트를 사용하면 CloudWatch 로그에서 로그 데이터를 대화형으로 검색하고 분석
  • 쿼리를 수행하여 운영 문제에 보다 효율적이고 효과적으로 
  • 문제가 발생하면 CloudWatch 로그 인사이트를 사용하여 잠재적인 원인을 파악하고 배포된 수정 사항을 검증

# kube-apiserver-audit 로그에서 userAgent 정렬해서 아래 4개 필드 정보 검색
fields userAgent, requestURI, @timestamp, @message
| filter @logStream ~= "kube-apiserver-audit"
| stats count(userAgent) as count by userAgent
| sort count desc
  1. fields userAgent, requestURI, @timestamp, @message:
    • 반환할 필드를 지정하는 부분
    • 사용자 에이전트(UserAgent), 요청 URI(requestURI), 타임스탬프(@timestamp), 및 로그 메시지(@message)를 선택
  2. | filter @logStream ~= "kube-apiserver-audit":
    • 로그 스트림 필터링을 수행하는 부분
    • 로그 스트림 이름에 "kube-apiserver-audit"가 포함된 로그만 필터링하여 해당 로그만을 분석
  3. | stats count(userAgent) as count by userAgent:
    • 사용자 에이전트별로 요청 횟수를 계산하는 부분
    • count(userAgent)는 각 사용자 에이전트의 등장 횟수를 세는 것을 의미하며, as count를 사용하여 이를 count라는 이름으로 별칭을 지정
    • by userAgent는 사용자 에이전트별로 결과를 그룹화하는 것을 의미
  4. | sort count desc:
    • 결과를 요청 횟수(count)에 따라 내림차순으로 정렬
    • 가장 많이 사용된 사용자 에이전트가 상단에 나열