CoreDNSの監視方法について

本文の内容は、2023年1月26日にVICTOR HERNANDO が投稿したブログ（https://sysdig.com/blog/how-to-monitor-coredns)を元に日本語に翻訳・再構成した内容となっております。<br /><br />CoreDNSは、Kubernetes環境向けの<a href="https://kubernetes.io/blog/2018/07/10/coredns-ga-for-kubernetes-cluster-dns/">DNSアドオン</a>です。コントロールプレーンノードで動作するコンポーネントの1つで、これが完全に動作し、応答することは、Kubernetesクラスターが適切に機能するための鍵になります。CoreDNSを監視する方法と、その最も重要なメトリクスが何であるかを学ぶことは、運用チームにとって必須です。<br /><br /><img decoding="async" width="1170" height="644" src="https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-featured-1170x644.png" alt="" class="img-lightbox wp-image-65001 u-drop-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-featured-1170x644.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-featured-350x193.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-featured-768x423.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-featured-175x96.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-featured.png 1200w, / 1w" data-lazy-sizes="(max-width: 1170px) 100vw, 1170px" data-lazy-src="https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-featured-1170x644.png" data-ll-status="loaded" sizes="(max-width: 1170px) 100vw, 1170px" srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-featured-1170x644.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-featured-350x193.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-featured-768x423.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-featured-175x96.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-featured.png 1200w, / 1w" /><br /><br />あなたのキャリアのある時点で、あなたは聞いたことがあるかもしれません。なぜいつもDNSなのですか？<br /><br />まあ、それは簡単なことです。DNSは、あらゆるアーキテクチャーにおいて最も機密性が高く、重要なサービスの1つです。アプリケーション、マイクロサービス、サービス、ホスト...今日では、すべてが相互接続されており、これは必ずしも内部サービスを意味するものではありません。外部サービスにも適用できます。DNSは、ドメイン名を解決し、内部または外部サービス、PodのいずれかのIPを容易にする役割を担っています。PodsのDNSレコードを維持することは、特にIPアドレスが警告なしにいつ変わるかわからないエフェメラルPodsの場合、重要なタスクとなります。<br /><br />しかし、DNSが応答しなかったり、ダウンしたりするとどうなるでしょうか？<strong>あなたは深刻な問題に直面することになります。</strong><br /><br />Kubernetesでワークロードを実行しており、CoreDNSを監視する方法がわからない場合は、読み進めて、Prometheusを使用してCoreDNSメトリクスをスクレイピングする方法、これらのうちどれを確認すべきか、そしてそれらが何を意味するかをチェックしてください。<br /><br />この記事では、以下のトピックを取り上げます。<br /><br /><ul><li>KubernetesのCoreDNSとは？</li><li>KubernetesのCoreDNSを監視する方法は？</li><li>KubernetesのCoreDNSを監視する：どのメトリクスを確認する必要がありますか？</li><li>まとめ</li></ul><br /><h2>Kubernetes CoreDNSとは？</h2>Kubernetes 1.11から、DNSベースのサービスディスカバリのGeneral Availability（GA）を迎えた直後に、これまでKubernetesクラスターの事実上のDNSエンジンであったkube-dnsアドオンの代替として、<a href="https://coredns.io/">CoreDNS</a>が導入されました。CoreDNSはその名の通り、Goで書かれたDNSサービスで、その柔軟性から広く採用されています。<br /><br /><img decoding="async" width="1170" height="878" src="https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-diagram-1170x878.png" alt="" class="img-lightbox wp-image-65002 u-drop-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-diagram-1170x878.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-diagram-350x263.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-diagram-768x576.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-diagram-175x131.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-diagram.png 1200w, / 1w" data-lazy-sizes="(max-width: 1170px) 100vw, 1170px" data-lazy-src="https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-diagram-1170x878.png" data-ll-status="loaded" sizes="(max-width: 1170px) 100vw, 1170px" srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-diagram-1170x878.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-diagram-350x263.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-diagram-768x576.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-diagram-175x131.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-coredns-diagram.png 1200w, / 1w" /><br /><br />kube-dnsアドオンに関しては、1つのPod内にkubedns、dnsmasq、sidecarという3種類のコンテナという形でDNS機能全体を提供しています。この3つのコンテナについて見ていきましょう。<br /><br /><ul><li><code>kubedns</code><span>: </span>Kubernetes用のSkyDNSの実装です。Kubernetesクラスター内のDNS解決を担当します。KubernetesのAPIを監視し、適切なDNSレコードを提供します。</li><li><code>dnsmasq</code><span>: </span>SkyDNSの解決要求のためのDNSキャッシュ機構を提供します。</li><li><code>sidecar</code><span>: </span>このコンテナは、メトリクスをエクスポートし、DNSサービスのヘルスチェックを実行します。</li></ul><br />それでは、CoreDNSについて説明します！<br /><br />CoreDNSは、当時kube-dnsがもたらした問題のいくつかを解決するために登場しました。<strong>Dnsmasq</strong>は、過去にKubernetesのセキュリティパッチが必要となるような<strong>セキュリティ脆弱性の問題をもたらしました。</strong>さらに、CoreDNSは、kube-dnsで必要だった3つのコンテナではなく、1つのコンテナですべての機能を提供し、<strong>kube-dnsの外部サービス用スタブドメインに関する他のいくつかの問題を解決しています。</strong><br /><br />CoreDNSはそのメトリクスエンドポイントを9153ポートで公開し、SDNネットワーク内のPodからもホストノードネットワークからもアクセス可能です。<br /><br /><pre># kubectl get ep kube-dns -n kube-system -o json |jq -r ".subsets"<br />[<br />  {<br />    "addresses": [<br />      {<br />        "ip": "192.169.107.100",<br />        "nodeName": "k8s-control-2.lab.example.com",<br />        "targetRef": {<br />        "kind": "Pod",<br />        "name": "coredns-565d847f94-rz4b6",<br />        "namespace": "kube-system",<br />        "uid": "c1b62754-4740-49ca-b506-3f40fb681778"<br />      }<br />    },<br />    {<br />      "ip": "192.169.203.46",<br />      "nodeName": "k8s-control-3.lab.example.com",<br />      "targetRef": {<br />        "kind": "Pod",<br />        "name": "coredns-565d847f94-8xqxg",<br />        "namespace": "kube-system",<br />        "uid": "bec3ca63-f09a-4007-82e9-0e147e8587de"<br />      }<br />    }<br />  ],<br />  "ports": [<br />    {<br />      "name": "dns-tcp",<br />      "port": 53,<br />      "protocol": "TCP"<br />    },<br />    {<br />      "name": "dns",<br />      "port": 53,<br />      "protocol": "UDP"<br />    },<br />    {<br />      "name": "metrics",<br />      "port": 9153,<br />      "protocol": "TCP"<br />     }<br />   ]<br />  }<br />]</pre><br />CoreDNSが何であるか、そして既に解決された問題はお分かりいただけたと思います。次はCoreDNSのメトリクスを取得する方法と、Prometheusインスタンスを構成してメトリクスのスクレイピングを開始する方法を深掘りする番です。さっそく始めてみましょう！<br /><br /><h2>KubernetesでCoreDNSを監視する方法は？</h2>前のセクションで見たように、CoreDNSはすでにインスツルメンテーションされており、すべてのCoreDNS Podのポート9153で独自の<span> </span><code>/metrics</code><span> </span>エンドポイントを公開しています。この<span> </span><code>/metrics</code>エンドポイントへのアクセスは簡単で、curlを実行するだけで、すぐにCoreDNSのメトリクスを取得し始めることができます。<br /><br /><h3>エンドポイントに手動でアクセスする</h3>CoreDNSが動作しているエンドポイントまたはIPがわかったら、9153ポートにアクセスしてみてください。<br /><pre># curl http://192.169.203.46:9153/metrics<br /># HELP coredns_build_info A metric with a constant '1' value labeled by version, revision, and goversion from which CoreDNS was built.<br /># TYPE coredns_build_info gauge<br />coredns_build_info{goversion="go1.18.2",revision="45b0a11",version="1.9.3"} 1<br /># HELP coredns_cache_entries The number of elements in the cache.<br /># TYPE coredns_cache_entries gauge<br />coredns_cache_entries{server="dns://:53",type="denial",zones="."} 46<br />coredns_cache_entries{server="dns://:53",type="success",zones="."} 9<br /># HELP coredns_cache_hits_total The count of cache hits.<br /># TYPE coredns_cache_hits_total counter<br />coredns_cache_hits_total{server="dns://:53",type="denial",zones="."} 6471<br />coredns_cache_hits_total{server="dns://:53",type="success",zones="."} 6596<br /># HELP coredns_cache_misses_total The count of cache misses. Deprecated, derive misses from cache hits/requests counters.<br /># TYPE coredns_cache_misses_total counter<br />coredns_cache_misses_total{server="dns://:53",zones="."} 1951<br /># HELP coredns_cache_requests_total The count of cache requests.<br /># TYPE coredns_cache_requests_total counter<br />coredns_cache_requests_total{server="dns://:53",zones="."} 15018<br /># HELP coredns_dns_request_duration_seconds Histogram of the time (in seconds) each request took per zone.<br /># TYPE coredns_dns_request_duration_seconds histogram<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.00025"} 14098<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.0005"} 14836<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.001"} 14850<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.002"} 14856<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.004"} 14857<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.008"} 14870<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.016"} 14879<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.032"} 14883<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.064"} 14884<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.128"} 14884<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.256"} 14885<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.512"} 14886<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="1.024"} 14887<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="2.048"} 14903<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="4.096"} 14911<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="8.192"} 15018<br />coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="+Inf"} 15018<br />coredns_dns_request_duration_seconds_sum{server="dns://:53",zone="."} 698.531992215999<br />coredns_dns_request_duration_seconds_count{server="dns://:53",zone="."} 15018<br />…<br />(output truncated)</pre><br />また、Kubernetesクラスターでデフォルトで公開されているCoreDNS Kubernetesサービスを通じて、<span> </span><code>/metrics</code><span> </span>エンドポイントにアクセスすることもできます。<br /><br /><pre># kubectl get svc -n kube-system<br />NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE<br />kube-dns ClusterIP 10.96.0.10 &lt;none&gt; 53/UDP,53/TCP,9153/TCP 129d<br /><br /># kubectl exec -it my-pod -n default -- /bin/bash<br /><br /># curl http://kube-dns.kube-system.svc:9153/metrics</pre><br /><h3>CoreDNSメトリクスをスクレイピングするためのPrometheusの設定方法</h3>Prometheusは、ターゲットのディスカバリーを開始し、Pod、Kubernetesノード、Kubernetesサービスなどの複数のソースからメトリクスをスクレイピングするための一連のロールを提供しています。Kubernetesクラスターに組み込まれたCoreDNSサービスからメトリクスをスクレイピングする場合、<span> </span><code>prometheus.yml</code><span> </span>ファイルに適切な設定を行うだけでよいのです。今回は、このターゲットをディスカバリーするために、<a href="https://prometheus.io/docs/prometheus/latest/configuration/configuration/#endpoints">endpointsロール</a>を使用します。<br /><br /><span> </span><code>prometheus.yml</code><span> </span>の設定ファイルが含まれる<span> </span><code>ConfigMap</code><span> </span>を編集します。<br /><br /><pre># kubectl edit cm prometheus-server -n monitoring -o yaml</pre><br />そして、<span> </span><code>scrape_configs</code><span> </span>セクションの下に、以下の設定スニペットを追加します。<br /><br /><pre>- honor_labels: true<br />  job_name: kubernetes-service-endpoints<br />  kubernetes_sd_configs:<br />   - role: endpoints<br />  relabel_configs:<br />  - action: keep<br />    regex: true<br />    source_labels:<br />    - __meta_kubernetes_service_annotation_prometheus_io_scrape<br />  - action: drop<br />    regex: true<br />    source_labels:<br />    - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow<br />  - action: replace<br />    regex: (https?)<br />    source_labels:<br />    - __meta_kubernetes_service_annotation_prometheus_io_scheme<br />    target_label: __scheme__<br />  - action: replace<br />    regex: (.+)<br />    source_labels:<br />    - __meta_kubernetes_service_annotation_prometheus_io_path<br />    target_label: __metrics_path__<br />  - action: replace<br />    regex: (.+?)(?::\d+)?;(\d+)<br />    replacement: $1:$2<br />    source_labels:<br />    - __address__<br />    - __meta_kubernetes_service_annotation_prometheus_io_port<br />    target_label: __address__<br />  - action: labelmap<br />    regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+)<br />    replacement: __param_$1<br />  - action: labelmap<br />    regex: __meta_kubernetes_service_label_(.+)<br />  - action: replace<br />    source_labels:<br />    - __meta_kubernetes_namespace<br />    target_label: namespace<br />  - action: replace<br />    source_labels:<br />    - __meta_kubernetes_service_name<br />    target_label: service<br />  - action: replace<br />    source_labels:<br />    - __meta_kubernetes_pod_node_name<br />    target_label: node</pre><br />この時点で、Prometheus Podを再デプロイすると、PrometheusコンソールでCoreDNSのメトリクスエンドポイントが利用できるようになるはずです（Status -&gt; Targetsへ移動します）。<br /><br /><img decoding="async" width="1170" height="670" src="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console-1170x670.png" alt="" class="img-lightbox wp-image-65008 u-drop-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console-1170x670.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console-350x200.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console-768x440.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console-1536x879.png 1536w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console-175x100.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console-1930x1105.png 1930w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console.png 1932w, / 1w" data-lazy-sizes="(max-width: 1170px) 100vw, 1170px" data-lazy-src="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console-1170x670.png" data-ll-status="loaded" sizes="(max-width: 1170px) 100vw, 1170px" srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console-1170x670.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console-350x200.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console-768x440.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console-1536x879.png 1536w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console-175x100.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console-1930x1105.png 1930w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-prometheus-console.png 1932w, / 1w" /><br /><br />これでCoreDNSメトリクスが利用できるようになり、Prometheusコンソールからアクセスできるようになりました。<br /><br /><img decoding="async" width="1170" height="504" src="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-1170x504.png" alt="" class="img-lightbox wp-image-65007 u-drop-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-1170x504.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-350x151.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-768x331.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-1536x661.png 1536w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-2048x881.png 2048w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-175x75.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-1930x831.png 1930w, / 1w" data-lazy-sizes="(max-width: 1170px) 100vw, 1170px" data-lazy-src="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-1170x504.png" data-ll-status="loaded" sizes="(max-width: 1170px) 100vw, 1170px" srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-1170x504.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-350x151.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-768x331.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-1536x661.png 1536w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-2048x881.png 2048w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-175x75.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-request-duration-seconds-bucket-1930x831.png 1930w, / 1w" /><br /><br /><h3>CoreDNSのトップメトリクス。どのメトリクスを確認する必要がありますか？</h3>

