1. DNS 监控概述
DNS 监控对于保障服务可用性至关重要。通过监控可以及时发现解析异常、缓存问题和潜在攻击。
关键监控指标
- 服务状态:DNS 服务是否正在运行
- 查询统计:每秒查询数(QPS)、缓存命中率
- 区域状态:区域是否正常加载、记录数量
- 转发器状态:转发器是否响应
- 错误日志:查询失败、区域加载错误等
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)\*"