普罗米修斯

源码

prometheus 允许使用 Prometheus 指标。

描述

借助 prometheus,你可以从 CoreDNS 和任何包含指标的插件导出指标。指标的默认位置是 localhost:9153。指标路径固定为 /metrics

除了 Prometheus Go 客户端 导出的默认 Go 指标之外,还会导出以下指标

  • coredns_build_info{version, revision, goversion} - CoreDNS 自身的相关信息。
  • coredns_panics_total{} - 崩溃总数。
  • coredns_dns_requests_total{server, zone, view, proto, family, type} - 查询总数。
  • coredns_dns_request_duration_seconds{server, zone, view, type} - 处理每个查询的持续时间。
  • coredns_dns_request_size_bytes{server, zone, view, proto} - 请求大小(以字节为单位)。
  • coredns_dns_do_requests_total{server, view, zone} - 设置了 DO 位的查询
  • coredns_dns_response_size_bytes{server, zone, view, proto} - 响应大小(以字节为单位)。
  • coredns_dns_responses_total{server, zone, view, rcode, plugin} - 每个区域、rcode 和插件的响应。
  • coredns_dns_https_responses_total{server, status} - 每个服务器和 http 状态码的响应。
  • coredns_dns_quic_responses_total{server, status} - 每个服务器和 QUIC 应用程序码的响应。
  • coredns_plugin_enabled{server, zone, view, name} - 指示是否在每个服务器、区域和视图的基础上启用插件。

几乎每个计数器都有一个标签 zone,即用于请求/响应的区域名。

使用的额外标签有

  • server 用于标识负责请求的服务器。这是一个字符串,格式为服务器的监听地址:<scheme>://[<bind>]:<port>。也就是说,对于“正常”DNS 服务器,这是 dns://:53。如果你正在使用 bind 插件,则包含 IP 地址,例如:dns://127.0.0.53:53
  • proto 保存响应的传输(“udp”或“tcp”)
  • 传输的地址族 (family)(1 = IP(IP 版本 4),2 = IP6(IP 版本 6))。
  • type 保存查询类型。它保存大多数常见类型(A、AAAA、MX、SOA、CNAME、PTR、TXT、NS、SRV、DS、DNSKEY、RRSIG、NSEC、NSEC3、HTTPS、IXFR、AXFR 和 ANY)和“other”,后者将所有其他类型汇总在一起。
  • status 保存 https 状态码。可能的值有
    • 200 - 处理了请求,
    • 404 - 请求已在验证时被拒绝,
    • 400 - 从请求到 DNS 消息的转换失败,
    • 500 - 处理以无响应结束。
  • plugin 标签保存将响应写入客户端的插件的名称。如果服务器执行了写入(例如在错误时),则值为 "empty"。

如果启用了监控,则在插件链中未输入的查询将使用假名称“已删除”导出(没有句点结尾 - 这从未是有效的域名)。

启用prometheus插件时,其他插件可能会导出其他状态。这些状态在每个插件的 README 中都有记录。

此插件每个服务器块只能使用一次。

语法

prometheus [ADDRESS]

对于要查看其指标的每个区域。

它可以选择采用将指标导出的绑定地址;默认情况下侦听`localhost:9153`。指标路径固定为`/metrics`。

示例

使用备用侦听地址

. {
    prometheus localhost:9253
}

或通过环境变量(Corefile 中全面支持):`export PORT=9253`,然后

. {
    prometheus localhost:{$PORT}
}

缺陷

在重新加载时,Prometheus 处理程序在启动新服务器实例之前停止。如果新服务器启动失败,那么初始服务器实例仍然可用,DNS 查询仍然可用,但 Prometheus 处理程序仍然处于关闭状态。在成功重新加载或完全重新启动 CoreDNS 之前,Prometheus 不会回复 HTTP 请求。只有注册为处理程序的插件在`coredns_plugin_enabled{server, zone, name}` 中可见。截至今天,不会报告插件 reload 和 bind。