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

Container Service for Kubernetes:nginx-ingress-controllerのアクセスログの分析と監視

最終更新日:Dec 03, 2024

Container Service for Kubernetes (ACK) では、ACKクラスターのnginx-ingress-controllerコンポーネントを設定できます。 このコンポーネントは、クラスター外のサーバーがアクセスできるURLを提供し、サーバーの負荷分散、SSL終了、および名前ベースの仮想ホスティングをサポートします。 nginx-ingress-controllerを使用して、HTTPリクエストのログデータをstdoutに書き込むこともできます。 クラスターの作成時に、ACKクラスターのSimple Log Serviceを有効にできます。 Simple Log Serviceを有効にすると、リアルタイムでnginx-ingress-controllerを監視し、Simple Log Serviceでダッシュボードを表示できます。 ダッシュボードには、nginx-ingress-controllerのアクセスログから収集された統計情報が表示されます。 このトピックでは、nginx-ingress-controllerのログ収集を設定する方法と、収集したログを表示する方法について説明します。

目次

前提条件

  1. logtail-dsコンポーネントがクラスターにインストールされます。

    デフォルトでは、クラスターの作成時にlogtail-dsがインストールされます。 このコンポーネントがインストールされていない場合は、手動でインストールできます。 詳細については、「Simple log Serviceを使用したコンテナーからのログデータの収集」をご参照ください。

  2. alibaba-log-controllerコンポーネントが更新されました。

    kubectl edit deployment alibaba-log-controller -n kube-systemコマンドを実行して、コンポーネントを更新します。

nginx-ingress-controllerのログ収集の設定

方法1: ACKコンソールを使用する

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

  3. [アドオン] ページで、[ネットワーク] タブをクリックし、Nginx Ingress Controllerコンポーネントを見つけ、カードの右下隅にあるimage.pngアイコンをクリックし、[ログ収集の有効化] をクリックします。 表示されるメッセージで、[OK] をクリックしてログ収集を有効にします。

方法2: CLIを使用する

ACKは、AliyunLogConfigという名前のCustomResourceDefinition (CRD) のタイプを定義します。AliyunLogConfigを作成して、ログ収集を設定できます。 alibaba-log-controllerは、Simple Log Serviceの設定を自動的に生成して、ログデータを収集し、関連するダッシュボードのデータを更新します。

重要

AliyunLogConfigを作成するときは、次の項目に注意してください。

  • nginx-ingress-controllerが既に存在する場合は、AliyunLogConfigを作成した後、ログ収集を有効にするためにnginx-ingress-controllerのポッドを再作成する必要があります。

  • alibaba-log-controllerのバージョンが0.2.0.0-76648ee-aliyun以降であることを確認してください。 alibaba-log-controllerを更新した後、AliyunLogConfigがすでに作成されていることがわかった場合は、AliyunLogConfigを削除して再作成します。

  • AliyunLogConfigは、ACKがIngressコントローラーに定義するデフォルトのログ形式にのみ適用されます。 ログ形式を変更した場合は、AliyunLogConfig設定のprocessor_regex設定を変更する必要があります。 詳細については、「CRDを使用してDaemonSetモードでコンテナログを収集する」をご参照ください。

  • IncludeLabelを、docker inspectコマンドを使用して取得するラベル情報に設定します。

  • Kubernetesクラスターの名前空間とコンテナー名は、io.kubernetes.pod.nameスペースio.kubernetes.container.nameのDockerラベルに個別にマップされます。 たとえば、作成するポッドはbackend-prod名前空間に属し、コンテナー名はworker-serverです。

    • io.kubernetes.pod.name space : backend-prodを指定すると、指定された名前空間のポッド内のすべてのコンテナのログが収集されます。

    • io.kubernetes.container.name : worker-serverを指定した場合、指定したコンテナーのログが収集されます。

  • io.kubernetes.pod.nameスペースのみを指定し、ラベルをio.kubernetes.container.nameすることを推奨します。 他のラベルを指定する場合は、IncludeEnvまたはExcludeEnvパラメーターを設定できます。 詳細については、「Simple Log Serviceコンソールを使用したDaemonSetモードでのコンテナーstdoutとstderrの収集」をご参照ください。