<p><span style="text-size: smaller; font-style: italic; border: 1px solid #FF9E1B; display: block; border-radius: 25px; padding: 25px; max-width: 96%; margin: 2em auto;"><strong>免責事項:</strong> CoreDNSメトリクスは、Kubernetesのバージョンやプラットフォームによって異なる場合があります。ここでは、Kubernetes 1.25とCoreDNS 1.9.3を使っています。<a href="https://github.com/coredns/coredns/blob/master/plugin/metrics/README.md">CoreDNSのレポ</a>で、自分のバージョンで利用できるメトリクスを確認することができます。</span></p><br />まず、可用性についてです。クラスター内で動作するCoreDNSのレプリカの数は変動する可能性があるので、可用性やパフォーマンスに影響を与えるような変動があった場合に備えて、常に監視しておくとよいでしょう。<br /><br /><ul><li>CoreDNSレプリカの数：Kubernetes環境で稼働しているCoreDNSレプリカの数を監視したい場合は、<span> </span><code>coredns_build_info </code>メトリクスをカウントすることで行えます。このメトリクスは、そのようなPod上で動作しているCoreDNSのビルドに関する情報を提供します。</li></ul><br /><pre>count(coredns_build_info)</pre><br />これからは、<a href="https://sysdig.jp/blog/golden-signals-kubernetes/">4つのゴールデンシグナル</a>のアプローチに従いましょう。このセクションでは、その観点からCoreDNSを監視する方法を学び、エラー、レイテンシー、トラフィック、およびサチュレーションを測定します。<br /><br /><h3>エラー</h3>CoreDNSサービスのエラー数を測定できることは、Kubernetesクラスター、アプリケーション、およびサービスの健全性をより良く理解するための鍵です。アプリケーションや内部のKubernetesコンポーネントがDNSサービスから予期せぬエラーレスポンスを取得した場合、深刻な問題に直面する可能性があります。<span> </span><strong><code>SERVFAIL</code></strong><span> </span>と<span> </span><strong><code>REFUSED</code></strong><span> </span>のエラーに注意してください。これらは、Kubernetes内部コンポーネントやアプリケーションの名前を解決する際に問題が発生することを意味する可能性があります。<br /><br /><ul><li><code>coredns_dns_responses_total</code><span>: </span>このカウンターは、CoreDNS応答コード、ネームスペース、およびCoreDNSインスタンスの数についての情報を提供します。各レスポンスコードのレートを取得したい場合があります。これは、CoreDNSインスタンスのエラー率を測定するために常に有用です。</li></ul><br /><pre>sum(rate(coredns_dns_responses_total{instance=~".*"}[2m])) by (rcode, instance)</pre><br /><img decoding="async" width="1170" height="540" src="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-1170x540.png" alt="" class="img-lightbox wp-image-65006 u-drop-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-1170x540.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-350x161.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-768x354.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-1536x709.png 1536w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-2048x945.png 2048w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-175x81.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-1930x890.png 1930w, / 1w" data-lazy-sizes="(max-width: 1170px) 100vw, 1170px" data-lazy-src="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-1170x540.png" data-ll-status="loaded" sizes="(max-width: 1170px) 100vw, 1170px" srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-1170x540.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-350x161.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-768x354.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-1536x709.png 1536w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-2048x945.png 2048w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-175x81.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-dns-responses-total-1930x890.png 1930w, / 1w" /><br /><br /><h3>レイテンシー</h3>Kubernetesでの適切な運用のために、DNSサービスのパフォーマンスが最適であることを確認するためには、レイテンシーの測定が重要です。レイテンシーが高い、または時間と共に増加している場合、負荷の問題を示している可能性があります。CoreDNSインスタンスが過負荷の場合、DNSの名前解決に問題が発生し、アプリケーションやKubernetesの内部サービスに遅延や停止が発生することが予想されます。<br /><br /><ul><li><code>coredns_dns_request_duration_seconds_bucket</code><span>: </span>CoreDNSリクエストの継続時間（秒）。CoreDNSインスタンス間でレイテンシーがどのように分布しているかを確認するために、99パーセンタイルを計算したい場合があります。</li></ul><br /><pre>histogram_quantile(0.99, sum(rate(coredns_dns_request_duration_seconds_bucket{instance=~".*"}[2m])) by (server,zone,le,instance))</pre><br /><img decoding="async" width="1170" height="461" src="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-1170x461.png" alt="" class="img-lightbox wp-image-65005 u-drop-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-1170x461.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-350x138.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-768x303.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-1536x605.png 1536w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-2048x807.png 2048w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-175x69.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-1930x761.png 1930w, / 1w" data-lazy-sizes="(max-width: 1170px) 100vw, 1170px" data-lazy-src="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-1170x461.png" data-ll-status="loaded" sizes="(max-width: 1170px) 100vw, 1170px" srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-1170x461.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-350x138.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-768x303.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-1536x605.png 1536w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-2048x807.png 2048w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-175x69.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-request-duration-99th-quantile-1930x761.png 1930w, / 1w" /><br /><br /><h3>トラフィック</h3>CoreDNSサービスが処理しているトラフィックまたはリクエストの量です。CoreDNSのトラフィックの監視は、本当に重要であり、定期的に確認する価値があります。トラフィック量の急増や傾向の変化があるかどうかを観察することは、良好なパフォーマンスを保証し、問題を回避するための鍵となります。<br /><br /><ul><li><code>coredns_dns_requests_total</code><span>: </span>ゾーン、プロトコル、ファミリーごとのDNSリクエストカウンター。タイプ別（A、AAAA）のCoreDNSリクエストのレートを測定・監視したい場合があります。"A "はipv4クエリーを表し、"AAAA "はipv6クエリーを表します。</li></ul><br /><pre>(sum(rate(coredns_dns_requests_total{instance=~".*"}[2m])) by (type,instance))</pre><br /><img decoding="async" width="1170" height="505" src="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-1170x505.png" alt="" class="img-lightbox wp-image-65004 u-drop-shadow entered lazyloaded" title="image_tooltip" data-lazy-srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-1170x505.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-350x151.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-768x331.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-1536x663.png 1536w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-2048x884.png 2048w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-175x76.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-1930x833.png 1930w, / 1w" data-lazy-sizes="(max-width: 1170px) 100vw, 1170px" data-lazy-src="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-1170x505.png" data-ll-status="loaded" sizes="(max-width: 1170px) 100vw, 1170px" srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-1170x505.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-350x151.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-768x331.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-1536x663.png 1536w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-2048x884.png 2048w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-175x76.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-requests_total-by-type-rate-1930x833.png 1930w, / 1w" /><br /><br /><h3>サチュレーション</h3>CoreDNS PodsのCPU、メモリ、ネットワーク使用率などのシステムリソース消費メトリクスを使用することで、CoreDNSのサチュレーションの状態を簡単に監視することができます。<br /><br /><h3>その他</h3>CoreDNSは、DNSサービスが最大3600秒のレコードをキャッシュすることを可能にする<a href="https://coredns.io/plugins/cache/">キャッシュメカニズム</a>を実装しています。このキャッシュは、CoreDNSの負荷を大幅に軽減し、パフォーマンスを向上させることができます。<br /><br /><ul><li><code>coredns_cache_hits_total</code><span>: </span>キャッシュヒットカウンターです。以下のクエリーを実行して、キャッシュヒット率を監視することができます。このPromQLクエリーのおかげで、CoreDNSキャッシュヒットの拒否率と成功率を簡単に監視することができます。</li></ul><br /><pre>sum(rate(coredns_cache_hits_total{instance=~".*"}[2m])) by (type,instance)</pre><br /><img decoding="async" width="1170" height="488" src="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-1170x488.png" alt="" class="img-lightbox wp-image-65003 u-drop-shadow entered lazyloaded" title="image_tooltip" data-lazy-srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-1170x488.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-350x146.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-768x320.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-1536x641.png 1536w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-2048x854.png 2048w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-175x73.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-1930x805.png 1930w, / 1w" data-lazy-sizes="(max-width: 1170px) 100vw, 1170px" data-lazy-src="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-1170x488.png" data-ll-status="loaded" sizes="(max-width: 1170px) 100vw, 1170px" srcset="https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-1170x488.png 1170w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-350x146.png 350w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-768x320.png 768w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-1536x641.png 1536w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-2048x854.png 2048w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-175x73.png 175w, https://sysdig.com/wp-content/uploads/how-to-monitor-CoreDNS-coredns-cache-hits-total-by-type-rate-1930x805.png 1930w, / 1w" /><br /><br /><h2>まとめ</h2>Kubernetes環境にDNSサービスを実装するには、kube-dnsと並んでCoreDNSが選択肢の1つになります。DNSはKubernetesクラスターを正常に機能させるために必須ですが、CoreDNSはkube-dnsと比較して、柔軟性や解決できる問題の多さから、多くの人に好まれています。<br /><br />Kubernetesインフラストラクチャーが健全で正常に動作していることを確認したい場合、DNSサービスを恒久的にチェックする必要があります。これは、あらゆるアプリケーション、オペレーティングシステム、ITアーキテクチャー、またはクラウド環境において、適切な動作を確保するための鍵です。<br /><br />この記事では、CoreDNS のメトリクスを引き出す方法と、CoreDNS のエンドポイントからメトリクスをスクレイピングするための独自の Prometheus インスタンスを構成する方法について学びました。CoreDNSの主要なメトリクスのおかげで、あらゆるKubernetes環境で独自のCoreDNSの監視を簡単に開始することができます。<br /><br />

