DNS 是 Kubernetes 集群中服务发现的基础,集群 DNS 服务发现的性能和稳定性与业务质量密切相关。本文为您介绍如何配置 DNS 服务观测。
在大规模场景下时,大量的 DNS 请求会对集群中的 DNS 组件造成较大的压力,导致 DNS 的时延增加,从而影响业务性能。因此,您需要使用集群的可观测能力,及时了解到集群中 DNS 组件的工作状态,并在必要时给出告警和进行处理。
容器服务支持 CoreDNS 组件和 NodeLocal DNSCache 组件。支持标准的集群 DNS 服务发现和节点 DNS 缓存代理功能。涉及的组件包括:
说明
更多的组件介绍和组件安装方式,请参见 组件管理。
监控开启后,您可以配置采集规则,选择需要采集的目标组件、具体指标项及采集间隔。可以根据实际需求丢弃一些不用的指标。
说明
您可以基于系统预置的告警模板,快速完成 DNS 服务观测的告警配置。
配置项 | 说明 |
---|---|
告警模版 | 勾选需要的告警模版,允许多选。 |
告警聚合策略 | 在下拉菜单中选择告警聚合策略。详情请参见 创建告警聚合策略。 |
告警通知策略 | 在下拉菜单中选择告警通知策略。系统会使用通知策略中配置的告警等级和联系人组,将告警发送给指定的联系人。详情请参见 创建告警通知策略。 |
您可以查看所有或指定 core-dns 实例的监控信息,包括:DNS 请求、DNS 错误率、DNS 转发、DNS 缓存命中率等。支持设置查询的时间段,并指定刷新方式(手动刷新、自动刷新)。
该看板的指标清单如下表所示。
看板名称 | PromQL 语句 |
---|---|
DNS 请求 | sum(increase(coredns_dns_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="core-dns"}[$__range])) or vector(0) |
DNS 错误率 | 100*sum(increase(coredns_dns_responses_total{cluster=~"$ClusterId",pod=~"$Pod",job="core-dns",rcode=~"SERVFAIL|REFUSED"}[$__range]))/sum(increase(coredns_dns_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="core-dns"}[$__range])) or vector(0) |
DNS 转发 | sum(increase(coredns_forward_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="core-dns"}[$__range])) or vector(0) |
DNS 缓存命中率 | 100*sum(increase(coredns_cache_hits_total{cluster=~"$ClusterId",pod=~"$Pod",job="core-dns"}[$__range]))/sum(increase(coredns_dns_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="core-dns"}[$__range])) or vector(0) |
DNS 请求(按协议) | sum(rate(coredns_dns_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="core-dns"}[5m])) by (proto) |
DNS 请求(按类型) | sum(rate(coredns_dns_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="core-dns"}[5m])) by (type) |
DNS 转发 | sum(rate(coredns_forward_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="core-dns"}[5m])) or vector(0) |
DNS 错误率 | 100*sum(rate(coredns_dns_responses_total{cluster=~"$ClusterId",pod=~"$Pod",job="core-dns",rcode=~"SERVFAIL|REFUSED"}[5m]))/sum(rate(coredns_dns_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="core-dns"}[5m])) or vector(0) |
缓存命中/未命中 | sum(rate(coredns_cache_hits_total{cluster=~"$ClusterId",pod=~"$Pod",job="core-dns"}[5m])) |
sum(rate(coredns_cache_misses_total{cluster=~"$ClusterId",pod=~"$Pod",job="core-dns"}[5m])) | |
请求响应延时(P90) | 1000*histogram_quantile(0.9, sum(rate(coredns_dns_request_duration_seconds_bucket{cluster=~"$ClusterId",pod=~"$Pod",job="core-dns"}[5m]))by (le)) |
转发请求响应延时(P90) | 1000*histogram_quantile(0.9, sum(rate(coredns_forward_request_duration_seconds_bucket{cluster=~"$ClusterId",pod=~"$Pod",job="core-dns"}[5m]))by (le)) |
说明
如果您需要在托管 Prometheus 中的 Explore 功能或告警中心使用上述 PromQL 语句查看具体的指标或配置告警,请修改或删除语句中关于集群、节点、容器组的变量。例如:将 cluster=~"$ClusterId"
参数中的$ClusterId
变量修改为具体的集群 ID ,或直接删除该参数。
您可以查看所有或指定 node-local-dns 实例的监控信息,包括:DNS 请求、DNS 错误率、DNS 转发、DNS 缓存命中率等。支持设置查询的时间段,并指定刷新方式(手动刷新、自动刷新)。
该看板的指标清单如下表所示。
看板名称 | PromQL 语句 |
---|---|
DNS 请求 | sum(increase(coredns_dns_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="node-local-dns"}[$__range])) or vector(0) |
DNS 错误率 | 100*sum(increase(coredns_dns_responses_total{cluster=~"$ClusterId",pod=~"$Pod",job="node-local-dns",rcode=~"SERVFAIL|REFUSED"}[$__range]))/sum(increase(coredns_dns_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="node-local-dns"}[$__range])) or vector(0) |
DNS 转发 | sum(increase(coredns_forward_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="node-local-dns"}[$__range])) or vector(0) |
DNS 缓存命中率 | 100*sum(increase(coredns_cache_hits_total{cluster=~"$ClusterId",pod=~"$Pod",job="node-local-dns"}[$__range]))/sum(increase(coredns_dns_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="node-local-dns"}[$__range])) or vector(0) |
DNS 请求(按协议) | sum(rate(coredns_dns_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="node-local-dns"}[5m])) by (proto) |
DNS 请求(按类型) | sum(rate(coredns_dns_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="node-local-dns"}[5m])) by (type) |
DNS 转发 | sum(rate(coredns_forward_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="node-local-dns"}[5m])) or vector(0) |
DNS 错误率 | 100*sum(rate(coredns_dns_responses_total{cluster=~"$ClusterId",pod=~"$Pod",job="node-local-dns",rcode=~"SERVFAIL|REFUSED"}[5m]))/sum(rate(coredns_dns_requests_total{cluster=~"$ClusterId",pod=~"$Pod",job="node-local-dns"}[5m])) or vector(0) |
缓存命中/未命中 | sum(rate(coredns_cache_hits_total{cluster=~"$ClusterId",pod=~"$Pod",job="node-local-dns"}[5m])) |
sum(rate(coredns_cache_misses_total{cluster=~"$ClusterId",pod=~"$Pod",job="node-local-dns"}[5m])) | |
请求响应延时(P90) | 1000*histogram_quantile(0.9, sum(rate(coredns_dns_request_duration_seconds_bucket{cluster=~"$ClusterId",pod=~"$Pod",job="node-local-dns"}[5m]))by (le)) |
转发请求响应延时(P90) | 1000*histogram_quantile(0.9, sum(rate(coredns_forward_request_duration_seconds_bucket{cluster=~"$ClusterId",pod=~"$Pod",job="node-local-dns"}[5m]))by (le)) |
说明
如果您需要在托管 Prometheus 中的 Explore 功能或告警中心使用上述 PromQL 语句查看具体的指标或配置告警,请修改或删除语句中关于集群、节点、容器组的变量。例如:将 cluster=~"$ClusterId"
参数中的$ClusterId
变量修改为具体的集群 ID ,或直接删除该参数。
您可以使用托管 Prometheus 的 Explore 功能来快速查询和展示指标数据。详情请参见 指标查询。