Cloud DNS 로그를 사용하여 DNS 실패율 모니터링

Compute Engine 프로젝트에서 Cloud DNS 쿼리 로그를 사용 설정하고 이러한 로그를 사용하여 영역 내부 DNS로 마이그레이션하기 전후의 내부 DNS 실패율을 모니터링하고 비교할 수 있습니다. 로그 항목은 DNS 확인이 성공한 경우와 내부 DNS가 특정 도메인 이름을 확인하지 못한 경우를 기록합니다.

개요

Cloud DNS 쿼리 로그를 사용하여 내부 DNS 실패율을 모니터링하려면 다음 단계를 완료하세요.

  1. 모니터링할 VM이 포함된 VPC의 Virtual Private Cloud (VPC) 네트워크 이름을 가져옵니다.
  2. VPC 네트워크 이름을 사용하여 Google Cloud CLI 명령어를 실행하여 DNS 쿼리 로깅을 사용 설정합니다.
  3. 로그 탐색기에서 쿼리를 실행하여 성공률과 실패율을 시각화하고 조사합니다.

Cloud DNS 쿼리 로깅 가격 정보

Cloud DNS 쿼리 로깅을 사용 설정하면 상당한 양의 로그가 생성되며, 이 중 상당수는 내부 DNS와 관련이 없습니다. 따라서 이 기능을 사용하면 비용이 발생할 수 있습니다. 일반적으로 프로젝트당 월별 첫 50GiB의 로그 스토리지는 무료입니다. 추가 50GiB당 비용은 미화 $0.50입니다.

가격 책정에 대한 자세한 내용은 Cloud Logging 가격 책정 요약을 참고하세요.

가상 프라이빗 클라우드 (VPC) 네트워크 이름 가져오기

DNS 쿼리 데이터를 캡처하려면 컴퓨팅 인스턴스에서 사용하는 VPC 네트워크에 로깅을 사용 설정해야 합니다. 프로젝트에는 Google Cloud VPC 네트워크가 여러 개 있는 경우가 많습니다. gcloud CLI 명령어를 사용하여 모니터링할 컴퓨팅 인스턴스에서 사용하는 VPC 네트워크를 나열할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. (선택사항) 필터 상자를 사용하여 표시되는 인스턴스 수를 제한합니다.

  3. 검사하려는 인스턴스의 이름을 클릭합니다.

  4. 네트워킹 섹션의 네트워크 인터페이스에서 인스턴스에 대해 생성된 네트워크 인터페이스(NIC), 각 NIC와 연결된 네트워크 및 서브넷, 할당된 IP 주소를 확인할 수 있습니다.

gcloud

  • 프로젝트의 모든 컴퓨팅 인스턴스에서 사용되는 VPC 네트워크를 보려면 gcloud compute instances list 명령어를 사용합니다. 명령어에 --format 옵션을 추가하여 반환된 정보를 특정 필드로 제한하고 표시 방식을 변경할 수 있습니다. 예를 들면 다음과 같습니다.

    gcloud compute instances list \
      --format="flattened(name,networkInterfaces[].name, \
        networkInterfaces[].network.basename(), \
        networkInterfaces[].stackType, networkInterfaces[].nicType)"
    

    출력은 다음과 비슷합니다.

    name:                           test-gvnic
    networkInterfaces[0].name:      nic0
    networkInterfaces[0].network:   default
    networkInterfaces[0].nicType:   GVNIC
    networkInterfaces[0].stackType: IPV4_ONLY
    ---
    name:                           test-multinic
    networkInterfaces[0].name:      nic0
    networkInterfaces[0].network:   default
    networkInterfaces[0].nicType:   GVNIC
    networkInterfaces[0].stackType: IPV4_ONLY
    networkInterfaces[1].name:      nic0.14
    networkInterfaces[1].network:   net0
    networkInterfaces[1].stackType: IPV4_ONLY
    networkInterfaces[2].name:      nic1
    networkInterfaces[2].network:   prod-ipv6
    networkInterfaces[2].nicType:   GVNIC
    networkInterfaces[2].stackType: IPV4_IPV6
    
  • 특정 컴퓨팅 인스턴스와 할당된 VPC 네트워크의 네트워크 인터페이스 (NIC)를 보려면 gcloud compute instances describe 명령어를 사용합니다. 명령어에 --format 옵션을 추가하여 반환된 정보를 특정 필드로 제한하고 표시 방식을 변경할 수 있습니다. 예를 들면 다음과 같습니다.

    gcloud compute instances describe INSTANCE_NAME --zone=ZONE \
      --format="flattened(name,networkInterfaces[].name, \
      networkInterfaces[].network.basename(), \
      networkInterfaces[].stackType, networkInterfaces[].nicType)"
    

    다음을 바꿉니다.

    • INSTANCE_NAME: 확인할 인스턴스의 이름
    • ZONE: 확인할 인스턴스의 영역

    출력은 다음과 비슷합니다.

    name:                           test-instance
    networkInterfaces[0].name:      nic0
    networkInterfaces[0].network:   default
    networkInterfaces[0].nicType:   GVNIC
    networkInterfaces[0].stackType: IPV4_ONLY
    networkInterfaces[1].name:      nic1
    networkInterfaces[1].network:   prod-ipv6
    networkInterfaces[1].nicType:   GVNIC
    networkInterfaces[1].stackType: IPV4_IPV6
    networkInterfaces[1].name:      nic1.2
    networkInterfaces[1].network:   alt-ipv6-net
    networkInterfaces[1].nicType:   GVNIC
    networkInterfaces[1].stackType: IPV4_IPV6
    networkInterfaces[1].parentNicName: nic1
    

