すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:CoreDNS ログの分析と監視

最終更新日:Nov 09, 2025

Container Service for Kubernetes (ACK) は、クラスター内の DNS サーバーとして CoreDNS を使用します。CoreDNS ログを表示して、DNS 名前解決の遅延やリスクの高いドメインへのアクセスなどの問題を分析できます。このトピックでは、CoreDNS のログ分析と監視を有効にする方法について説明します。

前提条件

ログ収集コンポーネントがインストールされていること。

  • Logtail コンポーネントを使用する場合、alibaba-log-controller アプリケーションのバージョンが 0.2.0.0-76648ee-aliyun 以降であることを確認してください。

    alibaba-log-controller のバージョンが古い場合は、Logtail コンポーネントをアップグレードできます。コンポーネントのアップグレード方法の詳細については、「コンポーネント」をご参照ください。

  • LoongCollector コンポーネントを使用する場合、バージョンの要件はありません。

ステップ 1: CoreDNS ログプラグインを有効にする

注意事項

  • CoreDNS コンポーネントが最新バージョンであることを確認してください。アップグレード方法の詳細については、「コンポーネントの管理」をご参照ください。

  • 最新バージョンの CoreDNS では、デフォルトドメインに対してログプラグインがデフォルトで有効になっています。他のドメインでプラグインを有効にするには、次の手順に従います。

手順

説明

CoreDNS ログを有効にすると、CPU 使用率が約 10% 増加し (実際のリクエストによります)、ネットワークトラフィックも増加します。CoreDNS のレプリカ Pod の CPU 使用率が高い場合は、CoreDNS Pod を追加できます。詳細については、「手動での Pod のスケーリング」をご参照ください。

ACK クラスターの kube-system 名前空間で、[設定管理] > [設定項目] に移動し、coredns 設定項目をクリックし、coredns 設定項目の Corefile フィールドで log プラグインを確認します。プラグインが見つからない場合は、次の例に示すように追加して、CoreDNS の名前解決のロギングを有効にします。詳細については、「設定項目の変更」をご参照ください。

次のコードは、デフォルトのログフォーマットを使用する coredns の設定を示しています。

Corefile: |
    .:53 {
        errors
        log # ここに log プラグインを追加します。
        health {
           lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          upstream
          fallthrough in-addr.arpa ip6.arpa
          ttl 30
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }
    # 他のドメインがあり、そのコンテナーのログを収集する必要がある場合は、同じフォーマットで log プラグインを追加します。
    demo.com:53 {
        ... 
        log # ここに log プラグインを追加します。
    }

ステップ 2: CoreDNS ログサービスを有効にする

方法 1: コンソールでサービスを有効にする

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、[運用] > [ログセンター] を選択します。

  3. [ログセンター] ページの [ネットワークコンポーネントログ] > [CoreDNS] タブで、[インストール] をクリックし、次に [CoreDNS ログを有効にする] をクリックします。

方法 2: kubectl を使用してサービスを有効にする

ACK のログ収集機能は、CustomResourceDefinitions (CRD) を使用して拡張されます。AliyunLogConfig CRD をデプロイすると、Log Controller が対応する収集設定を自動的に作成し、Simple Log Service でレポートします。AliyunLogConfig カスタムリソースの作成方法の詳細については、「カスタムリソースの管理」をご参照ください。

    重要

    次の設定は、CoreDNS のデフォルトのログフォーマットにのみ適用されます。CoreDNS にカスタムログフォーマットを使用する場合は、CRD 設定の `Regex` セクションを変更する必要があります。

    CoreDNS のカスタムログフォーマットの詳細については、「log」をご参照ください。

    ログ収集フローと収集設定の詳細については、「DaemonSet-CRD を使用したコンテナログの収集」をご参照ください。

  1. k8s-coredns-log.yaml という名前の YAML ファイルを作成します。次のコードは、完全なサンプル YAML ファイルです。

    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    metadata:
      #     設定名。k8s クラスター内で一意である必要があります。
      name: k8s-coredns-log
      namespace: kube-system
    spec:
      # ログをアップロードする Logstore 名
      logstore: coredns-log
      # Logtail 設定の詳細
      productCode: k8s-coredns
      logtailConfig:
        inputType: plugin
        # Logtail 設定名。[metadata.name] と同じにする必要があります
        configName: k8s-coredns-log
        inputDetail:
          plugin:
            inputs:
            - type: service_docker_stdout
              detail:
                IncludeLabel:
                  io.kubernetes.container.name: coredns
                Stderr: true
                Stdout: true
            processors:
            - type: processor_regex
              detail:
                KeepSource: false
                KeepSourceIfParseError: true
                Keys:
                - level
                - remote
                - port
                - id
                - type
                - class
                - name
                - proto
                - size
                - do
                - bufsize
                - rcode
                - rflags
                - rsize
                - duration
                NoKeyError: true
                NoMatchError: false
                FullMatch: false
                Regex: \[([^]]+)]\s([^:]+):(\S+)\s+-\s+(\S+)\s+"(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+([^"]+)"\s+(\S+)\s+(\S+)\s+(\S+)\s+([\d\.]+).*
                SourceKey: content
            - type: processor_regex
              detail:
                KeepSource: false
                KeepSourceIfParseError: true
                Keys:
                - error
                - rcode
                - name
                - type
                - errorMsg
                NoKeyError: false
                NoMatchError: false
                FullMatch: false
                Regex: \[ERROR]\s+(plugin/errors):\s+(\S)+\s+(\S+)\s+([^:]*):\s+(.*)
                SourceKey: content
  2. 次のコマンドを実行して、CoreDNS ログサービスを有効にします。

    kubectl apply -f k8s-coredns-log.yaml

