로깅 및 모니터링

이 페이지에서는 비공개 영역전달 영역을 포함한 Cloud DNS의 로깅 및 모니터링 측정항목에 관한 정보를 제공합니다. 또한 공개 DNS 변경사항의 전파를 모니터링하는 지침도 제공합니다.

Cloud DNS 로깅 사용

Cloud DNS 로깅은 네임서버가 Virtual Private Cloud(VPC) 네트워크에 대해 확인하는 쿼리를 추적합니다. 외부 항목에서 공개 영역으로 직접 연결되는 쿼리는 공개 네임서버에서 처리되기 때문에 로깅되지 않습니다.

로깅된 쿼리는 Compute Engine 가상 머신(VM) 인스턴스, 동일한 VPC 네트워크의 Google Kubernetes Engine 컨테이너, 피어링 영역, 인바운드 DNS 전달을 사용하는 온프레미스 클라이언트에서 시작될 수 있습니다. 비공개 DNS 영역, 전달 DNS 영역, 대체 네임서버, 내부 Google Cloud DNS 영역, 외부 DNS 영역은 결국 쿼리를 확인할 수 있습니다.

로그 레코드는 요청을 수행한 네트워크를 소유하는 프로젝트에 속합니다. 공유 VPC의 경우 로그 레코드는 호스트 프로젝트에 네트워크가 포함되기 때문에 호스트 프로젝트에 속합니다.

로깅 사용 설정 및 중지

DNS 정책을 사용하여 네트워크에 대해 로깅을 사용 설정 및 사용 중지합니다.

DNS 정책이 없는 네트워크에 로깅을 사용 설정하려면 dns policies create 명령어를 실행합니다.

gcloud

gcloud dns policies create POLICY_NAME \
    --networks=NETWORK \
    --enable-logging \
    --description=DESCRIPTION

다음을 바꿉니다.

  • POLICY_NAME: DNS 정책의 이름
  • NETWORK: 쉼표로 구분된 목록에 있는 하나 이상의 네트워크
  • DESCRIPTION: 정책에 대한 설명

기존 DNS 정책이 있는 네트워크에 로깅을 사용 설정하려면 dns policies update 명령어를 실행합니다.

gcloud

gcloud dns policies update POLICY_NAME \
    --networks=NETWORK \
    --enable-logging

다음을 바꿉니다.

  • POLICY_NAME: DNS 정책의 이름
  • NETWORK: 쉼표로 구분된 목록에 있는 하나 이상의 네트워크

정책을 그대로 둔 상태로 로깅을 해제하려면 dns policies update 명령어를 실행합니다.

gcloud

gcloud dns policies update POLICY_NAME \
    --networks=NETWORK \
    --no-enable-logging

다음을 바꿉니다.

  • POLICY_NAME: DNS 정책의 이름
  • NETWORK: 쉼표로 구분된 목록에 있는 하나 이상의 네트워크

정책을 완전히 삭제하려면 dns policies delete 명령어를 실행합니다.

gcloud

gcloud dns policies delete POLICY_NAME \

POLICY_NAME을 삭제하려는 DNS 정책의 이름으로 바꿉니다.

로그 보기

Console

Google Cloud Console에서 로그 탐색기 페이지로 이동합니다.

로그 탐색기로 이동

레코드 형식 필드 보기

모든 로그 항목에는 다음 필드가 있습니다(해당되는 경우). 일부 필드는 모니터링 측정항목과도 공유됩니다.

필드 필드 유형 설명 측정항목에서 사용
source_type 문자열 쿼리 소스: inbound-forwarding, gce-vm
location 문자열 응답이 제공된 Google Cloud 리전(예: us-east1)
project_id 문자열 쿼리가 수신된 네트워크의 Google Cloud 프로젝트 ID입니다.
target_type 문자열 DNS 쿼리를 확인하는 대상의 유형입니다(private-zone, forwarding-zone, forwarding-policy, peering-zone, internal, external).
target_name 문자열 대상 이름입니다(예: 영역 이름, 정책 이름, 내부 영역 이름, 외부 도메인 이름).
queryName 문자열/DNS DNS 쿼리 이름입니다(예: RFC 1035 4.1.2). 아니요
queryType 문자열/DNS DNS 쿼리 유형입니다(예: RFC 1035 4.1.2). 아니요
responseCode 숫자/DNS 응답 코드입니다(예: RFC 1035 4.1.1). 아니요
rdata 문자열/DNS 260바이트로 잘린 설명 형식의 DNS 응답입니다(예: RFC 1035 5.1). 아니요
authAnswer 부울/DNS 권한 응답입니다(예: RFC 1035). 아니요
sourceNetwork 문자열/소스 시스템에 도달한 쿼리를 보낸 네트워크입니다. 아니요
vmInstanceId 숫자/소스 Compute Engine VM에서 시작한 쿼리에만 적용되는 Compute Engine VM 인스턴스 ID입니다. 아니요
vmInstanceName 문자열/소스 Compute Engine VM에서 시작한 쿼리에만 적용되는 Compute Engine VM 인스턴스 이름입니다. 아니요
vmProjectId 문자열/소스 쿼리가 전송된 네트워크의 Google Cloud 프로젝트 ID로, Compute Engine VM에서 시작한 쿼리에만 적용됩니다. 아니요
vmZoneName 문자열/소스 쿼리가 전송된 VM 영역의 이름으로, Compute Engine VM에서 시작한 쿼리에만 적용됩니다. 아니요
sourceIP 문자열/소스 쿼리를 보내는 IP입니다. 아니요
destinationIP 문자열/대상 전달의 사례에만 적용되는 대상 IP 주소입니다. 아니요
protocol 문자열/DNS TCP | UDP 아니요
egressError 문자열

