Ssoon
[4주차] EKS Observability - ADOT, AMP 및 AMG를 사용한 모니터링 본문
CloudNet@ 팀의 AWS EKS Workshop Study 4주차 정리입니다.
# EKS Immersion Workshop 의 내용입니다.
ADOT (AWS Distro for Open Telemetry)
- 안전한 AWS 지원 Open Telemetry 프로젝트 배포판입니다.
- CNCF(Cloud Native Computing Foundation)의 일부인 Open Telemetry는 오픈 소스 API, 라이브러리 및 에이전트를 제공하여 애플리케이션 모니터링을 위한 분산 추적 및 메트릭을 수집합니다.
- ADOT를 사용하면 애플리케이션을 한 번만 계측하여 여러 AWS 및 파트너 모니터링 솔루션에 상관된 지표 및 추적을 보낼 수 있습니다.
AMP (Amazon Managed Service for Prometheus)
- 컨테이너화된 애플리케이션과 인프라를 대규모로 쉽게 모니터링할 수 있게 해주는 Prometheus 호환 모니터링 및 알림 서비스입니다.
- Cloud Native Computing Foundation의 Prometheus 프로젝트는 컨테이너 환경에 최적화된 인기 있는 오픈 소스 모니터링 및 알림 솔루션입니다.
- AMP를 사용하면 기본 인프라를 확장하고 운영할 필요 없이 오픈 소스 PromQL(Prometheus 쿼리 언어)을 사용하여 컨테이너화된 워크로드의 성능을 모니터링하고 경고할 수 있습니다.
- Amazon Managed Service for Prometheus는 워크로드가 증가하거나 감소함에 따라 수집, 저장, 경고 및 운영 지표 쿼리를 자동으로 확장하고 AWS 보안 서비스와 통합되어 데이터에 빠르고 안전하게 액세스할 수 있습니다.
AMG (Amazon Managed Grafana)
- Grafana Labs와 공동으로 개발한 오픈 소스 Grafana용 완전관리형 서비스입니다.
- Grafana는 메트릭이 저장된 위치에 관계없이 쿼리, 시각화, 경고 및 이해할 수 있는 인기 있는 오픈 소스 분석 플랫폼입니다.
- AMG를 사용하면 서버를 프로비저닝하거나, 소프트웨어를 구성 및 업데이트하거나, 프로덕션에서 Grafana 보안 및 확장과 관련된 무거운 작업을 수행하지 않고도 메트릭, 로그 및 추적을 분석할 수 있습니다.
ADOT 수집기를 사용하여 마이크로 서비스를 모니터링하고 메트릭을 AMP로 내보내고 AMG를 사용하여 시각화하는 방법을 살펴봅니다. 수행할 주요 단계는 다음과 같습니다.
- AMP 작업 공간 만들기
- EKS 클러스터에 ADOT 수집기 설치
- 제품 카탈로그 애플리케이션 마이크로서비스를 배포합니다(아직 배포하지 않은 경우 배포).
- AMP에서 측정항목을 시각화하기 위해 AMG 작업공간을 생성합니다.
사전 요구 사항
- Git 설치가 되어있는지 확인합니다.
- 환경 변수를 설정합니다.
export EKS_CLUSTER_NAME=`eksctl get cluster|awk '{print $1}'|tail -1`
export AWS_REGION=`eksctl get cluster|awk '{print $2}'|tail -1`
export ACCOUNT_ID=`aws sts get-caller-identity|grep "Arn"|cut -d':' -f6`
[ AMP 설치 ]
AMP 작업 공간 만들기
- Amazon Managed Service for Prometeus(AMP) 작업 공간을 생성합니다.
aws amp create-workspace --alias adot-eks --tags env=workshop
IRSA 설정
- Cloudformation을 사용하여 prometeus라는 네임스페이스를 생성합니다.
- amp-irsa-role이라는 서비스 계정을 생성합니다.
- AmazonPrometeusRemoteWriteAccess 정책이 연결된 새 IAM 역할을 생성합니다.
- EKS 클러스터의 IAM OpenID Connect 공급자(OIDC)와 생성된 서비스 계정 간에 신뢰 정책을 생성합니다.
eksctl create iamserviceaccount \
--name amp-irsa-role \
--namespace prometheus \
--cluster $EKS_CLUSTER_NAME \
--attach-policy-arn arn:aws:iam::aws:policy/AmazonPrometheusRemoteWriteAccess \
--approve \
--override-existing-serviceaccounts
인증서관리자 설치
- ADOT Operator에서 해당 작업(예: pods에 사이드카를 삽입하기 위해 webhook 호출 등)에 사용되며 제대로 작동하는 데 필요합니다.
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.2/cert-manager.yaml
[ ADOT 추가 기능 설치 ]
ADOT 추가 기능 설치
- ADOT를 설치할 수 있는 권한을 Amazon EKS 추가 기능에 부여합니다.
kubectl apply -f https://amazon-eks.s3.amazonaws.com/docs/addons-otel-permissions.yaml
- ADOT 추가 기능을 설치합니다.
aws eks create-addon \
--addon-name adot \
--addon-version v0.74.0-eksbuild.1 \
--cluster-name $EKS_CLUSTER_NAME
aws eks describe-addon --addon-name adot --cluster-name $EKS_CLUSTER_NAME | jq .addon.status
OTel Collector CR(사용자 지정 리소스) 설치
WORKSPACE_ID=$(aws amp list-workspaces --alias adot-eks | jq '.workspaces[0].workspaceId' -r)
AMP_ENDPOINT_URL=$(aws amp describe-workspace --workspace-id $WORKSPACE_ID | jq '.workspace.prometheusEndpoint' -r)
AMP_REMOTE_WRITE_URL=${AMP_ENDPOINT_URL}api/v1/remote_write
curl -O https://raw.githubusercontent.com/aws-containers/eks-app-mesh-polyglot-demo/master/workshop/otel-collector-config.yaml
sed -i -e s/AWS_REGION/$AWS_REGION/g otel-collector-config.yaml
sed -i -e s^AMP_WORKSPACE_URL^$AMP_REMOTE_WRITE_URL^g otel-collector-config.yaml
kubectl apply -f ./otel-collector-config.yaml
- 설정을 확인합니다.
AMP 메트릭 확인
- 계측된 원격 분석 데이터가 AMP로 내보내졌는지 확인을 위해 awscurl을 유틸리티로 설치합니다.
pip install awscurl==0.26
- 스크래핑 메트릭을 위한 AMP URL을 시도합니다.
[ AMG 설치 ]
AMG workspace 생성
- Grafana용 Amazon Managed 서비스를 사용하여 내보낸 원격 측정 데이터를 시각화하는 작업
- AMG에 대한 IAM 역할을 생성합니다
aws iam create-role --role-name adot-grafana-role --assume-role-policy-document file://grafana_trust_policy.json
aws iam put-role-policy --role-name adot-grafana-role --policy-name amg-amp-policy --policy-document file://policy.json
- 새 AMG woekspace 을 생성합니다.
RESULT=$(aws grafana create-workspace --account-access-type="CURRENT_ACCOUNT" --authentication-providers "SAML" --permission-type "CUSTOMER_MANAGED" --workspace-name "${EKS_CLUSTER_NAME}-amg" --workspace-role-arn "adot-grafana-role")
export AMG_WORKSPACE_ID=$(jq -r .workspace.id <<< $RESULT)
while true; do
STATUS=$(aws grafana describe-workspace --workspace-id $AMG_WORKSPACE_ID | jq -r .workspace.status)
if [[ "${STATUS}" == "ACTIVE" ]]; then break; fi
sleep 1
echo -n '.'
done
export AMG_WORKSPACE_ENDPOINT=$(aws grafana describe-workspace --workspace-id $AMG_WORKSPACE_ID | jq -r .workspace.endpoint)
[ SAML 공급자 구성 ]
- Okta 개발자 계정을 생성하고 접속한 후 Okta 애플리케이션 메뉴로 이동하여 Amazon Managed Grafana에 대한 애플리케이션 통합을 생성합니다.
- 검색 창에서 Amazon Managed Grafana를 찾아 Amazon Managed Grafana(SAML) 옵션을 선택합니다.
- "Add Integration"를 클릭합니다. "General Settings"을 확인하고 "Done"를 클릭합니다.
- Okta에서 Amazon Managed Grafana 애플리케이션 구성의 "Sign On" 탭으로 이동합니다.
- "Edit" > Attributes 을 클릭하고 아래와 같이 정보를 입력합니다.
- “Advanced settings”에서 아래와 같이 “Name space”와 “Region”을 콘솔정보를 확인하여 입력합니다.
- 저장을 클릭하고 "Directory → People" 으로 이동합니다.
- 사용자를 선택하고 프로필 탭으로 이동하여 사용자 속성을 편집합니다.
- "User type" 을 "Admin" 로 설정합니다.
- 새로 구성된 애플리케이션의 Assignment 탭으로 이동하고 "Assign to People" 을 사용하여 이 애플리케이션을 사용자에게 할당합니다.
- AWS Managed Grafana 콘솔로 돌아가 인증 → SAML(Securty Assertion Markup Language) 섹션에서 "설정 완료"를 클릭합니다.
- 복사한 메타데이터 URL을 붙여넣습니다.
- 3단계에서 "어설션 속성 역할"을 "userType"으로, 관리자 역할 값을 Admin으로 입력하고 "SAML 구성 저장"을 클릭합니다.
- SAML 설정이 완료되면 Grafana 작업 공간 URL을 클릭합니다.
- 유저 정보 확인
서울리전이 없네요!
Amazon Managed Service for Prometheus 지원되는 리전
※ 다음에 다른 리전이나 서울리전이 지원되면 업데이트 예정
'AWS EKS Workshop Study' 카테고리의 다른 글
[5주차] EKS Autoscaling - Cluster Autoscaler (CA) (0) | 2023.05.21 |
---|---|
[5주차] EKS Autoscaling - Horizontal Pod AutoScaler (HPA) (0) | 2023.05.21 |
[4주차] EKS Observability - Logs, Traces and Metrics (0) | 2023.05.20 |
[3주차] EKS 스토리지 - FSx for Lustre CSI driver (0) | 2023.05.12 |
[3주차] EKS 스토리지 - EFS CSI driver (0) | 2023.05.12 |
Comments