1. 소개
최종 업데이트: 2023년 6월 21일
사용 가능 여부 로그 기반 오류 알림
로그 기반 알림을 사용하면 로그에서 특정 이벤트나 패턴을 모니터링하여 애플리케이션의 가용성을 확인할 수 있습니다*.* 서비스 중단 또는 기타 사용자 관련 문제에 대한 알림을 받으면 사용자와 고객에게 미치는 영향을 최소화하기 위한 조치를 취할 수 있습니다.
업타임 체크는 가용성에 대한 일반적인 스냅샷을 제공하지만 로그에서 파생된 오류 메시지를 보다 구체적인 유형의 비가용성 지표로 사용하고 문제가 발생한 사용자의 비율을 파악하는 것이 더 정확할 수 있습니다.
오류는 사용자의 실수부터 시스템 유지보수, 업그레이드 및 악천후와 같은 시스템 외부 요소에 이르기까지 다양한 원인으로 인해 발생할 수 있습니다. 알림의 핵심은 가능한 모든 원인을 예측하는 것이 아니라 문제 해결의 출발점이 될 수 있는 몇 가지 주요 증상을 선택하는 것입니다.
알림 채널로서의 Pub/Sub 주제
Pub/Sub 주제를 Google Cloud Monitoring 알림 채널로 사용하여 Pub/Sub 구독에 알림을 전송할 수 있습니다. 이렇게 하면 Cloud Monitoring 알림을 서드 파티 알림 서비스를 비롯한 다른 시스템과 통합할 수 있습니다.
Pub/Sub 주제를 알림 채널로 사용하려면 먼저 Pub/Sub 주제와 Pub/Sub 구독을 만들어야 합니다. 그런 다음 Pub/Sub 주제를 대상으로 사용하는 Cloud Monitoring 알림 채널을 만들어야 합니다.
알림이 트리거되면 Cloud Monitoring이 Pub/Sub 주제로 메시지를 전송합니다. 그러면 Pub/Sub 구독의 구독자가 메시지를 처리하고 적절한 조치를 취할 수 있습니다.
빌드할 항목
이 Codelab에서는 앱을 배포하고, Pub/Sub 주제를 만들고, 로그 기반 알림을 만들어 앱의 특정 부분에서 오류를 확인하고 Pub/Sub 주제를 알림 채널로 사용합니다.
학습할 내용
- Pub/Sub 주제를 만드는 방법
- 로그 기반 알림을 만드는 방법
이 Codelab에서는 오류 알림을 만드는 데 중점을 둡니다. 따라서 이와 관련 없는 개념과 애플리케이션 코드는 설명 없이 넘어가고 필요할 때 간단히 복사하여 붙여넣을 수 있도록 제공해 드립니다.
필요한 항목
- 다음 권한이 있는 Google Cloud 계정:
- Cloud Run 애플리케이션 배포
- Pub/Sub 주제 만들기
- 알림 만들기
2. 설정
Google Cloud 프로젝트 선택 또는 만들기
기존 프로젝트를 선택하려면 드롭다운을 사용합니다.
Google Cloud에서 새 프로젝트를 만들려면 다음 단계를 따르세요.
- Google Cloud Platform 콘솔로 이동합니다.
- 프로젝트 만들기 버튼을 클릭합니다.
- 프로젝트 이름을 입력하세요.
- 프로젝트의 결제 계정을 선택하세요.
- 만들기 버튼을 클릭합니다.
프로젝트가 생성되고 프로젝트 대시보드가 표시됩니다. 여기에서 Google Cloud 서비스를 사용할 수 있습니다.
다음은 각 단계에 관한 추가 세부정보입니다.
- 이름: 프로젝트 이름은 조직 내에서 고유해야 합니다.
- 결제 계정: 기존 결제 계정을 사용하거나 새 결제 계정을 만들 수 있습니다.
- 만들기: 필요한 정보를 모두 입력한 후 만들기 버튼을 클릭하여 프로젝트를 만듭니다.
자세한 내용은 프로젝트 만들기에 대한 Google Cloud 문서를 참조하세요.
3. API 애플리케이션 배포
샘플 애플리케이션 또는 API의 주제는 무엇인가요?
이 애플리케이션은 인벤토리 항목을 나열하고 특정 항목 인벤토리 수를 가져오는 몇 가지 작업과 함께 REST API 엔드포인트를 노출하는 간단한 Inventory API 애플리케이션입니다.
API를 배포하고 https://<somehost>에 호스팅된다고 가정하면 다음과 같이 API 엔드포인트에 액세스할 수 있습니다.
https://<somehost>/inventory
그러면 재고 수준이 있는 모든 제품 항목이 나열됩니다.
https://<somehost>/inventory/{productid}
이렇게 하면 해당 제품의 productid 및 보유 중인 인벤토리 수준이 포함된 단일 기록이 제공됩니다.
반환된 응답 데이터는 JSON 형식입니다.
참고: 이 API 애플리케이션은 데모 전용이며 안전하고 강력한 API 구현을 나타내지 않습니다. 이 문서는 실습의 주요 목적인 Google Cloud 운영을 살펴보는 데 사용할 수 있는 빠른 애플리케이션을 제공하기 위한 것입니다.
샘플 데이터 및 API 요청/응답
작업을 간소화하기 위해 애플리케이션은 백엔드의 데이터베이스를 기반으로 하지 않습니다. 여기에는 3개의 샘플 제품 ID와 보유 인벤토리 수준이 포함되어 있습니다.
제품 ID | 실시간 인벤토리 수준 |
I-1 | 10 |
I-2 | 20 |
I-3 | 30 |
샘플 API 요청 및 응답은 다음과 같습니다.
API 요청 | API 응답 |
https://<somehost>/inventory | [ { "I-1": 10, "I-2": 20, "I-3": 30 }] |
https://<somehost>/inventory/I-1 | { "productid": "I-1", "qty": 10} |
https://<somehost>/inventory/I-2 | { "productid": "I-2", "qty": 20} |
https://<somehost>/inventory/I-200 | { "productid": I-200, "qty": -1} |
저장소 복제
Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.
GCP 콘솔에서 오른쪽 상단 툴바의 Cloud Shell 아이콘을 클릭합니다.
환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.
가상 머신에는 필요한 개발 도구가 모두 들어 있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 실습의 모든 작업은 브라우저만으로 수행할 수 있습니다.
gcloud 설정
Cloud Shell에서 프로젝트 ID를 설정하고 PROJECT_ID 변수로 저장합니다.
PROJECT_ID=[YOUR-PROJECT-ID]
gcloud
config
set
project
$PROJECT_ID
이제 다음 명령어를 실행합니다.
$
git
clone
https://github.com/rominirani/cloud-code-sample-repository.git
그러면 이 폴더에 cloud-code-sample-repository라는 폴더가 생성됩니다.
(선택사항) Cloud Shell에서 애플리케이션 실행
다음 단계에 따라 애플리케이션을 로컬에서 실행할 수 있습니다.
- 터미널에서 다음 명령어를 통해 Python 버전의 API로 이동합니다.
$
cd
cloud-code-sample-repository
$
cd
python-flask-api
- 터미널에서 다음 명령어를 제공합니다. 작성 시점을 기준으로 Cloud Shell에는 Python 3.9.x가 설치되어 있으며 여기서는 기본 버전을 사용합니다. 노트북에서 로컬로 실행하려면 Python 3.8+를 사용하면 됩니다.
$
python
app.py
- 다음 명령어를 실행하여 Python 서버를 로컬에서 시작할 수 있습니다.
포트 8080에서 미리보기를 클릭합니다. 5. 그러면 브라우저 창이 열립니다. 404 오류가 표시되지만 괜찮습니다. URL을 수정하여 호스트 이름 뒤에 /inventory만 포함되도록 변경합니다.
예: 를 입력하면 다음과 같이 표시됩니다.
https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory
이렇게 하면 앞에서 설명한 대로 인벤토리 항목 목록이 표시됩니다.
- 이제 터미널로 이동하여 Ctrl-C를 눌러 서버를 중지할 수 있습니다.
애플리케이션 배포
이제 이 API 애플리케이션을 Cloud Run에 배포합니다. gcloud 명령줄 클라이언트를 활용하여 Cloud Run에 코드를 배포하기 위한 명령어를 실행하는 프로세스가 포함됩니다.
터미널에서 다음 gcloud 명령어를 제공합니다.
$ gcloud run deploy --source .
여기에는 여러 가지 질문이 제시되며, 몇 가지 요점이 아래에 설명되어 있습니다.
- 서비스 이름 (python-flask-api): 이 기본값을 사용하거나 my-inventory-api와 같은 이름을 선택합니다.
- 프로젝트에서 API[run.googleapis.com] 가 사용 설정되지 않았습니다[613162942481]. 사용 설정하고 다시 시도하시겠습니까 (몇 분 정도 소요됨)? (y/N)? Y
- 리전을 지정하세요. 31 (us-west-1)을 선택하세요.
- 프로젝트에서 API [artifactregistry.googleapis.com] 이 사용 설정되지 않았습니다[613162942481]. 사용 설정하고 다시 시도하시겠습니까 (몇 분 정도 소요됨)? (y/N)? Y
- 소스에서 배포하려면 빌드된 컨테이너를 저장할 Artifact Registry Docker 저장소가 필요합니다. [us-west1] 리전에 [cloud-run-source-deploy] 라는 이름의 저장소가 생성됩니다.
- Do you want to continue (Y/n)? Y
- [my-inventory-api] (예/아니요)에 대한 인증되지 않은 호출을 허용하시겠습니까? Y
결국 소스 코드를 가져와 컨테이너화하여 Artifact Registry로 푸시한 다음 Cloud Run 서비스 + 버전을 배포하는 프로세스가 시작됩니다. 이 절차를 완료하는 데 3~4분 정도 소요될 수 있으며, 표시된 서비스 URL과 함께 절차가 완료되는 것을 확인할 수 있습니다.
샘플 실행은 다음과 같습니다.
애플리케이션 테스트
이제 애플리케이션을 Cloud Run에 배포했으므로 다음과 같이 API 애플리케이션에 액세스할 수 있습니다.
- 이전 단계의 서비스 URL을 기록해 둡니다. 예를 들어 내 설정에서
https://my-inventory-api-bt2r5243dq-uw.a.run.app
로 표시됩니다. 이를<SERVICE_URL>
라고 하겠습니다. - 브라우저를 열고 API 엔드포인트의 다음 URL 3개에 액세스합니다.
<SERVICE_URL>/inventory
<SERVICE_URL>/inventory/I-1
<SERVICE_URL>/inventory/I-100
이전 섹션에서 샘플 API 요청 및 응답과 함께 제공했던 사양에 부합해야 합니다.
Cloud Run에서 서비스 세부정보 가져오기
API 서비스를 서버리스 컴퓨팅 환경인 Cloud Run에 배포했습니다. 언제든지 Google Cloud 콘솔을 통해 Cloud Run 서비스를 이용할 수 있습니다.
기본 메뉴에서 Cloud Run으로 이동합니다. 그러면 Cloud Run에서 실행 중인 서비스 목록이 표시됩니다. 방금 배포한 서비스가 표시됩니다. 선택한 이름에 따라 다음과 같이 표시됩니다.
서비스 이름을 클릭하여 세부정보를 확인합니다. 샘플 세부정보는 아래와 같습니다.
URL을 확인하세요. URL은 브라우저에 입력하여 방금 배포한 Inventory API에 액세스할 수 있는 서비스 URL입니다. 측정항목과 기타 세부정보를 확인하세요.
이제 Google Cloud 운영 제품군부터 살펴보겠습니다.
4. 알림 수신을 위한 Pub/Sub 주제 만들기
Pub/Sub 주제를 만들려면 Google Cloud 콘솔에서 다음 단계를 따르세요.
- 검색창에서 Pub/Sub를 검색하고 Pub/Sub로 이동합니다.
- 아직 탭하지 않았다면 주제 탭을 클릭합니다.
- 주제 만들기 버튼을 클릭합니다.
- 주제의 인식 가능한 이름을 입력합니다.
- 만들기 버튼을 클릭합니다.
- 복사 아이콘 버튼을 사용하여 주제 이름을 복사합니다. 다음 섹션에서 필요합니다.
5. 오류에 대한 알림 정책 만들기
오류 로그 탐색
애플리케이션의 오류 로그를 보려면 다음 안내를 따르세요.
로깅 탭을 클릭합니다.
그러면 필요에 따라 로그 메시지를 필터링하는 로그 수준과 함께 다양한 리소스 (프로젝트, Google 클라우드 리소스, 서비스 이름 등)를 구체적으로 선택/선택 해제할 수 있는 로그 인터페이스가 표시됩니다.
I-1, I-2, I-3 중 하나가 아닌 제품 ID를 제공하여 인벤토리 서비스에 대한 몇 가지 잘못된 요청을 시뮬레이션합니다. 예: 잘못된 요청은 다음과 같습니다.
https://<SERVICE_URL>/inventory/I-999
이제 쿼리에 잘못된 제품 ID가 제공된 경우 API에서 생성된 모든 WARNING을 검색하겠습니다.
오류에 대한 커스텀 로그 기반 알림 정책 만들기
애플리케이션의 일부에서 매우 구체적인 오류 메시지가 발생하는지 살펴보려 한다고 가정해 보겠습니다. 제품 ID 조회 시 오류가 많이 발생한다고 가정해 보겠습니다. 이 문제는 가능한 많은 문제 (잘못된 링크, 데이터베이스 불일치, Google 사이트를 열거하는 봇)의 징후입니다. 모든 잠재적인 원인을 상상하는 것은 어렵거나 불가능할 수 있지만, 이러한 메시지를 한 번 보내는 애플리케이션은 Google에서 알고 있어야 하는 높은 수준의 문제입니다. 이를 알리려면 오류 로그의 데이터를 기반으로 정책을 만들어야 합니다.
- 쿼리 상자에 다음 쿼리 매개변수를 삽입합니다.
resource.type="cloud_run_revision"
textPayload =~ "앱에서 경고: 잘못된 productid에 대한 인벤토리 요청을 받음"
예를 들면 다음과 같습니다.
- '쿼리 실행'을 클릭합니다. 그러면 접수된 모든 요청과 이 문제가 있는 요청이 표시됩니다.
- 위의 내용을 알림으로 변환하려면 로그 탐색기의 오른쪽 쿼리 필드 아래에 있는 알림 만들기 버튼을 클릭합니다.
- 그러면 로그 기반 알림 정책을 만드는 양식이 표시됩니다.
- 로그에 대한 초기 쿼리를 사용하여 알림에 포함합니다.
resource.type="cloud_run_revision"
textPayload
=~
"WARNING
in
app:
Received
inventory
request
for
incorrect
productid"
- 알림 빈도와 이슈 기간을 설정합니다. 이 예에서는 각 항목에 최솟값을 사용할 수 있습니다.
- 마지막으로 '알림을 수신할 대상' 앞서 만든 Pub/Sub 알림 채널을 선택합니다.
- 저장을 클릭합니다. 알림 정책을 보고 관리하려면 알림 페이지로 이동하여 정책 에서 확인하세요.
6. 축하합니다
수고하셨습니다. Pub/Sub에 알림을 보내도록 업타임 체크를 구성했습니다.