
사전 준비 : AWS 계정, SSH 키 페어, IAM 계정 생성 후 키
최종 구성도 : 2개의 VPC(EKS 배포, 운영용 구분), 운영서버 EC2, 워커노드 t3.xlarge
출처 : AEWS 스터디 3기
| 대상 | 내용 |
|---|---|
| 주요 활동 | CPU/ Memory 사용량, 응답시간, 오류율 등의 특정 지표를 지속적으로 측정 |
| 목적 | 시스템 다운타임 방지, 경고를 통하여 빠르게 대응할 수 있도록 함 |
| 빈도 | 연속적 이거나 일정 간격 (일,주,월간)으로 수행 |
| 대상 | 내용 |
|---|---|
| 핵심 데이터 | 로그 (이벤트 기록), 메트릭 (수치 데이터), 트레이스 (요청 흐름 추적), 이벤트 |
| 목적 | 복잡한 분산 시스템에서 문제를 진단, 새로운 문제를 탐지, 시스템 동작을 최적화 |
| 측면 | Monitoring | Observability |
|---|---|---|
| 정의 | 특정 메트릭 추적으로 문제 감지 | 외부 출력 데이터로 시스템 상태 이해 |
| 목표 | 문제 발생 시 감지 및 경고 | 문제 원인 진단 및 시스템 최적화 |
| 데이터 소스 | 미리 정의된 메트릭 (CPU, 메모리 등) | 로그, 메트릭, 트레이스, 이벤트 등 |
| 시스템 유형 | 단순한 시스템, 잘 알려진 파라미터 | 복잡한 분산 시스템, 다중 컴포넌트 |
| 상호작용 방식 | 정적 경고 (임계값 기반) | 동적 쿼리 및 분석 (질문 기반) |
| 비교 항목 | SLI (서비스 수준 지표) | SLO (서비스 수준 목표) | SLA (서비스 수준 계약) |
|---|---|---|---|
| 정의 | 서비스 성능을 측정하는 실제 값 | 유지해야 하는 성능 목표 | 고객과 맺은 공식 계약 |
| 목적 | 현재 서비스 상태를 모니터링 | 내부적으로 목표 수준을 설정 | 고객과의 계약 보장 |
| 예제 | 99.95%의 가용성 | 99.9% 이상의 가용성 목표 | 99.9% 미만이면 환불 제공 |
| 법적 구속력 | 없음 | 없음 | 있음 |
| 위반 시 결과 | 단순 데이터 측정 | 내부 경고 및 개선 조치 | 보상금 지급, 계약 위반 가능 |
k8s API를 통하여 리소스 및 정보를 확인 할수 있음 - Docs permissions
kubectl get ClusterRole | grep eks


api) – kube-apiserver-<nnn...>audit) – kube-apiserver-audit-<nnn...>authenticator) – authenticator-<nnn...>controllerManager) – kube-controller-manager-<nnn...>scheduler) – kube-scheduler-<nnn...> # 모든 로깅 활성화
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 
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 --filter-pattern kube-apiserver 
# 로그 스트림이름
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 
aws logs tail /aws/eks/$CLUSTER_NAME/cluster --since 1h30maws logs tail /aws/eks/$CLUSTER_NAME/cluster --since 1h30m --format short 
AWS Console 에 접속 후 CloudWatch > Log > LogInsight 매뉴 클릭
로그 그룹 선택 후 Run query

# EC2 Instance가 NodeNotRea
fields @timestamp, @message
| filter @message like /NodeNotReady/
| sort @timestamp desc 
fields userAgent, requestURI, @timestamp, @message
| filter @logStream ~= "kube-apiserver-audit"
| stats count(userAgent) as count by userAgent
| sort count desc 
fields @timestamp, @message
| filter @logStream ~= "kube-scheduler"
| sort @timestamp desc 
fields @timestamp, @message
| filter @logStream ~= "authenticator"
| sort @timestamp desc

fields @timestamp, @message
| filter @logStream ~= "kube-controller-manager"
| sort @timestamp desc 
# EKS Control Plane 로깅(CloudWatch Logs) 비활성화
eksctl utils update-cluster-logging --cluster $CLUSTER_NAME --region ap-northeast-2 --disable-types all --approve
# 로그 그룹 삭제
aws logs delete-log-group --log-group-name /aws/eks/$CLUSTER_NAME/cluster# NGINX 웹서버 배포
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update# 도메인, 인증서 확인
echo $MyDomain $CERT_ARN 
# 파라미터 파일 생성
cat <<EOT > nginx-values.yaml
service:
type: NodePort
networkPolicy:
enabled: false
resourcesPreset: "nano"
ingress:
enabled: true
ingressClassName: alb
hostname: nginx.$MyDomain
pathType: Prefix
path: /
annotations:
alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
alb.ingress.kubernetes.io/group.name: study
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
alb.ingress.kubernetes.io/load-balancer-name: $CLUSTER_NAME-ingress-alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/ssl-redirect: "443"
alb.ingress.kubernetes.io/success-codes: 200-399
alb.ingress.kubernetes.io/target-type: ip
EOTcat nginx-values.yaml 
**helm install nginx bitnami/nginx --version 19.0.0 -f nginx-values.yaml**# 확인
kubectl get ingress,deploy,svc,ep nginx
kubectl describe deploy nginx # Resource - Limits/Requests 확인
kubectl get targetgroupbindings # ALB TG 확인 
echo -e "Nginx WebServer URL = https://nginx.$MyDomain"