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: コンソールでサービスを有効にする
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、 を選択します。
[ログセンター] ページの タブで、[インストール] をクリックし、次に [CoreDNS ログを有効にする] をクリックします。
方法 2: kubectl を使用してサービスを有効にする
ACK のログ収集機能は、CustomResourceDefinitions (CRD) を使用して拡張されます。AliyunLogConfig CRD をデプロイすると、Log Controller が対応する収集設定を自動的に作成し、Simple Log Service でレポートします。AliyunLogConfig カスタムリソースの作成方法の詳細については、「カスタムリソースの管理」をご参照ください。
次の設定は、CoreDNS のデフォルトのログフォーマットにのみ適用されます。CoreDNS にカスタムログフォーマットを使用する場合は、CRD 設定の `Regex` セクションを変更する必要があります。
CoreDNS のカスタムログフォーマットの詳細については、「log」をご参照ください。
ログ収集フローと収集設定の詳細については、「DaemonSet-CRD を使用したコンテナログの収集」をご参照ください。
ストレージ、ネットワーキング、Auto Scaling などのリソースに対して AliyunLogConfig CRD を設定する方法の詳細については、「ステップ 1: データプレーンコンポーネントのログ設定ファイルを作成する」をご参照ください。
ステップ 3: Logstore でログをクエリおよび分析する
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、 を選択します。
[ログセンター] ページで、[ネットワークコンポーネントログ] タブをクリックします。次に、[CoreDNS] タブの [Logstore] をクリックして DNS ログをクエリおよび分析します。
検索ボックスにクエリ文を入力し、時間範囲として [過去 1 週間] を選択します。
[クエリ/分析] をクリックして結果を表示します。
Simple Log Service を使用すると、クエリと分析結果の分布をヒストグラムで表示したり、生ログを分析したり、さまざまな種類のチャートでクエリと分析結果を確認したりできます。ログのクエリと分析の方法の詳細については、「クエリと分析のクイックガイド」をご参照ください。
ログヒストグラム
ログ分布ヒストグラムは、時間経過に伴うログの分布を示します。

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

次の表に、フィールドを示します。
フィールド
説明
例
{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 ログ収集データを表示する
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、 を選択します。
[ログセンター] ページで、[ネットワークコンポーネントログ] タブ、次に [CoreDNS] タブをクリックします。[ダッシュボード] をクリックして [Kubernetes CoreDNS ログ分析] ダッシュボードを表示します。
[Kubernetes CoreDNS ログ分析] ページでは、CoreDNS リクエストの総数、リクエスト成功率、リクエストレイテンシーなどの主要なメトリックを表示できます。このダッシュボードには、リクエスト数の多いドメイン、エラーのあるドメイン、解決が遅いドメイン、リスクの高いドメインへのアクセスの分析も表示されます。
ステップ 5: CoreDNS ログのアラートを作成する
[Kubernetes CoreDNS ログ分析] ダッシュボードのチャートからアラートルールを作成できます。この操作は、Simple Log Service (SLS) コンソールでのみ使用できます。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、ターゲットクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、クラスター情報 をクリックします。
[クラスター情報] ページの [基本情報] タブで、[Simple Log Service プロジェクト] の横にあるリンクをクリックして SLS コンソールに移動します。
Logstore ページの左側のナビゲーションウィンドウで、ダッシュボード
アイコンをクリックします。ダッシュボードリストで、[Kubernetes CoreDNS ログ分析] を見つけてクリックします。[Kubernetes CoreDNS ログ分析] ページで、ターゲットチャートの右上隅にカーソルを合わせ、 を選択します。
アラート設定パラメーターの詳細については、「ログのアラートおよび監視ルールの作成」をご参照ください。

アラートルールが作成された後、アラートルールを表示、変更、および無効にすることができます。詳細については、「アラート監視ルールの管理」をご参照ください。
関連操作
ログ収集の無効化
CoreDNS ログを収集する必要がなくなった場合は、次のコマンドを実行してログ収集 CRD をアンインストールし、ログ収集を停止します。
kubectl -n kube-system delete AliyunLogConfig k8s-coredns-logCRD を削除すると、CoreDNS ログは SLS に送信されなくなります。