Alibaba Cloud Ingress は、HTTP リクエストを stdout に記録します。クラスターの作成時にログ収集を有効にすると、Simple Log Service (SLS) を使用して Nginx Ingress のアクセスログの分析結果を表示し、リアルタイムで Ingress のステータスをモニタリングできます。このトピックでは、Nginx Ingress のアクセスログ収集を設定してログを表示する方法について説明します。
前提条件
開始する前に、次の準備ができていることを確認してください。
loongcollector がクラスターにインストールされていること (クラスター作成時のデフォルト)。インストールされていない場合は、「DaemonSet モードでの Kubernetes コンテナーからのテキストログの収集」をご参照ください。
alibaba-log-controller が更新されていること:
kubectl edit deployment alibaba-log-controller -n kube-system
nginx-ingress-controller のログ収集の有効化
GitOps または CI/CD パイプラインでセットアップを自動化する必要がない限り、Container Service for Kubernetes (ACK) コンソールを使用します。
ACK コンソール
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 モードでコンテナログを収集する」をご参照ください。
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.namespaceIngress コントローラーの namespace
はい、
kube-systemでない場合spec.logstoreSLS 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上記の表では、カスタマイズする可能性が最も高いフィールドについて説明しています。
設定を適用します。
kubectl apply -f k8s-nginx-ingress.yaml
ログ収集を無効にするには、AliyunLogConfig を削除します:
kubectl delete aliyunlogconfig k8s-nginx-ingress -n kube-systemアクセスログとダッシュボードの表示
Simple Log Service コンソールにログインします。
[プロジェクト] セクションで、ACK クラスターのプロジェクト (名前:
k8s-log-{cluster-id}) をクリックします。左側メニューで、
アイコンをクリックし、リストからダッシュボードを選択します。
利用可能なダッシュボード:
ダッシュボード | 期間 | 表示内容 |
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 モニタリングセンター
ブルーグリーンデプロイメントのロールアウト中にリグレッションを検出するための、ServiceA と ServiceB のメトリクス (PV、エラー率、レイテンシーのパーセンタイル、総リクエスト数) の並列比較。

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

アラートの設定
任意のダッシュボードチャートでアラートルールを設定し、メール、DingTalk チャットボット、Webhook、または SMS で通知できます。
詳細については、「アラートルールの設定」をご参照ください。
この例では、5分ごとにチェックを行い、5xx エラーの割合が 1% を超えた場合に通知するアラートルールを作成します。
[ダッシュボード] セクションで、[Ingress モニタリングセンター] をクリックします。[5XX Proportion] チャートの右上隅にある
アイコンにカーソルを合わせ、[アラートとして保存 (旧バージョン)] をクリックします。[アラートの作成] ウィザードで、[アラート名]、[関連チャート]、[頻度]、および[トリガー条件] を設定します。
totalフィールドは 5xx エラーの割合を表すため、[トリガー条件] をtotal > 1に設定します。[通知] ページで、通知チャネルを選択し、パラメーターを設定して、[送信] をクリックします。
ダッシュボードのサブスクライブ
スケジュールされたダッシュボードのスナップショットをメールアドレスまたは DingTalk グループに配信できます。詳細については、「ダッシュボードのサブスクライブ」をご参照ください。
この例では、[Ingress Overview V1.2] ダッシュボードをサブスクライブし、毎日 10:00 に DingTalk グループにスナップショットを送信します。
[ダッシュボード] セクションで、[Ingress Overview V1.2] をクリックします。[サブスクライブ] > [作成] を選択します。
[サブスクリプションの作成] ウィザードで、[頻度] を [毎日] と [10:00] に設定します。[ウォーターマークの追加] をオフにして、[次へ] をクリックします。
[通知] ページで、[通知] から [WebHook-DingTalk Bot] を選択し、[リクエスト URL] を DingTalk チャットボットの Webhook URL に設定します。[送信] をクリックします。
ARMS と連携した Ingress ダッシュボードの使用
[Ingress Overview V1.2] ダッシュボードは Application Real-Time Monitoring Service (ARMS) と統合されており、エンドツーエンドのトレースを可視化できます。
Simple Log Service コンソールにログインします。
[プロジェクト] セクションで、ACK クラスターのプロジェクトをクリックします。
左側メニューで、
アイコンをクリックし、[ダッシュボード] リストから [Ingress Overview V1.2] を選択します。[レイテンシー上位10件のリクエストURL] セクションで、[URL(ARMS Troubleshooting)] 列の URL をクリックして、その Service の ARMS トレース詳細を表示します。
次のステップ
データフィルタリングプラグイン — ログクエリフィルターを適用して、特定のリクエストや期間をドリルダウンできます。