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

Container Service for Kubernetes:SLS を使用した nginx-ingress-controller のアクセスログの分析

最終更新日:Sep 02, 2026

Alibaba Cloud Ingress は、HTTP リクエストを stdout に記録します。クラスターの作成時にログ収集を有効にすると、Simple Log Service (SLS) を使用して Nginx Ingress のアクセスログの分析結果を表示し、リアルタイムで Ingress のステータスをモニタリングできます。このトピックでは、Nginx Ingress のアクセスログ収集を設定してログを表示する方法について説明します。

前提条件

開始する前に、次の準備ができていることを確認してください。

nginx-ingress-controller のログ収集の有効化

GitOps または CI/CD パイプラインでセットアップを自動化する必要がない限り、Container Service for Kubernetes (ACK) コンソールを使用します。

ACK コンソール

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

  2. [クラスター] ページで、対象のクラスターをクリックします。左側メニューで、[運用] > [アドオン] を選択します。

  3. [アドオン] ページで、[ネットワーク] タブをクリックします。[Nginx Ingress Controller] カードで、image.png アイコンをクリックし、[ログ収集の有効化] を選択します。[OK] をクリックします。

CLI

ACK は AliyunLogConfig という名前の CRD を提供します。AliyunLogConfig を作成すると、alibaba-log-controller は自動的に SLS 設定を生成し、ダッシュボードを更新します。

重要

