📊 DNS 监控与日志

DNS 服务器 · 第 9 篇 · 适用于 Windows Server 2019 / 2022 / 2025

1. DNS 监控概述

DNS 监控对于保障服务可用性至关重要。通过监控可以及时发现解析异常、缓存问题和潜在攻击。

关键监控指标

2. DNS 服务监控

1

Win + R 输入 services.msc,找到 DNS Server 服务,查看状态是否为"正在运行"

2

在 DNS 管理器中,右键 DNS 服务器 → 属性监控选项卡

3

点击测试当前设置,分别测试简单查询递归查询是否成功

4

勾选将此事件添加到日志以便持续记录

PowerShell - DNS 服务监控
# 查看 DNS 服务状态(是否正在运行)
Get-Service -Name DNS | Format-List Name, Status, StartType

# 如果服务未运行,启动它
Start-Service -Name DNS

# 查看服务依赖关系
Get-Service -Name DNS | Format-List -DependentServices

# 设置服务为自动启动
Set-Service -Name DNS -StartupType Automatic

3. DNS 查询统计

PowerShell - 查询统计
# 查看 DNS 服务器统计信息
Get-DnsServerStatistics

# 启用详细日志记录
Set-DnsServerDiagnostics `
    -EnableLogging $true `
    -LogLevel "All"

# 查看最近的查询记录(事件日志)
Get-WinEvent `
    -LogName "DNS Server" `
    -MaxEvents 20 `
    | Select-Object TimeCreated, Message

# 重置统计计数器
Clear-DnsServerStatistics

4. 性能计数器

PowerShell - 性能监控
# 导入 DNS 服务器性能计数器模块
Import-Module dnsserver

# 获取 DNS 查询性能计数器
Get-Counter -ListSet "DNS Server" -ErrorAction SilentlyContinue

# 查看当前查询速率(每秒查询数)
Get-Counter `
    -Counter "\DNS Server(_total)\DNS Query(Success/Sec)" `
    -SampleInterval 5 `
    -MaxSamples 1

# 查看区域记录数量
Get-DnsServerResourceRecord -ZoneName "iehang.cn" | Measure-Object

5. 日志配置与查看

PowerShell - 日志管理
# 查看 DNS 服务器事件日志
Get-WinEvent -LogName "DNS Server" -MaxEvents 50

# 筛选错误级别的事件
Get-WinEvent `
    -LogName "DNS Server" `
    -MaxEvents 20 `
    | Where-Object {$_.LevelDisplayName -eq "错误"}

# 查找特定域名的查询日志
Get-WinEvent `
    -LogName "DNS Server" `
    -MaxEvents 100 `
    | Where-Object {$_.Message -like "*iehang*"} `
    | Select-Object TimeCreated, Message
推荐做法

在生产环境中建议使用专门的监控工具(如 Zabbix、Prometheus + Grafana)收集 DNS 性能指标,设置 QPS 告警阈值(如超过 10000 QPS)和错误率告警。

6. 常见问题

Q1:DNS 服务意外停止

检查:1)事件日志中的停止原因;2)内存是否不足(DNS 服务器可能因 OOM 被系统终止);3)是否有服务依赖失败。设置 DNS 服务为"自动(延迟启动)"避免启动冲突。

Q2:QPS 异常高

可能原因:1)缓存命中率低(检查 TTL 设置);2)存在 DNS 放大攻击;3)客户端配置错误导致循环查询。使用性能计数器逐层排查:Get-Counter "\DNS Server(_total)\*"