ストレージ、ネットワーキング、Auto Scaling などのリソースに対して AliyunLogConfig CRD を設定する方法の詳細については、「ステップ 1: データプレーンコンポーネントのログ設定ファイルを作成する」をご参照ください。

ステップ 3: Logstore でログをクエリおよび分析する

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、[運用] > [ログセンター] を選択します。

  3. [ログセンター] ページで、[ネットワークコンポーネントログ] タブをクリックします。次に、[CoreDNS] タブの [Logstore] をクリックして DNS ログをクエリおよび分析します。

  4. 検索ボックスにクエリ文を入力し、時間範囲として [過去 1 週間] を選択します。

  5. [クエリ/分析] をクリックして結果を表示します。

    Simple Log Service を使用すると、クエリと分析結果の分布をヒストグラムで表示したり、生ログを分析したり、さまざまな種類のチャートでクエリと分析結果を確認したりできます。ログのクエリと分析の方法の詳細については、「クエリと分析のクイックガイド」をご参照ください。

    • ログヒストグラム

      ログ分布ヒストグラムは、時間経過に伴うログの分布を示します。

      image..png

    • 生ログ

      クエリ結果は [生ログ] タブに表示されます。[テーブル] または [Raw] をクリックしてログを表示し、それらを分析して名前解決が異常かどうかを判断できます。リターンコード (RCODE) の値に特に注意してください。RCODE の値の説明については、「DNS 名前解決エラーのトラブルシューティング」をご参照ください。

      image..png

      次の表に、フィールドを示します。

      フィールド

      説明

      {level}

      ログレベル。

      INFO

      {remote}

      クライアント IP アドレス。

      172.16.0.10

      {port}

      クライアントポート。

      58008

      {id}

      クエリ ID。

      34518

      {type}

      リクエストタイプ。

      A

      {class}

      リクエストクラス。

      IN

      {name}

      リクエストされたドメインの名前。

      kube-dns.kube-system.svc.cluster.local.

      {proto}

      使用されるプロトコル。

      tcp

      {size}

      リクエストサイズ (バイト)。

      56

      {do}

      クエリで EDNS0 DO (DNSSEC OK) ビットが設定されているかどうかを指定します。

      false

      {bufsize}

      クエリで定義されている EDNS0 バッファーサイズ (バイト)。

      65535

      {rcode}

      リターンコード。

      NOERROR

      {rflags}

      応答フラグ。設定されている各フラグが表示されます。

      qr,aa,rd

      {rsize}

      非圧縮の応答サイズ (バイト)。

      110

      {duration}

      応答時間 (秒)。

      0.00011

    • 統計チャート

      クエリ文を実行した後、[統計チャート] タブで視覚化された結果を表示できます。

    • LogReduce

      [LogReduce] タブで [LogReduce を有効にする] をクリックして、ログ収集中に類似性の高いログを集約します。詳細については、「LogReduce」をご参照ください。

ステップ 4: ダッシュボードで CoreDNS ログ収集データを表示する

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、[運用] > [ログセンター] を選択します。

  3. [ログセンター] ページで、[ネットワークコンポーネントログ] タブ、次に [CoreDNS] タブをクリックします。[ダッシュボード] をクリックして [Kubernetes CoreDNS ログ分析] ダッシュボードを表示します。

    [Kubernetes CoreDNS ログ分析] ページでは、CoreDNS リクエストの総数、リクエスト成功率、リクエストレイテンシーなどの主要なメトリックを表示できます。このダッシュボードには、リクエスト数の多いドメイン、エラーのあるドメイン、解決が遅いドメイン、リスクの高いドメインへのアクセスの分析も表示されます。

ステップ 5: CoreDNS ログのアラートを作成する

[Kubernetes CoreDNS ログ分析] ダッシュボードのチャートからアラートルールを作成できます。この操作は、Simple Log Service (SLS) コンソールでのみ使用できます。

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、ターゲットクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、クラスター情報 をクリックします。

  3. [クラスター情報] ページの [基本情報] タブで、[Simple Log Service プロジェクト] の横にあるリンクをクリックして SLS コンソールに移動します。

  4. Logstore ページの左側のナビゲーションウィンドウで、ダッシュボード 仪表盘 アイコンをクリックします。ダッシュボードリストで、[Kubernetes CoreDNS ログ分析] を見つけてクリックします。

  5. [Kubernetes CoreDNS ログ分析] ページで、ターゲットチャートの右上隅にカーソルを合わせ、more > [アラートとして保存] を選択します。

    アラート設定パラメーターの詳細については、「ログのアラートおよび監視ルールの作成」をご参照ください。alert

    アラートルールが作成された後、アラートルールを表示、変更、および無効にすることができます。詳細については、「アラート監視ルールの管理」をご参照ください。

関連操作

ログ収集の無効化

CoreDNS ログを収集する必要がなくなった場合は、次のコマンドを実行してログ収集 CRD をアンインストールし、ログ収集を停止します。

kubectl -n kube-system delete AliyunLogConfig k8s-coredns-log

CRD を削除すると、CoreDNS ログは SLS に送信されなくなります。