GCP Uptime Check 설정

업타임 체크는 가용성 확인을 위해 리소스에 전송하는 요청을 말한다.

https://cloud.google.com/monitoring/uptime-checks#monitoring_uptime_check_create-console

업타임 체크 실패 시 알림을 받을 수 있으며, 가용성을 모니터링 할 수 있다. Health Check와 마찬가지로 트래픽을 전송해서 상태를 확인하는 방식이기 때문에 확인하고자 하는 리소스에서 업타임 체크 서버에 대한 접근이 허용되어 있어야 한다. IP 주소 목록은 Cloud Console → 모니터링 → 업타임 체크로 이동좌측 상단의 다운로드 아이콘을 클릭하면 된다.

 

Client Library로도 IP를 추출할 수 있다. 아래 Python 코드를 사용하면 IP를 추출하고 방화벽까지 설정할 수 있다.

단, Client Library 사용 시 개발환경 세팅과 필요한 의존성 설치가 필요하다.

https://github.com/googleapis/python-monitoring/blob/HEAD/samples/snippets/v3/uptime-check-client/snippets.py

diff --git a/samples/snippets/v3/uptime-check-client/snippets.py b/samples/snippets/v3/uptime-check-client/snippets.py index 0970b8e..9b6fd01 100644 --- a/samples/snippets/v3/uptime-check-client/snippets.py +++ b/samples/snippets/v3/uptime-check-client/snippets.py @@ -105,13 +105,8 @@ def list_uptime_check_configs(project_name): def list_uptime_check_ips(): client = monitoring_v3.UptimeCheckServiceClient() ips = client.list_uptime_check_ips(request={}) - print( - tabulate.tabulate( - [(ip.region, ip.location, ip.ip_address) for ip in ips], - ("region", "location", "ip_address"), - ) - ) - + for ip in ips: + print(ip.ip_address) $ python3 snippets.py list-uptime-check-ips $ python3 snippets.py list-uptime-check-ips > ip_list.txt

 

#!/bin/bash get_acls() { acls=`cat ip_list.txt` for acl in $acls do echo -n $acl, done } acl_list=`get_acls` gcloud compute firewall-rules create vntg-gw-uptime-check-tcp-80-allow \ --project vntg-gw-shared-vpc \ --network vntg-gw-shared-vpc-1 \ --action allow \ --direction ingress \ --rules tcp:80,tcp:443 \ --source-ranges $acl_list #gcloud compute firewall-rules update vntg-gw-uptime-check-tcp-80-allow \ # --project vntg-gw-shared-vpc \ # --source-ranges $acl_list

 

그 외에도 API로도 제공하고 있다. https://cloud.google.com/monitoring/uptime-checks/using-uptime-checks#get-ips

문서 상에 “업타임 체크에 사용되는 IP 주소는 변경될 수 있지만, 일반적으로 분기별로 두 번 이상 변경할 수 없으며, 별도의 공지가 있어야 합니다.“라는 언급이 있었다. 하지만 GCP에 문의해본 결과 현재까지 IP가 변경된 적은 없으며, 문서 내용을 변경할 예정이라고 한다.

또한 리소스에 외부 IP가 없으면 업타임 체크가 안되니 주의해야한다. 만약 로드밸런서를 사용중이라 외부 IP가 없는 상태라면 로드밸런서에 업타임 체크를 연결하면 된다.

업타임 체크는 최종 응답이 200이고 필수 콘텐츠가 포함되어 있다면 성공으로 판단한다. 필수 콘텐츠는 선택사항이기 때문에 지정하지 않으면 응답코드(200)만을 가지고 성공여부를 판단하게 된다.

업타임 체크를 만들 때는 최소 3개 이상의 체커를 지정해야 한다. 체커는 말 그대로 업타임 체크를 수행하는 주체이다. 이 체커는 리전별로 포함하고 있는 개수가 다르다.

  • USA (미국) : 3

  • EUROPE (유럽) : 1

  • SOUTH_AMERICA (남미) : 1

  • ASIA_PACIFIC(아시마) : 1

 

업타임 체크 만들기

업타임 체크는 SDK로 제공하지 않기 때문에 Console이나 API 또는 Client Library를 사용해야 한다. 아래 문서 참고

https://cloud.google.com/monitoring/uptime-checks#create

업타임 체크는 HTTP GET / HTTP POST / TCP 요청을 사용하며, POST 요청은 API를 사용해서만 설정 가능하다.

그리고 호스트 이름이나 Path의 경우 요청시 응답코드 200을 받아야 성공이 되기 때문에 반드시 실제로 사용하고 있는 Path를 지정해주어야 한다.

업타임 체크가 생성되면 아래와 같은 식별자가 할당된다.

projects/PROJECT_ID/uptimeCheckConfigs/UPTIME_CHECK_ID

 

업타임 체크 관리

https://cloud.google.com/monitoring/uptime-checks/manage

업타임 백분률

모든 위치에서의 체크 응답 수 (T)성공한 체크 응답 수 (S)가 존재할 때, T는 다음과 같이 구할 수 있다.

T = ( 전체 시간 / 체크 주기 ) * 체커 수

업타임 백분률은 아래와 같이 구할 수 있다.

업타임 백분률 = (S / T) * 100

 

업타임 체크 측정항목

측정항목 탐색기를 사용해 업타임 체크로 생성된 측정항목을 차트로 만들 수 있다.

업타임 체크 상태 : uptime_check/check_passed

업타임 체크 지연시간 : uptime_check/request_latency

 

비공개 업타임 체크 설정

https://cloud.google.com/monitoring/uptime-checks/private-checks#gcloud-cli

외부 IP를 사용해 Uptime Check하는 것은 간단하지만 내부 IP를 사용해 Uptime Check를 할 경우 추가 작업이 필요하다.

내부 IP를 사용해 Uptime Check를 한다는 것은 트래픽이 비공개 네트워크에 액세스 할 수 있어야 한다는 뜻이 된다. 이를 위해서는 VPC 네트워크, Service Directory Project, Google Cloud 서비스 프로젝트를 구성해야 한다.

먼저 Uptime Check 대상인 VM에게 35.199.192.0/19 IP 대역(GCP Cloud DNS IP대역)의 TCP Ingress를 허용해 주어야 한다. 포트는 Uptime Check에 사용 할 포트를 지정해주면 된다.

Service Directory

Service Directory는 MSA,멀티/하이브리드 환경에서 서비스를 검색하거나 게시 할 수 있도록 하는 서비스이다. Service Discovery를 생각하면 된다. 아래 두 문서를 참고.

MSA에서 Service discovery 패턴

https://cloud.google.com/service-directory/docs/overview

먼저 네임 스페이스를 생성한다.

그 다음 서비스를 생성한다.

마지막으로 엔드포인트를 생성한다.

네임스페이스는 여러 서비스를 포함하고 서비스는 여러 엔드포인트를 포함한다. 용어는 아래 문서 참고.

https://cloud.google.com/service-directory/docs/key-terms

Uptime Check 생성

GCP Console에서 생성해야한다.

Resource 유형으로 Internal IP 선택 후 Service Directory Service를 아래 형식으로 입력해준다.

projects/<project_id>/locations/<region>/namespaces/<namespace>/services/<services>

위 Service 정보는 다음과 같이 CLI로 조회 할 수도 있다. (위 형식처럼 깔끔하게 조회된다.)

첫 비공개 Uptime Check 생성 시 권한이 없다면서 에러가 날 수 있다. 그럴때는 아래와 같이 권한을 부여해주면 된다.