Cloud DNS 쿼리 로깅 사용 설정

Cloud DNS 로깅은 외부 항목에서 직접 공개 영역으로의 쿼리뿐만 아니라 네임서버가 VPC 네트워크에 대해 확인하는 쿼리를 추적합니다.

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

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

DNS 로깅을 사용 설정하려면 다음 중 하나를 실행합니다.

  • gcloud dns policies create 명령어를 실행하여 로깅이 사용 설정된 새 DNS 정책을 만듭니다.

    gcloud dns policies create POLICY_NAME \
        --networks=NETWORK_NAMES \
        --enable-logging \
        --description="Enable DNS query logging for NETWORK_NAMES"
    
  • 네트워크에 이미 DNS 정책이 있는 경우 gcloud dns policies update 명령어를 실행하여 기존 로깅 정책을 업데이트합니다.

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

다음을 바꿉니다.

  • POLICY_NAME: DNS 정책의 이름
  • NETWORK_NAMES: 쉼표로 구분된 네트워크 이름 목록

로깅을 위한 DNS 정책을 만들고 사용 설정하는 방법에 관한 자세한 안내는 Cloud DNS 로깅 사용을 참고하세요.

로그 탐색기를 사용하여 로그를 보고 DNS 실패율 시각화

DNS 로깅을 사용 설정하면 프로젝트에서 로그 탐색기에 로그를 누적하기 시작합니다. 이러한 로그를 보려면 Google Cloud 콘솔을 사용하여 로그 탐색기 페이지로 이동합니다.

로그 탐색기로 이동

DNS 이름 변환 실패 모니터링

NXDOMAIN 응답 코드를 사용하여 존재하지 않는 도메인 오류를 격리합니다. 이러한 오류는 내부 DNS가 지정된 도메인 이름을 확인할 수 없을 때 발생합니다.

  1. 로그 탐색기 콘솔 페이지의 쿼리 상자에 다음 텍스트를 입력합니다.

    resource.type="dns_query"
    jsonPayload.queryType="A"
    jsonPayload.queryName=~"\.internal\.$"
    jsonPayload.responseCode = "NXDOMAIN"
    
  2. 쿼리 실행을 클릭합니다.

성공적인 이름 변환 쿼리 모니터링

NOERROR 응답 코드를 사용하여 DNS 변환이 성공했는지 확인합니다.

  1. 로그 탐색기 콘솔 페이지의 쿼리 상자에 다음 텍스트를 입력합니다.

    resource.type="dns_query"
    jsonPayload.queryType="A"
    jsonPayload.queryName=~"\.internal\.$"
    jsonPayload.responseCode = "NOERROR"
    
  2. 쿼리 실행을 클릭합니다.

분석 기간 설정

로그 기간 선택기를 사용하여 분석된 로그의 기간을 변경할 수 있습니다. 이 선택기는 로그 탐색기 창의 오른쪽 상단에 있습니다.

오류율과 성공률을 효과적으로 비교하려면 영역 DNS를 사용하도록 마이그레이션하기 전에 DNS 쿼리 로그를 사용 설정해야 합니다. 마이그레이션 전 기준을 설정하려면 마이그레이션 최소 24시간 전에 DNS 쿼리 로깅을 사용 설정하는 것이 좋습니다.

DNS 쿼리 로그에서 충분한 데이터를 수집한 후 영역 DNS 마이그레이션을 실행할 수 있습니다. 이전 중에 DNS 변환 비율을 모니터링하여 이전으로 인해 DNS 쿼리 실패가 증가하지 않는지 확인할 수 있습니다.

DNS 이름 변환 비율 분석 및 비교

다음과 같은 방법으로 오류율과 성공률을 분석하고 비교할 수 있습니다.

  • 로그 수: 각 쿼리 및 기간에 대해 로그 탐색기에 검색된 로그 항목 수가 표시됩니다. 이전에 확인된 (NOERROR이 있었던) DNS 이름의 마이그레이션 후 NXDOMAIN 수가 크게 증가하면 문제가 있을 수 있습니다.

  • 히스토그램: 로그 탐색기 인터페이스에는 히스토그램이 포함되어 있습니다. 쿼리가 실행되면 히스토그램에 선택한 기간 동안 일치하는 로그 항목의 빈도가 표시됩니다. 이는 다음을 시각화하는 데 유용합니다.

    • 이전 전 기준 NXDOMAIN 로그 항목 비율입니다.
    • 이전 직후 NXDOMAIN 로그 항목의 급증
    • NOERROR 로그 항목의 비율 변화

    히스토그램을 보려면 환경설정을 클릭한 다음 보기를 클릭하고 타임라인 표시를 클릭합니다.

다음 단계