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 に関連していません。そのため、この機能を使用すると費用が発生する場合があります。通常、プロジェクトごとに毎月最初の 50 GiB のログ ストレージは無料です。50 GiB を追加するごとに $0.50 USD の費用が発生します。

料金の詳細については、Cloud Logging の料金概要をご覧ください。

Virtual Private Cloud(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 ログエントリのレートの変化。

    ヒストグラムを表示するには、[設定]、[表示]、[タイムラインを表示] の順にクリックします。

次のステップ