nginx-ingress-controllerのログ収集を無効にするには、AliyunLogConfigを削除します。

  1. k8s-nginx-ingress.yamlという名前のファイルを作成し、次のYAMLテンプレートをファイルにコピーします。

    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    メタデータ:
      # AliyunLogConfigの名前。名前はクラスター内で一意である必要があります。 
      name: k8s-nginx-ingress
      # AliyunLogConfigの名前空間。値を、ログを収集するIngressコントローラーの名前空間に設定します。 
      名前空間: kube-system
    spec:
      # 使用するLogstoreの名前。 
      logstore: nginx-ingress
      # 製品コード。 Do not change the value. 
      productCode: k8s-nginx-ingress
      # Logtailの設定。 
      logtailConfig:
        inputType:プラグイン
        # Logtail設定の名前。 名前は、e metadata.nameパラメーターの値と同じである必要があります。 
        configName: k8s-nginx-ingress
        inputDetail:
          プラグイン:
            入力:
              - type: service_docker_stdout
                詳細:
                  IncludeLabel: # ログを収集するDockerコンテナのラベル。 
                    # ログを収集するコンテナーの名前は、nginx-ingress-controllerです。 
                    # 複数のIngressコントローラーからログを収集すると、重複したログが収集されることがあります。 IncludeLabelパラメーターの説明を読んで理解することをお勧めします。 
                    io.kubernetes.container.name: nginx-ingress-controller
                  Stderr:true
                  Stdout:true
            プロセッサ:
              -type: processor_regex# 正規表現を使用してフィールドを抽出します。 
                詳細:
                  KeepSource: false
                  キー:# 抽出されたフィールドは、次の順序でソートされます。 
                    - client_ip
                    - x_forward_for
                    - remote_user
                    - time
                    - method
                    - url
                    - version
                    - status
                    - body_bytes_sent
                    - http_referer
                    - http_user_agent
                    - request_length
                    - request_time
                    - proxy_upstream_name
                    - upstream_addr
                    - upstream_response_length
                    - upstream_response_time
                    - upstream_status
                    - req_id
                    - host
                    -proxy_alternative_upstream_name
                  NoKeyError:true
                  NoMatchError: true
                  # フィールドの抽出に使用される正規表現。 ログが正規表現と一致する場合、上記のフィールドの値は、各キャプチャグループの内容に基づいて自動的に指定されます。 
                  Regex: ^(\S +)\s-\s\[([^]]+)]\s-\s(\S +)\s\[(\S +)\s\S +\s "(\w +)\s(\S +)\s([^"]+)\s(\d +)\d +)\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 +)\s *(\S *)\s *\[*([^]]*)\]*.*
                  SourceKey: コンテンツ 
  2. 次のコマンドを実行してAliyunLogConfigを作成します。

    kubectl apply -f k8s-nginx-ingress.yaml

nginx-ingress-controllerのアクセスログとダッシュボードの表示

  1. にログインします。Simple Log Serviceコンソール.

  2. [プロジェクト] セクションで、ACKクラスターの作成時に指定したプロジェクトの名前をクリックします。 プロジェクトの詳細ページが表示されます。 デフォルトでは、k8s-log-{cluster-id} という形式で名前が付けられたプロジェクトがACKクラスター用に作成されます。

  3. 左側のナビゲーションウィンドウで、Nginx Ingress.pngアイコンをクリックします。 次に、ダッシュボードリストのダッシュボードをクリックして、ダッシュボードのデータを表示します。

Ingressの概要

Ingressの概要ダッシュボードには、Webサイトのnginx-ingress-controllerを流れるネットワークトラフィックに関する情報が表示されます。 以下の情報を表示できます。

  • ページビュー (PV) の数、ユニークビジター (UV) の数、インバウンドとアウトバウンドトラフィック、平均レイテンシ、モバイルユーザーの割合、5xxエラーと404エラーの割合など、過去24時間のWebサイトデータ。

  • PVの数、UVの数、リクエストの成功率、平均レイテンシ、P95レイテンシ、およびP99レイテンシを含む、過去1分間のWebサイトデータ。

  • 過去24時間のPVトレンド (過去24時間のPVに基づく) 、過去7日間のPVトレンド (過去7日間のPVに基づく) 、リクエストソースの地域分布、上位Nのソースエリアと都市、モバイルユーザーの割合、androidユーザーとiOSユーザーの比率。

  • 過去1時間以内の上位N個のURL。PVが最も高い10個のURL、レイテンシーが最も高い10個のURL、5xxエラーが最も多い10個のURL、404エラーが最も多い10個のURLが含まれます。

Ingressアクセスセンター

Ingressアクセスセンターダッシュボードには、リクエストに関する最新の情報が表示されます。 次のデータを取得して分析し、ビジネス上の意思決定に役立てることができます。過去24時間以内のUVとPVの数、PVとUVの地域分布、リクエストによる上位Nエリア、リクエストによる上位N都市、PVが最も高い上位Nブラウザ、PVが最も高い上位NソースIPアドレス、モバイルユーザーの割合、androidユーザーとiOSユーザーの比率。

Ingressモニタリングセンター

Ingressモニタリングセンターダッシュボードは、Webサイトのリアルタイムモニタリングおよびアラートデータを提供します。 過去1時間以内の次のデータを表示できます: リクエストの成功率、5xxエラーの割合、404エラーの割合、転送されないリクエストの割合、平均レイテンシ、P95レイテンシ、P99レイテンシ、P999レイテンシ、ステータスコードによるリクエスト分布、各IngressのPVの割合、PVが最も高い上位10のサービス、リクエスト失敗率が最も高い上位10のサービス、平均レイテンシーが最も高い上位10のサービス、リクエストが最も多い上位10のサービス。

