이 문서에서는 내부 TCP/UDP 부하 분산에 Cloud Logging 및 Cloud Monitoring을 구성하고 사용하는 방법을 보여줍니다.
로깅
이 로그는 패스스루 Google Cloud 부하 분산기의 문제 해결 및 모니터링을 위한 유용한 정보를 제공합니다. 로그는 연결별로 집계되고 거의 실시간으로 내보내집니다. 로그는 인그레스 및 이그레스 트래픽 모두에 대한 각 부하 분산 인스턴스의 TCP 및 UDP 흐름에 대해 생성됩니다. 로그 항목에 제공된 필드에 대한 자세한 내용은 로그 필드를 참조하세요.
로그 사용에 대한 추가 요금은 발생하지 않습니다. 로그 수집 방법에 따라 Cloud Logging, BigQuery, Pub/Sub의 표준 가격이 적용됩니다. 로그를 사용 설정해도 부하 분산기의 성능은 영향을 받지 않습니다.
이점
로깅을 사용하면 다음과 같은 이점이 있습니다.
내부 TCP/UDP 부하 분산기 트래픽 모니터링
연결별 로깅을 통해 각 연결이 제공 백엔드로 라우팅되는 방식을 파악할 수 있습니다.
네트워크 문제 해결
문제 해결을 위해 내부 TCP/UDP 부하 분산기 로그를 활용할 수 있습니다. 자세한 내용은 내부 TCP/UDP 부하 분산기 문제 해결을 참조하세요.
VM 간 흐름에 대한 샘플 로그 형식
다음 다이어그램은 내부 클라이언트(192.168.1.2), 내부 TCP/UDP 부하 분산기(10.240.0.200), 백엔드 인스턴스(10.240.0.3)의 인바운드 및 아웃바운드 트래픽을 보여줍니다.
클라이언트에서 백엔드 인스턴스로의 연결에 대한 내부 TCP/UDP 부하 분산기 로그의 형식은 다음과 같습니다.
connection.clientIp
: 192.168.1.2connection.serverIp
: 10.240.0.200bytesSent
: 1256bytesReceived
: 4521
로그 샘플링 및 수집
Google Cloud는 부하 분산기 백엔드 VM에서 나가고 들어오는 패킷을 샘플링합니다. 이러한 샘플링된 패킷은 처리되어 로그를 생성합니다.
모든 패킷이 샘플링되는 것은 아닙니다. Google Cloud는 물리적 호스트의 트래픽 양에 따라 패킷의 가변 하위 집합을 샘플링합니다. 가능한 가장 낮은 샘플링 레이트는 1,024개의 패킷 중 하나입니다. 샘플링 레이트는 Google Cloud에서 동적으로 제어합니다. 샘플링 레이트는 조정할 수 없습니다.
패킷 샘플링은 다음과 같은 방식으로 방화벽 규칙과 상호 작용합니다.
- 패킷은 이그레스 방화벽 규칙이 적용되기 전에 샘플링됩니다.
- 패킷은 인그레스 방화벽 규칙이 적용된 이후에 샘플링됩니다.
패킷 샘플링 후 Google Cloud는 다음 절차에 따라 샘플링된 패킷을 처리합니다.
집계: 샘플링된 패킷은 5초 간격으로 집계되어 단일 흐름 항목을 생성합니다.
구성 가능한(보조) 로그 샘플링: 흐름을 샘플링하는 두 번째 샘플링 프로세스입니다. logConfig.sampleRate 매개변수에 따라 로그 항목으로 표시되는 흐름 항목의 비율을 제어합니다.
logConfig.sampleRate
가1.0
(100%)이면 샘플링된 모든 패킷이 처리됨을 의미합니다.로그 작성: 로그 항목은 Cloud Logging에 기록됩니다.
응답 패킷 소스 IP 주소 요구사항
내부 TCP/UDP 부하 분산 로깅은 해당 패킷의 소스 IP 주소가 해당 요청 패킷이 전송된 부하 분산기의 전달 규칙 IP 주소와 일치하는 경우 백엔드 VM의 응답 패킷만 샘플링합니다. TCP 연결의 경우 응답 패킷에 항상 요청 패킷의 대상과 일치하는 소스가 있어야 합니다. 그러나 다른 프로토콜의 경우 응답 패킷이 다른 소스 IP 주소를 사용할 수 있습니다. 자세한 내용은 요청 및 반환 패킷의 IP 주소를 참조하세요.
내부 TCP/UDP 부하 분산 로깅에 사용되는 패킷 샘플링 프로세스는 응답 패킷에 내부 TCP/UDP 부하 분산기에 대한 전달 규칙의 IP 주소와 일치하지 않는 소스가 있는 경우 백엔드 VM의 응답 패킷을 생략합니다.
새 백엔드 서비스에 로깅 사용 설정
gcloud
백엔드 서비스를 만들고 gcloud beta compute backend-services create 명령어로 로깅을 사용 설정합니다.
gcloud beta compute backend-services create BACKEND_SERVICE \ --region=REGION \ --enable-logging \ --logging-sample-rate=SAMPLE_RATE
다음을 바꿉니다.
BACKEND_SERVICE
: 백엔드 서비스 이름입니다.REGION
: 만들려는 백엔드 서비스의 리전입니다.SAMPLE_RATE
: 이 백엔드 서비스에 로깅이 사용 설정된 경우에만 이 필드를 지정할 수 있습니다. 필드 값은 0.0~1.0이어야 합니다. 0.0은 로그가 보고되지 않음을 의미하고 1.0은 로깅된 모든 요청이 보고됨을 의미합니다. 로깅을 사용 설정하되 샘플링 레이트를 0.0으로 설정하면 로깅을 사용 중지하는 것과 마찬가지입니다. 기본값은 1.0입니다.
API
regionBackendServices.insert
메서드에 대해 POST
요청을 실행합니다.
POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID
/regions/REGION
/backendServices
{ "name": "BACKEND_SERVICE", "loadBalancingScheme": "INTERNAL", "logConfig": { "enable": true, "sampleRate": SAMPLE_RATE } }
기존 백엔드 서비스에 로깅 사용 설정
gcloud
gcloud beta compute backend-services update 명령어로 기존 백엔드 서비스에 로깅을 사용 설정합니다.
gcloud beta compute backend-services update BACKEND_SERVICE \ --region=REGION \ --enable-logging \ --logging-sample-rate=SAMPLE_RATE
다음을 바꿉니다.
BACKEND_SERVICE
: 백엔드 서비스 이름입니다.REGION
: 만들려는 백엔드 서비스의 리전입니다.SAMPLE_RATE
: 이 백엔드 서비스에 로깅이 사용 설정된 경우에만 이 필드를 지정할 수 있습니다. 필드 값은 0.0~1.0이어야 합니다. 0.0은 로그가 보고되지 않음을 의미하고 1.0은 로깅된 모든 요청이 보고됨을 의미합니다. 로깅을 사용 설정하되 샘플링 레이트를 0.0으로 설정하면 로깅을 사용 중지하는 것과 마찬가지입니다. 기본값은 1.0입니다.
API
regionBackendServices/patch
메서드에 대해 PATCH
요청을 실행합니다.
PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID
/regions/REGION
/backendServices/BACKEND_SERVICE
{ "logConfig": { "enable": true, "sampleRate": SAMPLE_RATE } }
기존 백엔드 서비스에 로깅 사용 중지
gcloud
gcloud beta compute backend-services update 명령어로 백엔드 서비스에 로깅을 사용 중지합니다.
gcloud beta compute backend-services update BACKEND_SERVICE \ --region=REGION \ --no-enable-logging
다음을 바꿉니다.
BACKEND_SERVICE
: 백엔드 서비스 이름입니다.REGION
: 만들려는 백엔드 서비스의 리전입니다.
API
regionBackendServices/patch
메서드에 대해 PATCH
요청을 실행합니다.
PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID
/regions/REGION
/backendServices/BACKEND_SERVICE
{ "logConfig": { "enable": false } }
로그 보기
로그가 Cloud Logging에 수집되고 로그 라우터 싱크를 통해 제외되지 않으면 Cloud Logging API 및 Google Cloud CLI를 사용하여 로그를 읽을 수 있습니다.
모든 내부 TCP/UDP 부하 분산기 로그를 보려면 다음 안내를 따르세요.
Console
- Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.
로그 탐색기로 이동 - Google Cloud 내부 네트워크 부하 분산기 규칙 리소스 유형을 선택합니다.
- loadbalancing.googleapis.com/flows 로그 이름을 선택합니다.
콘솔 쿼리
- Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.
로그 탐색기로 이동 - 쿼리 표시 전환을 클릭합니다.
- 다음을 쿼리 필드에 붙여넣습니다.
PROJECT_ID
를 프로젝트 ID로 바꿔야합니다.resource.type="loadbalancing.googleapis.com/InternalNetworkLoadBalancerRule" logName="projects/PROJECT_ID/logs/loadbalancing.googleapis.com%2Fflows"
- 쿼리 실행을 클릭합니다.
특정 백엔드 서비스 로그 보기
특정 백엔드 서비스의 내부 TCP/UDP 부하 분산기 로그를 보려면 다음 안내를 따르세요.
Console
- Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.
로그 탐색기로 이동 - 로그 필드를 사용 설정합니다.
- Google Cloud 내부 네트워크 부하 분산기 규칙 리소스 유형을 선택합니다.
- loadbalancing.googleapis.com/flows 로그 이름을 선택합니다.
콘솔 쿼리
- Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.
로그 탐색기로 이동 - 쿼리 표시 전환을 클릭합니다.
- 다음을 쿼리 필드에 붙여넣습니다.
PROJECT_ID
를 프로젝트 ID로,BACKEND_SERVICE_NAME
을 백엔드 서비스 이름으로 바꿉니다.resource.type="loadbalancing.googleapis.com/InternalNetworkLoadBalancerRule" logName="projects/PROJECT_ID/logs/loadbalancing.googleapis.com%2Fflows" resource.labels.backend_service_name="BACKEND_SERVICE_NAME"
- 쿼리 실행을 클릭합니다.
특정 백엔드 로그 보기
엔드포인트가 GCE_VM_IP
인 특정 백엔드 인스턴스 그룹 또는 네트워크 엔드포인트 그룹(NEG)의 내부 TCP/UDP 부하 분산기 로그를 보려면 다음 단계를 따르세요.
Console
- Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.
로그 탐색기로 이동 - 로그 필드를 사용 설정합니다.
- Google Cloud 내부 네트워크 부하 분산기 규칙 리소스 유형을 선택합니다.
- loadbalancing.googleapis.com/flows 로그 이름을 선택합니다.
콘솔 쿼리
- Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.
로그 탐색기로 이동 - 쿼리 표시 전환을 클릭합니다.
다음을 쿼리 필드에 붙여넣습니다.
PROJECT_ID
를 프로젝트 ID로,BACKEND_GROUP_NAME
을 인스턴스 그룹 또는 NEG의 이름으로 바꿉니다.resource.type="loadbalancing.googleapis.com/InternalNetworkLoadBalancerRule" logName="projects/PROJECT_ID/logs/loadbalancing.googleapis.com%2Fflows" resource.labels.backend_group_name="BACKEND_GROUP_NAME"
쿼리 실행을 클릭합니다.
로그 필드
일부 로그 필드는 한 필드에 두 가지 이상의 데이터를 포함하는 구조화된 형식입니다. 예를 들어 connection
필드는 IpConnection
유형이며 소스 및 대상 IP 주소, 포트, 프로토콜이 단일 필드에 포함됩니다. 이러한 다중 필드 형식의 필드는 다음 표에 설명되어 있습니다.
모니터링 리소스는 loadbalancing.googleapis.com/InternalNetworkLoadBalancerRule입니다.
필드 | 유형 | 설명 |
---|---|---|
연결 | IpConnection | 이 연결을 설명하는 5-튜플. |
startTime | string | 집계된 시간 간격 동안 처음 관찰된 패킷의 타임스탬프(RFC 3339 날짜 문자열 형식) |
endTime | string | 집계된 시간 간격 동안 마지막으로 관찰된 패킷의 타임스탬프(RFC 3339 날짜 문자열 형식) |
bytesSent | int64 | 서버에서 클라이언트로 보낸 바이트 수입니다. |
bytesReceived | Int64 | 클라이언트로부터 서버가 수신한 바이트 수입니다. |
packetsSent | int64 | 서버에서 클라이언트로 보낸 패킷 수입니다. |
packetsReceived | int64 | 대상으로부터 서버에서 수신한 패킷 수입니다. |
rtt | string | 지연 시간은 TCP 연결에 대해서만 측정됩니다. 지연 시간은 예상 네트워크 왕복 시간(RTT)과 클라이언트의 VM 운영체제 내의 패킷을 처리하는 데 소요된 시간의 합계입니다. 샘플링된 패킷의 경우 RTT는 TCP 세그먼트를 전송하는 백엔드와 전송된 세그먼트의 시퀀스 번호에 대한 TCP 확인을 수신하는 백엔드 간의 시간 차이를 측정하여 부하 분산된 백엔드의 관점에서 계산됩니다. 지연 시간은 숫자(초)로 시작하고 초를 나타내기 위해 's'로 끝나는 문자열로 형식이 지정됩니다. 나노초는 소수점 이하 초로 표현됩니다. 예를 들어 지연 시간 250밀리초는 '0.250000000s'로 지정됩니다. |
IpConnection
필드 | 유형 | 설명 |
---|---|---|
clientIp | 문자열 | 클라이언트 IP 주소 |
clientPort | int32 | 클라이언트 포트. TCP 및 UDP 연결에만 설정됩니다. |
serverIp | 문자열 | 서버 IP 주소(전달 규칙 IP) |
serverPort | int32 | 서버 포트입니다. TCP 및 UDP 연결에만 설정됩니다. |
프로토콜 | int32 | IANA 프로토콜 번호 |
모니터링
내부 TCP/UDP 부하 분산은 모니터링 데이터를 Cloud Monitoring으로 내보냅니다.
모니터링 측정항목은 다음과 같은 목적으로 사용할 수 있습니다.
- 내부 TCP/UDP 부하 분산기의 구성, 사용, 성능 평가
- 문제해결
- 리소스 사용률 및 사용자 환경 개선
Monitoring의 사전 정의된 대시보드 외에도 Monitoring API를 통해 커스텀 대시보드를 만들고, 알림을 설정하고, 측정항목을 쿼리할 수 있습니다.
Monitoring 대시보드 보기
- Google Cloud Console에서 Monitoring으로 이동합니다.
Monitoring으로 이동 - 탐색창에 리소스가 나타나면 리소스를 선택한 다음 Google Cloud 부하 분산기를 선택합니다. 그렇지 않으면 대시보드를 선택한 다음 Google Cloud 부하 분산기라는 대시보드를 선택합니다.
- 부하 분산기의 이름을 클릭합니다.
왼쪽 창에서 선택한 부하 분산기에 대한 다양한 세부정보를 볼 수 있습니다. 오른쪽 창에는 시계열 그래프가 표시됩니다. 구체적인 분석을 보려면 분석 링크를 클릭하세요. 왼쪽 창에는 현재 구성된 데이터가 표시되며 오른쪽 창에는 현재 왼쪽 창에 반영되어 있지 않은 이전 구성에서 제공되는 데이터가 나타납니다.
Monitoring 커스텀 대시보드 정의
내부 TCP/UDP 부하 분산 측정항목에 대해 커스텀 Monitoring 대시보드를 만들 수 있습니다.
- Google Cloud Console에서 Monitoring으로 이동합니다.
Monitoring으로 이동 - 대시보드 > 대시보드 만들기를 선택합니다.
- 차트 추가를 클릭합니다.
- 차트 제목을 입력합니다.
- 측정항목과 필터를 선택합니다. 측정항목에서 리소스 유형은 Google Cloud TCP 부하 분산기(내부) 규칙(
internal_tcp_lb_rule
) 또는Google Cloud UDP 부하 분산기(내부) 규칙(internal_udp_lb_rule
)입니다. - 저장을 클릭합니다.
알림 정책 정의
알림 정책을 만들어 측정항목 값을 모니터링하고 측정항목이 조건을 위반하면 이에 대한 알림을 수신할 수 있습니다.
- Google Cloud 콘솔에서 Monitoring 페이지로 이동합니다.
- Monitoring 탐색창에서 notifications알림을 선택합니다.
- 알림 채널을 만들지 않고 알림을 받으려면 알림 채널 수정을 클릭하고 알림 채널을 추가합니다. 채널을 추가한 후 알림 페이지로 돌아갑니다.
- 알림 페이지에서 정책 만들기를 클릭합니다.
- 측정항목을 선택하려면 측정항목 선택 메뉴를 확장한 후 다음을 수행합니다.
- 메뉴를 관련 항목으로 제한하려면 필터 표시줄에
Google Cloud TCP Load Balancer
또는Google Cloud UDP Load Balancer
를 입력합니다. 메뉴를 필터링한 후 결과가 없으면 활성 리소스 및 측정항목만 표시 전환을 중지합니다. - 리소스 유형에 Google Cloud TCP 부하 분산기 또는 Google Cloud UDP 부하 분산기를 선택합니다.
- 측정항목 카테고리와 측정항목을 선택한 후 적용을 선택합니다.
- 메뉴를 관련 항목으로 제한하려면 필터 표시줄에
- 다음을 클릭합니다.
- 알림 트리거 구성 페이지의 설정에 따라 알림이 트리거되는 시점이 결정됩니다. 조건 유형을 선택하고 필요한 경우 임곗값을 지정합니다. 자세한 내용은 조건 트리거를 참조하세요.
- 다음을 클릭합니다.
- 선택사항: 알림 정책에 알림을 추가하려면 알림 채널을 클릭합니다. 대화상자의 메뉴에서 하나 이상의 알림 채널을 선택한 다음 확인을 클릭합니다.
- 선택사항: 이슈 자동 종료 기간을 업데이트합니다. 이 필드는 측정항목 데이터가 없어 Monitoring에서 이슈를 닫을 시간을 결정합니다.
- 선택사항: 문서를 클릭한 후 알림 메시지에 포함할 정보를 추가합니다.
- 알림 이름을 클릭하고 알림 정책 이름을 입력합니다.
- 정책 만들기를 클릭합니다.
내부 TCP/UDP 부하 분산기 측정항목
다음은 Monitoring에 보고되는 내부 TCP/UDP 부하 분산기의 측정항목입니다.
측정항목 | 설명 |
---|---|
수신 처리량 | 백엔드에서 수신하는 대로 내부 TCP/UDP 부하 분산기 전달 규칙에 전송되는 바이트 수입니다. |
인바운드 패킷 | 백엔드에서 수신하는 대로 내부 TCP/UDP 부하 분산기 전달 규칙에 전송되는 패킷 수입니다. |
발신 처리량 | 전달 규칙 IP에 바인딩된 연결에서 내부 부하 분산된 백엔드가 전송하는 바이트 수입니다. |
발신 패킷 | 전달 규칙 IP에 바인딩된 연결에서 내부 부하 분산된 백엔드가 전송하는 패킷 수입니다. |
지연 시간(*) | 각 내부 부하 분산 연결의 패킷 번들에 측정된 RTT 분포입니다. 일반적으로 Monitoring 뷰에서 95번째 백분위수까지 떨어집니다. |
(*) TCP 트래픽에서만 지원됩니다.
내부 TCP/UDP 부하 분산기 측정항목용 필터 측정기준
측정항목은 내부 TCP/UDP 부하 분산기별로 집계됩니다. 집계된 측정항목은 다음과 같은 측정기준에 따라 세분화할 수 있습니다.
속성 | 설명 |
---|---|
백엔드 이름 | `GCE_VM_IP` 엔드포인트가 있는 인스턴스 그룹 또는 네트워크 엔드포인트 그룹(NEG)의 이름입니다. |
백엔드 범위 | 연결을 수신한 백엔드의 범위(리전 또는 영역)입니다. |
백엔드 영역 | 영역 인스턴스 그룹 및 네트워크 엔드포인트 그룹의 경우 연결을 제공한 백엔드의 영역입니다. |
클라이언트 네트워크 | 내부 TCP/UDP 부하 분산기에 연결된 클라이언트 인스턴스의 네트워크입니다. |
클라이언트 서브네트워크 | 내부 TCP/UDP 부하 분산기에 연결된 클라이언트 인스턴스의 서브네트워크입니다. |
클라이언트 영역 | 전달 규칙에 연결된 인스턴스의 Google Cloud 영역입니다. |
전달 규칙 | 내부 TCP/UDP 부하 분산기의 전달 규칙 이름입니다. |
측정항목 보고 빈도 및 보관
내부 TCP/UDP 부하 분산기의 측정항목은 1분 단위로 일괄적으로 Monitoring으로 내보내집니다. 모니터링 데이터는 6주간 보관됩니다. 측정항목은 샘플링된 트래픽을 기반으로 합니다. 샘플링 레이트는 동적이며 조정할 수 없습니다. 대시보드는 1시간(1H), 6시간(6H), 1일(1D), 1주(1W), 6주(6W)의 기본 주기로 데이터 분석을 제공합니다. 6주에서 1분 사이의 주기로 수동 분석을 요청할 수도 있습니다.
다음 단계
- 중요한 기본 사항은 내부 TCP/UDP 부하 분산 개념을 참조하세요.
- 장애 조치에 대한 중요한 정보는 내부 TCP/UDP 부하 분산용 장애 조치 개념을 참조하세요.
- 부하 분산기에서 사용할 수 있는 DNS 이름 옵션은 내부 부하 분산 및 DNS 이름을 참조하세요.
- 내부 TCP/UDP 부하 분산기 구성 예시는 내부 TCP/UDP 부하 분산 설정을 참조하세요.
- 내부 TCP/UDP 부하 분산기 장애 조치의 구성 단계 및 예시는 내부 TCP/UDP 부하 분산의 장애 조치 구성을 참조하세요.
- VPC 네트워크에 연결된 피어 네트워크에서 내부 부하 분산기에 액세스하는 방법은 내부 TCP/UDP 부하 분산 및 연결된 네트워크를 참조하세요.
- 내부 TCP/UDP 부하 분산기와 관련된 문제 해결 방법은 내부 TCP/UDP 부하 분산 문제 해결을 참조하세요.
- 로그 문제 해결 방법에 대한 자세한 내용은 로깅 문제 해결을 참조하세요.