ロギングとモニタリング

このページでは、限定公開ゾーン転送ゾーンを含む 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: カンマ区切りのリストの 1 つ以上のネットワーク
  • DESCRIPTION ポリシーの説明

既存の DNS ポリシーを持つネットワークのロギングを有効にするには、dns policies update コマンドを実行します。

gcloud

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

次のように置き換えます。

  • POLICY_NAME: DNS ポリシーの名前
  • NETWORK: カンマ区切りのリストの 1 つ以上のネットワーク

ポリシーを維持したままロギングを止めるには、dns policies update コマンドを実行します。

gcloud

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

次のように置き換えます。

  • POLICY_NAME: DNS ポリシーの名前
  • NETWORK: カンマ区切りのリストの 1 つ以上のネットワーク

ポリシーを完全に削除するには、dns policies delete コマンドを実行します。

gcloud

gcloud dns policies delete POLICY_NAME \

POLICY_NAME は、削除する DNS ポリシーの名前に置き換えます。

ログの表示

Console

Google Cloud Console で、[ログ エクスプローラ] ページに移動します。

[ログ エクスプローラ] に移動

レコード形式のフィールドの表示

すべてのログエントリに次のフィールドがあります(ログエントリによっては該当しないものもあります)。一部のフィールドはモニタリング指標と共有されています。

フィールド フィールド タイプ 説明 指標で使用
source_type 文字列 クエリの発行元: inbound-forwardinggce-vm
location 文字列 レスポンスの送信元となる Google Cloud リージョン(us-east1 など)
project_id 文字列 クエリの送信元ネットワークの Google Cloud プロジェクト ID
target_type 文字列 DNS クエリを解決するターゲットの種類: private-zoneforwarding-zoneforwarding-policypeering-zoneinternalexternal
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 プレゼンテーション形式の DNS 回答、RFC 1035 5.1、260 バイトで切り捨て ×
authAnswer ブール値 / DNS 権威ある回答、RFC 1035 ×
sourceNetwork 文字列 / ソース システムに到達したクエリの発信元ネットワーク ×
vmInstanceId 数値 / ソース Compute Engine VM インスタンス ID。Compute Engine VM によって開始されたクエリにのみ該当します。 ×
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 は 10,000 件の DNS クエリを処理するために、約 5 KB のログデータを書き込みます。

Cloud Logging の料金については、Google Cloud のオペレーション スイートの料金: Cloud Logging をご覧ください。

送信転送のトラブルシューティング

SERVFAIL が含まれているログを受信したものの、destinationIPegressIPegressError など特定のフィールドが欠落している場合は、トラブルシューティング ドキュメントの関連するセクションをご覧ください。

モニタリング指標

Cloud DNS は、モニタリング指標を Cloud Monitoring にエクスポートします。

限定公開ゾーン、転送ゾーン、ポリシー転送、内部 Google Cloud ゾーン、インターネットを指す DNS クエリとレスポンスの割合をモニタリングできます。Monitoring は、Google Cloud Console の [Monitoring] ページCloud Monitoring API で利用できます。

限定公開 DNS は、response_code ラベルを含む dns.googleapis.com/query/response_count デルタ指標をエクスポートし、レスポンス コードあたりのクエリ数をカウントします。

response_code ラベルは string 型で、NOERRORFORMERRSERVFAILNXDOMAINNOTIMPUNKNOWN のいずれかになります。コードの定義については、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 ネームサーバーで変更が反映されたことを監視して確認するには、watch コマンドと dig コマンドを使用します。次の例は、ネームサーバーを検索し、マネージド ゾーンのネームサーバーの 1 つが 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 の概要をご覧ください。