<div class="sysdig-box" style="background-color: #f8f8f8; padding: 2em;">
<h2 style="margin-top: 0;">Kubernetes CoreDNSの監視と問題のトラブルシューティングを最大10倍高速化</h2>
<p>Sysdigは、Sysdig Monitorに含まれる<a href="https://docs.sysdig.com/en/docs/sysdig-monitor/monitoring-integrations/application-integrations/k8s-coredns/">すぐに使えるダッシュボード</a>で、CoreDNSやKubernetesコントロールプレーンの他の部分の問題の監視とトラブルシューティングを支援し、Prometheusサーバーのインスツルメンテーションは必要ありません! Sysdig Monitorに統合されたツールであるAdvisorは、Kubernetesクラスターとそのワークロードのトラブルシューティングを最大10倍まで加速します。Sysdig Monitorのアウトオブボックスのダッシュボードのおかげで、Kubernetes CoreDNSのメトリクスをすべて手元に置くことができます。<br /><br /><img width="1878" height="1104" decoding="async" src="https://sysdig.com/wp-content/uploads/how-to-monitor-coredns.gif" alt="Thanks to the Sysdig Monitor out-of-the-box dashboards, you'll have all the Kubernetes CoreDNS metrics handy." class="img-lightbox wp-image-61388 u-drop-shadow entered lazyloaded" data-lazy-src="https://sysdig.com/wp-content/uploads/how-to-monitor-coredns.gif" data-ll-status="loaded" /><br /><br /><a href="https://sysdig.com/company/start-free/">30日間のトライアルアカウント</a>にサインアップして、ご自身でお試しください！</p></div>