跳到主要内容
版本:v1.7.x

监控:DNS服务发现监控

HertzBeat 集成 DNS 服务,通过 DNS 记录自动发现服务实例并为发现的实例创建监控任务。

概述

DNS 服务发现允许 HertzBeat 通过查询 DNS 记录来发现服务实例。这是一种简单可靠的服务发现方法,利用标准 DNS 基础设施来查找服务实例。特别适用于使用 DNS SRV 记录或需要通过 DNS 发现服务的环境。

监控前操作

配置 DNS 记录

确保您的 DNS 服务器已正确配置服务发现记录。不同的记录类型有不同的格式:

  1. SRV 记录:用于服务发现,包含服务主机和端口信息
  2. A 记录:返回 IPv4 地址
  3. AAAA 记录:返回 IPv6 地址
  4. MX 记录:邮件服务器记录
  5. NS 记录:名称服务器记录

配置参数

参数名称参数帮助描述
任务名称标识此监控的名称,名称需要保证唯一性
DNS地址DNS 服务器地址。示例:8.8.8.8192.168.1.1
DNS端口DNS 服务器端口,默认为 53
记录类型要查询的 DNS 记录类型。选项:SRVAAAAAMXNS
记录名称要查询的 DNS 记录名称。示例:SRV 记录为 _http._tcp.example.com
采集间隔监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒
描述备注更多标识和描述此监控的备注信息,用户可以在这里备注信息

使用步骤

  1. 创建服务发现监控

    • 在 HertzBeat Web 界面中,导航到 监控新增监控
    • 选择监控类型:DNS服务发现
    • 填写基本配置参数
  2. 配置监控模板

    • 创建服务发现监控后,需要指定一个监控模板
    • 模板定义了为发现的服务实例创建什么类型的监控
    • 对于 SRV 记录,常用的模板包括端口、HTTP 等
    • 对于 A/AAAA 记录,可以使用 Ping 或端口监控
  3. 自动发现

    • HertzBeat 会根据采集间隔定期查询 DNS 服务器
    • 为新发现的服务实例自动创建监控任务
    • 自动删除已消失服务实例的监控任务
  4. 查看发现的实例

    • 在监控列表中,您可以看到所有自动创建的子监控任务
    • 每个子监控任务对应一个发现的服务实例

使用示例

示例 1:SRV 记录发现

假设您的 Web 服务有一个 SRV 记录:

  • SRV 记录_http._tcp.example.com
  • DNS 服务器8.8.8.8
  • 预期发现:自动发现所有 HTTP 服务实例

配置示例:

  • 任务名称DNS-SRV-Discovery
  • DNS地址8.8.8.8
  • DNS端口53
  • 记录类型:选择 SRV
  • 记录名称_http._tcp.example.com
  • 采集间隔60
  • 监控模板:选择 端口 监控(使用 SRV 记录中的端口)

配置完成后:

  1. HertzBeat 查询 _http._tcp.example.com 的 SRV 记录
  2. 从 SRV 记录响应中提取主机和端口信息
  3. 为每个服务实例自动创建端口监控

示例 2:A 记录发现

通过 A 记录发现服务实例:

  • A 记录services.example.com
  • 该域名可能解析到多个 IP 地址

配置示例:

  • DNS地址192.168.1.1(内部 DNS 服务器)
  • DNS端口53
  • 记录类型:选择 A
  • 记录名称services.example.com
  • 监控模板:选择 Ping端口 监控

示例 3:MX 记录发现

通过 MX 记录发现邮件服务器:

  • DNS地址8.8.8.8
  • 记录类型:选择 MX
  • 记录名称example.com
  • 监控模板:选择 端口 监控(端口 25)

DNS 记录类型

SRV 记录(推荐)

SRV 记录是最常用的服务发现记录类型,包含服务名称、端口号和优先级信息。

格式:_service._protocol.example.com

示例:_http._tcp.example.com

