1. 소개
Eventarc를 사용하면 다양한 소스의 이벤트와 Google Cloud 서비스를 쉽게 연결할 수 있습니다. 마이크로서비스가 느슨하게 결합 및 분산된 이벤트 기반 아키텍처를 빌드할 수 있습니다. 또한 이벤트 수집, 전송, 보안, 승인, 오류 처리를 처리하여 개발자의 민첩성과 애플리케이션 복원력을 향상시킵니다.
Datadog는 클라우드 애플리케이션용 모니터링 및 보안 플랫폼입니다. 엔드 투 엔드 trace, 측정항목, 로그를 한데 모아 애플리케이션, 인프라, 서드 파티 서비스를 관측할 수 있도록 합니다.
워크플로는 워크플로라고 하는 정의된 순서대로 서비스를 실행하는 완전 관리형 조정 플랫폼입니다. 이러한 워크플로는 Cloud Run 또는 Cloud Functions에서 호스팅되는 서비스, Cloud Vision AI 및 BigQuery와 같은 Google Cloud 서비스와 HTTP 기반 API를 결합할 수 있습니다.
첫 번째 Codelab에서는 Eventarc를 사용하여 Datadog 모니터링 알림을 Google Cloud로 라우팅하는 방법을 알아봤습니다. 이 두 번째 Codelab에서는 Workflows를 사용하여 Datadog 모니터링 알림에 응답하는 방법을 알아봅니다. 구체적으로는 Compute Engine 가상 머신 2개를 만들고 Datadog 모니터를 사용하여 모니터링합니다. VM 중 1개가 삭제되면 Eventarc를 통해 Datadog에서 Workflows로 알림을 전송합니다. 그러면 Workflows에서 삭제된 VM을 다시 만들어 실행 중인 VM 수를 다시 2로 만듭니다.
학습할 내용
- Datadog의 Google Cloud 통합을 사용 설정하는 방법
- Compute Engine VM을 확인하고 만드는 워크플로를 만드는 방법
- Eventarc를 사용하여 Datadog 모니터링 알림을 Workflows에 연결하는 방법
- Datadog 모니터를 만들고 VM 삭제에 대해 알리는 방법
2. 설정 및 요구사항
자습형 환경 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.
- 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유해야 하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud Console은 고유한 문자열을 자동으로 생성합니다. 일반적으로 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID를 참조해야 하며(일반적으로
PROJECT_ID
로 식별됨), 마음에 들지 않는 경우 임의로 다시 생성하거나 직접 지정해서 사용할 수 있는지 확인하세요. 프로젝트가 생성되면 프로젝트 ID가 '고정'됩니다. - 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참조하세요.
- 다음으로 Cloud 리소스/API를 사용하려면 Cloud Console에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼을 마친 후 비용이 결제되지 않도록 리소스를 종료하려면 Codelab의 끝에 있는 '삭제' 안내를 따르세요. Google Cloud 새 사용자에게는 미화 $300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.
Cloud Shell 시작
Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.
Google Cloud Console의 오른쪽 상단 툴바에 있는 Cloud Shell 아이콘을 클릭합니다.
환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.
가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉토리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 실습의 모든 작업은 브라우저만으로 수행할 수 있습니다.
gcloud 설정
Cloud Shell에서 프로젝트 ID를 설정하고 PROJECT_ID
변수로 저장합니다.
또한 REGION
변수를 us-central1
로 설정합니다. 나중에 리소스를 만들 리전입니다.
PROJECT_ID=[YOUR-PROJECT-ID] REGION=us-central1 gcloud config set core/project $PROJECT_ID
API 사용 설정
필요한 모든 서비스를 사용 설정합니다.
gcloud services enable \ workflows.googleapis.com \ workflowexecutions.googleapis.com
3. Datadog 채널 확인
첫 번째 Codelab에서 만든 Datadog 채널이 활성 상태인지 확인합니다. Cloud Shell에서 다음 명령어를 실행하여 채널의 세부정보를 검색합니다.
CHANNEL_NAME=datadog-channel gcloud eventarc channels describe $CHANNEL_NAME --location $REGION
출력은 다음과 유사해야 합니다.
activationToken: so5g4Kdasda7y2MSasdaGn8njB2 createTime: '2022-03-09T09:53:42.428978603Z' name: projects/project-id/locations/us-central1/channels/datadog-channel provider: projects/project-id/locations/us-central1/providers/datadog pubsubTopic: projects/project-id/topics/eventarc-channel-us-central1-datadog-channel-077 state: ACTIVE uid: 183d3323-8cas-4e95-8d72-7d8c8b27cf9e updateTime: '2022-03-09T09:53:48.290217299Z'
Google Cloud 콘솔에서도 채널 상태를 확인할 수 있습니다.
채널 상태는 ACTIVE
이어야 합니다. 그렇지 않으면 첫 번째 Codelab으로 돌아가서 Datadog를 사용하여 채널을 만들고 활성화하는 단계를 따릅니다.
4. Datadog의 Google Cloud 통합 사용 설정
Datadog를 사용하여 프로젝트를 모니터링하려면 Datadog에 필요한 API를 사용 설정하고 서비스 계정을 만든 후 서비스 계정을 Datadog에 연결해야 합니다.
Datadog용 API 사용 설정
gcloud services enable compute.googleapis.com \ cloudasset.googleapis.com \ monitoring.googleapis.com
서비스 계정 만들기
Datadog의 Google Cloud 통합은 서비스 계정을 사용하여 Cloud Logging API를 호출하여 Compute Engine 인스턴스에서 노드 수준 측정항목을 수집합니다.
Datadog의 서비스 계정을 만듭니다.
DATADOG_SA_NAME=datadog-service-account gcloud iam service-accounts create $DATADOG_SA_NAME \ --display-name "Datadog Service Account"
다음 IAM 역할을 부여하여 Datadog 서비스 계정을 사용 설정하여 측정항목, 태그, 이벤트, 사용자 라벨을 수집합니다.
DATADOG_SA_EMAIL=$DATADOG_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$DATADOG_SA_EMAIL \ --role roles/cloudasset.viewer gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$DATADOG_SA_EMAIL \ --role roles/compute.viewer gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$DATADOG_SA_EMAIL \ --role roles/monitoring.viewer
서비스 계정 키를 만들고 다운로드합니다. Datadog와의 통합을 완료하려면 키 파일이 필요합니다.
Cloud Shell 홈 디렉터리에 서비스 계정 키 파일을 만듭니다.
gcloud iam service-accounts keys create ~/key.json \ --iam-account $DATADOG_SA_EMAIL
Cloud Shell에서 More ⁝
를 클릭한 후 Download File
를 선택합니다. File path
필드에 key.json
를 입력합니다. 키 파일을 다운로드하려면 Download
를 클릭합니다.
Datadog에 서비스 계정 연결
Datadog 계정에서 Integrations
섹션으로 이동하여 Google Cloud
통합 타일을 검색합니다.
Google Cloud Platform
위로 마우스를 가져가 Install
페이지로 이동합니다.
Upload Private Key File
섹션에 서비스 계정 키를 업로드한 후 Install Integration
를 클릭하여 통합을 설치합니다.
통합을 완료하면 Datadog가 Dashboards
아래에 여러 Google Cloud 관련 대시보드를 자동으로 만듭니다.
5. Compute Engine VM 만들기
다음으로 Compute Engine 가상 머신 (VM)을 만듭니다. Datadog 모니터를 사용하여 이러한 VM을 모니터링하고 Google Cloud의 워크플로를 통해 Datadog 알림에 응답합니다.
Compute Engine VM 2개를 만듭니다.
gcloud compute instances create instance-1 instance-2 --zone us-central1-a
Cloud 콘솔에 약 1분 내로 VM이 생성되고 실행되는 것을 확인할 수 있습니다. 일정 시간 (일반적으로 10분)이 지나면 Google Compute Engine
대시보드의 Dashboards
아래에 있는 Datadog에도 이러한 VM이 표시됩니다.
6. 워크플로 만들기
이제 VM 2개를 실행했으므로 Datadog 모니터의 알림에 응답하는 워크플로를 만듭니다. 워크플로는 원하는 만큼 정교할 수 있지만 이 경우 워크플로에서 실행 중인 VM 인스턴스 수를 확인하고 2개 미만이면 새 VM 인스턴스를 만들어 항상 2개의 VM이 실행되도록 합니다.
다음 콘텐츠로 workflow-datadog2.yaml
이라는 파일을 만듭니다.
main: params: [event] steps: - init: assign: - projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")} - zone: "us-central1-a" - minInstanceCount: 2 - namePattern: "datadog-instance-##" - listInstances: call: googleapis.compute.v1.instances.list args: project: ${projectId} zone: ${zone} result: listResult - getInstanceCount: steps: - initInstanceCount: assign: - instanceCount: 0 - setInstanceCount: switch: - condition: ${"items" in listResult} steps: - stepA: assign: - instanceCount: ${len(listResult.items)} - findDiffInstanceCount: steps: - assignDiffInstanceCount: assign: - diffInstanceCount: ${minInstanceCount - instanceCount} - logDiffInstanceCount: call: sys.log args: data: ${"instanceCount->" + string(instanceCount) + " diffInstanceCount->" + string(diffInstanceCount)} - endEarlyIfNeeded: switch: - condition: ${diffInstanceCount < 1} next: returnResult - bulkInsert: call: googleapis.compute.v1.instances.bulkInsert args: project: ${projectId} zone: ${zone} body: count: ${diffInstanceCount} namePattern: ${namePattern} instanceProperties: machineType: "e2-micro" disks: - autoDelete: true boot: true initializeParams: sourceImage: projects/debian-cloud/global/images/debian-10-buster-v20220310 networkInterfaces: - network: "global/networks/default" result: bulkInsertResult - returnResult: return: ${bulkInsertResult}
워크플로는 이벤트를 매개변수로 수신합니다. 이 이벤트는 Eventarc를 통한 Datadog 모니터링에서 가져옵니다. 이벤트가 수신되면 워크플로에서 실행 중인 인스턴스 수를 확인하고 필요한 경우 새 VM 인스턴스를 만듭니다.
워크플로를 배포합니다.
WORKFLOW_NAME=workflow-datadog2 gcloud workflows deploy $WORKFLOW_NAME \ --source workflow-datadog2.yaml \ --location $REGION
워크플로가 배포되었지만 아직 실행되고 있지 않습니다. Datadog 알림이 수신되면 Eventarc 트리거에 의해 실행됩니다.
7. Eventarc 트리거 만들기
이제 Eventarc 트리거를 사용하여 Datadog 제공업체의 이벤트를 Workflows에 연결할 수 있습니다. 첫 번째 Codelab에서 설정한 채널 및 서비스 계정을 사용합니다.
Datadog 채널, 이벤트 유형, 워크플로 대상을 사용하여 트리거를 만듭니다.
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') gcloud eventarc triggers create datadog-trigger2 \ --location $REGION \ --destination-workflow $WORKFLOW_NAME \ --destination-workflow-location $REGION \ --channel $CHANNEL_NAME \ --event-filters type=datadog.v1.alert \ --service-account $PROJECT_NUMBER-compute@developer.gserviceaccount.com
트리거를 나열하여 새로 생성된 트리거가 활성 상태인지 확인할 수 있습니다.
gcloud eventarc triggers list --location $REGION NAME: datadog-trigger2 TYPE: datadog.v1.alert DESTINATION: Workflows: workflow-datadog2 ACTIVE: Yes
8. Datadog 모니터 만들기
이제 Datadog 모니터를 만들어 Eventarc에 연결합니다.
모니터에서 실행 중인 Compute Engine VM 수를 확인한 후 2개 미만이면 알림을 보냅니다.
Datadog에서 모니터를 만들려면 Datadog에 로그인합니다. 기본 메뉴에서 Monitors
위로 마우스를 가져간 후 하위 메뉴에서 New Monitor
을 클릭합니다. 모니터에는 여러 유형이 있습니다. Metric
모니터 유형을 선택합니다.
New Monitor
페이지에서 다음을 사용하여 모니터를 만듭니다.
- 감지 방법(
Threshold
)을 선택합니다. - 측정항목 정의:
gcp.gce.instance.is_running
(모든 지역)sum by
(전체) - 알림 조건 설정:
- 측정항목이
below
지난5 minutes
동안 기준점at least once
이면 트리거됩니다. - 알림 기준:
< 2
- 팀에 알림:
@eventarc_<your-project-id>_<your-region>_<your-channel-name>
- 모니터 이름 예시:
Compute Engine instances < 2
이제 하단의 Create
를 눌러 모니터를 만듭니다.
9. 모니터 및 트리거 테스트
Datadog 모니터, Eventarc 트리거, 최종적으로 워크플로를 테스트하려면 VM 중 하나를 삭제합니다.
gcloud compute instances delete instance-2 --zone us-central1-a
몇 초 후 Google Cloud 콘솔에서 인스턴스가 삭제된 것을 확인할 수 있습니다.
이 변경사항이 Datadog에 표시되려면 약간의 지연 시간이 있습니다. 일정 시간 (일반적으로 10분)이 지나면 Datadog에 모니터가 표시되어 Manage Monitors
섹션에서 이를 감지하고 알립니다.
Datadog 모니터 알림이 표시되면 해당 알림이 Eventarc를 통해 Workflows로 이동하는 것을 볼 수 있습니다. Workflows의 로그를 확인하면 Workflows에서 현재 인스턴스 수와 예상 인스턴스 수 간의 차이를 확인하는 것을 볼 수 있습니다.
2022-03-28 09:30:53.371 BST instanceCount->1 diffInstanceCount->1
그리고 datadog-instance-##
프리픽스로 새 VM 인스턴스를 만들어 알림에 응답합니다.
결국 프로젝트에 VM 2개가 남아 있게 됩니다. 하나는 처음에 만든 VM이고 다른 하나는 Datadog 알림 이후에 Workflows에서 만든 VM입니다.
10. 축하합니다
축하합니다. Codelab을 완료했습니다.
학습한 내용
- Datadog의 Google Cloud 통합을 사용 설정하는 방법
- Compute Engine VM을 확인하고 만드는 워크플로를 만드는 방법
- Eventarc를 사용하여 Datadog 모니터링 알림을 Workflows에 연결하는 방법
- Datadog 모니터를 만들고 VM 삭제에 대해 알리는 방법