日志记录和监控

本页面介绍了 Cloud DNS 的日志记录与监控指标,包括专用地区转发地区。另外还提供了有关监控公共 DNS 更改传播的说明。

专用 DNS 日志记录

专用 DNS 日志记录功能会跟踪由 Virtual Private Cloud 网络的域名服务器解析的查询。从外部实体直接查询公共地区不会被记录,因为这些查询由公共域名服务器处理。

所记录的查询可能来自 Compute Engine 虚拟机,对等互连地区同一 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 演示格式的 DNS 应答,RFC 1035 5.1,截断为 260 个字节
authAnswer 布尔值/DNS 权威应答,RFC 1035
sourceNetwork 字符串/来源 访问我们系统的查询的来源网络。
vmInstanceId 数字/来源 Compute Engine 虚拟机实例 ID,仅适用于 Compute Engine 虚拟机发起的查询。
vmInstanceName 字符串/来源 Compute Engine 虚拟机实例名称,仅适用于 Compute Engine 虚拟机发起的查询。
vmProjectId 字符串/来源 发送查询的网络的 GCP 项目 ID,仅适用于由 Compute Engine 虚拟机发起的查询。
vmZoneName 字符串/来源 发送查询的虚拟机地区的名称,仅适用于由 Compute Engine 虚拟机发起的查询。
sourceIP 字符串/来源 发起查询的 IP
destinationIP 字符串/目标 目标 IP,仅适用于转发情况。
protocol 字符串/DNS “TCP”|“UDP”
egressError 字符串 出站代理错误,即从本地 DNS 服务器收到的出站代理报告的实际错误。此字段可用于区分由本地 DNS 返回的实际 SERVFAIL 与出站代理遇到的网络连接错误。

出站转发

如果您收到包含 SERVFAIL 且缺少某些字段(如 destinationIPegressIPegressError)的日志,请参阅“问题排查”文档中的相关部分

监控指标

Cloud DNS 会将监控指标导出到 Cloud Monitoring

您可以监控针对专用地区、转发地区、政策转发、内部 GCP 地区和互联网的 DNS 查询和响应的速率。Cloud MonitoringMonitoring API 提供监控功能。

指标和资源类型

专用 DNS 会导出包含 response_code 标签的 dns.googleapis.com/query/response_count 增量指标,以计算每个响应代码的查询数。

response_code 标签的类型为 string,可能的值为:NOERRORFORMERRSERVFAILNXDOMAINNOTIMPUNKNOWN。如需了解这些代码的定义,请参阅 IANA DNS RCODEs

系统会使用日志记录格式的适用字段在 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;如果要监控更改是否传播到其他域名服务器,也可以将地址更改为其他域名服务器。

后续步骤