このトピックでは、Ingress がログを収集できるようにする方法、さまざまなタイプのログレポートを分析する方法、アラーム設定とレポートサブスクリプションで、レポートを使用する方法について説明します。 Alibaba Cloud Container Service for Kubernetes (ACK) は、すべての HTTP リクエストを収集して標準出力する Ingress を提供します。 Log Service (ACK と連携) を使用してダッシュボードを作成し、Ingress のログを分析して Ingress へのアクセスをモニターできます。

始める前に

  1. ログコンポーネントを Kubernetes クラスターにインストールします。
    新しい Kubernetes クラスターを作成する場合、またはログコンポーネントがインストールされていない既存の Kubernetes クラスターを使用する場合は、次の手順に従います。
  2. ターゲット Kubernetes クラスターのログコンポーネント alibaba-log-controller をアップグレードします。
    ログコンポーネント alibaba-log-controller は、ターゲット Kubernetes クラスターの kube-system 名前空間にある、デプロイメントアプリケーションです。 アップグレードするには、次の 2 つのパラメーターを変更する必要があります。
    • イメージ名 :イメージ名 " registry-vpc.{region-id}.aliyuncs.com/acs/log-controller " の {region-id} をターゲット Kubernetes クラスターが属するリージョンの ID に置き換えます。 たとえば、{region-id} は、cn-hangzhou、cn-beijing、または ap-southeast-1 に置き換えることができます。
    • イメージバージョン0.2.0.0-76648ee-aliyun バージョン以降。
    次の 2 つのアップグレード方法のいずれかを選択できます。
    • kubectl edit deployment alibaba-log-controller -n kube-system コマンドを実行します。
    • Container Service コンソールを使用して更新します。

      次の手順に従います。

      1. Container Service コンソールにログインします。
      2. Container Service-Kubernetes の左側のナビゲーションウィンドウで、[アプリケーション] > [デプロイメント] をクリックします。
      3. 対象となる Kubernetes クラスターと kube-system 名前空間を選択し、 alibaba-log-controller を検索します。次に、[操作] 列で、 [編集] をクリックします。

ログを収集するために Ingress の設定をデプロイします。

概要

以下は、ログを収集する Ingress の設定です。 設定は、拡張された Kubernetes Custom Resource Definition (CRD) として表示できます。 したがって、このトピックでは、設定を CRD 設定と呼びます。 CRD 設定がデプロイされると、ログコンポーネントは自動的にパラメーターを作成し、Log Service に関連するリソースをレポートします。
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
  # your config name, must be unique in you k8s cluster
  name: k8s-nginx-ingress
spec:
  # logstore name to upload log
  logstore: nginx-ingress
  # product code, only for k8s nginx ingress
  productCode: k8s-nginx-ingress
  # logtail config detail
  logtailConfig:
    inputType: plugin
    # logtail config name, should be same with [metadata.name]
    configName: k8s-nginx-ingress
    inputDetail:
      plugin:
        inputs:
        - type: service_docker_stdout
          detail:
            IncludeLabel:
              io.kubernetes.container.name: nginx-ingress-controller
            Stderr: false
            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
            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*).*
            SourceKey: content
  • ログコンポーネント alibaba-log-controller を 0.2.0.0-76648ee-aliyun バージョンにアップグレードする前に CRD 設定をデプロイした場合、まずデプロイされた CRD 設定を削除し、アップグレード後に CRD 設定を再デプロイする必要があります。
  • 前述の CRD 設定は、ACK のデフォルトの Ingress コントローラーのログ形式に対してのみ有効です。 ログ形式が変更された場合、CRD 設定の正規表現 (processor_regex の部分) を、CRD での Kubernetes ログ収集の設定 で説明されている手順に従って変更する必要があります。

手順

次の 2 つの方法のいずれかを使用して、CRD 設定をデプロイできます。
  • kubectl コマンドの使用

    上記の CRD 設定を nginx-ingress.yaml ファイルとして保存し、 kubectl apply -f コマンドを実行します。

  • オーケストレーションテンプレートの使用
    1. Container Service コンソール にログインします。
    2. 前述の CRD 設定をオーケストレーションテンプレートとして保存します。 詳細は、「オーケストレーションテンプレートの作成」をご参照ください。
    3. 対象となる Kubernetes クラスターのデフォルトの名前空間で、このテンプレートを使用して、アプリケーションを作成します。