이그레스 프록시 오류입니다. 이그레스 프록시가 보고한 온프레미스 DNS 서버에서 수신된 실제 오류입니다.

이 필드를 사용해서 온프레미스 DNS에서 반환한 실제 SERVFAIL과 이그레스 프록시에서 발생한 네트워크 오류를 구분할 수 있습니다.

아니요

가격 책정

모든 Cloud DNS 로그가 Cloud Logging에 기록됩니다. 이 서비스에는 Cloud DNS의 별도 요금이 부과되지 않습니다. 그러나 이러한 로그는 작성 및 저장된 로그 크기에 따라 추가 스토리지 비용이 발생할 수 있습니다.

계산을 위해 Cloud DNS는 DNS 쿼리 10,000개를 처리하는 데 약 5KB의 로그 데이터를 작성합니다.

Cloud Logging 가격 책정에 대한 자세한 내용은 Google Cloud 운영 제품군 가격 책정: Cloud Logging을 참조하세요.

아웃바운드 전달 문제 해결

destinationIP, egressIP, egressError와 같은 특정 필드가 누락되고 SERVFAIL이 포함된 로그를 받는 경우 문제 해결 문서의 관련 섹션을 참조하세요.

측정항목 모니터링

Cloud DNS는 모니터링 측정항목을 Cloud Monitoring으로 내보냅니다.

비공개 영역, 전달 영역, 정책 전달, 내부 Google Cloud 영역, 인터넷 대상의 DNS 쿼리 및 응답의 비율을 모니터링할 수 있습니다. 모니터링은 Google Cloud Console 모니터링 페이지Cloud Monitoring API에서 사용할 수 있습니다.

비공개 DNS는 응답 코드별 쿼리 수를 세기 위해 response_code 라벨이 포함된 dns.googleapis.com/query/response_count 델타 측정항목을 내보냅니다.

response_code 라벨은 string 유형이며 가능한 값으로는 NOERROR, FORMERR, SERVFAIL, NXDOMAIN, NOTIMP, UNKNOWN이 있습니다. 이러한 코드 정의는 IANA DNS RCODE를 참조하세요.

측정항목은 로그 레코드 형식의 해당 필드를 사용하여 dns_query 리소스 유형으로 내보냅니다.

DNS 전파 모니터링

gcloud 명령줄 도구 또는 REST API를 사용하여 변경할 때는 처음에 작업이 완료될 때까지 변경사항이 보류 중으로 표시됩니다. gcloud 도구 또는 REST API를 사용하여 변경사항 상태를 확인하거나 변경사항 내역을 볼 수 있습니다.

Cloud DNS가 서버를 제어하는 시스템을 성공적으로 업데이트하면 작업이 완료됩니다(상태: done). 모든 네임서버가 업데이트되기 전에는 여전히 지연이 발생할 수 있습니다.

관리형 영역의 변경사항 나열

관리형 영역의 변경사항을 나열하려면 다음 옵션을 참조하세요.

gcloud

dns record-sets changes list 명령어를 실행합니다.

gcloud dns record-sets changes list --zone=ZONE

ZONE을 레코드 집합을 관리하려는 관리형 영역의 이름으로 바꿉니다.

Python

def list_changes(project_id, zone_name):
    client = dns.Client(project=project_id)
    zone = client.zone(zone_name)

    changes = zone.list_changes()

    return [(change.started, change.status) for change in changes]

DNS 전파 확인

DNS 네임서버에 변경사항이 적용되었는지 모니터링하고 확인하려면 watchdig 명령어를 사용하면 됩니다. 다음 예시에서는 네임서버를 조회하고 관리형 영역의 네임서버 중 하나에 MX 레코드 변경사항이 적용되었을 때 이를 확인하는 방법을 보여줍니다.

영역의 네임서버를 조회하려면 dns managed-zones describe 명령어를 실행합니다.

gcloud dns managed-zones describe ZONE_NAME

ZONE_NAME을 Cloud DNS 영역의 이름으로 바꿉니다.

권한 네임서버에서 레코드를 아직 사용할 수 있는지 확인하려면 다음 dig 명령어를 실행합니다.

watch dig example.com in MX @ZONE_NAME_SERVER

ZONE_NAME_SERVER를 관리형 영역의 네임서버 중 하나로 바꿉니다.

watch 명령어는 기본적으로 2초마다 dig 명령어를 실행합니다. 이 명령어를 사용하면 권한 네임서버가 변경사항을 선택하는 시점을 확인할 수 있습니다. 이러한 선택은 120초 이내에 이뤄져야 합니다. 권한 네임서버가 변경사항을 선택한 후에는 DNS 리졸버가 새 레코드를 선택할 수 있습니다. 이미 이전 레코드가 캐시된 리졸버는 레코드의 이전 TTL 값이 만료될 때까지 대기합니다.

시스템 네임서버에 대해 dig를 실행하려면 dig 명령어에서 @<address>를 삭제하면 됩니다. 다른 네임서버로의 전파를 모니터링하려면 다른 네임서버를 가리키도록 address를 변경하면 됩니다.

다음 단계

  • 레코드를 추가, 삭제, 업데이트하려면 레코드 관리를 참조하세요.
  • 관리형 영역을 생성, 업데이트, 나열, 삭제하려면 영역 관리를 참조하세요.
  • Cloud DNS를 사용할 때 발생할 수 있는 일반적인 문제에 대한 해결책을 찾으려면 문제 해결을 참조하세요.
  • API를 참조하려면 Cloud DNS REST API를 참조하세요.
  • Cloud DNS 개요는 Cloud DNS 개요를 참조하세요.