Files
hertzbeat/home/i18n/zh-cn/docusaurus-plugin-content-docs/version-1.9.0/help/dns_sd.md
T

7.9 KiB
Raw Blame History

id, title, sidebar_label, keywords
id title sidebar_label keywords
dns_sd 监控:DNS服务发现监控 DNS服务发现
开源监控系统
开源服务发现监控
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. 查看发现的实例

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

使用示例

示例 1SRV 记录发现

假设您的 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. 为每个服务实例自动创建端口监控

示例 2A 记录发现

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

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

配置示例:

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

示例 3MX 记录发现

通过 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)