Ingress のログとレポートを表示する

  1. Log Service コンソールにログインします。
  2. 対象となる Kubernetes クラスターに関連付けられているプロジェクトをクリックします。
    プロジェクトのデフォルト名は、 k8s-log- {cluster-id} です。
    次に、 nginx-ingress Logstore が表示されます。 Ingress のすべてのログはこの Logstore に保存されます。
  3. 左側のナビゲーションウィンドウで、[ダッシュボード] をクリックして、Ingress のすべてのレポートを表示します。
    Ingress ログのレポートは次のとおりです。Ingress 概要、Ingress アクセスセンター、Ingress モニタリングセンター、ブルーまたはグリーンデプロイメントの Ingress モニタリングセンター、および Ingress 例外センター。

Ingress 概要レポート

Ingress 概要レポートには、 Ingress の全体的なステータスと次の情報が表示されます。
  • 全体的なステータス (毎日):PV、UV、トラフィック、リクエストレイテンシ、およびモバイル端末ユーザー数と全ユーザー数の比率。
  • リアルタイムの Web サイトステータス (毎分):PV、UV、アクセス成功率、すべてのエラーにおける 5XX エラーの割合、平均レイテンシ、P95 レイテンシ、および P99 レイテンシ。
  • ユーザーリクエストの統計 (毎日):今日と 7 日間の PV、エリア別の訪問分布、リクエスト別上位 10 県と都市、モバイル端末のシェア、Android および IOS 端末のシェア。
  • 上位 URL の統計 (毎時間):リクエスト別上位 10 URL、レイテンシ別上位 10 URL、上位 10 5XX URL、上位 10 404 URL。

Ingress アクセスセンター

Ingress アクセスセンターは、操作ステータスの分析に使用できるアクセスリクエストの統計を提供します。 このレポートには次の情報が含まれます。
  • 当日の UV と PV
  • UV および PV 分布
  • UV および PV の傾向
  • リクエスト別上位 10 エリアと都市
  • 上位ブラウザ
  • アクセスの上位 IP アドレス
  • モバイル端末のシェア
  • Android と IOS のシェア

Ingress モニタリングセンター

Ingress モニタリングセンターは、Web サイトのリアルタイムモニタリング統計を提供します。 このレポートには次の統計が含まれます。
  • リクエストの成功率
  • 404 ステータスコード率
  • 5XX ステータスコード率
  • リクエストの非転送率
  • 平均レイテンシ
  • P95、P99、および P9999 レイテンシ
  • リクエスト別上位 10 サービス
  • 障害別上位 10 サービス
  • レイテンシ別上位 10 サービス
  • トラフィック別上位 10 サービス

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

このレポートは、バージョンリリースをモニターし、ブルーバージョンとグリーンバージョンを比較するために使用されます。 これにより、リリースの例外をすばやく見つけて、元のバージョンをロールバックすることができます。 このレポートでは、ブルーバージョンとグリーンバージョン (たとえば、サービス A とサービス B) を選択する必要があります。 レポートには、PV、すべてのエラーに対する 5XX エラーの比率、成功率、平均レイテンシ、トラフィック、P5、P99、P9999 のレイテンシなど、2 つのバージョンに関する統計が動的に表示されます。

Ingress 例外センター

Ingress 例外センターは、Log Service が提供する機械学習のアルゴリズムに基づいて動作します。 複数のタイミング分析アルゴリズムを使用して、Ingress メトリックから例外を自動的に検出します。

アラームの設定

上記の各レポートにアラームを設定できます。 詳細は、「アラームの設定」をご参照ください。

以下は、5xx ステータスコードの割合の統計のアラームを設定する方法を示しています。
  1. Ingress モニタリングセンターレポートを開き、ポインターを 5XX 割合チャートの右上隅に移動します。次に、表示されたボックスで、[アラームの作成] をクリックします。
  2. アラーム名、検索間隔を設定し、トリガー条件 total > 1 を入力します。
  3. 必要に応じて通知方法を設定します。

スケジュールされたレポートをサブスクライブする

Log Service をスケジュールして、レポートを図に表示できます。また、その図を E メールで送信するか、図を特定の DingTalk グループに送信できます。 詳細については、「ダッシュボードスナップショットのサブスクライブ」をご参照ください。

以下は、スケジュールされた Ingress 概要レポートをサブスクライブする方法を示しています (レポートのレンダリングによって生成された図が、毎日 10:00 に指定された DingTalk グループに送信されます)。
  1. Ingress 概要 レポートを開きます。 次に、右上隅で、[サブスクライブ] をクリックします。
  2. 表示されたページで、[頻度] の 2 つのドロップダウンリストから [毎日] と、 [10:00] を選択し、[ウォーターマークの追加] を無効にします。
  3. [通知リスト] ドロップダウンリストから [WebHook-DingTalk ボット] を選択し、リクエスト URL を入力します。