로깅 및 모니터링

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

비공개 DNS 로깅

비공개 DNS 로깅은 Virtual Private Cloud 네트워크의 네임서버에서 확인하는 쿼리를 추적합니다. 외부 항목에서 공개 영역으로 직접 전송되는 쿼리는 외부 네임서버에서 처리하므로 로깅되지 않습니다.

로깅된 쿼리는 Compute Engine 가상 머신(VM), 동일한 VPC 네트워크에 있는 Google Kubernetes Engine 컨테이너, 피어링 영역에서 가져오거나 인바운드 DNS 전달을 사용하여 온프레미스 클라이언트에서 가져올 수 있습니다. 쿼리는 결과적으로 비공개 DNS 영역, 전달 DNS 영역, 대체 네임서버, 내부 GCP DNS 영역, 외부 DNS 영역에서 확인될 수 있습니다.

로그 레코드는 요청을 전달한 네트워크를 소유하는 프로젝트에 속합니다. 공유 VPC의 경우 호스트 프로젝트가 네트워크를 소유하므로 로그 레코드는 호스트 프로젝트에 속합니다.

로깅 사용 설정 및 중지

DNS 정책을 사용하여 네트워크의 로깅을 사용 설정합니다.

DNS 정책이 없는 네트워크의 로깅 사용 설정

gcloud dns policies create policy-name \
    --networks=network \
    --enable-logging \
    --description=description

다음 명령어 옵션을 바꿉니다.

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

기존 DNS 정책이 있는 네트워크의 로깅 사용 설정

gcloud dns policies update policy-name \
    --networks=network \
    --enable-logging

다음 명령어 옵션을 바꿉니다.

  • networks: 쉼표로 구분된 목록에 있는 하나 이상의 네트워크

로깅 중지

이렇게 하면 정책을 그대로 둔 상태에서 로깅이 해제됩니다. 아니면 프로젝트를 완전히 삭제할 수도 있습니다.

gcloud dns policies update policy-name \
    --networks=network \
    --no-enable-logging

다음 명령어 옵션을 바꿉니다.

  • networks: 쉼표로 구분된 목록에 있는 하나 이상의 네트워크

로그 보기

Google Cloud Console에서 Cloud DNS 로그 뷰어 페이지로 이동합니다.
로그 뷰어 페이지로 이동

레코드 형식

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

필드 필드 유형 설명 측정항목에서 사용
source_type 문자열 쿼리의 소스입니다(예: 'inbound-forwarding', 'gce-vm').
location 문자열 응답이 제공된 GCP 리전입니다(예: 'us-east1').
project_id 문자열 쿼리가 수신된 네트워크의 GCP 프로젝트 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 문자열/소스 쿼리가 전송된 네트워크의 GCP 프로젝트 ID로, Compute Engine VM에서 시작한 쿼리에만 적용됩니다. 아니요
vmZoneName 문자열/소스 쿼리가 전송된 VM 영역의 이름으로, Compute Engine VM에서 시작한 쿼리에만 적용됩니다. 아니요
sourceIP 문자열/소스 쿼리를 보내는 IP입니다. 아니요
destinationIP 문자열/대상 전달의 사례에만 적용되는 대상 IP입니다. 아니요
protocol 문자열/DNS 'TCP' | 'UDP'입니다. 아니요
egressError 문자열 이그레스 프록시 오류입니다. 이그레스 프록시가 보고한 온프레미스 DNS 서버에서 수신된 실제 오류입니다. 이 필드를 사용해서 온프레미스 DNS에서 반환한 실제 SERVFAIL과 이그레스 프록시에서 발생한 네트워크 오류를 구분할 수 있습니다. 아니요

발신 전달

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

측정항목 모니터링

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

비공개 영역, 전달 영역, 정책 전달, 내부 GCP 영역, 인터넷 대상의 DNS 쿼리 및 응답의 비율을 모니터링할 수 있습니다. 모니터링은 Cloud MonitoringMonitoring 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 전파 모니터링

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

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

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

명령줄

gcloud dns record-sets changes list --zone="myzonename"

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 전파 확인

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

다음과 같이 영역의 네임서버를 조회합니다.

gcloud dns managed-zones describe zone-name

다음 명령어 옵션을 바꿉니다.

  • zone-name: Cloud DNS 영역의 이름

권한 네임서버에 아직 사용할 수 있는 레코드가 있는지 확인합니다. your-zone-nameserver를 관리형 영역의 네임서버 중 하나로 교체합니다.

watch dig example.com in MX @your-zone-nameserver

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

dig 명령어에서 @<address>를 삭제하고 시스템 네임서버에 대해 dig 명령어를 실행하거나 다른 네임서버로 주소를 변경하여 다른 네임서버로의 전파를 모니터링할 수 있습니다.

다음 단계