ワークフローからログを収集する

このページでは、Google Distributed Cloud(GDC)エアギャップ環境のワークフローからログを収集して、ロギングとデータのオブザーバビリティを容易にするプロセスについて説明します。

ログには、GDC でオペレーションを管理する際の条件とアクションが記録されます。コンポーネントが生成するログをスクレイピングして、イベントとアクティビティを記録できます。ロギング プラットフォームには、ロギング ターゲットを介してワークフローで生成されたプロジェクト レベルのログを収集するためのカスタム API が用意されています。

ログデータの収集を開始するには、Management API サーバーのプロジェクト Namespace に LoggingTarget カスタム リソースをデプロイします。ログコレクタがワークフローからデータを取得すると、ロギング プラットフォームはすべてのログソースからログを集約し、インデックスを追加して、LoggingTarget カスタム リソースの構成に従ってログをラベルに関連付けます。

収集したログには、ログのクエリと表示で説明されているように、Grafana ユーザー インターフェースまたはログクエリ API を使用してアクセスします。

データ オブザーバビリティのロギングを実装する際のベスト プラクティスについては、Kubernetes コミュニティのガイドラインをご覧ください。

https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md.

始める前に

LoggingTarget カスタム リソースを管理するために必要な権限を取得するには、関連する LoggingTarget ロールのいずれかを付与するよう組織 IAM 管理者またはプロジェクト IAM 管理者に依頼してください。

必要なアクセスレベルと権限に応じて、組織またはプロジェクトでこのリソースの作成者、編集者、閲覧者のロールを取得できます。詳細については、IAM 権限を準備するをご覧ください。

LoggingTarget カスタム リソースを構成する

LoggingTarget カスタム リソースは、GDC プロジェクト内のログを収集するようにロギング パイプラインに指示します。ログの収集対象、ログパーサー、アクセスレベル、その他の設定を指定できます。

このリソースは、次の構成を定義します。

  • ターゲット: ログを収集する Pod とコンテナを選択するための条件。クラスタ名、Pod 名の接頭辞、コンテナ名の接頭辞を指定できます。
  • ログアナライザー: ログエントリを解釈し、ログ出力をラベルにマッピングして、関連するフィールドを抽出する事前定義済みのパーサー。
  • サービス ID: ログエントリにラベルとして適用されるサービス名。識別とフィルタリングを容易にするために使用されます。
  • 認可: ログエントリのアクセスレベル。収集されたログを表示できるユーザーを制御します。

LoggingTarget カスタム リソース内でこれらのパラメータを構成することで、ログの収集と整理を正確に制御できます。

運用ログを収集する手順は次のとおりです。

  1. ログを収集する GDC プロジェクトを特定します。
  2. LoggingTarget 構成で、運用ログを収集する Pod、プロジェクトの Namespace、追加設定を指定します。

    次の YAML ファイルは、my-project-namespaceLoggingTarget 構成の例を示しています。ここで、ログを収集する Pod 名の接頭辞は my-pod-prefix、ログエントリのアクセスレベルはアプリケーション オペレーター(ao)に付与され、サービス名は my-service-name、ログ形式は JSON です。

    # Configures a log scraping job
    apiVersion: logging.gdc.goog/v1
    kind: LoggingTarget
    metadata:
      # Choose a namespace that matches the namespace of the workload pods.
      namespace: my-project-namespace
      name: my-logging-target
    spec:
      selector:
        matchPodNames:
          - my-pod-prefix
      parser: json
      logAccessLevel: ao
      serviceName: my-service-name
    

    その他のフィールドとオプションについては、LoggingTarget の完全な仕様API リファレンス ドキュメントをご覧ください。

  3. LoggingTarget 構成を、ターゲット Pod と同じ Namespace 内の Management API サーバーに適用します。

    kubectl --kubeconfig KUBECONFIG_PATH apply -f LOGGING_TARGET_NAME.yaml
    

    次のように置き換えます。

    • KUBECONFIG_PATH: Management API サーバーの kubeconfig ファイルへのパス。
    • LOGGING_TARGET_NAME: LoggingTarget 定義ファイルの名前(my-logging-target など)。

    ロギング パイプラインは、プロジェクトの追加コンポーネントからログの収集を開始します。

収集したログは、Grafana ユーザー インターフェースまたは Log Query API を使用してクエリできます。詳細については、ログのクエリと表示をご覧ください。

Grafana を使用してログをクエリする場合は、さまざまなログレベルに組み込みのカラー コーディング機能を使用できます。ログレベル値の設定について詳しくは、https://grafana.com/docs/grafana/latest/explore/logs-integration/ をご覧ください。

LoggingTarget の仕様を完了

次の YAML ファイルは、LoggingTarget カスタム リソースの完全な仕様の例を示しています。詳細とフィールドの完全な説明については、API リファレンス ドキュメントをご覧ください。

# Configures a log scraping job
apiVersion: logging.gdc.goog/v1
kind: LoggingTarget
metadata:
  # Choose a namespace that matches the namespace of the workload pods.
  namespace: PROJECT_NAMESPACE
  name: LOGGING_TARGET_NAME
spec:
  # Choose a matching pattern that identifies the pods for this job.
  # Optional.
  # Relationship between different selectors: 'AND'
  selector:
    # The clusters to collect logs from.
    # The default configuration is to collect logs from all clusters.
    # The relationship between different clusters is an 'OR' relationship.
    # Optional
    matchClusters:
    - my-cluster
    - another-cluster

    # The pod name prefixes to collect logs from.
    # The logging platform scrapes all pods with names
    # that start with the specified prefixes.
    # The values must contain '[a-z0-9-]' characters only.
    # The relationship between different list elements is an 'OR' relationship.
    # Optional.
    matchPodNames:
      - my-pod-prefix
      - another-pod-prefix

    # The container name prefixes to collect logs from.
    # The logging platform scrapes all containers with names
    # that start with the specified prefixes.
    # The values must contain '[a-z0-9-]' characters only.
    # The relationship between different list elements is an 'OR' relationship.
    # Optional.
    matchContainerNames:
      - my-container-prefix
      - another-container-prefix

  # Choose the predefined parser for log entries.
  # Use parsers to map the log output to labels and extract fields.
  # Specify the log format.
  # Optional.
  # Options: klog_text, klog_json, klogr, gdch_json, json
  parser: klog_text

  # Specify an access level for log entries.
  # The default value is 'ao'.
  # Optional.
  # Options: ao, pa, io
  logAccessLevel: ao

  # Specify a service name to be applied as a label.
  # For user workloads consider this field as a workload name.
  # Required.
  serviceName: my-service-name

  # The additional static fields to apply to log entries.
  # The field is a key-value pair, where the field name is the key and
  # the field value is the value.
  # Optional.
  additionalFields:
    app: workload2
    key: value

次のように置き換えます。

  • PROJECT_NAMESPACE: プロジェクトの Namespace。
  • LOGGING_TARGET_NAME: LoggingTarget 定義ファイルの名前。