Ssoon

[4주차] EKS Observability - ADOT, AMP 및 AMG를 사용한 모니터링 본문

AWS EKS Workshop Study

[4주차] EKS Observability - ADOT, AMP 및 AMG를 사용한 모니터링

구구달스 2023. 5. 20. 08:04
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 지원되는 리전

다음에 다른 리전이나 서울리전이 지원되면 업데이트 예정

Comments