AliyunLogConfig を作成する前に:

  • nginx-ingress-controller ポッドがすでに存在する場合、ログ収集用の AliyunLogConfig を適用した後、設定が有効になるようにポッドを再作成してください。

  • alibaba-log-controller は、バージョン 0.2.0.0-76648ee-aliyun 以降である必要があります。コントローラーの更新後に AliyunLogConfig がすでに存在する場合は、それを削除して再作成してください。

  • この設定は、デフォルトの ACK ログ形式を前提としています。ログ形式をカスタマイズした場合は、processor_regex セクションを更新してください。詳細については、「CRD を使用して DaemonSet モードでコンテナログを収集する」をご参照ください。

  1. k8s-nginx-ingress.yaml という名前でファイルを作成し、次の内容を記述します。

    IncludeLabel に、docker inspect の Docker ラベルを設定します。io.kubernetes.pod.namespace は名前空間で選択し、io.kubernetes.container.name はコンテナで選択します。たとえば、io.kubernetes.pod.namespace: backend-prod はその名前空間のすべてのコンテナを収集し、io.kubernetes.container.name: worker-server は特定のコンテナをターゲットにします。これらの 2 つのラベルのみを指定してください。環境変数でフィルタリングするには、IncludeEnv または ExcludeEnv を使用します。詳細については、「DaemonSet モードで Simple Log Service コンソールを使用してコンテナの stdout と stderr を収集する」をご参照ください。

    フィールド

    説明

    変更が必要か

    metadata.namespace

    Ingress コントローラーの namespace

    はい、kube-system でない場合

    spec.logstore

    SLS Logstore 名

    任意

    IncludeLabel

    コンテナーの選択に使用される Docker ラベル

    特定の namespace から収集する場合

    processor_regex > Regex

    ログ解析用の正規表現

    デフォルトのログ形式を変更した場合のみ

    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    metadata:
      # この AliyunLogConfig のクラスター内での一意の名前。
      name: k8s-nginx-ingress
      # ログを収集する Ingress コントローラーの namespace に設定します。
      namespace: kube-system
    spec:
      # ログが保存される SLS Logstore。
      logstore: nginx-ingress
      # プロダクトコード — この値は変更しないでください。
      productCode: k8s-nginx-ingress
      logtailConfig:
        inputType: plugin
        # metadata.name と一致させる必要があります。
        configName: k8s-nginx-ingress
        inputDetail:
          plugin:
            inputs:
              - type: service_docker_stdout
                detail:
                  IncludeLabel:
                    # nginx-ingress-controller コンテナーからログを収集します。
                    # クラスター内で複数の Ingress コントローラーが実行されている場合、コンテナー名で収集するとログが重複する可能性があります。
                    # 適用する前に IncludeLabel の動作を確認してください。
                    io.kubernetes.container.name: nginx-ingress-controller
                  Stderr: true
                  Stdout: true
            processors:
              - type: processor_regex
                detail:
                  KeepSource: false
                  # 各ログ行から抽出されるフィールド (順番通り):
                  Keys:
                    - 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+)\s(\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: content

    上記の表では、カスタマイズする可能性が最も高いフィールドについて説明しています。

  2. 設定を適用します。

    kubectl apply -f k8s-nginx-ingress.yaml

ログ収集を無効にするには、AliyunLogConfig を削除します:

kubectl delete aliyunlogconfig k8s-nginx-ingress -n kube-system

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

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

  2. [プロジェクト] セクションで、ACK クラスターのプロジェクト (名前: k8s-log-{cluster-id}) をクリックします。

  3. 左側メニューで、Nginx Ingress.png アイコンをクリックし、リストからダッシュボードを選択します。

利用可能なダッシュボード:

ダッシュボード

期間

表示内容

Ingress 概要

過去 24 時間 / 過去 1 分

トラフィック量、レイテンシー、エラー率、地理的分布、トップ URL

Ingress アクセスセンター

過去 24 時間

ユニークビジター (UV)/ページビュー (PV) 数、リージョン別分布、トップブラウザとソース IP、モバイルの内訳

Ingress モニタリングセンター

過去 1 時間

リアルタイムの成功率、エラーの割合、レイテンシーのパーセンタイル、PV と障害率によるトップ Service

ブルーグリーンデプロイメント用の Ingress モニタリングセンター

動的

安全なロールアウトのための ServiceA と ServiceB のメトリクスの並列比較

Ingress 例外センター

自動

SLS の機械学習と時系列分析による異常検出

Ingress 概要

nginx-ingress-controller 経由のウェブサイトレベルのトラフィックを追跡します。主要なメトリクス:

  • [過去 24 時間]:ページビュー (PV)、ユニークビジター (UV)、インバウンド/アウトバウンドトラフィック、平均レイテンシー、モバイルユーザーの割合、5xx エラーの割合、404 エラーの割合

  • 過去 1 分:PV、UV、リクエスト成功率、平均レイテンシー、P95 レイテンシー、P99 レイテンシー

  • 傾向と分布:過去 24 時間および 7 日間の PV の傾向、リージョン別のリクエスト分布、トップエリアと都市、Android/iOS の内訳

  • トップ URL (過去 1 時間):PV、レイテンシー、5xx エラー、404 エラーがそれぞれ最も多いトップ 10 URL

Ingress アクセスセンター

過去 24 時間のリクエスト元とクライアントの分布:UV/PV 数、リージョン別の内訳、トップブラウザ、ソース IP、モバイルの割合。

Ingress モニタリングセンター

問題を検出してトリアージするための、過去 1 時間のリアルタイムメトリクス:

  • リクエスト成功率、5xx の割合、404 の割合、およびアップストリームに転送されなかったリクエストの割合

  • 平均レイテンシー、P95 レイテンシー、P99 レイテンシー、P999 レイテンシー

  • ステータスコード別のリクエスト分布、および Ingress ごとの PV の割合

  • PV、障害率、平均レイテンシー、および総リクエスト数によるトップ 10 Service

Ingress monitoring center

ブルーグリーンデプロイメント用の Ingress モニタリングセンター

ブルーグリーンデプロイメントのロールアウト中にリグレッションを検出するための、ServiceA と ServiceB のメトリクス (PV、エラー率、レイテンシーのパーセンタイル、総リクエスト数) の並列比較。

Ingress blue-green deployment monitoring center

Ingress 例外センター

SLS の機械学習と時系列分析を使用して、nginx-ingress-controller のログの異常を検出します。

Ingress exceptions center

アラートの設定

任意のダッシュボードチャートでアラートルールを設定し、メール、DingTalk チャットボット、Webhook、または SMS で通知できます。

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

この例では、5分ごとにチェックを行い、5xx エラーの割合が 1% を超えた場合に通知するアラートルールを作成します。

  1. [ダッシュボード] セクションで、[Ingress モニタリングセンター] をクリックします。[5XX Proportion] チャートの右上隅にある Tip アイコンにカーソルを合わせ、[アラートとして保存 (旧バージョン)] をクリックします。

  2. [アラートの作成] ウィザードで、[アラート名]、[関連チャート]、[頻度]、および[トリガー条件] を設定します。total フィールドは 5xx エラーの割合を表すため、[トリガー条件] を total > 1 に設定します。

  3. [通知] ページで、通知チャネルを選択し、パラメーターを設定して、[送信] をクリックします。

ダッシュボードのサブスクライブ

スケジュールされたダッシュボードのスナップショットをメールアドレスまたは DingTalk グループに配信できます。詳細については、「ダッシュボードのサブスクライブ」をご参照ください。

この例では、[Ingress Overview V1.2] ダッシュボードをサブスクライブし、毎日 10:00 に DingTalk グループにスナップショットを送信します。

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

  2. [サブスクリプションの作成] ウィザードで、[頻度] を [毎日] と [10:00] に設定します。[ウォーターマークの追加] をオフにして、[次へ] をクリックします。

  3. [通知] ページで、[通知] から [WebHook-DingTalk Bot] を選択し、[リクエスト URL] を DingTalk チャットボットの Webhook URL に設定します。[送信] をクリックします。

ARMS と連携した Ingress ダッシュボードの使用

[Ingress Overview V1.2] ダッシュボードは Application Real-Time Monitoring Service (ARMS) と統合されており、エンドツーエンドのトレースを可視化できます。

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

  2. [プロジェクト] セクションで、ACK クラスターのプロジェクトをクリックします。

  3. 左側メニューで、image アイコンをクリックし、[ダッシュボード] リストから [Ingress Overview V1.2] を選択します。

  4. [レイテンシー上位10件のリクエストURL] セクションで、[URL(ARMS Troubleshooting)] 列の URL をクリックして、その Service の ARMS トレース詳細を表示します。

次のステップ