典型的 SRV 记录响应包含:

  • 目标域名
  • 端口号
  • 优先级和权重

A 记录

A 记录将域名映射到 IPv4 地址。如果一个域名解析到多个 IP,则可以发现所有 IP。

示例:services.example.com192.168.1.10192.168.1.11192.168.1.12

AAAA 记录

AAAA 记录将域名映射到 IPv6 地址。

示例:services.example.com2001:db8::1

MX 记录

MX 记录指定域的邮件服务器,包含优先级信息。

示例:example.commail.example.com

NS 记录

NS 记录指定域的名称服务器。

示例:example.comns1.example.com

注意事项

  • DNS 服务器:确保指定的 DNS 服务器可访问且包含服务发现记录
  • 记录名称:记录名称必须准确,SRV 记录需要包含服务和协议前缀
  • 端口信息
    • SRV 记录包含端口信息
    • A/AAAA 记录不包含端口信息,需要在监控模板中指定默认端口
  • 监控模板:服务发现仅发现服务实例地址,您需要配置合适的监控模板来实际监控这些实例
  • 采集间隔:建议最小间隔为 60 秒,避免过多的 DNS 查询
  • DNS 缓存:DNS 响应可能被缓存,实际更新频率取决于 DNS 记录的 TTL 值
  • 网络连通性:确保 HertzBeat 可以访问指定的 DNS 服务器和端口(默认:53)
  • 防火墙:确保防火墙允许 DNS 查询流量(UDP/TCP 53)

采集指标

指标集合:监控目标

指标名称指标单位指标帮助描述
目标发现的服务实例目标
主机服务实例主机地址
端口服务实例端口号

适用场景

  • Kubernetes Headless 服务:通过 DNS 发现 Kubernetes Pod 实例
  • 云服务:从云服务发现实例(AWS Route53、Azure DNS、GCP Cloud DNS)
  • 传统 DNS:使用现有 DNS 基础设施进行服务发现
  • 负载均衡:发现所有后端服务器实例
  • 邮件服务器:通过 MX 记录发现邮件服务器实例
  • 多环境:使用不同 DNS 记录在不同环境中进行服务发现

常见 SRV 记录格式

不同服务使用不同的 SRV 记录格式:

  • HTTP_http._tcp.example.com
  • HTTPS_https._tcp.example.com
  • LDAP_ldap._tcp.example.com
  • FTP_ftp._tcp.example.com
  • MySQL_mysql._tcp.example.com
  • PostgreSQL_postgresql._tcp.example.com

Kubernetes 集成

在 Kubernetes 集群中,可以使用 DNS 服务发现来发现 Pod 实例:

  1. Headless 服务:Kubernetes 为 headless 服务的每个 Pod 创建 DNS A 记录
  2. 服务发现:使用 DNS 服务发现监控特定服务的所有 Pod

示例:

  • DNS地址:Kubernetes 集群 DNS 服务 IP(通常是 10.96.0.10
  • 记录类型A
  • 记录名称my-service.default.svc.cluster.local
  • 监控模板端口 监控

DNS 服务器示例

常用的 DNS 服务器:

  • Google Public DNS8.8.8.88.8.4.4
  • Cloudflare DNS1.1.1.11.0.0.1
  • Quad9 DNS9.9.9.9
  • OpenDNS208.67.222.222208.67.220.220
  • 内部 DNS:通常是企业内部 DNS 服务器地址

最佳实践

  1. 使用 SRV 记录:SRV 记录是推荐的服务发现方法,因为它包含完整的主机和端口信息
  2. 设置合理的 TTL:设置适当的 DNS 记录 TTL 以平衡实时性能和 DNS 服务器负载
  3. 冗余配置:配置多个 DNS 服务器以确保高可用性
  4. 监控:定期检查 DNS 记录的有效性和可用性
  5. 安全性:确保 DNS 查询安全,考虑使用 DNS over HTTPS (DoH) 或 DNS over TLS (DoT)