Ingress监控中心

blue-green展開のためのIngressモニタリングセンター

blue-greenデプロイメントのIngressモニタリングセンターダッシュボードには、古いバージョンと新しいバージョンのアプリケーションを公開するために使用されるサービスのリアルタイムモニタリングデータが表示されます。 ダッシュボードは、サービスのモニタリングデータも比較します。 これにより、例外を特定し、できるだけ早い機会にアプリケーションバージョンをロールバックできます。 モニタリングデータの比較には、ServiceAServiceBを指定する必要があります。 ダッシュボードには、各サービスの次の動的モニタリングデータが表示されます。PVの数、5xxエラーの割合、リクエストの成功率、平均レイテンシ、P95レイテンシ、P99レイテンシ、P999レイテンシ、およびリクエスト数。

Ingress蓝绿发布监控中心

Ingress例外センター

Ingress例外センターは、nginx-ingress-controllerのログで異常を自動的に検出します。 このサービスは、Simple Log serviceが提供する機械学習アルゴリズムと時系列分析アルゴリズムを使用して、検出効率を向上させます。

Ingress异常检测中心

アラートの設定

Simple Log Serviceは、インタラクティブなログ分析を可能にし、視覚化されたダッシュボードを提供します。 Simple Log Serviceを使用して、ダッシュボードのデータに基づいてアラートを設定することもできます。 メール、DingTalkチャットボットWebフック、カスタムWebフック、ショートメッセージサービス (SMS) メッセージなど、1つ以上のアラート通知方法を選択できます。

アラートの設定方法の詳細については、「アラートルールの設定」をご参照ください。

次の例では、5xxエラーの割合に基づいてアラートを設定する方法について説明します。 アラートを設定した後、システムは5分ごとにアラート条件が満たされているかどうかを確認します。 指定された時間範囲内の5xxエラーの割合が1% に達すると、アラートがトリガーされます。

  1. [ダッシュボード] セクションで、[Ingressモニタリングセンター] ダッシュボードをクリックします。 [Ingress Monitoring Center] ページで、5XX Proportionチャートの右上隅にある提示アイコンの上にポインターを移動し、[アラートとして保存 (旧バージョン)] をクリックします。

    配置告警

  2. [アラートの作成] ウィザードで、[アラート名][関連チャート][頻度] 、および [トリガー条件] を設定します。 クエリステートメントのtotalフィールドは、5XXエラーの割合を示します。 [トリガー条件] フィールドでtotal > 1を指定します。

  3. [通知] ウィザードページで、要件に基づいて1つ以上のアラート方法を選択し、パラメーターを設定します。 次に、[送信] をクリックしてアラートルールを作成します。

ダッシュボードの購読

Simple Log Serviceを使用すると、ダッシュボードをサブスクライブできます。 この機能はダッシュボードのスナップショットを取得し、指定された間隔で電子メールまたはDingTalkグループメッセージでスナップショットを送信します。

ダッシュボードをサブスクライブする方法の詳細については、「ダッシュボードのサブスクライブ」をご参照ください。

次の例では、Ingressの概要ダッシュボードをサブスクライブする方法について説明します。 ダッシュボードをサブスクライブすると、毎日10:00に指定されたDingTalkグループにメッセージが送信されます。

  1. ダッシュボードセクションで、[Ingress Overview V1.2] ダッシュボードをクリックします。 Ingressの概要V1.2ページで、[サブスクライブ] > [作成] を選択します。

  2. [サブスクリプションの作成] ウィザードで、[頻度] フィールドで [毎日] および [10:00] を選択します。 [透かしの追加] をオフにします。 次に、[次へ] をクリックします。

  3. 通知ウィザードページで、通知ドロップダウンリストからWebHook-DingTalkボットを選択し、リクエストURLをDingTalkチャットボットのwebhook URLに設定します。 次に、[送信] をクリックして設定を完了します。

ARMSでのIngressダッシュボードの使用

  1. にログインします。Log Serviceコンソール.

  2. [プロジェクト] セクションで、ACKクラスターの作成時に指定したプロジェクトの名前をクリックします。 プロジェクトの詳細ページが表示されます。 デフォルトでは、k8s-log-{cluster-id} という形式で名前が付けられたプロジェクトがACKクラスター用に作成されます。

  3. 左側のナビゲーションウィンドウで、アイコンをクリックしimageます。 ダッシュボードリストで [Ingress Overview V1.2] をクリックして、必要な情報を取得します。 たとえば、[レイテンシ別の上位10リクエストURL] セクションを見つけ、[URL(ARMSトラブルシューティング)] フィールドをチェックして、レイテンシ別にソートされた上位10リクエストURLを表示できます。 URLをクリックすると、対応するサービスのARMSトレースクエリページに移動できます。 ARMSコンソールでサービスのトレースの詳細を表示できます。

関連ドキュメント

収集されたログをフィルタリングする方法の詳細については、「ログのフィルタリング」をご参照ください。