Logging


Red Hat OpenShift Service on AWS 4

Red Hat OpenShift Service on AWS の Logging のインストール、使用方法、リリースノート

Red Hat OpenShift Documentation Team

概要

このドキュメントでは、Red Hat OpenShift Service on AWS (ROSA) で OpenShift Logging を設定する手順を説明します。

第1章 ロギング

クラスター管理者は、Red Hat OpenShift Service on AWS クラスターにロギングをデプロイし、それを使用してノードシステム監査ログ、アプリケーションコンテナーログ、インフラストラクチャーログを収集および集約できます。

ロギングを使用して、次のタスクを実行できます。

  • クラスター上の Red Hat が管理するログストレージなど、選択したログ出力にログを転送します。
  • Red Hat OpenShift Service on AWS Web コンソールでログデータを視覚化します。
注記

ロギングは Red Hat OpenShift Service on AWS とは異なるサイクルでリリースされます。そのため、ロギングのドキュメントは Red Hat OpenShift Logging で個別のドキュメントセットとして提供されています。

第2章 Logging 6.2

2.1. サポート

このドキュメントで説明されている設定オプションのみがロギングでサポートされています。

他の設定オプションはサポートされていないため、使用しないでください。設定のパラダイムが Red Hat OpenShift Service on AWS リリース間で変更される可能性があり、このような変更は、設定のすべての可能性が制御されている場合のみ適切に対応できます。Operator は相違点を調整するように設計されているため、このドキュメントで説明されている以外の設定を使用すると、変更は上書きされます。

注記

Red Hat OpenShift Service on AWS のドキュメントに記載されていない設定を実行する必要がある場合は、Red Hat OpenShift Logging Operator を Unmanaged に設定する必要があります。管理外のロギングインスタンスはサポートされていないため、ステータスを Managed に戻すまで更新は受信されません。

注記

ロギングは、コアの Red Hat OpenShift Service on AWS とは異なるリリースサイクルで、インストール可能なコンポーネントとして提供されます。Red Hat OpenShift Container Platform ライフサイクルポリシー は、リリースの互換性を概説しています。

Loki は、水平スケーリング可能で可用性の高いマルチテナントログ集約システムで、OpenShift Observability UI で視覚化できる Logging for Red Hat OpenShift 用の GA ログストアとして提供されます。OpenShift Logging が提供する Loki 設定は、収集されたログを使用してユーザーが迅速にトラブルシューティングを実行できるように設計された短期ログストアです。この目的のために、Logging for Red Hat OpenShift の Loki 設定は短期ストレージを備えており、最新のクエリーに最適化されています。長期間にわたる保存やクエリーの場合、ユーザーはクラスター外部のログストアを探す必要があります。

Logging for Red Hat OpenShift は、アプリケーション、インフラストラクチャー、および監査ログの事前設定済みのコレクターおよびノーマライザーです。これは、サポートされているさまざまなシステムにログを転送するために使用することを目的としています。

Logging は、以下ではありません。

  • 大規模なログ収集システム
  • セキュリティー情報およびイベント監視 (SIEM) に準拠
  • "持ち込み型" (BYO) のログコレクター設定
  • 履歴または長期のログの保持または保管
  • 保証されたログシンク
  • 安全なストレージ - 監査ログはデフォルトでは保存されません

2.1.1. サポート対象の API カスタムリソース定義

次の表は、サポートされている Logging API を説明しています。

Expand
表2.1 Logging API のサポートの状態
CustomResourceDefinition (CRD)ApiVersionサポートの状態

LokiStack

lokistack.loki.grafana.com/v1

5.5 からサポート

RulerConfig

rulerconfig.loki.grafana/v1

5.7 からサポート

AlertingRule

alertingrule.loki.grafana/v1

5.7 からサポート

RecordingRule

recordingrule.loki.grafana/v1

5.7 からサポート

LogFileMetricExporter

LogFileMetricExporter.logging.openshift.io/v1alpha1

5.8 からサポート

ClusterLogForwarder

clusterlogforwarder.observability.openshift.io/v1

6.0 からサポート

2.1.2. サポート対象外の構成

以下のコンポーネントを変更するには、Red Hat OpenShift Logging Operator を Unmanaged (管理外) の状態に設定する必要があります。

  • コレクター設定ファイル
  • コレクター daemonset

明示的にサポート対象外とされているケースには、以下が含まれます。

  • 環境変数を使用したロギングコレクターの設定。環境変数を使用してログコレクターを変更することはできません。
  • ログコレクターによってログを正規化する方法の設定。デフォルトのログの正規化を変更することはできません。

2.1.3. 管理外の Operator のサポートポリシー

Operator の 管理状態 は、Operator が設計通りにクラスター内の関連するコンポーネントのリソースをアクティブに管理しているかどうかを定めます。Operator が unmanaged 状態に設定されていると、これは設定の変更に応答せず、更新を受信しません。

これは非実稼働クラスターやデバッグ時に便利ですが、管理外の状態の Operator はサポートされず、クラスター管理者は個々のコンポーネント設定およびアップグレードを完全に制御していることを前提としています。

Operator は以下の方法を使用して管理外の状態に設定できます。

  • 個別の Operator 設定

    個別の Operator には、それらの設定に managementState パラメーターがあります。これは Operator に応じてさまざまな方法でアクセスできます。たとえば、Red Hat OpenShift Logging Operator は管理するカスタムリソース (CR) を変更することによってこれを実行しますが、Cluster Samples Operator はクラスター全体の設定リソースを使用します。

    managementState パラメーターを Unmanaged に変更する場合、Operator はそのリソースをアクティブに管理しておらず、コンポーネントに関連するアクションを取らないことを意味します。Operator によっては、クラスターが破損し、手動リカバリーが必要になる可能性があるため、この管理状態に対応しない可能性があります。

    警告

    個別の Operator を Unmanaged 状態に変更すると、特定のコンポーネントおよび機能がサポート対象外になります。サポートを継続するには、報告された問題を Managed 状態で再現する必要があります。

  • Cluster Version Operator (CVO) のオーバーライド

    spec.overrides パラメーターを CVO の設定に追加すると、管理者はコンポーネントの CVO の動作に対してオーバーライドの一覧を追加できます。コンポーネントの spec.overrides[].unmanaged パラメーターを true に設定すると、クラスターのアップグレードがブロックされ、CVO のオーバーライドが設定された後に管理者にアラートが送信されます。

    Disabling ownership via cluster version overrides prevents upgrades. Please remove overrides before continuing.
    Copy to Clipboard Toggle word wrap
    警告

    CVO のオーバーライドを設定すると、クラスター全体がサポートされない状態になります。サポートを継続するには、オーバーライドを削除した後に、報告された問題を再現する必要があります。

2.1.4. Logging UI プラグインのサポート例外

現在は テクノロジープレビュー (TP) 機能である Cluster Observability Operator (COO) の一般提供 (GA) リリースが近づくまで、Red Hat は、Red Hat OpenShift Service on AWS 4.14 以降の Logging UI プラグインの COO で Logging 6.0 以降を使用しているお客様にサポートを提供します。COO にはいくつかの独立した機能が含まれており、その一部はまだテクノロジープレビュー機能であるため、このサポート例外は一時的なものです。ただし、Logging UI プラグインは GA の準備が完了しています。

2.1.5. Red Hat サポート用のロギングデータの収集

サポートケースを作成する際、ご使用のクラスターのデバッグ情報を Red Hat サポートに提供していただくと Red Hat のサポートに役立ちます。

must-gather ツール を使用すると、プロジェクトレベルのリソース、クラスターレベルのリソース、および各ロギングコンポーネントの診断情報を収集できます。迅速なサポートを得るには、Red Hat OpenShift Service on AWS とロギングの両方の診断情報を提供してください。

2.1.5.1. must-gather ツールについて

oc adm must-gather CLI コマンドは、問題のデバッグに必要となる可能性のあるクラスターからの情報を収集します。

ロギングの場合、must-gather は次の情報を収集します。

  • プロジェクトレベルの Pod、config map、サービスアカウント、ロール、ロールバインディングおよびイベントを含むプロジェクトレベルのリソース
  • クラスターレベルでのノード、ロール、およびロールバインディングを含むクラスターレベルのリソース
  • ログコレクター、ログストア、およびログビジュアライザーなどの openshift-logging および openshift-operators-redhat namespace の OpenShift Logging リソース

oc adm must-gather を実行すると、新しい Pod がクラスターに作成されます。データは Pod で収集され、must-gather.local で始まる新規ディレクトリーに保存されます。このディレクトリーは、現行の作業ディレクトリーに作成されます。

2.1.5.2. ロギングデータの収集

oc adm must-gather CLI コマンドを使用して、ロギングに関する情報を収集できます。

手順

must-gather でロギング情報を収集するには、以下を実行します。

  1. must-gather 情報を保存する必要のあるディレクトリーに移動します。
  2. ログイメージに対して oc adm must-gather コマンドを実行します。

    $ oc adm must-gather --image=$(oc -n openshift-logging get deployment.apps/cluster-logging-operator -o jsonpath='{.spec.template.spec.containers[?(@.name == "cluster-logging-operator")].image}')
    Copy to Clipboard Toggle word wrap

    must-gather ツールは、現行ディレクトリー内の must-gather.local で始まる新規ディレクトリーを作成します。例: must-gather.local.4157245944708210408

  3. 作成された must-gather ディレクトリーから圧縮ファイルを作成します。たとえば、Linux オペレーティングシステムを使用するコンピューターで以下のコマンドを実行します。

    $ tar -cvaf must-gather.tar.gz must-gather.local.4157245944708210408
    Copy to Clipboard Toggle word wrap
  4. 圧縮ファイルを Red Hat カスタマーポータル で作成したサポートケースに添付します。

2.2. Logging 6.2

2.2.1. Logging 6.2.0 リリースノート

2.2.1.1. 新機能および機能拡張
2.2.1.2. テクノロジープレビュー
重要

OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

2.2.1.3. バグ修正
2.2.1.4. CVE

2.3. Logging 6.2

ClusterLogForwarder カスタムリソース (CR) は、ログの収集と転送の中心的な設定ポイントです。

2.3.1. 入力と出力

入力では、転送するログのソースを指定します。Logging には、クラスターのさまざまな部分からログを選択する次の組み込みの入力タイプが用意されています。

  • application
  • receiver
  • infrastructure
  • audit

namespace または Pod ラベルに基づいてカスタム入力を定義し、ログの選択を微調整することもできます。

出力は、ログが送信される宛先を定義します。各出力タイプには独自の設定オプションセットがあり、動作と認証設定をカスタマイズできます。

2.3.2. レシーバー入力タイプ

レシーバー入力タイプにより、Logging システムは外部ソースからのログを受け入れることができます。ログを受信するための 2 つの形式 (httpsyslog) がサポートされます。

ReceiverSpec フィールドでレシーバー入力の設定を定義します。

2.3.3. パイプラインとフィルター

パイプラインは、入力から出力へのログのフローを決定します。パイプラインは、1 つ以上の入力参照、出力参照、およびオプションのフィルター参照で構成されます。フィルターを使用すると、パイプライン内のログメッセージを変換または削除できます。フィルターは順番に適用されるため、フィルターの順序は重要であり、最初の方のフィルターを使用すると、ログメッセージが後のステージに到達するのを防ぐことができます。

2.3.4. Operator の動作

Cluster Logging Operator は、ClusterLogForwarder リソースの managementState フィールドに基づき、コレクターのデプロイメントと設定を管理します。

  • Managed (デフォルト) に設定すると、仕様で定義された設定に合わせて、Operator がロギングリソースをアクティブに管理します。
  • Unmanaged に設定すると、Operator はアクションを実行せず、ロギングコンポーネントを手動で管理できます。

2.3.5. 検証

ロギングには、スムーズでエラーのない設定エクスペリエンスを確保するために、広範な検証ルールやデフォルト値が含まれます。ClusterLogForwarder リソースは、必須フィールド、フィールド間の依存関係、および入力値の形式の検証チェックを強制します。特定のフィールドにはデフォルト値が提供されるため、一般的なシナリオで明示的な設定を行う必要性が軽減されます。

2.3.6. クイックスタート

OpenShift Logging は 2 つのデータモデルをサポートしています。

  • ViaQ (一般提供)
  • OpenTelemetry (テクノロジープレビュー)

ClusterLogForwarderlokiStack.dataModel フィールドを設定することにより、要件に基づきこれらのデータモデルのいずれかを選択できます。ViaQ は、ログを LokiStack に転送する際のデフォルトのデータモデルです。

注記

OpenShift Logging の今後のリリースでは、デフォルトのデータモデルが ViaQ から OpenTelemetry に変更されます。

2.3.6.1. ViaQ のクイックスタート

デフォルトの ViaQ データモデルを使用するには、次の手順に従います。

前提条件

  • cluster-admin 権限で Red Hat OpenShift Service on AWS クラスターにアクセスできる。
  • OpenShift CLI (oc) がインストールされている。
  • サポートされているオブジェクトストアにアクセスできる。たとえば、AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation などです。

手順

  1. OperatorHub から Red Hat OpenShift Logging OperatorLoki Operator、および Cluster Observability Operator (COO) をインストールします。
  2. openshift-logging namespace に LokiStack カスタムリソース (CR) を作成します。

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki
      namespace: openshift-logging
    spec:
      managementState: Managed
      size: 1x.extra-small
      storage:
        schemas:
        - effectiveDate: '2024-10-01'
          version: v13
        secret:
          name: logging-loki-s3
          type: s3
      storageClassName: gp3-csi
      tenants:
        mode: openshift-logging
    Copy to Clipboard Toggle word wrap
    注記

    事前に logging-loki-s3 シークレットが事前に作成されていることを確認します。このシークレットの内容は、使用しているオブジェクトストレージにより異なります。詳細は、シークレットと TLS 設定を参照してください。

  3. コレクターのサービスアカウントを作成します。

    $ oc create sa collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
  4. コレクターのサービスアカウントによる LokiStack CR へのデータ書き込みを許可します。

    $ oc adm policy add-cluster-role-to-user logging-collector-logs-writer -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    注記

    ClusterRole リソースは、Cluster Logging Operator のインストール中に自動的に作成されるため、手動で作成する必要はありません。

  5. ログを収集するために、次のコマンドを実行してコレクターのサービスアカウントを使用します。

    $ oc adm policy add-cluster-role-to-user collect-application-logs -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    $ oc adm policy add-cluster-role-to-user collect-audit-logs -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    $ oc adm policy add-cluster-role-to-user collect-infrastructure-logs -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    注記

    この例では、コレクターを 3 つのロール (アプリケーション、インフラストラクチャー、監査) すべてにバインドしますが、デフォルトでは、アプリケーションログとインフラストラクチャーログのみが収集されます。監査ログを収集するには、ClusterLogForwarder 設定を更新して監査ログを含めます。環境に必要な特定のログタイプに基づきロールを割り当てます。

  6. UIPlugin CR を作成して、Observe タブの Log セクションを有効にします。

    apiVersion: observability.openshift.io/v1alpha1
    kind: UIPlugin
    metadata:
      name: logging
    spec:
      type: Logging
      logging:
        lokiStack:
          name: logging-loki
    Copy to Clipboard Toggle word wrap
  7. ClusterLogForwarder CR を作成して、ログ転送を設定します。

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: collector
      namespace: openshift-logging
    spec:
      serviceAccount:
        name: collector
      outputs:
      - name: default-lokistack
        type: lokiStack
        lokiStack:
          authentication:
            token:
              from: serviceAccount
          target:
            name: logging-loki
            namespace: openshift-logging
        tls:
          ca:
            key: service-ca.crt
            configMapName: openshift-service-ca.crt
      pipelines:
      - name: default-logstore
        inputRefs:
        - application
        - infrastructure
        outputRefs:
        - default-lokistack
    Copy to Clipboard Toggle word wrap
    注記

    dataModel フィールドはオプションであり、デフォルトでは未設定 (dataModel: "") になっています。これにより、Cluster Logging Operator (CLO) はデータモデルを自動的に選択できるようになります。現在、このフィールドが設定されていない場合の CLO はデフォルトで ViaQ モデルになりますが、これは今後のリリースで変更される予定です。dataModel: ViaQ を指定すると、デフォルトが変更されても設定の互換性が維持されます。

検証

  • Red Hat OpenShift Service on AWS Web コンソールの Observe タブの Log セクションにログが表示されていることを確認します。
2.3.6.2. OpenTelemetry のクイックスタート
重要

OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

OTLP 取り込みを設定し、OpenTelemetry データモデルを有効にするには、次の手順を実行します。

前提条件

  • cluster-admin 権限で Red Hat OpenShift Service on AWS クラスターにアクセスできる。
  • OpenShift CLI (oc) がインストールされている。
  • サポートされているオブジェクトストアにアクセスできる。たとえば、AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation などです。

手順

  1. OperatorHub から Red Hat OpenShift Logging OperatorLoki Operator、および Cluster Observability Operator (COO) をインストールします。
  2. openshift-logging namespace に LokiStack カスタムリソース (CR) を作成します。

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki
      namespace: openshift-logging
    spec:
      managementState: Managed
      size: 1x.extra-small
      storage:
        schemas:
        - effectiveDate: '2024-10-01'
          version: v13
        secret:
          name: logging-loki-s3
          type: s3
      storageClassName: gp3-csi
      tenants:
        mode: openshift-logging
    Copy to Clipboard Toggle word wrap
    注記

    事前に logging-loki-s3 シークレットが事前に作成されていることを確認します。このシークレットの内容は、使用しているオブジェクトストレージにより異なります。詳細は、「シークレットと TLS 設定」を参照してください。

  3. コレクターのサービスアカウントを作成します。

    $ oc create sa collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
  4. コレクターのサービスアカウントによる LokiStack CR へのデータ書き込みを許可します。

    $ oc adm policy add-cluster-role-to-user logging-collector-logs-writer -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    注記

    ClusterRole リソースは、Cluster Logging Operator のインストール中に自動的に作成されるため、手動で作成する必要はありません。

  5. ログを収集するために、次のコマンドを実行してコレクターのサービスアカウントを使用します。

    $ oc adm policy add-cluster-role-to-user collect-application-logs -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    $ oc adm policy add-cluster-role-to-user collect-audit-logs -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    $ oc adm policy add-cluster-role-to-user collect-infrastructure-logs -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    注記

    この例では、コレクターを 3 つのロール (アプリケーション、インフラストラクチャー、監査) すべてにバインドします。デフォルトでは、アプリケーションログとインフラストラクチャーログのみが収集されます。監査ログを収集するには、ClusterLogForwarder 設定を更新して監査ログを含めます。環境に必要な特定のログタイプに基づきロールを割り当てます。

  6. UIPlugin CR を作成して、Observe タブの Log セクションを有効にします。

    apiVersion: observability.openshift.io/v1alpha1
    kind: UIPlugin
    metadata:
      name: logging
    spec:
      type: Logging
      logging:
        lokiStack:
          name: logging-loki
    Copy to Clipboard Toggle word wrap
  7. ClusterLogForwarder CR を作成して、ログ転送を設定します。

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: collector
      namespace: openshift-logging
      annotations:
        observability.openshift.io/tech-preview-otlp-output: "enabled" 
    1
    
    spec:
      serviceAccount:
        name: collector
      outputs:
      - name: loki-otlp
        type: lokiStack 
    2
    
        lokiStack:
          target:
            name: logging-loki
            namespace: openshift-logging
          dataModel: Otel 
    3
    
          authentication:
            token:
              from: serviceAccount
        tls:
          ca:
            key: service-ca.crt
            configMapName: openshift-service-ca.crt
      pipelines:
      - name: my-pipeline
        inputRefs:
        - application
        - infrastructure
        outputRefs:
        - loki-otlp
    Copy to Clipboard Toggle word wrap
    1
    アノテーションを使用して、テクノロジープレビュー機能である Otel データモデルを有効にします。
    2
    出力タイプを lokiStack として定義します。
    3
    OpenTelemetry データモデルを指定します。
    注記

    dataModelOtel の場合、lokiStack.labelKeys は使用できません。dataModelOtel の場合に同様の機能を得るには、「OTLP データ取り込み用の LokiStack 設定」を参照してください。

検証

  • OTLP が正しく機能していることを確認するには、次の手順を実行します。

    1. OpenShift Web コンソールで、ObserveOpenShift LoggingLokiStackWrites をクリックします。
    2. Distributor - Structured Metadata セクションを確認します。

2.4. ログ転送の設定

ClusterLogForwarder (CLF) を使用すると、ユーザーはさまざまな宛先へのログの転送を設定できます。さまざまなソースからログメッセージを選択し、それらを変換またはフィルタリングできるパイプラインを介して送信して、1 つ以上の出力に転送する柔軟な方法を提供します。

ClusterLogForwarder の主な機能

  • 入力を使用してログメッセージを選択する
  • 出力を使用してログを外部の宛先に転送する
  • フィルターを使用してログメッセージをフィルタリング、変換、および破棄する
  • 入力、フィルター、出力を接続するログ転送パイプラインを定義する

2.4.1. ログ収集のセットアップ

このリリースの Cluster Logging では、管理者が ClusterLogForwarder に関連付けられたサービスアカウントにログ収集権限を明示的に付与する必要があります。これは、ClusterLogging およびオプションで ClusterLogForwarder.logging.openshift.io リソースで構成されるレガシーロギングシナリオでは、以前のリリースでは必要ありませんでした。

Red Hat OpenShift Logging Operator は、collect-audit-logscollect-application-logscollect-infrastructure-logs クラスターロールを提供します。これにより、コレクターは監査ログ、アプリケーションログ、およびインフラストラクチャーログをそれぞれ収集できます。

必要なクラスターロールをサービスアカウントにバインドして、ログ収集をセットアップします。

2.4.1.1. レガシーサービスアカウント

既存のレガシーサービスアカウント logcollector を使用するには、次の ClusterRoleBinding を作成します。

$ oc adm policy add-cluster-role-to-user collect-application-logs system:serviceaccount:openshift-logging:logcollector
Copy to Clipboard Toggle word wrap
$ oc adm policy add-cluster-role-to-user collect-infrastructure-logs system:serviceaccount:openshift-logging:logcollector
Copy to Clipboard Toggle word wrap

さらに、監査ログを収集する場合は、次の ClusterRoleBinding を作成します。

$ oc adm policy add-cluster-role-to-user collect-audit-logs system:serviceaccount:openshift-logging:logcollector
Copy to Clipboard Toggle word wrap
2.4.1.2. サービスアカウントの作成

前提条件

  • Red Hat OpenShift Logging Operator が openshift-logging namespace にインストールされている。
  • 管理者権限がある。

手順

  1. コレクターのサービスアカウントを作成します。認証にトークンを必要とするストレージにログを書き込む場合は、サービスアカウントにトークンを含める必要があります。
  2. 適切なクラスターロールをサービスアカウントにバインドします。

    バインドコマンドの例

    $ oc adm policy add-cluster-role-to-user <cluster_role_name> system:serviceaccount:<namespace_name>:<service_account_name>
    Copy to Clipboard Toggle word wrap

2.4.1.2.1. サービスアカウントのクラスターロールバインディング

role_binding.yaml ファイルは、ClusterLogging Operator の ClusterRole を特定の ServiceAccount にバインドし、クラスター全体で Kubernetes リソースを管理できるようにします。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: manager-rolebinding
roleRef:                                           
1

  apiGroup: rbac.authorization.k8s.io              
2

  kind: ClusterRole                                
3

  name: cluster-logging-operator                   
4

subjects:                                          
5

  - kind: ServiceAccount                           
6

    name: cluster-logging-operator                 
7

    namespace: openshift-logging                   
8
Copy to Clipboard Toggle word wrap
1
roleRef: バインディングが適用される ClusterRole を参照します。
2
apiGroup: RBAC API グループを示し、ClusterRole が Kubernetes の RBAC システムの一部であることを指定します。
3
kind: 参照されるロールがクラスター全体に適用される ClusterRole であることを指定します。
4
name: ServiceAccount にバインドされる ClusterRole の名前 (ここでは cluster-logging-operator)。
5
subjects: ClusterRole から権限が付与されるエンティティー (ユーザーまたはサービスアカウント) を定義します。
6
kind: サブジェクトが ServiceAccount であることを指定します。
7
Name: 権限が付与される ServiceAccount の名前。
8
namespace: ServiceAccount が配置されている namespace を示します。
2.4.1.2.2. アプリケーションログの書き込み

write-application-logs-clusterrole.yaml ファイルは、Loki ロギングアプリケーションにアプリケーションログを書き込む権限を付与する ClusterRole を定義します。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-logging-write-application-logs
rules:                                              
1

  - apiGroups:                                      
2

      - loki.grafana.com                            
3

    resources:                                      
4

      - application                                 
5

    resourceNames:                                  
6

      - logs                                        
7

    verbs:                                          
8

      - create                                      
9
Copy to Clipboard Toggle word wrap
1
rules: この ClusterRole によって付与される権限を指定します。
2
apiGroups: Loki ロギングシステムに関連する API グループ loki.grafana.com を参照します。
3
loki.grafana.com: Loki 関連のリソースを管理するための API グループ。
4
resources: この ClusterRole がやり取りする権限を付与するリソースタイプ。
5
application: Loki ロギングシステム内のアプリケーションリソースを参照します。
6
resourceNames: このロールが管理できるリソースの名前を指定します。
7
logs: 作成できるログリソースを参照します。
8
verbs: リソースで許可されるアクション。
9
create: Loki システムに新しいログを作成する権限を付与します。
2.4.1.2.3. 監査ログの書き込み

write-audit-logs-clusterrole.yaml ファイルは、Loki ロギングシステムに監査ログを作成する権限を付与する ClusterRole を定義します。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-logging-write-audit-logs
rules:                                              
1

  - apiGroups:                                      
2

      - loki.grafana.com                            
3

    resources:                                      
4

      - audit                                       
5

    resourceNames:                                  
6

      - logs                                        
7

    verbs:                                          
8

      - create                                      
9
Copy to Clipboard Toggle word wrap
1
rules: この ClusterRole によって付与される権限を定義します。
2
apiGroups: API グループ loki.grafana.com を指定します。
3
loki.grafana.com: Loki ロギングリソースを管理する API グループ。
4
resources: このロールが管理するリソースタイプ (この場合は audit) を指します。
5
audit: ロールが Loki 内の監査ログを管理することを指定します。
6
resourceNames: ロールがアクセスできる特定のリソースを定義します。
7
logs: このロールで管理できるログを指します。
8
verbs: リソースで許可されるアクション。
9
create: 新しい監査ログを作成する権限を付与します。
2.4.1.2.4. インフラストラクチャーログの書き込み

write-infrastructure-logs-clusterrole.yaml ファイルは、Loki ロギングシステムにインフラストラクチャーログを作成する権限を付与する ClusterRole を定義します。

YAML 例

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-logging-write-infrastructure-logs
rules:                                              
1

  - apiGroups:                                      
2

      - loki.grafana.com                            
3

    resources:                                      
4

      - infrastructure                              
5

    resourceNames:                                  
6

      - logs                                        
7

    verbs:                                          
8

      - create                                      
9
Copy to Clipboard Toggle word wrap

1
ルール: この ClusterRole が付与する権限を指定します。
2
apiGroups: Loki 関連リソースの API グループを指定します。
3
loki.grafana.com: Loki ロギングシステムを管理する API グループ。
4
resources: このロールが対話できるリソースタイプを定義します。
5
infrastructure: このロールが管理するインフラストラクチャー関連のリソースを指します。
6
resourceNames: このロールが管理できるリソースの名前を指定します。
7
logs: インフラストラクチャーに関連するログリソースを指します。
8
verbs: このロールによって許可されるアクションです。
9
create: Loki システムにインフラストラクチャーログを作成する権限を付与します。
2.4.1.2.5. ClusterLogForwarder 編集者ロール

clusterlogforwarder-editor-role.yaml ファイルは、ユーザーが OpenShift で ClusterLogForwarders を管理できるようにする ClusterRole を定義します。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: clusterlogforwarder-editor-role
rules:                                              
1

  - apiGroups:                                      
2

      - observability.openshift.io                  
3

    resources:                                      
4

      - clusterlogforwarders                        
5

    verbs:                                          
6

      - create                                      
7

      - delete                                      
8

      - get                                         
9

      - list                                        
10

      - patch                                       
11

      - update                                      
12

      - watch                                       
13
Copy to Clipboard Toggle word wrap
1
ルール: この ClusterRole が付与する権限を指定します。
2
apiGroups: OpenShift 固有の API グループを指します。
3
obervability.openshift.io: ロギングなどの可観測性リソースを管理するための API グループ。
4
resources: このロールが管理できるリソースを指定します。
5
clusterlogforwarders: OpenShift のログ転送リソースを指します。
6
verbs: ClusterLogForwarders で許可されるアクションを指定します。
7
create: 新しい ClusterLogForwarders を作成する権限を付与します。
8
delete: 既存の ClusterLogForwarders を削除する権限を付与します。
9
get: 特定の ClusterLogForwarders に関する情報を取得する権限を付与します。
10
list: すべての ClusterLogForwarders のリスト表示を許可します。
11
patch: ClusterLogForwarders を部分的に変更する権限を付与します。
12
update: 既存の ClusterLogForwarders を更新する権限を付与します。
13
watch: ClusterLogForwarders への変更を監視する権限を付与します。

2.4.2. コレクターのログレベルの変更

コレクターでログレベルを変更するには、observability.openshift.io/log-level アノテーションを tracedebuginfowarnerror、および off に設定します。

ログレベルアノテーションの例

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: collector
  annotations:
    observability.openshift.io/log-level: debug
# ...
Copy to Clipboard Toggle word wrap

2.4.3. Operator の管理

ClusterLogForwarder リソースには、Operator がリソースをアクティブに管理するか、管理対象外のままにするかを制御する managementState フィールドがあります。

Managed
(デフォルト) Operator は、CLF 仕様の目的の状態に一致するようにロギングリソースを駆動します。
管理対象外
Operator は、ロギングコンポーネントに関連するアクションを一切実行しません。

これにより、管理者は managementStateUnmanaged に設定して、ログ転送を一時的に停止できます。

2.4.4. ClusterLogForwarder の構造

CLF には、次の主要コンポーネントを含む spec セクションがあります。

Inputs
転送するログメッセージを選択します。組み込みの入力タイプである applicationinfrastructure、および audit は、クラスターのさまざまな部分からログを転送します。カスタム入力を定義することもできます。
出力
ログを転送する宛先を定義します。各出力には、一意の名前とタイプ固有の設定があります。
Pipelines
ログが入力からフィルターを経由して出力されるまでのパスを定義します。パイプラインには一意の名前があり、入力名、出力名、フィルター名のリストで構成されます。
Filters
パイプライン内のログメッセージを変換または破棄します。ユーザーは、特定のログフィールドに一致するフィルターを定義し、メッセージを破棄または変更できます。フィルターはパイプラインで指定された順序で適用されます。
2.4.4.1. Inputs

入力は spec.inputs の下の配列で設定されます。組み込みの入力タイプは 3 つあります。

application
インフラストラクチャー namespace 内のログを除く、すべてのアプリケーションコンテナーからログを選択します。
infrastructure

次の namespace で実行されているノードおよびインフラストラクチャーコンポーネントからログを選択します。

  • default
  • kube
  • openshift
  • kube- または openshift- 接頭辞を含む
audit
OpenShift API サーバー監査ログ、Kubernetes API サーバー監査ログ、ovn 監査ログ、および auditd からのノード監査ログからログを選択します。

ユーザーは、特定の namespace からログを選択するか、または Pod ラベルを使用してログを選択する application のカスタム入力を定義できます。

2.4.4.2. 出力

出力は spec.outputs の下の配列で設定されます。各出力には一意の名前とタイプが必要です。サポートされているタイプは次のとおりです。

azureMonitor
ログを Azure Monitor に転送します。
cloudwatch
ログを AWS CloudWatch に転送します。
elasticsearch
ログを外部の Elasticsearch インスタンスに転送します。
googleCloudLogging
ログを Google Cloud Logging に転送します。
http
ログを汎用 HTTP エンドポイントに転送します。
kafka
ログを Kafka ブローカーに転送します。
loki
ログを Loki ロギングバックエンドに転送します。
lokistack
Red Hat OpenShift Service on AWS の認証と統合された、Loki と Web プロキシーを組み合わせたロギング対応の環境にログを転送します。LokiStack のプロキシーは、Red Hat OpenShift Service on AWS の認証を使用してマルチテナンシーを適用します。
otlp
OpenTelemetry プロトコルを使用してログを転送します。
splunk
ログを Splunk に転送します。
syslog
ログを外部の syslog サーバーに転送します。

各出力タイプには独自の設定フィールドがあります。

2.4.5. OTLP 出力の設定

クラスター管理者は、OpenTelemetry Protocol (OTLP) 出力を使用してログを収集し、OTLP レシーバーに転送できます。OTLP 出力は、OpenTelemetry Observability フレームワーク で定義された仕様を使用して、HTTP を介して JSON エンコーディングでデータを送信します。

重要

OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

手順

  • OTLP を使用した転送を有効にするには、次のアノテーションを追加して ClusterLogForwarder カスタムリソース (CR) を作成または編集します。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      annotations:
        observability.openshift.io/tech-preview-otlp-output: "enabled" 
    1
    
      name: clf-otlp
    spec:
      serviceAccount:
        name: <service_account_name>
      outputs:
      - name: otlp
        type: otlp
        otlp:
          tuning:
            compression: gzip
            deliveryMode: AtLeastOnce
            maxRetryDuration: 20
            maxWrite: 10M
            minRetryDuration: 5
          url: <otlp_url> 
    2
    
      pipelines:
      - inputRefs:
        - application
        - infrastructure
        - audit
        name: otlp-logs
        outputRefs:
        - otlp
    Copy to Clipboard Toggle word wrap

    1
    このアノテーションを使用して OpenTelemetry Protocol (OTLP) 出力を有効にします。これはテクノロジープレビュー機能です。
    2
    これは絶対 URL でなければならず、ログの送信先である OTLP エンドポイントのプレースホルダーです。
注記

OTLP 出力では OpenTelemetry データモデルが使用されますが、これは他の出力タイプで使用される ViaQ データモデルとは異なります。これは、OpenTelemetry Observability フレームワークで定義された OpenTelemetry Semantic Conventions を使用することで OTLP に準拠しています。

2.4.5.1. Pipelines

パイプラインは spec.pipelines の下の配列で設定されます。各パイプラインには一意の名前があり、次の要素で構成される必要があります。

inputRefs
このパイプラインにログを転送する入力の名前。
outputRefs
ログを送信する出力の名前。
filterRefs
(オプション) 適用するフィルターの名前。

filterRefs は順番に適用されるため、順序が重要です。以前のフィルターは、後のフィルターで処理されないメッセージを破棄する可能性があります。

2.4.5.2. Filters

フィルターは spec.filters の下の配列で設定されます。構造化フィールドの値に基づいて受信ログメッセージを照合し、変更または削除できます。

管理者は次のタイプのフィルターを設定できます。

2.4.6. 複数行の例外検出の有効化

コンテナーログの複数行のエラー検出を有効にします。

警告

この機能を有効にすると、パフォーマンスに影響が出る可能性があり、追加のコンピューティングリソースや代替のロギングソリューションが必要になる場合があります。

ログパーサーは頻繁に、同じ例外の個別の行を別々の例外として誤って識別します。その結果、余分なログエントリーが発生し、トレースされた情報が不完全または不正確な状態で表示されます。

Java 例外の例

java.lang.NullPointerException: Cannot invoke "String.toString()" because "<param1>" is null
    at testjava.Main.handle(Main.java:47)
    at testjava.Main.printMe(Main.java:19)
    at testjava.Main.main(Main.java:10)
Copy to Clipboard Toggle word wrap

  • ロギングを有効にして複数行の例外を検出し、それらを 1 つのログエントリーに再アセンブルできるようにする場合は、ClusterLogForwarder カスタムリソース (CR) に .spec.filters の下の detectMultilineErrors フィールドが含まれていることを確認します。

ClusterLogForwarder CR の例

apiVersion: "observability.openshift.io/v1"
kind: ClusterLogForwarder
metadata:
  name: <log_forwarder_name>
  namespace: <log_forwarder_namespace>
spec:
  serviceAccount:
    name: <service_account_name>
  filters:
  - name: <name>
    type: detectMultilineException
  pipelines:
    - inputRefs:
        - <input-name>
      name: <pipeline-name>
      filterRefs:
        - <filter-name>
      outputRefs:
        - <output-name>
Copy to Clipboard Toggle word wrap

2.4.6.1. 詳細

ログメッセージが例外スタックトレースを形成する連続したシーケンスとして表示される場合、それらは単一の統合ログレコードに結合されます。最初のログメッセージの内容は、シーケンス内のすべてのメッセージフィールドの連結コンテンツに置き換えられます。

コレクターは次の言語をサポートしています。

  • Java
  • JS
  • Ruby
  • Python
  • Golang
  • PHP
  • Dart

2.4.7. HTTP 経由でのログ転送

HTTP 経由でログを転送できるようにするには、ClusterLogForwarder カスタムリソース (CR) で出力タイプとして http を指定します。

手順

  • 以下のテンプレートを使用して、ClusterLogForwarder CR を作成または編集します。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: <log_forwarder_name>
      namespace: <log_forwarder_namespace>
    spec:
      managementState: Managed
      outputs:
      - name: <output_name>
        type: http
        http:
          headers:  
    1
    
              h1: v1
              h2: v2
          authentication:
            username:
              key: username
              secretName: <http_auth_secret>
            password:
              key: password
              secretName: <http_auth_secret>
          timeout: 300
          proxyURL: <proxy_url> 
    2
    
          url: <url> 
    3
    
        tls:
          insecureSkipVerify: 
    4
    
          ca:
            key: <ca_certificate>
            secretName: <secret_name> 
    5
    
      pipelines:
        - inputRefs:
            - application
          name: pipe1
          outputRefs:
            - <output_name>  
    6
    
      serviceAccount:
        name: <service_account_name> 
    7
    Copy to Clipboard Toggle word wrap

    1
    ログレコードと送信する追加のヘッダー。
    2
    オプション: この出力から http または https 経由でログを転送するために使用する HTTP/HTTPS プロキシーの URL。この設定は、クラスターまたはノードのデフォルトのプロキシー設定をオーバーライドします。
    3
    ログの宛先アドレス。
    4
    値は true または false です。
    5
    宛先認証情報のシークレット名。
    6
    この値は、出力名と同じである必要があります。
    7
    サービスアカウントの名前。

2.4.8. syslog プロトコルを使用したログの転送

syslog RFC3164 または RFC5424 プロトコルを使用して、デフォルトの Elasticsearch ログストアの代わり、またはそれに加えてプロトコルを受け入れるように設定された外部ログアグリゲーターに、ログのコピーを送信できます。syslog サーバーなど、外部ログアグリゲーターを Red Hat OpenShift Service on AWS からログを受信するように設定する必要があります。

syslog プロトコルを使用してログ転送を設定するには、syslog サーバーへの 1 つ以上の出力と、それらの出力を使用するパイプラインを含む ClusterLogForwarder カスタムリソース (CR) を作成する必要があります。syslog 出力では、UDP、TCP、または TLS 接続を使用できます。

前提条件

  • 指定されたプロトコルまたは形式を使用してロギングデータを受信するように設定されたロギングサーバーが必要です。

手順

  1. ClusterLogForwarder CR オブジェクトを定義する YAML ファイルを作成または編集します。

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: collector
    spec:
      managementState: Managed
      outputs:
      - name: rsyslog-east 
    1
    
        syslog:
          appName: <app_name> 
    2
    
          enrichment: KubernetesMinimal
          facility: <facility_value> 
    3
    
          msgId: <message_ID> 
    4
    
          payloadKey: <record_field> 
    5
    
          procId: <process_ID> 
    6
    
          rfc: <RFC3164_or_RFC5424> 
    7
    
          severity: informational 
    8
    
          tuning:
            deliveryMode: <AtLeastOnce_or_AtMostOnce> 
    9
    
          url: <url> 
    10
    
        tls: 
    11
    
          ca:
            key: ca-bundle.crt
            secretName: syslog-secret
        type: syslog
      pipelines:
      - inputRefs: 
    12
    
        - application
        name: syslog-east 
    13
    
        outputRefs:
        - rsyslog-east
      serviceAccount: 
    14
    
        name: logcollector
    Copy to Clipboard Toggle word wrap
    1
    出力の名前を指定します。
    2
    オプション: syslog メッセージヘッダーの APP-NAME 部分の値を指定します。値は Syslog プロトコル に準拠している必要があります。値は、静的値と動的値を組み合わせたものにすることができます。フィールドパスとそれに続く || で構成され、その後に別のフィールドパスまたは静的値が続きます。最終的な値の最大長は 48 文字に切り捨てられます。動的値は中括弧で囲む必要があり、値の後に || で区切られた静的なフォールバック値を付ける必要があります。静的値には、英数字とダッシュ、アンダースコア、ドット、スラッシュのみを含めることができます。値の例は <value1>-{.<value2>||"none"} です。
    3
    オプション: syslog-msg ヘッダーの Facility 部分の値を指定します。
    4
    オプション: syslog-msg ヘッダーの MSGID 部分の値を指定します。値は、静的値と動的値を組み合わせたものにすることができます。フィールドパスとそれに続く || で構成され、その後に別のフィールドパスまたは静的値が続きます。最終的な値の最大長は 32 文字に切り捨てられます。動的値は中括弧で囲む必要があり、値の後に || で区切られた静的なフォールバック値を付ける必要があります。静的値には、英数字とダッシュ、アンダースコア、ドット、スラッシュのみを含めることができます。値の例は <value1>-{.<value2>||"none"} です。
    5
    オプション: ペイロードとして使用するレコードフィールドを指定します。payloadKey 値は、1 つの中括弧 {} で囲まれた 1 つのフィールドパスである必要があります。たとえば、{.<value>} です。
    6
    オプション: syslog メッセージヘッダーの PROCID 部分の値を指定します。値は Syslog プロトコル に準拠している必要があります。値は、静的値と動的値を組み合わせたものにすることができます。フィールドパスとそれに続く || で構成され、その後に別のフィールドパスまたは静的値が続きます。最終的な値の最大長は 48 文字に切り捨てられます。動的値は中括弧で囲む必要があり、値の後に || で区切られた静的なフォールバック値を付ける必要があります。静的値には、英数字とダッシュ、アンダースコア、ドット、スラッシュのみを含めることができます。値の例は <value1>-{.<value2>||"none"} です。
    7
    オプション: 生成されたメッセージが準拠する RFC を設定します。値は RFC3164 または RFC5424 にすることができます。
    8
    オプション: メッセージの重大度レベルを設定します。詳細は、Syslog プロトコル を参照してください。
    9
    オプション: ログ転送の配信モードを設定します。値は AtLeastOnce または AtMostOnce のどちらかです。
    10
    スキームを使用して絶対 URL を指定します。有効なスキームは、tcptls、および udp です。たとえば、tls://syslog-receiver.example.com:6514 です。
    11
    Transport Layer Security (TLS) クライアント接続のオプションを制御するための設定を指定します。
    12
    パイプラインを使用して転送するログタイプ (applicationinfrastructure または audit) を指定します。
    13
    パイプラインの名前を指定します。
    14
    サービスアカウントの名前。
  2. CR オブジェクトを作成します。

    $ oc create -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
2.4.8.1. メッセージ出力へのログソース情報の追加

ClusterLogForwarder カスタムリソース (CR) に enrichment フィールドを追加することで、レコードの message フィールドに namespace_namepod_name、および container_name 要素を追加できます。

# ...
  spec:
    outputs:
    - name: syslogout
      syslog:
        enrichment: KubernetesMinimal
        facility: user
        payloadKey: message
        rfc: RFC3164
        severity: debug
      type: syslog
      url: tls://syslog-receiver.example.com:6514
    pipelines:
    - inputRefs:
      - application
      name: test-app
      outputRefs:
      - syslogout
# ...
Copy to Clipboard Toggle word wrap
注記

この設定は、RFC3164 と RFC5424 の両方と互換性があります。

enrichment: None を使用した syslog メッセージ出力の例

 2025-03-03T11:48:01+00:00  example-worker-x  syslogsyslogserverd846bb9b: {...}
Copy to Clipboard Toggle word wrap

enrichment: KubernetesMinimal を使用した syslog メッセージ出力の例

2025-03-03T11:48:01+00:00  example-worker-x  syslogsyslogserverd846bb9b: namespace_name=cakephp-project container_name=mysql pod_name=mysql-1-wr96h,message: {...}
Copy to Clipboard Toggle word wrap

2.4.9. 不要なログレコードを削除するコンテンツフィルターの設定

drop フィルターが設定されている場合、ログコレクターは転送する前にフィルターに従ってログストリームを評価します。コレクターは、指定された設定に一致する不要なログレコードを削除します。

手順

  1. フィルターの設定を ClusterLogForwarder CR の filters 仕様に追加します。

    以下の例は、正規表現に基づいてログレコードを削除するように ClusterLogForwarder CR を設定する方法を示しています。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      filters:
      - name: <filter_name>
        type: drop 
    1
    
        drop: 
    2
    
        - test: 
    3
    
          - field: .kubernetes.labels."foo-bar/baz" 
    4
    
            matches: .+ 
    5
    
          - field: .kubernetes.pod_name
            notMatches: "my-pod" 
    6
    
      pipelines:
      - name: <pipeline_name> 
    7
    
        filterRefs: ["<filter_name>"]
    # ...
    Copy to Clipboard Toggle word wrap

    1
    フィルターのタイプを指定します。drop フィルターは、フィルター設定に一致するログレコードをドロップします。
    2
    drop フィルターを適用するための設定オプションを指定します。
    3
    ログレコードが削除されるかどうかを評価するために使用されるテストの設定を指定します。
    • テストに指定されたすべての条件が true の場合、テストは合格し、ログレコードは削除されます。
    • drop フィルター設定に複数のテストが指定されている場合、いずれかのテストに合格すると、レコードは削除されます。
    • 条件の評価中にエラーが発生した場合 (たとえば、評価対象のログレコードにフィールドがない場合)、その条件は false と評価されます。
    4
    ドットで区切られたフィールドパス (ログレコード内のフィールドへのパス) を指定します。パスには、英数字とアンダースコア (a-zA-Z0-9_) を含めることができます (例: .kubernetes.namespace_name)。セグメントにこの範囲外の文字が含まれている場合、セグメントを引用符で囲む必要があります (例: .kubernetes.labels."foo.bar-bar/baz")。1 つの test 設定に複数のフィールドパスを含めることができますが、テストに合格して drop フィルターを適用するには、すべてのフィールドパスが true と評価される必要があります。
    5
    正規表現を指定します。ログレコードがこの正規表現と一致する場合は、破棄されます。単一の field パスに対して matches または notMatches 条件のいずれかを設定できますが、両方を設定することはできません。
    6
    正規表現を指定します。ログレコードがこの正規表現に一致しない場合、破棄されます。単一の field パスに対して matches または notMatches 条件のいずれかを設定できますが、両方を設定することはできません。
    7
    drop フィルターが適用されるパイプラインを指定します。
  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

追加例

次の例は、優先度の高いログレコードのみを保持するように drop フィルターを設定する方法を示しています。

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
# ...
spec:
  serviceAccount:
    name: <service_account_name>
  filters:
  - name: important
    type: drop
    drop:
    - test:
      - field: .message
        notMatches: "(?i)critical|error"
      - field: .level
        matches: "info|warning"
# ...
Copy to Clipboard Toggle word wrap

単一の test 設定に複数のフィールドパスを追加する以外に、OR チェックとして扱われる追加のテストも追加できます。次の例では、いずれかの test 設定が true と評価されるとレコードが削除されます。ただし、2 番目の test 設定では、true と評価されるためには、両方のフィールド仕様が true である必要があります。

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
# ...
spec:
  serviceAccount:
    name: <service_account_name>
  filters:
  - name: important
    type: drop
    drop:
    - test:
      - field: .kubernetes.namespace_name
        matches: "^open"
    - test:
      - field: .log_type
        matches: "application"
      - field: .kubernetes.pod_name
        notMatches: "my-pod"
# ...
Copy to Clipboard Toggle word wrap

2.4.10. API 監査フィルターの概要

OpenShift API サーバーは、API 呼び出しごとに、リクエスト、レスポンス、リクエスターの ID の詳細を示す監査イベントを生成するため、大量のデータが生成されます。API 監査フィルターはルールを使用して、重要でないイベントを除外してイベントサイズを減少できるようにし、監査証跡をより管理しやすくします。ルールは順番にチェックされ、最初の一致でチェックが停止します。イベントに含まれるデータの量は、level フィールドの値によって決まります。

  • None: イベントはドロップされます。
  • Metadata: 監査メタデータが含まれ、リクエストおよびレスポンスの本文は削除されます。
  • Request: 監査メタデータとリクエスト本文が含まれ、レスポンス本文は削除されます。
  • RequestResponse: メタデータ、リクエスト本文、レスポンス本文のすべてのデータが含まれます。レスポンス本文が非常に大きくなる可能性があります。たとえば、oc get pods -A はクラスター内のすべての Pod の YAML 記述を含むレスポンス本文を生成します。

ClusterLogForwarder カスタムリソース (CR) は、以下の追加機能を提供しますが、標準の Kubernetes 監査ポリシー と同じ形式を使用します。

ワイルドカード
ユーザー、グループ、namespace、およびリソースの名前には、先頭または末尾に * アスタリスク文字を付けることができます。たとえば、namespace openshift-\*openshift-apiserver または openshift-authentication に一致します。リソース \*/status は、Pod/status または Deployment/status と一致します。
デフォルトのルール

ポリシーのルールに一致しないイベントは、以下のようにフィルターされます。

  • getlistwatch などの読み取り専用システムイベントは削除されます。
  • サービスアカウントと同じ namespace 内で発生するサービスアカウント書き込みイベントは破棄されます。
  • 他のすべてのイベントは、設定されたレート制限に従って転送されます。

これらのデフォルトを無効にするには、level フィールドのみが含まれるルールでルールリストを終了するか、空のルールを追加します。

応答コードが省略される
省略する整数ステータスコードのリスト。イベントが作成されない HTTP ステータスコードをリストする OmitResponseCodes フィールドを使用して、応答で HTTP ステータスコードに基づいてイベントを破棄できます。デフォルト値は [404, 409, 422, 429] です。値が空のリスト [] の場合、ステータスコードは省略されません。

ClusterLogForwarder CR の監査ポリシーは、Red Hat OpenShift Service on AWS の監査ポリシーに加えて動作します。ClusterLogForwarder CR 監査フィルターは、ログコレクターが転送する内容を変更し、verb、user、group、namespace、または resource でフィルタリングする機能を提供します。複数のフィルターを作成して、同じ監査ストリームの異なるサマリーを異なる場所に送信できます。たとえば、詳細なストリームをローカルクラスターログストアに送信し、詳細度の低いストリームをリモートサイトに送信できます。

注記

監査ログを収集するには、クラスターロール collect-audit-logs が必要です。提供されている例は、監査ポリシーで可能なルールの範囲を示すことを目的としており、推奨される設定ではありません。

監査ポリシーの例

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: <log_forwarder_name>
  namespace: <log_forwarder_namespace>
spec:
  serviceAccount:
    name: <service_account_name>
  pipelines:
    - name: my-pipeline
      inputRefs: audit 
1

      filterRefs: my-policy 
2

  filters:
    - name: my-policy
      type: kubeAPIAudit
      kubeAPIAudit:
        # Don't generate audit events for all requests in RequestReceived stage.
        omitStages:
          - "RequestReceived"

        rules:
          # Log pod changes at RequestResponse level
          - level: RequestResponse
            resources:
            - group: ""
              resources: ["pods"]

          # Log "pods/log", "pods/status" at Metadata level
          - level: Metadata
            resources:
            - group: ""
              resources: ["pods/log", "pods/status"]

          # Don't log requests to a configmap called "controller-leader"
          - level: None
            resources:
            - group: ""
              resources: ["configmaps"]
              resourceNames: ["controller-leader"]

          # Don't log watch requests by the "system:kube-proxy" on endpoints or services
          - level: None
            users: ["system:kube-proxy"]
            verbs: ["watch"]
            resources:
            - group: "" # core API group
              resources: ["endpoints", "services"]

          # Don't log authenticated requests to certain non-resource URL paths.
          - level: None
            userGroups: ["system:authenticated"]
            nonResourceURLs:
            - "/api*" # Wildcard matching.
            - "/version"

          # Log the request body of configmap changes in kube-system.
          - level: Request
            resources:
            - group: "" # core API group
              resources: ["configmaps"]
            # This rule only applies to resources in the "kube-system" namespace.
            # The empty string "" can be used to select non-namespaced resources.
            namespaces: ["kube-system"]

          # Log configmap and secret changes in all other namespaces at the Metadata level.
          - level: Metadata
            resources:
            - group: "" # core API group
              resources: ["secrets", "configmaps"]

          # Log all other resources in core and extensions at the Request level.
          - level: Request
            resources:
            - group: "" # core API group
            - group: "extensions" # Version of group should NOT be included.

          # A catch-all rule to log all other requests at the Metadata level.
          - level: Metadata
Copy to Clipboard Toggle word wrap

1
収集されるログのタイプ。このフィールドの値は、監査ログの場合は audit、アプリケーションログの場合は application、インフラストラクチャーログの場合は infrastructure、またはアプリケーションに定義された指定の入力になります。
2
監査ポリシーの名前。

input セレクターを使用して、ラベル式または照合するラベルキーとその値に基づいてアプリケーションログを含めることができます。

手順

  1. ClusterLogForwarder CR の input 仕様にフィルターの設定を追加します。

    以下の例は、ラベル式または一致したラベルキー/値に基づいてログを組み込むように ClusterLogForwarder CR を設定する方法を示しています。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      inputs:
        - name: mylogs
          application:
            selector:
              matchExpressions:
              - key: env 
    1
    
                operator: In 
    2
    
                values: ["prod", "qa"] 
    3
    
              - key: zone
                operator: NotIn
                values: ["east", "west"]
              matchLabels: 
    4
    
                app: one
                name: app1
          type: application
    # ...
    Copy to Clipboard Toggle word wrap

    1
    照合するラベルキーを指定します。
    2
    Operator を指定します。有効な値には、InNotInExistsDoesNotExist などがあります。
    3
    文字列値の配列を指定します。operator 値が Exists または DoesNotExist のいずれかの場合、値の配列は空である必要があります。
    4
    正確なキーまたは値のマッピングを指定します。
  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

2.4.12. ログレコードを削除するコンテンツフィルターの設定

prune フィルターが設定されると、ログコレクターは転送前にフィルターをもとにログレベルを評価します。コレクターは、Pod アノテーションなどの値の低いフィールドを削除してログレコードを整理します。

手順

  1. フィルターの設定を ClusterLogForwarder CR の prune 仕様に追加します。

    次の例は、フィールドパスに基づいてログレコードを削除するように ClusterLogForwarder CR を設定する方法を示しています。

    重要

    両方が指定されている場合、最初に notIn 配列に基づいてレコードが整理され、in 配列よりも優先されます。notIn 配列を使用してレコードが整理された後、in 配列を使用してレコードが整理されます。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      filters:
      - name: <filter_name>
        type: prune 
    1
    
        prune: 
    2
    
          in: [.kubernetes.annotations, .kubernetes.namespace_id] 
    3
    
          notIn: [.kubernetes,.log_type,.message,."@timestamp"] 
    4
    
      pipelines:
      - name: <pipeline_name> 
    5
    
        filterRefs: ["<filter_name>"]
    # ...
    Copy to Clipboard Toggle word wrap

    1
    フィルターのタイプを指定します。prune フィルターでは、設定されたフィールドでログレコードをプルーニングします。
    2
    prune フィルターを適用するための設定オプションを指定します。in フィールドと notIn フィールドは、ログレコード内のフィールドへのパスであるドット区切りのフィールドパスの配列として指定されます。これらのパスには、英数字とアンダースコア (a-zA-Z0-9_) を含めることができます (例: .kubernetes.namespace_name)。セグメントにこの範囲外の文字が含まれている場合、セグメントを引用符で囲む必要があります (例: .kubernetes.labels."foo.bar-bar/baz")
    3
    オプション: この配列で指定されたフィールドはすべてログレコードから削除されます。
    4
    オプション: この配列で指定されていないフィールドはログレコードから削除されます。
    5
    prune フィルターを適用するパイプラインを指定します。
    注記

    フィルターは、log_type.log_source、および .message フィールドを除外します。

  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

2.4.13. ソースによる監査およびインフラストラクチャーログ入力のフィルタリング

input セレクターを使用して、ログを収集する audit および infrastructure ソースのリストを定義できます。

手順

  1. ClusterLogForwarder CR に audit および infrastructure ソースを定義する設定を追加します。

    次の例は、ClusterLogForwarder CR を設定して audit および infrastructure ソースを定義する方法を示しています。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      inputs:
        - name: mylogs1
          type: infrastructure
          infrastructure:
            sources: 
    1
    
              - node
        - name: mylogs2
          type: audit
          audit:
            sources: 
    2
    
              - kubeAPI
              - openshiftAPI
              - ovn
    # ...
    Copy to Clipboard Toggle word wrap

    1
    収集するインフラストラクチャーソースのリストを指定します。有効なソースには以下が含まれます。
    • node: ノードからのジャーナルログ
    • container: namespace にデプロイされたワークロードからのログ
    2
    収集する audit ソースのリストを指定します。有効なソースには以下が含まれます。
    • kubeAPI: Kubernetes API サーバーからのログ
    • openshiftAPI: OpenShift API サーバーからのログ
    • auditd: ノードの auditd サービスからのログ
    • ovn: オープン仮想ネットワークサービスからのログ
  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

input セレクターを使用して、namespace とコンテナー名に基づいてアプリケーションログを含めたり除外したりできます。

手順

  1. ClusterLogForwarder CR に namespace とコンテナー名を含めるか除外するかの設定を追加します。

    以下の例は、namespace およびコンテナー名を含めるか、除外するように ClusterLogForwarder CR を設定する方法を示しています。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      inputs:
        - name: mylogs
          application:
            includes:
              - namespace: "my-project" 
    1
    
                container: "my-container" 
    2
    
            excludes:
              - container: "other-container*" 
    3
    
                namespace: "other-namespace" 
    4
    
          type: application
    # ...
    Copy to Clipboard Toggle word wrap

    1
    ログがこれらの namespace からのみ収集されることを指定します。
    2
    ログがこれらのコンテナーからのみ収集されることを指定します。
    3
    ログを収集するときに無視する namespace のパターンを指定します。
    4
    ログを収集するときに無視するコンテナーのセットを指定します。
    注記

    excludes フィールドは includes フィールドよりも優先されます。

  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

2.5. ロギングコレクターの設定

Red Hat OpenShift のロギングは、クラスターからオペレーションとアプリケーションログを収集し、Kubernetes Pod とプロジェクトメタデータでデータを拡充します。ログコレクターに対するサポートされているすべての変更は、ClusterLogForwarder カスタムリソース (CR) の spec.collection スタンザを通じて実行されます。

2.5.1. LogFileMetricExporter リソースの作成

実行中のコンテナーによって生成されたログからメトリクスを生成するには、LogFileMetricExporter カスタムリソース (CR) を作成する必要があります。

LogFileMetricExporter CR を作成しない場合、Red Hat OpenShift Service on AWS Web コンソールのダッシュボードの Produced LogsNo datapoints found というメッセージが表示される場合があります。

前提条件

  • 管理者権限がある。
  • Red Hat OpenShift Logging Operator がインストールされている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. LogFileMetricExporter CR を YAML ファイルとして作成します。

    LogFileMetricExporter CR の例

    apiVersion: logging.openshift.io/v1alpha1
    kind: LogFileMetricExporter
    metadata:
      name: instance
      namespace: openshift-logging
    spec:
      nodeSelector: {} 
    1
    
      resources: 
    2
    
        limits:
          cpu: 500m
          memory: 256Mi
        requests:
          cpu: 200m
          memory: 128Mi
      tolerations: [] 
    3
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    オプション: nodeSelector スタンザは、Pod がスケジュールされるノードを定義します。
    2
    resources スタンザは、LogFileMetricExporter CR のリソース要件を定義します。
    3
    オプション: tolerations スタンザは、Pod が受け入れる toleration を定義します。
  2. 次のコマンドを実行して、LogFileMetricExporter CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

2.5.2. ログコレクター CPU およびメモリー制限の設定

ログコレクターを使用して、CPU とメモリーの制限を調整します。

手順

  • ClusterLogForwarder カスタムリソース (CR) を編集します。

    $ oc -n openshift-logging edit ClusterLogging instance
    Copy to Clipboard Toggle word wrap
    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: instance
      namespace: openshift-logging
    spec:
      collector:
        resources:
          limits: 
    1
    
            memory: 736Mi
          requests:
            cpu: 100m
            memory: 736Mi
    # ...
    Copy to Clipboard Toggle word wrap
    1
    必要に応じて CPU、メモリー制限および要求を指定します。表示される値はデフォルト値です。

2.5.3. 入力レシーバーの設定

Red Hat OpenShift Logging Operator は、クライアントがコレクターに書き込めるように、設定された各入力レシーバー用のサービスをデプロイします。このサービスは、入力レシーバーに指定されたポートを公開します。ログフォワーダー ClusterLogForwarder CR デプロイメントの場合、サービス名は <clusterlogforwarder_resource_name>-<input_name> 形式になります。

2.5.3.1. 監査ログを HTTP サーバーとして受信するようにコレクターを設定する

ClusterLogForwarder カスタムリソース (CR) でレシーバー入力として http を指定することにより、ログコレクターが HTTP 接続をリッスンして監査ログのみを受信するように設定できます。

重要

HTTP レシーバー入力は、次のシナリオでのみサポートされます。

  • Hosted Control Plane にロギングがインストールされます。
  • ログが、Red Hat OpenShift Logging Operator と同じクラスターにインストールされている Red Hat 対応製品から生成された場合。例:

    • OpenShift Virtualization

前提条件

  • 管理者権限がある。
  • OpenShift CLI (oc) がインストールされている。
  • Red Hat OpenShift Logging Operator がインストールされている。
  • ClusterLogForwarder CR が作成されている。

手順

  1. ClusterLogForwarder CR を変更して、http レシーバー入力の設定を追加します。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
    # ...
    spec:
      inputs:
      - name: http-receiver 
    1
    
        type: receiver
        receiver:
          type: http 
    2
    
          port: 8443 
    3
    
          http:
            format: kubeAPIAudit 
    4
    
      outputs:
      - name: default-lokistack
        lokiStack:
          authentication:
            token:
              from: serviceAccount
          target:
            name: logging-loki
            namespace: openshift-logging
        tls:
          ca:
            key: service-ca.crt
            configMapName: openshift-service-ca.crt
        type: lokiStack
    # ...
      pipelines: 
    5
    
        - name: http-pipeline
          inputRefs:
            - http-receiver
          outputRefs:
            - <output_name>
    # ...
    Copy to Clipboard Toggle word wrap

    1
    入力レシーバーの名前を指定します。
    2
    入力レシーバー型を http に指定します。
    3
    オプション: 入力レシーバーがリッスンするポートを指定します。これは、1024 から 65535 までの値とします。デフォルト値は 8443 です。
    4
    現在、HTTP 入力レシーバーでは kube-apiserver Webhook 形式のみがサポートされています。
    5
    入力レシーバーのパイプラインを設定します。
  2. 次のコマンドを実行して、ClusterLogForwarder CR に変更を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

検証

  1. 次のコマンドを実行して、コレクターが <clusterlogforwarder_resource_name>-<input_name> 形式の名前を持つサービスでリッスンしていることを確認します。

    $ oc get svc
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)            AGE
    collector                 ClusterIP   172.30.85.239    <none>        24231/TCP          3m6s
    collector-http-receiver   ClusterIP   172.30.205.160   <none>        8443/TCP           3m6s
    Copy to Clipboard Toggle word wrap

    この出力例では、サービス名は collector-http-receiver です。

  2. 次のコマンドを実行して、認証局 (CA) 証明書ファイルを抽出します。

    $ oc extract cm/openshift-service-ca.crt -n <namespace>
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行して、curl コマンドを使用してログを送信します。

    $ curl --cacert <openshift_service_ca.crt> https://collector-http-receiver.<namespace>.svc:8443 -XPOST -d '{"<prefix>":"<msessage>"}'
    Copy to Clipboard Toggle word wrap

    <openshift_service_ca.crt> は、抽出した CA 証明書ファイルに置き換えます。

    注記

    検証手順に従うことによってのみ、クラスター内でログを転送できます。

2.5.3.2. コレクターを syslog サーバーとして接続をリッスンするように設定する

ClusterLogForwarder カスタムリソース (CR) で syslog をレシーバー入力として指定することで、ジャーナル形式のインフラストラクチャーログを収集するようにログコレクターを設定できます。

重要

syslog レシーバー入力は、次のシナリオでのみサポートされます。

  • Hosted Control Plane にロギングがインストールされます。
  • ログが、Red Hat OpenShift Logging Operator と同じクラスターにインストールされている Red Hat 対応製品から生成された場合。例:

    • Red Hat OpenStack Services on OpenShift (RHOSO)
    • OpenShift Virtualization

前提条件

  • 管理者権限がある。
  • OpenShift CLI (oc) がインストールされている。
  • Red Hat OpenShift Logging Operator がインストールされている。
  • ClusterLogForwarder CR が作成されている。

手順

  1. 次のコマンドを実行して、collect-infrastructure-logs クラスターのロールをサービスアカウントに付与します。

    バインドコマンドの例

    $ oc adm policy add-cluster-role-to-user collect-infrastructure-logs -z logcollector
    Copy to Clipboard Toggle word wrap

  2. ClusterLogForwarder CR を変更して、syslog レシーバー入力の設定を追加します。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      inputs:
        - name: syslog-receiver 
    1
    
          type: receiver
          receiver:
            type: syslog 
    2
    
            port: 10514 
    3
    
      outputs:
      - name: default-lokistack
        lokiStack:
          authentication:
            token:
              from: serviceAccount
          target:
            name: logging-loki
            namespace: openshift-logging
        tls:
          ca:
            key: service-ca.crt
            configMapName: openshift-service-ca.crt
        type: lokiStack
    # ...
      pipelines: 
    4
    
        - name: syslog-pipeline
          inputRefs:
            - syslog-receiver
          outputRefs:
            - <output_name>
    # ...
    Copy to Clipboard Toggle word wrap

    1
    入力レシーバーの名前を指定します。
    2
    入力レシーバー型を syslog に指定します。
    3
    オプション: 入力レシーバーがリッスンするポートを指定します。これは、1024 から 65535 までの値とします。
    4
    入力レシーバーのパイプラインを設定します。
  3. 次のコマンドを実行して、ClusterLogForwarder CR に変更を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

検証

  • 次のコマンドを実行して、コレクターが <clusterlogforwarder_resource_name>-<input_name> 形式の名前を持つサービスでリッスンしていることを確認します。

    $ oc get svc
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)            AGE
    collector                   ClusterIP   172.30.85.239    <none>        24231/TCP          33m
    collector-syslog-receiver   ClusterIP   172.30.216.142   <none>        10514/TCP          2m20s
    Copy to Clipboard Toggle word wrap

    この出力例では、サービス名は collector-syslog-receiver です。

2.6. LokiStack でのログの保存

アプリケーション、監査、インフラストラクチャー関連のログを保存するように LokiStack カスタムリソース (CR) を設定できます。

Loki は、水平スケーリング可能で可用性の高いマルチテナントログ集約システムで、OpenShift Observability UI で視覚化できる Logging for Red Hat OpenShift 用の GA ログストアとして提供されます。OpenShift Logging が提供する Loki 設定は、収集されたログを使用してユーザーが迅速にトラブルシューティングを実行できるように設計された短期ログストアです。この目的のために、Logging for Red Hat OpenShift の Loki 設定は短期ストレージを備えており、最新のクエリーに最適化されています。長期間にわたる保存やクエリーの場合、ユーザーはクラスター外部のログストアを探す必要があります。

2.6.1. Loki デプロイメントのサイズ

Loki のサイズは 1x.<size> の形式に従います。この場合の 1x はインスタンスの数を、<size> は性能を指定します。

1x.pico 設定は、最小限のリソースと制限要件を持つ単一の Loki デプロイメントを定義し、すべての Loki コンポーネントに高可用性 (HA) サポートを提供します。この設定は、単一のレプリケーションファクターまたは自動圧縮を必要としないデプロイメントに適しています。

ディスク要求はサイズ設定にかかわらず類似しているため、お客様はさまざまなサイズをテストして、それぞれのデプロイメントニーズに最適なサイズを決定できます。

重要

デプロイメントサイズの 1x の数は変更できません。

Expand
表2.2 Loki のサイズ
 1x.demo1x.pico [6.1+ のみ]1x.extra-small1x.small1x.medium

Data transfer

デモ使用のみ

50 GB/日

100 GB/日

500 GB/日

2 TB/日

1 秒あたりのクエリー数 (QPS)

デモ使用のみ

200 ミリ秒で 1 - 25 QPS

200 ミリ秒で 1 - 25 QPS

200 ミリ秒で 25 - 50 QPS

200 ミリ秒で 25 - 75 QPS

レプリケーション係数

なし

2

2

2

2

合計 CPU 要求

なし

仮想 CPU 7 個

仮想 CPU 14 個

仮想 CPU 34 個

仮想 CPU 54 個

ルーラーを使用する場合の合計 CPU リクエスト

なし

仮想 CPU 8 個

仮想 CPU 16 個

仮想 CPU 42 個

仮想 CPU 70 個

合計メモリー要求

なし

17 Gi

31 Gi

67 Gi

139 Gi

ルーラーを使用する場合の合計メモリーリクエスト

なし

18 Gi

35 Gi

83 Gi

171 Gi

合計ディスク要求

40 Gi

590 Gi

430 Gi

430 Gi

590 Gi

ルーラーを使用する場合の合計ディスクリクエスト

60 Gi

910 Gi

750 Gi

750 Gi

910 Gi

2.6.2. 前提条件

  • コマンドラインインターフェイス (CLI) または Web コンソールを使用して Loki Operator をインストールした。
  • ClusterLogForwarder CR と同じ namespace に serviceAccount CR を作成した。
  • collect-audit-logscollect-application-logs、および collect-infrastructure-logs クラスターロールを serviceAccount CR に割り当てた。

2.6.3. コアのセットアップと設定

ロールベースのアクセス制御、基本的なモニタリング、Pod の配置を使用して、Loki をデプロイします。

2.6.4. LokiStack ルールの RBAC 権限の認可

管理者は、クラスターロールをユーザー名にバインドすることで、ユーザーが独自のアラートおよび記録ルールを作成および管理できるようにすることができます。クラスターロールは、ユーザーに必要なロールベースのアクセス制御 (RBAC) 権限を含む ClusterRole オブジェクトとして定義されます。

LokiStack では、アラートおよび記録ルール用の次のクラスターロールが利用できます。

Expand
ルール名説明

alertingrules.loki.grafana.com-v1-admin

このロールを持つユーザーは、アラートルールを管理する管理レベルのアクセス権を持ちます。このクラスターロールは、loki.grafana.com/v1 API グループ内の AlertingRule リソースを作成、読み取り、更新、削除、リスト表示、および監視する権限を付与します。

alertingrules.loki.grafana.com-v1-crdview

このロールを持つユーザーは、loki.grafana.com/v1 API グループ内の AlertingRule リソースに関連するカスタムリソース定義 (CRD) の定義を表示できますが、これらのリソースを変更または管理する権限を持ちません。

alertingrules.loki.grafana.com-v1-edit

このロールを持つユーザーは、AlertingRule リソースを作成、更新、および削除する権限を持ちます。

alertingrules.loki.grafana.com-v1-view

このロールを持つユーザーは、loki.grafana.com/v1 API グループ内の AlertingRule リソースを読み取ることができます。既存のアラートルールの設定、ラベル、およびアノテーションを検査できますが、それらを変更することはできません。

recordingrules.loki.grafana.com-v1-admin

このロールを持つユーザーは、記録ルールを管理する管理レベルのアクセス権を持ちます。このクラスターロールは、loki.grafana.com/v1 API グループ内の RecordingRule リソースを作成、読み取り、更新、削除、リスト表示、および監視する権限を付与します。

recordingrules.loki.grafana.com-v1-crdview

このロールを持つユーザーは、loki.grafana.com/v1 API グループ内の RecordingRule リソースに関連するカスタムリソース定義 (CRD) の定義を表示できますが、これらのリソースを変更または管理する権限を持ちません。

recordingrules.loki.grafana.com-v1-edit

このロールを持つユーザーは、RecordingRule リソースを作成、更新、および削除する権限を持ちます。

recordingrules.loki.grafana.com-v1-view

このロールを持つユーザーは、loki.grafana.com/v1 API グループ内の RecordingRule リソースを読み取ることができます。既存のアラートルールの設定、ラベル、およびアノテーションを検査できますが、それらを変更することはできません。

2.6.4.1. 例

ユーザーにクラスターロールを適用するには、既存のクラスターロールを特定のユーザー名にバインドする必要があります。

クラスターロールは、使用するロールバインディングの種類に応じて、クラスタースコープまたは namespace スコープにすることができます。RoleBinding オブジェクトを使用する場合は、oc adm policy add-role-to-user コマンドを使用する場合と同様に、クラスターロールが指定した namespace にのみ適用されます。ClusterRoleBinding オブジェクトを使用する場合は、oc adm policy add-cluster-role-to-user コマンドを使用する場合と同様に、クラスターロールがクラスター内のすべての namespace に適用されます。

次のコマンド例では、指定したユーザーに、クラスター内の特定の namespace のアラートルールに対する作成、読み取り、更新、および削除 (CRUD) 権限を付与します。

特定の namespace のアラートルールに対する CRUD 権限を付与するクラスターロールバインディングコマンドの例

$ oc adm policy add-role-to-user alertingrules.loki.grafana.com-v1-admin -n <namespace> <username>
Copy to Clipboard Toggle word wrap

次のコマンドは、指定したユーザーに、すべての namespace のアラートルールに対する管理者権限を付与します。

管理者権限を付与するクラスターロールバインディングコマンドの例

$ oc adm policy add-cluster-role-to-user alertingrules.loki.grafana.com-v1-admin <username>
Copy to Clipboard Toggle word wrap

2.6.5. Loki を使用したログベースのアラートルールの作成

AlertingRule CR には、単一の LokiStack インスタンスのアラートルールグループを宣言するために使用する、仕様および Webhook 検証定義のセットが含まれます。Webhook 検証定義は、ルール検証条件もサポートします。

  • AlertingRule CR に無効な interval 期間が含まれる場合、無効なアラートルールです。
  • AlertingRule CR に無効な for 期間が含まれる場合、無効なアラートルールです。
  • AlertingRule CR に無効な LogQL expr が含まれる場合、無効なアラートルールです。
  • AlertingRule CR に同じ名前のグループが 2 つ含まれる場合、無効なアラートルールです。
  • 上記のいずれも該当しない場合、アラートルールは有効とみなされます。
Expand
表2.3 AlertingRule の定義
テナントタイプAlertingRule CR の有効な namespace

application

<your_application_namespace>

audit

openshift-logging

infrastructure

openshift-/*kube-/\*default

手順

  1. AlertingRule カスタムリソース (CR) を作成します。

    インフラストラクチャー AlertingRule CR の例

      apiVersion: loki.grafana.com/v1
      kind: AlertingRule
      metadata:
        name: loki-operator-alerts
        namespace: openshift-operators-redhat 
    1
    
        labels: 
    2
    
          openshift.io/<label_name>: "true"
      spec:
        tenantID: "infrastructure" 
    3
    
        groups:
          - name: LokiOperatorHighReconciliationError
            rules:
              - alert: HighPercentageError
                expr: | 
    4
    
                  sum(rate({kubernetes_namespace_name="openshift-operators-redhat", kubernetes_pod_name=~"loki-operator-controller-manager.*"} |= "error" [1m])) by (job)
                    /
                  sum(rate({kubernetes_namespace_name="openshift-operators-redhat", kubernetes_pod_name=~"loki-operator-controller-manager.*"}[1m])) by (job)
                    > 0.01
                for: 10s
                labels:
                  severity: critical 
    5
    
                annotations:
                  summary: High Loki Operator Reconciliation Errors 
    6
    
                  description: High Loki Operator Reconciliation Errors 
    7
    Copy to Clipboard Toggle word wrap

    1
    この AlertingRule CR が作成される namespace には、LokiStack spec.rules.namespaceSelector 定義に一致するラベルが必要です。
    2
    labels ブロックは、LokiStack の spec.rules.selector 定義と一致する必要があります。
    3
    infrastructure テナントの AlertingRule CR は、openshift-*kube-\*、または default namespaces でのみサポートされます。
    4
    kubernetes_namespace_name: の値は、metadata.namespace の値と一致する必要があります。
    5
    この必須フィールドの値は、criticalwarning、または info である必要があります。
    6
    このフィールドは必須です。
    7
    このフィールドは必須です。

    アプリケーション AlertingRule CR の例

      apiVersion: loki.grafana.com/v1
      kind: AlertingRule
      metadata:
        name: app-user-workload
        namespace: app-ns 
    1
    
        labels: 
    2
    
          openshift.io/<label_name>: "true"
      spec:
        tenantID: "application"
        groups:
          - name: AppUserWorkloadHighError
            rules:
              - alert:
                expr: | 
    3
    
                  sum(rate({kubernetes_namespace_name="app-ns", kubernetes_pod_name=~"podName.*"} |= "error" [1m])) by (job)
                for: 10s
                labels:
                  severity: critical 
    4
    
                annotations:
                  summary:  
    5
    
                  description:  
    6
    Copy to Clipboard Toggle word wrap

    1
    この AlertingRule CR が作成される namespace には、LokiStack spec.rules.namespaceSelector 定義に一致するラベルが必要です。
    2
    labels ブロックは、LokiStack の spec.rules.selector 定義と一致する必要があります。
    3
    kubernetes_namespace_name: の値は、metadata.namespace の値と一致する必要があります。
    4
    この必須フィールドの値は、criticalwarning、または info である必要があります。
    5
    この必須フィールドの値は、ルールの概要です。
    6
    この必須フィールドの値は、ルールの詳細な説明です。
  2. AlertingRule CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

2.6.6. メンバーリストの作成の失敗を許容する Loki の設定

管理者は通常、Red Hat OpenShift Service on AWS クラスターでプライベートでない IP ネットワーク範囲を使用します。その結果、LokiStack のメンバーリスト設定が失敗します。この設定はデフォルトでプライベート IP ネットワークを使用するためです。

管理者は、メンバーリスト設定の Pod ネットワークを選択できます。LokiStack カスタムリソース (CR) を変更して、hashRing 仕様で podIP アドレスを使用できます。LokiStack CR を設定するには、以下のコマンドを使用します。

$ oc patch LokiStack logging-loki -n openshift-logging  --type=merge -p '{"spec": {"hashRing":{"memberlist":{"instanceAddrType":"podIP"},"type":"memberlist"}}}'
Copy to Clipboard Toggle word wrap

podIP を含む LokiStack の例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
# ...
  hashRing:
    type: memberlist
    memberlist:
      instanceAddrType: podIP
# ...
Copy to Clipboard Toggle word wrap

2.6.7. Loki でストリームベースの保持の有効化

ログストリームに基づいて保持ポリシーを設定できます。これらのルールは、グローバル、テナントごと、またはその両方で設定できます。両方で設定すると、グローバルルールの前にテナントルールが適用されます。

重要

s3 バケットまたは LokiStack カスタムリソース (CR) に保存期間が定義されていない場合、ログは削除されず、s3 バケットに永久に残り、s3 ストレージがいっぱいになる可能性があります。

注記

スキーマ v13 が推奨されます。

手順

  1. LokiStack CR を作成します。

    • 次の例に示すように、ストリームベースの保持をグローバルに有効にします。

      AWS のグローバルストリームベースの保持の例

      apiVersion: loki.grafana.com/v1
      kind: LokiStack
      metadata:
        name: logging-loki
        namespace: openshift-logging
      spec:
        limits:
         global: 
      1
      
            retention: 
      2
      
              days: 20
              streams:
              - days: 4
                priority: 1
                selector: '{kubernetes_namespace_name=~"test.+"}' 
      3
      
              - days: 1
                priority: 1
                selector: '{log_type="infrastructure"}'
        managementState: Managed
        replicationFactor: 1
        size: 1x.small
        storage:
          schemas:
          - effectiveDate: "2020-10-11"
            version: v13
          secret:
            name: logging-loki-s3
            type: aws
        storageClassName: gp3-csi
        tenants:
          mode: openshift-logging
      Copy to Clipboard Toggle word wrap

      1
      すべてのログストリームの保持ポリシーを設定します。注記: このフィールドは、オブジェクトストレージに保存されたログの保持期間には影響しません。
      2
      このブロックが CR に追加されると、クラスターで保持が有効になります。
      3
      ログ stream.spec: 制限を定義するために使用される LogQL クエリー が含まれます。
    • 次の例に示すように、テナントごとにストリームベースの保持を有効にします。

      AWS のテナントごとのストリームベースの保持の例

      apiVersion: loki.grafana.com/v1
      kind: LokiStack
      metadata:
        name: logging-loki
        namespace: openshift-logging
      spec:
        limits:
          global:
            retention:
              days: 20
          tenants: 
      1
      
            application:
              retention:
                days: 1
                streams:
                  - days: 4
                    selector: '{kubernetes_namespace_name=~"test.+"}' 
      2
      
            infrastructure:
              retention:
                days: 5
                streams:
                  - days: 1
                    selector: '{kubernetes_namespace_name=~"openshift-cluster.+"}'
        managementState: Managed
        replicationFactor: 1
        size: 1x.small
        storage:
          schemas:
          - effectiveDate: "2020-10-11"
            version: v13
          secret:
            name: logging-loki-s3
            type: aws
        storageClassName: gp3-csi
        tenants:
          mode: openshift-logging
      Copy to Clipboard Toggle word wrap

      1
      テナントごとの保持ポリシーを設定します。有効なテナントタイプは、applicationaudit、および infrastructure です。
      2
      ログストリームの定義に使用される LogQL クエリー が含まれています。
  2. LokiStack CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
    注記

    これは、保存されたログの保持を管理するためのものではありません。保存されたログのグローバルな保持期間 (最大 30 日間までサポート) は、オブジェクトストレージで設定します。

2.6.8. Loki Pod の配置

Pod の toleration またはノードセレクターを使用して、Loki Pod が実行するノードを制御し、他のワークロードがそれらのノードを使用しないようにできます。

LokiStack カスタムリソース (CR) を使用して toleration をログストア Pod に適用し、ノード仕様を使用して taint をノードに適用できます。ノードの taint は、taint を容認しないすべての Pod を拒否するようノードに指示する key:value ペアです。他の Pod にはない特定の key:value ペアを使用すると、ログストア Pod のみがそのノードで実行できるようになります。

ノードセレクターを使用する LokiStack の例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
# ...
  template:
    compactor: 
1

      nodeSelector:
        node-role.kubernetes.io/infra: "" 
2

    distributor:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    gateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    indexGateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    ingester:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    querier:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    queryFrontend:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    ruler:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
# ...
Copy to Clipboard Toggle word wrap

1
ノードセレクターに適用されるコンポーネント Pod タイプを指定します。
2
定義されたラベルが含まれるノードに移動する Pod を指定します。

ノードセレクターと toleration を使用する LokiStack CR の例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
# ...
  template:
    compactor:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    distributor:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    indexGateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    ingester:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    querier:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    queryFrontend:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    ruler:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    gateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
# ...
Copy to Clipboard Toggle word wrap

LokiStack (CR) の nodeSelector フィールドと tolerations フィールドを設定するには、oc explain コマンドを使用して、特定のリソースの説明とフィールドを表示します。

$ oc explain lokistack.spec.template
Copy to Clipboard Toggle word wrap

出力例

KIND:     LokiStack
VERSION:  loki.grafana.com/v1

RESOURCE: template <Object>

DESCRIPTION:
     Template defines the resource/limits/tolerations/nodeselectors per
     component

FIELDS:
   compactor	<Object>
     Compactor defines the compaction component spec.

   distributor	<Object>
     Distributor defines the distributor component spec.
...
Copy to Clipboard Toggle word wrap

詳細情報用に、特定のフィールドを追加できます。

$ oc explain lokistack.spec.template.compactor
Copy to Clipboard Toggle word wrap

出力例

KIND:     LokiStack
VERSION:  loki.grafana.com/v1

RESOURCE: compactor <Object>

DESCRIPTION:
     Compactor defines the compaction component spec.

FIELDS:
   nodeSelector	<map[string]string>
     NodeSelector defines the labels required by a node to schedule the
     component onto it.
...
Copy to Clipboard Toggle word wrap

2.6.9. 信頼性とパフォーマンスの向上

実稼働環境で Loki の信頼性と効率性を確保するには、次の設定を使用します。

2.6.10. 有効期間の短いトークンを使用したクラウドベースのログストアへの認証の有効化

ワークロードアイデンティティーフェデレーションを使用すると、有効期間の短いトークンを使用してクラウドベースのログストアに対して認証できます。

手順

  • 認証を有効にするには、次のいずれかのオプションを使用します。

    • Red Hat OpenShift Service on AWS の Web コンソールを使用して Loki Operator をインストールすると、有効期間が短いトークンを使用するクラスターが自動的に検出されます。プロンプトが表示され、ロールを作成するように求められます。また、Loki Operator が CredentialsRequest オブジェクトを作成するのに必要なデータを提供するように求められます。このオブジェクトにより、シークレットが設定されます。
    • OpenShift CLI (oc) を使用して Loki Operator をインストールする場合は、次の例に示すように、ストレージプロバイダーに適したテンプレートを使用して Subscription オブジェクトを手動で作成する必要があります。この認証ストラテジーは、指定のストレージプロバイダーでのみサポートされます。

      Azure サンプルサブスクリプションの例

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: loki-operator
        namespace: openshift-operators-redhat
      spec:
        channel: "stable-6.0"
        installPlanApproval: Manual
        name: loki-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace
        config:
          env:
            - name: CLIENTID
              value: <your_client_id>
            - name: TENANTID
              value: <your_tenant_id>
            - name: SUBSCRIPTIONID
              value: <your_subscription_id>
            - name: REGION
              value: <your_region>
      Copy to Clipboard Toggle word wrap

      AWS サンプルサブスクリプションの例

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: loki-operator
        namespace: openshift-operators-redhat
      spec:
        channel: "stable-6.0"
        installPlanApproval: Manual
        name: loki-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace
        config:
          env:
          - name: ROLEARN
            value: <role_ARN>
      Copy to Clipboard Toggle word wrap

2.6.11. ノードの障害を許容するための Loki の設定

Loki Operator は、同じコンポーネントの Pod がクラスター内の異なる使用可能なノードにスケジュールされるように要求する Pod アンチアフィニティールールの設定をサポートしています。

アフィニティーとは、スケジュールするノードを制御する Pod の特性です。非アフィニティーとは、Pod がスケジュールされることを拒否する Pod の特性です。

Red Hat OpenShift Service on AWS では、Pod のアフィニティーPod の非アフィニティー によって、他の Pod のキー/値ラベルに基づいて、Pod のスケジュールに適したノードを制限できます。

Operator は、すべての Loki コンポーネント (compactordistributorgatewayindexGatewayingesterquerierqueryFrontend、および ruler コンポーネントを含む) に対してデフォルトの優先 podAntiAffinity ルールを設定します。

requiredDuringSchedulingIgnoredDuringExecution フィールドに必要な設定を指定して、Loki コンポーネントの希望の podAntiAffinity 設定を上書きできます。

インジェスターコンポーネントのユーザー設定の例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
# ...
  template:
    ingester:
      podAntiAffinity:
      # ...
        requiredDuringSchedulingIgnoredDuringExecution: 
1

        - labelSelector:
            matchLabels: 
2

              app.kubernetes.io/component: ingester
          topologyKey: kubernetes.io/hostname
# ...
Copy to Clipboard Toggle word wrap

1
必要なルールを定義するスタンザです。
2
ルールを適用するために一致している必要のあるキー/値のペア (ラベル) です。

2.6.12. クラスターの再起動中の LokiStack 動作

Red Hat OpenShift Service on AWS クラスターが再起動しても、LokiStack の取り込みとクエリーパスは、ノードで使用可能な CPU およびメモリーリソースの範囲内で、引き続き動作します。つまり、Red Hat OpenShift Service on AWS クラスターの更新中に LokiStack でダウンタイムは発生しません。この動作は、PodDisruptionBudget リソースを使用して実現されます。Loki Operator は、Loki に PodDisruptionBudget リソースをプロビジョニングします。このリソースは、特定の条件下で通常の操作ができるようにコンポーネントごとに使用可能でなければならない Pod の最小数を決定します。

2.6.13. 高度なデプロイメントとスケーラビリティー

高可用性、スケーラビリティー、およびエラー処理を設定するには、次の情報を使用します。

2.6.14. ゾーン対応のデータレプリケーション

Loki Operator は、Pod トポロジーの分散制約を通じて、ゾーン対応のデータレプリケーションのサポートを提供します。この機能を有効にすると、信頼性が向上し、1 つのゾーンで障害が発生した場合のログ損失に対する保護が強化されます。デプロイメントサイズを 1x.extra-small1x.small、または 1x.medium に設定すると、replication.factor フィールドは自動的に 2 に設定されます。

適切なレプリケーションを実現するには、少なくともレプリケーション係数で指定されているのと同じ数のアベイラビリティーゾーンが必要です。レプリケーション係数より多くのアベイラビリティーゾーンを設定することは可能ですが、ゾーンが少ないと書き込みエラーが発生する可能性があります。最適な運用を実現するには、各ゾーンで同じ数のインスタンスをホストする必要があります。

ゾーンレプリケーションが有効になっている LokiStack CR の例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
 name: logging-loki
 namespace: openshift-logging
spec:
 replicationFactor: 2 
1

 replication:
   factor: 2 
2

   zones:
   -  maxSkew: 1 
3

      topologyKey: topology.kubernetes.io/zone 
4
Copy to Clipboard Toggle word wrap

1
非推奨のフィールド。入力された値は replication.factor によって上書きされます。
2
この値は、セットアップ時にデプロイメントサイズが選択されると自動的に設定されます。
3
任意の 2 つのトポロジードメイン間の Pod 数の最大差。デフォルトは 1 で、0 の値を指定することはできません。
4
ノードラベルに対応するトポロジーキーの形式でゾーンを定義します。

2.6.15. 障害が発生したゾーンからの Loki Pod の回復

Red Hat OpenShift Service on AWS では、特定のアベイラビリティーゾーンのリソースがアクセスできなくなると、ゾーン障害が発生します。アベイラビリティーゾーンは、冗長性とフォールトトレランスを強化することを目的とした、クラウドプロバイダーのデータセンター内の分離されたエリアです。Red Hat OpenShift Service on AWS クラスターがこの問題を処理するように設定されていない場合、ゾーン障害によりサービスまたはデータの損失が発生する可能性があります。

Loki Pod は StatefulSet の一部であり、StorageClass オブジェクトによってプロビジョニングされた永続ボリューム要求 (PVC) が付属しています。各 Loki Pod とその PVC は同じゾーンに存在します。クラスターでゾーン障害が発生すると、StatefulSet コントローラーが、障害が発生したゾーン内の影響を受けた Pod の回復を自動的に試みます。

警告

次の手順では、障害が発生したゾーン内の PVC とそこに含まれるすべてのデータを削除します。完全なデータ損失を回避するには、LokiStack CR のレプリケーション係数フィールドを常に 1 より大きい値に設定して、Loki が確実にレプリケートされるようにする必要があります。

前提条件

  • LokiStack CR のレプリケーション係数が 1 より大きいことを確認している。
  • コントロールプレーンによってゾーン障害が検出され、障害が発生したゾーン内のノードがクラウドプロバイダー統合によってマークされている。

StatefulSet コントローラーは、障害が発生したゾーン内の Pod を自動的に再スケジュールしようとします。関連する PVC も障害が発生したゾーンにあるため、別のゾーンへの自動再スケジュールは機能しません。新しいゾーンでステートフル Loki Pod とそのプロビジョニングされた PVC を正常に再作成できるようにするには、障害が発生したゾーンの PVC を手動で削除する必要があります。

手順

  1. 次のコマンドを実行して、Pending 中ステータスの Pod をリスト表示します。

    $ oc get pods --field-selector status.phase==Pending -n openshift-logging
    Copy to Clipboard Toggle word wrap

    oc get pods の出力例

    NAME                           READY   STATUS    RESTARTS   AGE 
    1
    
    logging-loki-index-gateway-1   0/1     Pending   0          17m
    logging-loki-ingester-1        0/1     Pending   0          16m
    logging-loki-ruler-1           0/1     Pending   0          16m
    Copy to Clipboard Toggle word wrap

    1
    これらの Pod は、障害が発生したゾーンに対応する PVC があるため、Pending ステータスになっています。
  2. 次のコマンドを実行して、Pending ステータスの PVC をリストします。

    $ oc get pvc -o=json -n openshift-logging | jq '.items[] | select(.status.phase == "Pending") | .metadata.name' -r
    Copy to Clipboard Toggle word wrap

    oc get pvc の出力例

    storage-logging-loki-index-gateway-1
    storage-logging-loki-ingester-1
    wal-logging-loki-ingester-1
    storage-logging-loki-ruler-1
    wal-logging-loki-ruler-1
    Copy to Clipboard Toggle word wrap

  3. 次のコマンドを実行して Pod の PVC を削除します。

    $ oc delete pvc <pvc_name> -n openshift-logging
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを実行して Pod を削除します。

    $ oc delete pod <pod_name> -n openshift-logging
    Copy to Clipboard Toggle word wrap

    これらのオブジェクトが正常に削除されると、使用可能なゾーンでオブジェクトが自動的に再スケジュールされます。

2.6.15.1. terminating 状態の PVC のトラブルシューティング

PVC メタデータファイナライザーが kubernetes.io/pv-protection に設定されている場合、PVC が削除されずに terminating 状態でハングする可能性があります。ファイナライザーを削除すると、PVC が正常に削除されるようになります。

  • 以下のコマンドを実行して各 PVC のファイナライザーを削除し、削除を再試行します。

    $ oc patch pvc <pvc_name> -p '{"metadata":{"finalizers":null}}' -n openshift-logging
    Copy to Clipboard Toggle word wrap

2.6.16. Loki レート制限エラーのトラブルシューティング

Log Forwarder API がレート制限を超える大きなメッセージブロックを Loki に転送すると、Loki により、レート制限 (429) エラーが生成されます。

これらのエラーは、通常の動作中に発生する可能性があります。たとえば、すでにいくつかのログがあるクラスターにロギングを追加する場合、ロギングが既存のログエントリーをすべて取り込もうとするとレート制限エラーが発生する可能性があります。この場合、新しいログの追加速度が合計レート制限よりも低い場合、履歴データは最終的に取り込まれ、ユーザーの介入を必要とせずにレート制限エラーが解決されます。

レート制限エラーが引き続き発生する場合は、LokiStack カスタムリソース (CR) を変更することで問題を解決できます。

重要

LokiStack CR は、Grafana がホストする Loki では利用できません。このトピックは、Grafana がホストする Loki サーバーには適用されません。

条件

  • Log Forwarder API は、ログを Loki に転送するように設定されている。
  • システムは、次のような 2MB を超えるメッセージのブロックを Loki に送信する。以下に例を示します。

    "values":[["1630410392689800468","{\"kind\":\"Event\",\"apiVersion\":\
    .......
    ......
    ......
    ......
    \"received_at\":\"2021-08-31T11:46:32.800278+00:00\",\"version\":\"1.7.4 1.6.0\"}},\"@timestamp\":\"2021-08-31T11:46:32.799692+00:00\",\"viaq_index_name\":\"audit-write\",\"viaq_msg_id\":\"MzFjYjJkZjItNjY0MC00YWU4LWIwMTEtNGNmM2E5ZmViMGU4\",\"log_type\":\"audit\"}"]]}]}
    Copy to Clipboard Toggle word wrap
  • oc logs -n openshift-logging -l component=collector と入力すると、クラスター内のコレクターログに、次のいずれかのエラーメッセージを含む行が表示されます。

    429 Too Many Requests Ingestion rate limit exceeded
    Copy to Clipboard Toggle word wrap

    Vector エラーメッセージの例

    2023-08-25T16:08:49.301780Z  WARN sink{component_kind="sink" component_id=default_loki_infra component_type=loki component_name=default_loki_infra}: vector::sinks::util::retries: Retrying after error. error=Server responded with an error: 429 Too Many Requests internal_log_rate_limit=true
    Copy to Clipboard Toggle word wrap

    このエラーは受信側にも表示されます。たとえば、LokiStack 取り込み Pod で以下を行います。

    Loki 取り込みエラーメッセージの例

    level=warn ts=2023-08-30T14:57:34.155592243Z caller=grpc_logging.go:43 duration=1.434942ms method=/logproto.Pusher/Push err="rpc error: code = Code(429) desc = entry with timestamp 2023-08-30 14:57:32.012778399 +0000 UTC ignored, reason: 'Per stream rate limit exceeded (limit: 3MB/sec) while attempting to ingest for stream
    Copy to Clipboard Toggle word wrap

手順

  • LokiStack CR の ingestionBurstSize および ingestionRate フィールドを更新します。

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki
      namespace: openshift-logging
    spec:
      limits:
        global:
          ingestion:
            ingestionBurstSize: 16 
    1
    
            ingestionRate: 8 
    2
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    ingestionBurstSize フィールドは、ディストリビューターレプリカごとに最大ローカルレート制限サンプルサイズを MB 単位で定義します。この値はハードリミットです。この値を、少なくとも 1 つのプッシュリクエストで想定される最大ログサイズに設定します。ingestionBurstSize 値より大きい単一リクエストは使用できません。
    2
    ingestionRate フィールドは、1 秒あたりに取り込まれるサンプルの最大量 (MB 単位) に対するソフト制限です。ログのレートが制限を超えているにもかかわらず、コレクターがログの送信を再試行すると、レート制限エラーが発生します。合計平均が制限よりも少ない場合に限り、システムは回復し、ユーザーの介入なしでエラーが解決されます。

2.7. Loki での OTLP データ取り込み

Logging では、OpenTelemetry Protocol (OTLP) を使用して、API エンドポイントを使用できます。OTLP は Loki 専用に設計されたものではない標準化された形式です。そのため、OpenTelemetry のデータ形式を Loki のデータモデルにマッピングするには、追加の Loki 設定が必要です。OTLP には、ストリームラベル構造化メタデータ などの概念がありません。代わりに、OTLP はログエントリーに関するメタデータを、次の 3 つのカテゴリーにグループ化された 属性 として提供します。

  • リソース
  • スコープ
  • ログ

必要に応じて、複数のエントリーのメタデータを同時に、または個別に設定できます。

2.7.1. OTLP データ取り込み用の LokiStack 設定

重要

OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

OTLP 取り込み用に LokiStack カスタムリソース (CR) を設定するには、次の手順に従います。

前提条件

  • Loki セットアップが、OTLP ログの取り込みを有効にするためにスキーマバージョン 13 で導入された構造化メタデータをサポートしていることを確認します。

手順

  1. スキーマバージョンを設定します。

    • 新しい LokiStack CR を作成する場合は、ストレージスキーマ設定で version: v13 を設定します。

      注記

      既存の設定の場合は、version: v13 と現在より後の effectiveDate を持つ新しいスキーマエントリーを追加します。スキーマバージョンの更新の詳細は、Upgrading Schemas (Grafana ドキュメント) を参照してください。

  2. ストレージスキーマを次のように設定します。

    ストレージスキーマの設定例

    # ...
    spec:
      storage:
        schemas:
        - version: v13
          effectiveDate: 2024-10-25
    Copy to Clipboard Toggle word wrap

    effectiveDate を過ぎると v13 スキーマが有効になり、LokiStack は構造化メタデータを保存できるようになります。

2.7.2. 属性マッピング

Loki Operator を openshift-logging モードに設定すると、Loki Operator がデフォルトの属性マッピングのセットを自動的に適用します。このマッピングは、特定の OTLP 属性を、Loki のストリームラベルおよび構造化メタデータに対応付けるものです。

一般的なセットアップでは、このようなデフォルトのマッピングで十分です。ただし、次の場合には属性マッピングをカスタマイズする必要があることもあります。

  • カスタムコレクターの使用: 保存する必要がない追加の属性を生成するカスタムコレクターがセットアップに含まれている場合は、マッピングをカスタマイズして、その属性が Loki によって削除されるようにすることを検討してください。
  • 属性の詳細レベルを調整する場合: デフォルトの属性セットが必要以上に詳細な場合は、必須の属性のみに減らすことができます。そうすることで、過剰なデータ保存を回避し、ロギングプロセスを合理化できます。
2.7.2.1. OpenShift のカスタム属性マッピング

Loki Operator を openshift-logging モードで使用する場合、属性マッピングは OpenShift のデフォルト値に従います。ただし、カスタムマッピングを設定すると、デフォルト値を調整できます。openshift-logging モードでは、必要に応じて、カスタム属性マッピングをすべてのテナントに対してグローバルに設定することも、個々のテナントに対して設定することもできます。カスタムマッピングを定義すると、そのカスタムマッピングが OpenShift のデフォルト値に追加されます。デフォルトのラベルが必要ない場合は、テナント設定で無効にできます。

注記

Loki Operator と Loki の主な違いは、継承の処理にあります。Loki はデフォルトで default_resource_attributes_as_index_labels のみをテナントにコピーします。Loki Operator は openshift-logging モードで各テナントにグローバル設定全体を適用します。

LokiStack 内では、属性マッピング設定は limits 設定を通じて管理されます。次の LokiStack 設定の例を参照してください。

# ...
spec:
  limits:
    global:
      otlp: {} 
1

    tenants:
      application: 
2

        otlp: {}
Copy to Clipboard Toggle word wrap
1
グローバルの OTLP 属性設定を定義します。
2
openshift-logging モード内で application テナントの OTLP 属性設定を定義します。application テナントに加えて、infrastructure テナントや audit テナントを設定することもできます。
注記

属性をストリームラベルにマッピングするには、グローバルの OTLP 設定とテナントごとの OTLP 設定の両方を使用できます。

ストリームラベルはリソースレベルの属性からのみ導出されます。これは LokiStack のリソース構造に反映されています。次の LokiStack 設定の例を参照してください。

spec:
  limits:
    global:
      otlp:
        streamLabels:
          resourceAttributes:
          - name: "k8s.namespace.name"
          - name: "k8s.pod.name"
          - name: "k8s.container.name"
Copy to Clipboard Toggle word wrap

ログエントリーから、リソース、スコープ、またはログタイプの属性を削除できます。

# ...
spec:
  limits:
    global:
      otlp:
        streamLabels:
# ...
        drop:
          resourceAttributes:
          - name: "process.command_line"
          - name: "k8s\\.pod\\.labels\\..+"
            regex: true
          scopeAttributes:
          - name: "service.name"
          logAttributes:
          - name: "http.route"
Copy to Clipboard Toggle word wrap

regex: true を設定することで正規表現を使用し、類似した名前を持つ属性に設定を適用できます。

重要

データ量が増加する可能性があるため、ストリームラベルに正規表現を使用することは避けてください。

ストリームラベルとして明示的に設定されていない属性、またはエントリーから削除されていない属性は、デフォルトで構造化メタデータとして保存されます。

2.7.2.2. OpenShift のデフォルトのカスタマイズ

openshift-logging モードでは特定の属性が必須です。この属性は、OpenShift の機能における役割があるため、設定から削除できません。推奨 ラベルが付いたその他の属性は、パフォーマンスに影響がある場合、削除できます。属性の詳細は、OpenTelemetry データモデル属性 を参照してください。

カスタム属性なしで openshift-logging モードを使用すると、即座に OpenShift ツールとの互換性が確保されます。ストリームラベルとして追加の属性が必要な場合、または一部の属性を削除する必要がある場合は、カスタム設定を使用します。カスタム設定はデフォルト設定とマージできます。

2.8. ロギングの可視化

ロギングの可視化は、Cluster Observability Operator の Logging UI プラグインをデプロイすることで提供されます。そのためには Operator のインストールが必要です。

重要

現在は テクノロジープレビュー (TP) 機能である Cluster Observability Operator (COO) の一般提供 (GA) リリースが近づくまで、Red Hat は、Red Hat OpenShift Service on AWS 4.14 以降の Logging UI プラグインの COO で Logging 6.0 以降を使用しているお客様にサポートを提供します。COO にはいくつかの独立した機能が含まれており、その一部はまだテクノロジープレビュー機能であるため、このサポート例外は一時的なものです。ただし、Logging UI プラグインは GA の準備が完了しています。

第3章 Logging 6.1

3.1. Logging 6.1

3.1.1. Logging 6.1.2 リリースノート

このリリースには、Logging for Red Hat OpenShift バグ修正リリース 6.1.2 が含まれています。

3.1.1.1. 新機能および機能拡張
  • この機能拡張により、lokiStack 出力に OTel セマンティックストリームラベルが追加され、ViaQOTel の両方のストリームラベルを使用してログをクエリーできるようになります。(LOG-6579)
3.1.1.2. バグ修正
  • この更新前は、コレクターのアラートルールに概要フィールドとメッセージフィールドが含まれていました。この更新により、コレクターのアラートルールに概要フィールドと説明フィールドが含まれるようになりました。(LOG-6126)
  • この更新前は、古い Pod のデプロイメントから新しい Pod のデプロイメントへの移行中に競合状態が発生していました。そのため、Operator のアップグレード後にコレクターメトリクスダッシュボードが削除されることがありました。この更新により、ダッシュボードの ConfigMap にラベルが追加され、アップグレードされたデプロイメントが現在の所有者として指定され、削除されなくなりました。(LOG-6280)
  • この更新前は、アプリケーション入力にインフラストラクチャー namespace を含めると、その log_typeapplication に設定されていました。この更新により、アプリケーション入力に含まれるインフラストラクチャー namespace の log_type が、infrastructure に設定されるようになります。(LOG-6373)
  • この更新前は、Cluster Logging Operator がキャッシュされたクライアントを使用して SecurityContextConstraint クラスターリソースを取得していたため、キャッシュが無効な場合にエラーが発生する可能性がありました。この更新により、Operator がキャッシュを使用する代わりに、常に API サーバーからデータを取得するようになりました。(LOG-6418)
  • この更新前は、ロギングの must-gather によって、UIPluginClusterLogForwarderLogFileMetricExporterLokiStack などのリソースが収集されませんでした。この更新により、must-gather によってこれらすべてのリソースが収集され、cluster-logging ディレクトリーではなく、それぞれの namespace のディレクトリーにリソースが配置されるようになりました。(LOG-6422)
  • この更新前は、Vector 起動スクリプトが起動時にバッファーロックファイルを削除しようとしていました。この更新により、Vector 起動スクリプトは起動時にバッファーロックファイルを削除しなくなりました。(LOG-6506)
  • この更新前は、API ドキュメントで、lokiStack の出力がデフォルトでターゲット namespace になるという誤った記述がありました。これにより、コレクターがその出力に書き込むことができないことがありました。この更新により、この記述が API ドキュメントから削除され、Cluster Logging Operator がターゲット namespace の存在を検証するようになりました。(LOG-6573)
  • この更新前は、Cluster Logging Operator が、どの入力からも参照されない出力設定を使用してコレクターをデプロイできました。この更新により、ClusterLogForwarder リソースの検証チェックにより、Operator がコレクターをデプロイできなくなりました。(LOG-6585)
3.1.1.3. CVE

3.1.2. Logging 6.1.1 リリースノート

このリリースには、Logging for Red Hat OpenShift バグ修正リリース 6.1.1 が含まれています。

3.1.2.1. 新機能および機能拡張
  • この更新により、Loki Operator が、Red Hat OpenShift Service on AWS 4.17 以降において、Cluster Credential Operator (CCO) を使用して Google Cloud Platform (GCP) 上の Workload Identity Federation を設定できるようになりました。(LOG-6420)
3.1.2.2. バグ修正
  • この更新前は、コレクターは長い監査ログメッセージをエラーメッセージ Internal log [Found line that exceeds max_line_bytes; discarding.] で破棄していました。この更新により、監査設定のしきい値を増やすことで、長い監査メッセージの破棄が回避できるようになります。最大行サイズ max_line_bytes3145728 バイトです。読み取りサイクル中に読み取られる最大バイト数 max_read_bytes262144 バイトです。(LOG-6379)
  • この更新前は、入力レシーバーサービスが繰り返し作成および削除され、TLS シークレットのマウントに問題が発生していました。この更新により、サービスは一度作成され、ClusterLogForwarder カスタムリソースで定義されていない場合にのみ削除されます。(LOG-6383)
  • この更新前は、名前が別の名前の部分文字列である場合、パイプライン検証が無限ループに入る可能性がありました。この更新により、名前の同等性がより厳密にチェックされ、無限ループが防止されます。(LOG-6405)
  • この更新前は、コレクターのアラートルールには summary フィールドと message フィールドが含まれていました。この更新により、コレクターのアラートルールに summary フィールドと description フィールドが含まれます。(LOG-6407)
  • この更新前は、ClusterLogForwarder カスタムリソースのカスタム監査入力を設定済みの LokiStack 出力で設定すると、nil ポインターの参照解除によりエラーが発生しました。この更新により、Operator は nil チェックを実行し、このようなエラーを防止します。(LOG-6449)
  • この更新前は、出力タイプが LokiStack でない場合でも、ClusterLogForwarder カスタムリソースのステータスに ValidLokistackOTLPOutputs 条件が表示されていました。この更新により、ValidLokistackOTLPOutputs 条件が削除され、既存の出力条件の検証メッセージが修正されます。(LOG-6469)
  • この更新前は、コレクターが /var/log/oauth-server/ パスを正しくマウントしなかったため、監査ログを収集できませんでした。この更新により、ボリュームマウントが追加され、監査ログが期待どおりに収集されます。(LOG-6484)
  • この更新前は、Red Hat OpenShift Logging Operator の must-gather スクリプトが LokiStack データの収集に失敗する可能性がありました。この更新により、must-gather スクリプトが修正され、LokiStack データが確実に収集されます。(LOG-6498)
  • この更新前は、コレクターは oauth-apiserver 監査ログファイルを正しくマウントしませんでした。その結果、その監査ログは収集されませんでした。この更新により、ボリュームマウントが正しくマウントされ、ログが期待どおりに収集されます。(LOG-6533)
3.1.2.3. CVE

3.1.3. Logging 6.1.0 リリースノート

このリリースには、Logging for Red Hat OpenShift バグ修正リリース 6.1.0 が含まれています。

3.1.3.1. 新機能および機能拡張
3.1.3.1.1. ログの収集
  • この機能拡張により、収集されたコンテナーログから送信される属性にソース iostream が追加されます。値は、コレクターがそれを受信した方法に基づき、stdout または stderr のいずれかに設定されます。(LOG-5292)
  • この更新により、コレクターのデフォルトのメモリー制限が 1024 Mi から 2048 Mi に増加します。ユーザーは、クラスターの特定のニーズと仕様に基づきリソース制限を調整する必要があります。(LOG-6072)
  • この更新により、ユーザーは ClusterLogForwarder CR の syslog 出力配信モードを AtLeastOnce または AtMostOnce のいずれかに設定できるようになります。(LOG-6355)
3.1.3.1.2. ログのストレージ
  • この更新により、新しい 1x.pico LokiStack サイズは、ワークロードとログボリュームが少ないクラスター (最大 50 GB/日) をサポーするようになります。(LOG-5939)
3.1.3.2. テクノロジープレビュー
重要

OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

  • この更新により、OTel (OpenTelemetry) データモデルを使用して OpenTelemetry ログを Red Hat Managed LokiStack インスタンスに転送できるようになります。この機能を有効にするには、ClusterLogForwarder 設定に observability.openshift.io/tech-preview-otlp-output: "enabled" アノテーションを追加します。追加の設定情報については、OTLP 転送 を参照してください。
  • この更新により、lokiStack 出力仕様に dataModel フィールドが追加されます。OpenTelemetry データ形式を使用するログ転送を設定するには、dataModelOtel に設定します。デフォルトは Viaq に設定されています。データマッピングの詳細は、OTLP 仕様 を参照してください。
3.1.3.3. バグ修正

なし。

3.1.3.4. CVE

3.2. Logging 6.1

ClusterLogForwarder カスタムリソース (CR) は、ログの収集と転送の中心的な設定ポイントです。

3.2.1. 入力と出力

入力では、転送するログのソースを指定します。Logging には、クラスターのさまざまな部分からログを選択する次の組み込みの入力タイプが用意されています。

  • application
  • receiver
  • infrastructure
  • audit

namespace または Pod ラベルに基づいてカスタム入力を定義し、ログの選択を微調整することもできます。

出力は、ログが送信される宛先を定義します。各出力タイプには独自の設定オプションセットがあり、動作と認証設定をカスタマイズできます。

3.2.2. レシーバー入力タイプ

レシーバー入力タイプにより、Logging システムは外部ソースからのログを受け入れることができます。ログを受信するための 2 つの形式 (httpsyslog) がサポートされます。

ReceiverSpec フィールドでレシーバー入力の設定を定義します。

3.2.3. パイプラインとフィルター

パイプラインは、入力から出力へのログのフローを決定します。パイプラインは、1 つ以上の入力参照、出力参照、およびオプションのフィルター参照で構成されます。フィルターを使用すると、パイプライン内のログメッセージを変換または削除できます。フィルターは順番に適用されるため、フィルターの順序は重要であり、最初の方のフィルターを使用すると、ログメッセージが後のステージに到達するのを防ぐことができます。

3.2.4. Operator の動作

Cluster Logging Operator は、ClusterLogForwarder リソースの managementState フィールドに基づき、コレクターのデプロイメントと設定を管理します。

  • Managed (デフォルト) に設定すると、仕様で定義された設定に合わせて、Operator がロギングリソースをアクティブに管理します。
  • Unmanaged に設定すると、Operator はアクションを実行せず、ロギングコンポーネントを手動で管理できます。

3.2.5. 検証

ロギングには、スムーズでエラーのない設定エクスペリエンスを確保するために、広範な検証ルールやデフォルト値が含まれます。ClusterLogForwarder リソースは、必須フィールド、フィールド間の依存関係、および入力値の形式の検証チェックを強制します。特定のフィールドにはデフォルト値が提供されるため、一般的なシナリオで明示的な設定を行う必要性が軽減されます。

3.2.6. クイックスタート

OpenShift Logging は 2 つのデータモデルをサポートしています。

  • ViaQ (一般提供)
  • OpenTelemetry (テクノロジープレビュー)

ClusterLogForwarderlokiStack.dataModel フィールドを設定することにより、要件に基づきこれらのデータモデルのいずれかを選択できます。ViaQ は、ログを LokiStack に転送する際のデフォルトのデータモデルです。

注記

OpenShift Logging の今後のリリースでは、デフォルトのデータモデルが ViaQ から OpenTelemetry に変更されます。

3.2.6.1. ViaQ のクイックスタート

デフォルトの ViaQ データモデルを使用するには、次の手順に従います。

前提条件

  • cluster-admin 権限で Red Hat OpenShift Service on AWS クラスターにアクセスできる。
  • OpenShift CLI (oc) がインストールされている。
  • サポートされているオブジェクトストアにアクセスできる。たとえば、AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation などです。

手順

  1. OperatorHub から Red Hat OpenShift Logging OperatorLoki Operator、および Cluster Observability Operator (COO) をインストールします。
  2. openshift-logging namespace に LokiStack カスタムリソース (CR) を作成します。

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki
      namespace: openshift-logging
    spec:
      managementState: Managed
      size: 1x.extra-small
      storage:
        schemas:
        - effectiveDate: '2024-10-01'
          version: v13
        secret:
          name: logging-loki-s3
          type: s3
      storageClassName: gp3-csi
      tenants:
        mode: openshift-logging
    Copy to Clipboard Toggle word wrap
    注記

    事前に logging-loki-s3 シークレットが事前に作成されていることを確認します。このシークレットの内容は、使用しているオブジェクトストレージにより異なります。詳細は、シークレットと TLS 設定を参照してください。

  3. コレクターのサービスアカウントを作成します。

    $ oc create sa collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
  4. コレクターのサービスアカウントによる LokiStack CR へのデータ書き込みを許可します。

    $ oc adm policy add-cluster-role-to-user logging-collector-logs-writer -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    注記

    ClusterRole リソースは、Cluster Logging Operator のインストール中に自動的に作成されるため、手動で作成する必要はありません。

  5. ログを収集するために、次のコマンドを実行してコレクターのサービスアカウントを使用します。

    $ oc adm policy add-cluster-role-to-user collect-application-logs -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    $ oc adm policy add-cluster-role-to-user collect-audit-logs -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    $ oc adm policy add-cluster-role-to-user collect-infrastructure-logs -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    注記

    この例では、コレクターを 3 つのロール (アプリケーション、インフラストラクチャー、監査) すべてにバインドしますが、デフォルトでは、アプリケーションログとインフラストラクチャーログのみが収集されます。監査ログを収集するには、ClusterLogForwarder 設定を更新して監査ログを含めます。環境に必要な特定のログタイプに基づきロールを割り当てます。

  6. UIPlugin CR を作成して、Observe タブの Log セクションを有効にします。

    apiVersion: observability.openshift.io/v1alpha1
    kind: UIPlugin
    metadata:
      name: logging
    spec:
      type: Logging
      logging:
        lokiStack:
          name: logging-loki
    Copy to Clipboard Toggle word wrap
  7. ClusterLogForwarder CR を作成して、ログ転送を設定します。

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: collector
      namespace: openshift-logging
    spec:
      serviceAccount:
        name: collector
      outputs:
      - name: default-lokistack
        type: lokiStack
        lokiStack:
          authentication:
            token:
              from: serviceAccount
          target:
            name: logging-loki
            namespace: openshift-logging
        tls:
          ca:
            key: service-ca.crt
            configMapName: openshift-service-ca.crt
      pipelines:
      - name: default-logstore
        inputRefs:
        - application
        - infrastructure
        outputRefs:
        - default-lokistack
    Copy to Clipboard Toggle word wrap
    注記

    dataModel フィールドはオプションであり、デフォルトでは未設定 (dataModel: "") になっています。これにより、Cluster Logging Operator (CLO) はデータモデルを自動的に選択できるようになります。現在、このフィールドが設定されていない場合の CLO はデフォルトで ViaQ モデルになりますが、これは今後のリリースで変更される予定です。dataModel: ViaQ を指定すると、デフォルトが変更されても設定の互換性が維持されます。

検証

  • Red Hat OpenShift Service on AWS Web コンソールの Observe タブの Log セクションにログが表示されていることを確認します。
3.2.6.2. OpenTelemetry のクイックスタート
重要

OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

OTLP 取り込みを設定し、OpenTelemetry データモデルを有効にするには、次の手順を実行します。

前提条件

  • cluster-admin 権限で Red Hat OpenShift Service on AWS クラスターにアクセスできる。
  • OpenShift CLI (oc) がインストールされている。
  • サポートされているオブジェクトストアにアクセスできる。たとえば、AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation などです。

手順

  1. OperatorHub から Red Hat OpenShift Logging OperatorLoki Operator、および Cluster Observability Operator (COO) をインストールします。
  2. openshift-logging namespace に LokiStack カスタムリソース (CR) を作成します。

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki
      namespace: openshift-logging
    spec:
      managementState: Managed
      size: 1x.extra-small
      storage:
        schemas:
        - effectiveDate: '2024-10-01'
          version: v13
        secret:
          name: logging-loki-s3
          type: s3
      storageClassName: gp3-csi
      tenants:
        mode: openshift-logging
    Copy to Clipboard Toggle word wrap
    注記

    事前に logging-loki-s3 シークレットが事前に作成されていることを確認します。このシークレットの内容は、使用しているオブジェクトストレージにより異なります。詳細は、「シークレットと TLS 設定」を参照してください。

  3. コレクターのサービスアカウントを作成します。

    $ oc create sa collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
  4. コレクターのサービスアカウントによる LokiStack CR へのデータ書き込みを許可します。

    $ oc adm policy add-cluster-role-to-user logging-collector-logs-writer -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    注記

    ClusterRole リソースは、Cluster Logging Operator のインストール中に自動的に作成されるため、手動で作成する必要はありません。

  5. ログを収集するために、次のコマンドを実行してコレクターのサービスアカウントを使用します。

    $ oc adm policy add-cluster-role-to-user collect-application-logs -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    $ oc adm policy add-cluster-role-to-user collect-audit-logs -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    $ oc adm policy add-cluster-role-to-user collect-infrastructure-logs -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    注記

    この例では、コレクターを 3 つのロール (アプリケーション、インフラストラクチャー、監査) すべてにバインドします。デフォルトでは、アプリケーションログとインフラストラクチャーログのみが収集されます。監査ログを収集するには、ClusterLogForwarder 設定を更新して監査ログを含めます。環境に必要な特定のログタイプに基づきロールを割り当てます。

  6. UIPlugin CR を作成して、Observe タブの Log セクションを有効にします。

    apiVersion: observability.openshift.io/v1alpha1
    kind: UIPlugin
    metadata:
      name: logging
    spec:
      type: Logging
      logging:
        lokiStack:
          name: logging-loki
    Copy to Clipboard Toggle word wrap
  7. ClusterLogForwarder CR を作成して、ログ転送を設定します。

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: collector
      namespace: openshift-logging
      annotations:
        observability.openshift.io/tech-preview-otlp-output: "enabled" 
    1
    
    spec:
      serviceAccount:
        name: collector
      outputs:
      - name: loki-otlp
        type: lokiStack 
    2
    
        lokiStack:
          target:
            name: logging-loki
            namespace: openshift-logging
          dataModel: Otel 
    3
    
          authentication:
            token:
              from: serviceAccount
        tls:
          ca:
            key: service-ca.crt
            configMapName: openshift-service-ca.crt
      pipelines:
      - name: my-pipeline
        inputRefs:
        - application
        - infrastructure
        outputRefs:
        - loki-otlp
    Copy to Clipboard Toggle word wrap
    1
    アノテーションを使用して、テクノロジープレビュー機能である Otel データモデルを有効にします。
    2
    出力タイプを lokiStack として定義します。
    3
    OpenTelemetry データモデルを指定します。
    注記

    dataModelOtel の場合、lokiStack.labelKeys は使用できません。dataModelOtel の場合に同様の機能を得るには、「OTLP データ取り込み用の LokiStack 設定」を参照してください。

検証

  • OTLP が正しく機能していることを確認するには、次の手順を実行します。

    1. OpenShift Web コンソールで、ObserveOpenShift LoggingLokiStackWrites をクリックします。
    2. Distributor - Structured Metadata セクションを確認します。

3.3. ログ転送の設定

ClusterLogForwarder (CLF) を使用すると、ユーザーはさまざまな宛先へのログの転送を設定できます。さまざまなソースからログメッセージを選択し、それらを変換またはフィルタリングできるパイプラインを介して送信して、1 つ以上の出力に転送する柔軟な方法を提供します。

ClusterLogForwarder の主な機能

  • 入力を使用してログメッセージを選択する
  • 出力を使用してログを外部の宛先に転送する
  • フィルターを使用してログメッセージをフィルタリング、変換、および破棄する
  • 入力、フィルター、出力を接続するログ転送パイプラインを定義する

3.3.1. ログ収集のセットアップ

このリリースの Cluster Logging では、管理者が ClusterLogForwarder に関連付けられたサービスアカウントにログ収集権限を明示的に付与する必要があります。これは、ClusterLogging およびオプションで ClusterLogForwarder.logging.openshift.io リソースで構成されるレガシーロギングシナリオでは、以前のリリースでは必要ありませんでした。

Red Hat OpenShift Logging Operator は、collect-audit-logscollect-application-logscollect-infrastructure-logs クラスターロールを提供します。これにより、コレクターは監査ログ、アプリケーションログ、およびインフラストラクチャーログをそれぞれ収集できます。

必要なクラスターロールをサービスアカウントにバインドして、ログ収集をセットアップします。

3.3.1.1. レガシーサービスアカウント

既存のレガシーサービスアカウント logcollector を使用するには、次の ClusterRoleBinding を作成します。

$ oc adm policy add-cluster-role-to-user collect-application-logs system:serviceaccount:openshift-logging:logcollector
Copy to Clipboard Toggle word wrap
$ oc adm policy add-cluster-role-to-user collect-infrastructure-logs system:serviceaccount:openshift-logging:logcollector
Copy to Clipboard Toggle word wrap

さらに、監査ログを収集する場合は、次の ClusterRoleBinding を作成します。

$ oc adm policy add-cluster-role-to-user collect-audit-logs system:serviceaccount:openshift-logging:logcollector
Copy to Clipboard Toggle word wrap
3.3.1.2. サービスアカウントの作成

前提条件

  • Red Hat OpenShift Logging Operator が openshift-logging namespace にインストールされている。
  • 管理者権限がある。

手順

  1. コレクターのサービスアカウントを作成します。認証にトークンを必要とするストレージにログを書き込む場合は、サービスアカウントにトークンを含める必要があります。
  2. 適切なクラスターロールをサービスアカウントにバインドします。

    バインドコマンドの例

    $ oc adm policy add-cluster-role-to-user <cluster_role_name> system:serviceaccount:<namespace_name>:<service_account_name>
    Copy to Clipboard Toggle word wrap

3.3.1.2.1. サービスアカウントのクラスターロールバインディング

role_binding.yaml ファイルは、ClusterLogging Operator の ClusterRole を特定の ServiceAccount にバインドし、クラスター全体で Kubernetes リソースを管理できるようにします。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: manager-rolebinding
roleRef:                                           
1

  apiGroup: rbac.authorization.k8s.io              
2

  kind: ClusterRole                                
3

  name: cluster-logging-operator                   
4

subjects:                                          
5

  - kind: ServiceAccount                           
6

    name: cluster-logging-operator                 
7

    namespace: openshift-logging                   
8
Copy to Clipboard Toggle word wrap
1
roleRef: バインディングが適用される ClusterRole を参照します。
2
apiGroup: RBAC API グループを示し、ClusterRole が Kubernetes の RBAC システムの一部であることを指定します。
3
kind: 参照されるロールがクラスター全体に適用される ClusterRole であることを指定します。
4
name: ServiceAccount にバインドされる ClusterRole の名前 (ここでは cluster-logging-operator)。
5
subjects: ClusterRole から権限が付与されるエンティティー (ユーザーまたはサービスアカウント) を定義します。
6
kind: サブジェクトが ServiceAccount であることを指定します。
7
Name: 権限が付与される ServiceAccount の名前。
8
namespace: ServiceAccount が配置されている namespace を示します。
3.3.1.2.2. アプリケーションログの書き込み

write-application-logs-clusterrole.yaml ファイルは、Loki ロギングアプリケーションにアプリケーションログを書き込む権限を付与する ClusterRole を定義します。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-logging-write-application-logs
rules:                                              
1

  - apiGroups:                                      
2

      - loki.grafana.com                            
3

    resources:                                      
4

      - application                                 
5

    resourceNames:                                  
6

      - logs                                        
7

    verbs:                                          
8

      - create                                      
9
Copy to Clipboard Toggle word wrap
1
rules: この ClusterRole によって付与される権限を指定します。
2
apiGroups: Loki ロギングシステムに関連する API グループ loki.grafana.com を参照します。
3
loki.grafana.com: Loki 関連のリソースを管理するための API グループ。
4
resources: この ClusterRole がやり取りする権限を付与するリソースタイプ。
5
application: Loki ロギングシステム内のアプリケーションリソースを参照します。
6
resourceNames: このロールが管理できるリソースの名前を指定します。
7
logs: 作成できるログリソースを参照します。
8
verbs: リソースで許可されるアクション。
9
create: Loki システムに新しいログを作成する権限を付与します。
3.3.1.2.3. 監査ログの書き込み

write-audit-logs-clusterrole.yaml ファイルは、Loki ロギングシステムに監査ログを作成する権限を付与する ClusterRole を定義します。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-logging-write-audit-logs
rules:                                              
1

  - apiGroups:                                      
2

      - loki.grafana.com                            
3

    resources:                                      
4

      - audit                                       
5

    resourceNames:                                  
6

      - logs                                        
7

    verbs:                                          
8

      - create                                      
9
Copy to Clipboard Toggle word wrap
1
rules: この ClusterRole によって付与される権限を定義します。
2
apiGroups: API グループ loki.grafana.com を指定します。
3
loki.grafana.com: Loki ロギングリソースを管理する API グループ。
4
resources: このロールが管理するリソースタイプ (この場合は audit) を指します。
5
audit: ロールが Loki 内の監査ログを管理することを指定します。
6
resourceNames: ロールがアクセスできる特定のリソースを定義します。
7
logs: このロールで管理できるログを指します。
8
verbs: リソースで許可されるアクション。
9
create: 新しい監査ログを作成する権限を付与します。
3.3.1.2.4. インフラストラクチャーログの書き込み

write-infrastructure-logs-clusterrole.yaml ファイルは、Loki ロギングシステムにインフラストラクチャーログを作成する権限を付与する ClusterRole を定義します。

YAML 例

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-logging-write-infrastructure-logs
rules:                                              
1

  - apiGroups:                                      
2

      - loki.grafana.com                            
3

    resources:                                      
4

      - infrastructure                              
5

    resourceNames:                                  
6

      - logs                                        
7

    verbs:                                          
8

      - create                                      
9
Copy to Clipboard Toggle word wrap

1
ルール: この ClusterRole が付与する権限を指定します。
2
apiGroups: Loki 関連リソースの API グループを指定します。
3
loki.grafana.com: Loki ロギングシステムを管理する API グループ。
4
resources: このロールが対話できるリソースタイプを定義します。
5
infrastructure: このロールが管理するインフラストラクチャー関連のリソースを指します。
6
resourceNames: このロールが管理できるリソースの名前を指定します。
7
logs: インフラストラクチャーに関連するログリソースを指します。
8
verbs: このロールによって許可されるアクションです。
9
create: Loki システムにインフラストラクチャーログを作成する権限を付与します。
3.3.1.2.5. ClusterLogForwarder 編集者ロール

clusterlogforwarder-editor-role.yaml ファイルは、ユーザーが OpenShift で ClusterLogForwarders を管理できるようにする ClusterRole を定義します。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: clusterlogforwarder-editor-role
rules:                                              
1

  - apiGroups:                                      
2

      - observability.openshift.io                  
3

    resources:                                      
4

      - clusterlogforwarders                        
5

    verbs:                                          
6

      - create                                      
7

      - delete                                      
8

      - get                                         
9

      - list                                        
10

      - patch                                       
11

      - update                                      
12

      - watch                                       
13
Copy to Clipboard Toggle word wrap
1
ルール: この ClusterRole が付与する権限を指定します。
2
apiGroups: OpenShift 固有の API グループを指します。
3
obervability.openshift.io: ロギングなどの可観測性リソースを管理するための API グループ。
4
resources: このロールが管理できるリソースを指定します。
5
clusterlogforwarders: OpenShift のログ転送リソースを指します。
6
verbs: ClusterLogForwarders で許可されるアクションを指定します。
7
create: 新しい ClusterLogForwarders を作成する権限を付与します。
8
delete: 既存の ClusterLogForwarders を削除する権限を付与します。
9
get: 特定の ClusterLogForwarders に関する情報を取得する権限を付与します。
10
list: すべての ClusterLogForwarders のリスト表示を許可します。
11
patch: ClusterLogForwarders を部分的に変更する権限を付与します。
12
update: 既存の ClusterLogForwarders を更新する権限を付与します。
13
watch: ClusterLogForwarders への変更を監視する権限を付与します。

3.3.2. コレクターのログレベルの変更

コレクターでログレベルを変更するには、observability.openshift.io/log-level アノテーションを tracedebuginfowarnerror、および off に設定します。

ログレベルアノテーションの例

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: collector
  annotations:
    observability.openshift.io/log-level: debug
# ...
Copy to Clipboard Toggle word wrap

3.3.3. Operator の管理

ClusterLogForwarder リソースには、Operator がリソースをアクティブに管理するか、管理対象外のままにするかを制御する managementState フィールドがあります。

Managed
(デフォルト) Operator は、CLF 仕様の目的の状態に一致するようにロギングリソースを駆動します。
管理対象外
Operator は、ロギングコンポーネントに関連するアクションを一切実行しません。

これにより、管理者は managementStateUnmanaged に設定して、ログ転送を一時的に停止できます。

3.3.4. ClusterLogForwarder の構造

CLF には、次の主要コンポーネントを含む spec セクションがあります。

Inputs
転送するログメッセージを選択します。組み込みの入力タイプである applicationinfrastructure、および audit は、クラスターのさまざまな部分からログを転送します。カスタム入力を定義することもできます。
出力
ログを転送する宛先を定義します。各出力には、一意の名前とタイプ固有の設定があります。
Pipelines
ログが入力からフィルターを経由して出力されるまでのパスを定義します。パイプラインには一意の名前があり、入力名、出力名、フィルター名のリストで構成されます。
Filters
パイプライン内のログメッセージを変換または破棄します。ユーザーは、特定のログフィールドに一致するフィルターを定義し、メッセージを破棄または変更できます。フィルターはパイプラインで指定された順序で適用されます。
3.3.4.1. Inputs

入力は spec.inputs の下の配列で設定されます。組み込みの入力タイプは 3 つあります。

application
インフラストラクチャー namespace 内のログを除く、すべてのアプリケーションコンテナーからログを選択します。
infrastructure

次の namespace で実行されているノードおよびインフラストラクチャーコンポーネントからログを選択します。

  • default
  • kube
  • openshift
  • kube- または openshift- 接頭辞を含む
audit
OpenShift API サーバー監査ログ、Kubernetes API サーバー監査ログ、ovn 監査ログ、および auditd からのノード監査ログからログを選択します。

ユーザーは、特定の namespace からログを選択するか、または Pod ラベルを使用してログを選択する application のカスタム入力を定義できます。

3.3.4.2. 出力

出力は spec.outputs の下の配列で設定されます。各出力には一意の名前とタイプが必要です。サポートされているタイプは次のとおりです。

azureMonitor
ログを Azure Monitor に転送します。
cloudwatch
ログを AWS CloudWatch に転送します。
googleCloudLogging
ログを Google Cloud Logging に転送します。
http
ログを汎用 HTTP エンドポイントに転送します。
kafka
ログを Kafka ブローカーに転送します。
loki
ログを Loki ロギングバックエンドに転送します。
lokistack
Red Hat OpenShift Service on AWS の認証と統合された、Loki と Web プロキシーを組み合わせたロギング対応の環境にログを転送します。LokiStack のプロキシーは、Red Hat OpenShift Service on AWS の認証を使用してマルチテナンシーを適用します。
otlp
OpenTelemetry プロトコルを使用してログを転送します。
splunk
ログを Splunk に転送します。
syslog
ログを外部の syslog サーバーに転送します。

各出力タイプには独自の設定フィールドがあります。

3.3.5. OTLP 出力の設定

クラスター管理者は、OpenTelemetry Protocol (OTLP) 出力を使用してログを収集し、OTLP レシーバーに転送できます。OTLP 出力は、OpenTelemetry Observability フレームワーク で定義された仕様を使用して、HTTP を介して JSON エンコーディングでデータを送信します。

重要

OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

手順

  • OTLP を使用した転送を有効にするには、次のアノテーションを追加して ClusterLogForwarder カスタムリソース (CR) を作成または編集します。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      annotations:
        observability.openshift.io/tech-preview-otlp-output: "enabled" 
    1
    
      name: clf-otlp
    spec:
      serviceAccount:
        name: <service_account_name>
      outputs:
      - name: otlp
        type: otlp
        otlp:
          tuning:
            compression: gzip
            deliveryMode: AtLeastOnce
            maxRetryDuration: 20
            maxWrite: 10M
            minRetryDuration: 5
          url: <otlp_url> 
    2
    
      pipelines:
      - inputRefs:
        - application
        - infrastructure
        - audit
        name: otlp-logs
        outputRefs:
        - otlp
    Copy to Clipboard Toggle word wrap

    1
    このアノテーションを使用して OpenTelemetry Protocol (OTLP) 出力を有効にします。これはテクノロジープレビュー機能です。
    2
    これは絶対 URL でなければならず、ログの送信先である OTLP エンドポイントのプレースホルダーです。
注記

OTLP 出力では OpenTelemetry データモデルが使用されますが、これは他の出力タイプで使用される ViaQ データモデルとは異なります。これは、OpenTelemetry Observability フレームワークで定義された OpenTelemetry Semantic Conventions を使用することで OTLP に準拠しています。

3.3.5.1. Pipelines

パイプラインは spec.pipelines の下の配列で設定されます。各パイプラインには一意の名前があり、次の要素で構成される必要があります。

inputRefs
このパイプラインにログを転送する入力の名前。
outputRefs
ログを送信する出力の名前。
filterRefs
(オプション) 適用するフィルターの名前。

filterRefs は順番に適用されるため、順序が重要です。以前のフィルターは、後のフィルターで処理されないメッセージを破棄する可能性があります。

3.3.5.2. Filters

フィルターは spec.filters の下の配列で設定されます。構造化フィールドの値に基づいて受信ログメッセージを照合し、変更または削除できます。

管理者は次のタイプのフィルターを設定できます。

3.3.5.3. 複数行の例外検出の有効化

コンテナーログの複数行のエラー検出を有効にします。

警告

この機能を有効にすると、パフォーマンスに影響が出る可能性があり、追加のコンピューティングリソースや代替のロギングソリューションが必要になる場合があります。

ログパーサーは頻繁に、同じ例外の個別の行を別々の例外として誤って識別します。その結果、余分なログエントリーが発生し、トレースされた情報が不完全または不正確な状態で表示されます。

Java 例外の例

java.lang.NullPointerException: Cannot invoke "String.toString()" because "<param1>" is null
    at testjava.Main.handle(Main.java:47)
    at testjava.Main.printMe(Main.java:19)
    at testjava.Main.main(Main.java:10)
Copy to Clipboard Toggle word wrap

  • ロギングを有効にして複数行の例外を検出し、それらを 1 つのログエントリーに再アセンブルできるようにする場合は、ClusterLogForwarder カスタムリソース (CR) に .spec.filters の下の detectMultilineErrors フィールドが含まれていることを確認します。

ClusterLogForwarder CR の例

apiVersion: "observability.openshift.io/v1"
kind: ClusterLogForwarder
metadata:
  name: <log_forwarder_name>
  namespace: <log_forwarder_namespace>
spec:
  serviceAccount:
    name: <service_account_name>
  filters:
  - name: <name>
    type: detectMultilineException
  pipelines:
    - inputRefs:
        - <input-name>
      name: <pipeline-name>
      filterRefs:
        - <filter-name>
      outputRefs:
        - <output-name>
Copy to Clipboard Toggle word wrap

3.3.5.3.1. 詳細

ログメッセージが例外スタックトレースを形成する連続したシーケンスとして表示される場合、それらは単一の統合ログレコードに結合されます。最初のログメッセージの内容は、シーケンス内のすべてのメッセージフィールドの連結コンテンツに置き換えられます。

コレクターは次の言語をサポートしています。

  • Java
  • JS
  • Ruby
  • Python
  • Golang
  • PHP
  • Dart
3.3.5.4. 不要なログレコードを削除するコンテンツフィルターの設定

drop フィルターが設定されている場合、ログコレクターは転送する前にフィルターに従ってログストリームを評価します。コレクターは、指定された設定に一致する不要なログレコードを削除します。

手順

  1. フィルターの設定を ClusterLogForwarder CR の filters 仕様に追加します。

    以下の例は、正規表現に基づいてログレコードを削除するように ClusterLogForwarder CR を設定する方法を示しています。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      filters:
      - name: <filter_name>
        type: drop 
    1
    
        drop: 
    2
    
        - test: 
    3
    
          - field: .kubernetes.labels."foo-bar/baz" 
    4
    
            matches: .+ 
    5
    
          - field: .kubernetes.pod_name
            notMatches: "my-pod" 
    6
    
      pipelines:
      - name: <pipeline_name> 
    7
    
        filterRefs: ["<filter_name>"]
    # ...
    Copy to Clipboard Toggle word wrap

    1
    フィルターのタイプを指定します。drop フィルターは、フィルター設定に一致するログレコードをドロップします。
    2
    drop フィルターを適用するための設定オプションを指定します。
    3
    ログレコードが削除されるかどうかを評価するために使用されるテストの設定を指定します。
    • テストに指定されたすべての条件が true の場合、テストは合格し、ログレコードは削除されます。
    • drop フィルター設定に複数のテストが指定されている場合、いずれかのテストに合格すると、レコードは削除されます。
    • 条件の評価中にエラーが発生した場合 (たとえば、評価対象のログレコードにフィールドがない場合)、その条件は false と評価されます。
    4
    ドットで区切られたフィールドパス (ログレコード内のフィールドへのパス) を指定します。パスには、英数字とアンダースコア (a-zA-Z0-9_) を含めることができます (例: .kubernetes.namespace_name)。セグメントにこの範囲外の文字が含まれている場合、セグメントを引用符で囲む必要があります (例: .kubernetes.labels."foo.bar-bar/baz")。1 つの test 設定に複数のフィールドパスを含めることができますが、テストに合格して drop フィルターを適用するには、すべてのフィールドパスが true と評価される必要があります。
    5
    正規表現を指定します。ログレコードがこの正規表現と一致する場合は、破棄されます。単一の field パスに対して matches または notMatches 条件のいずれかを設定できますが、両方を設定することはできません。
    6
    正規表現を指定します。ログレコードがこの正規表現に一致しない場合、破棄されます。単一の field パスに対して matches または notMatches 条件のいずれかを設定できますが、両方を設定することはできません。
    7
    drop フィルターが適用されるパイプラインを指定します。
  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

追加例

次の例は、優先度の高いログレコードのみを保持するように drop フィルターを設定する方法を示しています。

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
# ...
spec:
  serviceAccount:
    name: <service_account_name>
  filters:
  - name: important
    type: drop
    drop:
    - test:
      - field: .message
        notMatches: "(?i)critical|error"
      - field: .level
        matches: "info|warning"
# ...
Copy to Clipboard Toggle word wrap

単一の test 設定に複数のフィールドパスを追加する以外に、OR チェックとして扱われる追加のテストも追加できます。次の例では、いずれかの test 設定が true と評価されるとレコードが削除されます。ただし、2 番目の test 設定では、true と評価されるためには、両方のフィールド仕様が true である必要があります。

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
# ...
spec:
  serviceAccount:
    name: <service_account_name>
  filters:
  - name: important
    type: drop
    drop:
    - test:
      - field: .kubernetes.namespace_name
        matches: "^open"
    - test:
      - field: .log_type
        matches: "application"
      - field: .kubernetes.pod_name
        notMatches: "my-pod"
# ...
Copy to Clipboard Toggle word wrap
3.3.5.5. API 監査フィルターの概要

OpenShift API サーバーは、API 呼び出しごとに、リクエスト、レスポンス、リクエスターの ID の詳細を示す監査イベントを生成するため、大量のデータが生成されます。API 監査フィルターはルールを使用して、重要でないイベントを除外してイベントサイズを減少できるようにし、監査証跡をより管理しやすくします。ルールは順番にチェックされ、最初の一致でチェックが停止します。イベントに含まれるデータの量は、level フィールドの値によって決まります。

  • None: イベントはドロップされます。
  • Metadata: 監査メタデータが含まれ、リクエストおよびレスポンスの本文は削除されます。
  • Request: 監査メタデータとリクエスト本文が含まれ、レスポンス本文は削除されます。
  • RequestResponse: メタデータ、リクエスト本文、レスポンス本文のすべてのデータが含まれます。レスポンス本文が非常に大きくなる可能性があります。たとえば、oc get pods -A はクラスター内のすべての Pod の YAML 記述を含むレスポンス本文を生成します。

ClusterLogForwarder カスタムリソース (CR) は、以下の追加機能を提供しますが、標準の Kubernetes 監査ポリシー と同じ形式を使用します。

ワイルドカード
ユーザー、グループ、namespace、およびリソースの名前には、先頭または末尾に * アスタリスク文字を付けることができます。たとえば、namespace openshift-\*openshift-apiserver または openshift-authentication に一致します。リソース \*/status は、Pod/status または Deployment/status と一致します。
デフォルトのルール

ポリシーのルールに一致しないイベントは、以下のようにフィルターされます。

  • getlistwatch などの読み取り専用システムイベントは削除されます。
  • サービスアカウントと同じ namespace 内で発生するサービスアカウント書き込みイベントは破棄されます。
  • 他のすべてのイベントは、設定されたレート制限に従って転送されます。

これらのデフォルトを無効にするには、level フィールドのみが含まれるルールでルールリストを終了するか、空のルールを追加します。

応答コードが省略される
省略する整数ステータスコードのリスト。イベントが作成されない HTTP ステータスコードをリストする OmitResponseCodes フィールドを使用して、応答で HTTP ステータスコードに基づいてイベントを破棄できます。デフォルト値は [404, 409, 422, 429] です。値が空のリスト [] の場合、ステータスコードは省略されません。

ClusterLogForwarder CR の監査ポリシーは、Red Hat OpenShift Service on AWS の監査ポリシーに加えて動作します。ClusterLogForwarder CR 監査フィルターは、ログコレクターが転送する内容を変更し、verb、user、group、namespace、または resource でフィルタリングする機能を提供します。複数のフィルターを作成して、同じ監査ストリームの異なるサマリーを異なる場所に送信できます。たとえば、詳細なストリームをローカルクラスターログストアに送信し、詳細度の低いストリームをリモートサイトに送信できます。

注記

監査ログを収集するには、クラスターロール collect-audit-logs が必要です。提供されている例は、監査ポリシーで可能なルールの範囲を示すことを目的としており、推奨される設定ではありません。

監査ポリシーの例

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: <log_forwarder_name>
  namespace: <log_forwarder_namespace>
spec:
  serviceAccount:
    name: <service_account_name>
  pipelines:
    - name: my-pipeline
      inputRefs: audit 
1

      filterRefs: my-policy 
2

  filters:
    - name: my-policy
      type: kubeAPIAudit
      kubeAPIAudit:
        # Don't generate audit events for all requests in RequestReceived stage.
        omitStages:
          - "RequestReceived"

        rules:
          # Log pod changes at RequestResponse level
          - level: RequestResponse
            resources:
            - group: ""
              resources: ["pods"]

          # Log "pods/log", "pods/status" at Metadata level
          - level: Metadata
            resources:
            - group: ""
              resources: ["pods/log", "pods/status"]

          # Don't log requests to a configmap called "controller-leader"
          - level: None
            resources:
            - group: ""
              resources: ["configmaps"]
              resourceNames: ["controller-leader"]

          # Don't log watch requests by the "system:kube-proxy" on endpoints or services
          - level: None
            users: ["system:kube-proxy"]
            verbs: ["watch"]
            resources:
            - group: "" # core API group
              resources: ["endpoints", "services"]

          # Don't log authenticated requests to certain non-resource URL paths.
          - level: None
            userGroups: ["system:authenticated"]
            nonResourceURLs:
            - "/api*" # Wildcard matching.
            - "/version"

          # Log the request body of configmap changes in kube-system.
          - level: Request
            resources:
            - group: "" # core API group
              resources: ["configmaps"]
            # This rule only applies to resources in the "kube-system" namespace.
            # The empty string "" can be used to select non-namespaced resources.
            namespaces: ["kube-system"]

          # Log configmap and secret changes in all other namespaces at the Metadata level.
          - level: Metadata
            resources:
            - group: "" # core API group
              resources: ["secrets", "configmaps"]

          # Log all other resources in core and extensions at the Request level.
          - level: Request
            resources:
            - group: "" # core API group
            - group: "extensions" # Version of group should NOT be included.

          # A catch-all rule to log all other requests at the Metadata level.
          - level: Metadata
Copy to Clipboard Toggle word wrap

1
収集されるログのタイプ。このフィールドの値は、監査ログの場合は audit、アプリケーションログの場合は application、インフラストラクチャーログの場合は infrastructure、またはアプリケーションに定義された指定の入力になります。
2
監査ポリシーの名前。

input セレクターを使用して、ラベル式または照合するラベルキーとその値に基づいてアプリケーションログを含めることができます。

手順

  1. ClusterLogForwarder CR の input 仕様にフィルターの設定を追加します。

    以下の例は、ラベル式または一致したラベルキー/値に基づいてログを組み込むように ClusterLogForwarder CR を設定する方法を示しています。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      inputs:
        - name: mylogs
          application:
            selector:
              matchExpressions:
              - key: env 
    1
    
                operator: In 
    2
    
                values: ["prod", "qa"] 
    3
    
              - key: zone
                operator: NotIn
                values: ["east", "west"]
              matchLabels: 
    4
    
                app: one
                name: app1
          type: application
    # ...
    Copy to Clipboard Toggle word wrap

    1
    照合するラベルキーを指定します。
    2
    Operator を指定します。有効な値には、InNotInExistsDoesNotExist などがあります。
    3
    文字列値の配列を指定します。operator 値が Exists または DoesNotExist のいずれかの場合、値の配列は空である必要があります。
    4
    正確なキーまたは値のマッピングを指定します。
  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
3.3.5.7. ログレコードを削除するコンテンツフィルターの設定

prune フィルターが設定されると、ログコレクターは転送前にフィルターをもとにログレベルを評価します。コレクターは、Pod アノテーションなどの値の低いフィールドを削除してログレコードを整理します。

手順

  1. フィルターの設定を ClusterLogForwarder CR の prune 仕様に追加します。

    次の例は、フィールドパスに基づいてログレコードを削除するように ClusterLogForwarder CR を設定する方法を示しています。

    重要

    両方が指定されている場合、最初に notIn 配列に基づいてレコードが整理され、in 配列よりも優先されます。notIn 配列を使用してレコードが整理された後、in 配列を使用してレコードが整理されます。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      filters:
      - name: <filter_name>
        type: prune 
    1
    
        prune: 
    2
    
          in: [.kubernetes.annotations, .kubernetes.namespace_id] 
    3
    
          notIn: [.kubernetes,.log_type,.message,."@timestamp"] 
    4
    
      pipelines:
      - name: <pipeline_name> 
    5
    
        filterRefs: ["<filter_name>"]
    # ...
    Copy to Clipboard Toggle word wrap

    1
    フィルターのタイプを指定します。prune フィルターでは、設定されたフィールドでログレコードをプルーニングします。
    2
    prune フィルターを適用するための設定オプションを指定します。in フィールドと notIn フィールドは、ログレコード内のフィールドへのパスであるドット区切りのフィールドパスの配列として指定されます。これらのパスには、英数字とアンダースコア (a-zA-Z0-9_) を含めることができます (例: .kubernetes.namespace_name)。セグメントにこの範囲外の文字が含まれている場合、セグメントを引用符で囲む必要があります (例: .kubernetes.labels."foo.bar-bar/baz")
    3
    オプション: この配列で指定されたフィールドはすべてログレコードから削除されます。
    4
    オプション: この配列で指定されていないフィールドはログレコードから削除されます。
    5
    prune フィルターを適用するパイプラインを指定します。
    注記

    フィルターは、log_type.log_source、および .message フィールドを除外します。

  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

3.3.6. ソースによる監査およびインフラストラクチャーログ入力のフィルタリング

input セレクターを使用して、ログを収集する audit および infrastructure ソースのリストを定義できます。

手順

  1. ClusterLogForwarder CR に audit および infrastructure ソースを定義する設定を追加します。

    次の例は、ClusterLogForwarder CR を設定して audit および infrastructure ソースを定義する方法を示しています。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      inputs:
        - name: mylogs1
          type: infrastructure
          infrastructure:
            sources: 
    1
    
              - node
        - name: mylogs2
          type: audit
          audit:
            sources: 
    2
    
              - kubeAPI
              - openshiftAPI
              - ovn
    # ...
    Copy to Clipboard Toggle word wrap

    1
    収集するインフラストラクチャーソースのリストを指定します。有効なソースには以下が含まれます。
    • node: ノードからのジャーナルログ
    • container: namespace にデプロイされたワークロードからのログ
    2
    収集する audit ソースのリストを指定します。有効なソースには以下が含まれます。
    • kubeAPI: Kubernetes API サーバーからのログ
    • openshiftAPI: OpenShift API サーバーからのログ
    • auditd: ノードの auditd サービスからのログ
    • ovn: オープン仮想ネットワークサービスからのログ
  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

input セレクターを使用して、namespace とコンテナー名に基づいてアプリケーションログを含めたり除外したりできます。

手順

  1. ClusterLogForwarder CR に namespace とコンテナー名を含めるか除外するかの設定を追加します。

    以下の例は、namespace およびコンテナー名を含めるか、除外するように ClusterLogForwarder CR を設定する方法を示しています。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      inputs:
        - name: mylogs
          application:
            includes:
              - namespace: "my-project" 
    1
    
                container: "my-container" 
    2
    
            excludes:
              - container: "other-container*" 
    3
    
                namespace: "other-namespace" 
    4
    
          type: application
    # ...
    Copy to Clipboard Toggle word wrap

    1
    ログがこれらの namespace からのみ収集されることを指定します。
    2
    ログがこれらのコンテナーからのみ収集されることを指定します。
    3
    ログを収集するときに無視する namespace のパターンを指定します。
    4
    ログを収集するときに無視するコンテナーのセットを指定します。
    注記

    excludes フィールドは includes フィールドよりも優先されます。

  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

3.4. LokiStack でのログの保存

アプリケーション、監査、インフラストラクチャー関連のログを保存するように LokiStack CR を設定できます。

Loki は、水平スケーリング可能で可用性の高いマルチテナントログ集約システムで、OpenShift Observability UI で視覚化できる Logging for Red Hat OpenShift 用の GA ログストアとして提供されます。OpenShift Logging が提供する Loki 設定は、収集されたログを使用してユーザーが迅速にトラブルシューティングを実行できるように設計された短期ログストアです。この目的のために、Logging for Red Hat OpenShift の Loki 設定は短期ストレージを備えており、最新のクエリーに最適化されています。長期間にわたる保存やクエリーの場合、ユーザーはクラスター外部のログストアを探す必要があります。

3.4.1. Loki デプロイメントのサイズ

Loki のサイズは 1x.<size> の形式に従います。この場合の 1x はインスタンスの数を、<size> は性能を指定します。

1x.pico 設定は、最小限のリソースと制限要件を持つ単一の Loki デプロイメントを定義し、すべての Loki コンポーネントに高可用性 (HA) サポートを提供します。この設定は、単一のレプリケーションファクターまたは自動圧縮を必要としないデプロイメントに適しています。

ディスク要求はサイズ設定にかかわらず類似しているため、お客様はさまざまなサイズをテストして、それぞれのデプロイメントニーズに最適なサイズを決定できます。

重要

デプロイメントサイズの 1x の数は変更できません。

Expand
表3.1 Loki のサイズ
 1x.demo1x.pico [6.1+ のみ]1x.extra-small1x.small1x.medium

Data transfer

デモ使用のみ

50 GB/日

100 GB/日

500 GB/日

2 TB/日

1 秒あたりのクエリー数 (QPS)

デモ使用のみ

200 ミリ秒で 1 - 25 QPS

200 ミリ秒で 1 - 25 QPS

200 ミリ秒で 25 - 50 QPS

200 ミリ秒で 25 - 75 QPS

レプリケーション係数

なし

2

2

2

2

合計 CPU 要求

なし

仮想 CPU 7 個

仮想 CPU 14 個

仮想 CPU 34 個

仮想 CPU 54 個

ルーラーを使用する場合の合計 CPU リクエスト

なし

仮想 CPU 8 個

仮想 CPU 16 個

仮想 CPU 42 個

仮想 CPU 70 個

合計メモリー要求

なし

17 Gi

31 Gi

67 Gi

139 Gi

ルーラーを使用する場合の合計メモリーリクエスト

なし

18 Gi

35 Gi

83 Gi

171 Gi

合計ディスク要求

40 Gi

590 Gi

430 Gi

430 Gi

590 Gi

ルーラーを使用する場合の合計ディスクリクエスト

60 Gi

910 Gi

750 Gi

750 Gi

910 Gi

3.4.2. 前提条件

  • CLI または Web コンソールを使用して Loki Operator をインストールしている。
  • ClusterLogForwarder を作成するのと同じ namespace に serviceAccount がある。
  • serviceAccountcollect-audit-logscollect-application-logscollect-infrastructure-logs のクラスターロールが割り当てられている。

3.4.3. コアのセットアップと設定

ロールベースのアクセス制御、基本的なモニタリング、および Loki をデプロイするための Pod の配置。

3.4.4. LokiStack ルールの RBAC 権限の認可

管理者は、クラスターロールをユーザー名にバインドすることで、ユーザーが独自のアラートおよび記録ルールを作成および管理できるようにすることができます。クラスターロールは、ユーザーに必要なロールベースのアクセス制御 (RBAC) 権限を含む ClusterRole オブジェクトとして定義されます。

LokiStack では、アラートおよび記録ルール用の次のクラスターロールが利用できます。

Expand
ルール名説明

alertingrules.loki.grafana.com-v1-admin

このロールを持つユーザーは、アラートルールを管理する管理レベルのアクセス権を持ちます。このクラスターロールは、loki.grafana.com/v1 API グループ内の AlertingRule リソースを作成、読み取り、更新、削除、リスト表示、および監視する権限を付与します。

alertingrules.loki.grafana.com-v1-crdview

このロールを持つユーザーは、loki.grafana.com/v1 API グループ内の AlertingRule リソースに関連するカスタムリソース定義 (CRD) の定義を表示できますが、これらのリソースを変更または管理する権限を持ちません。

alertingrules.loki.grafana.com-v1-edit

このロールを持つユーザーは、AlertingRule リソースを作成、更新、および削除する権限を持ちます。

alertingrules.loki.grafana.com-v1-view

このロールを持つユーザーは、loki.grafana.com/v1 API グループ内の AlertingRule リソースを読み取ることができます。既存のアラートルールの設定、ラベル、およびアノテーションを検査できますが、それらを変更することはできません。

recordingrules.loki.grafana.com-v1-admin

このロールを持つユーザーは、記録ルールを管理する管理レベルのアクセス権を持ちます。このクラスターロールは、loki.grafana.com/v1 API グループ内の RecordingRule リソースを作成、読み取り、更新、削除、リスト表示、および監視する権限を付与します。

recordingrules.loki.grafana.com-v1-crdview

このロールを持つユーザーは、loki.grafana.com/v1 API グループ内の RecordingRule リソースに関連するカスタムリソース定義 (CRD) の定義を表示できますが、これらのリソースを変更または管理する権限を持ちません。

recordingrules.loki.grafana.com-v1-edit

このロールを持つユーザーは、RecordingRule リソースを作成、更新、および削除する権限を持ちます。

recordingrules.loki.grafana.com-v1-view

このロールを持つユーザーは、loki.grafana.com/v1 API グループ内の RecordingRule リソースを読み取ることができます。既存のアラートルールの設定、ラベル、およびアノテーションを検査できますが、それらを変更することはできません。

3.4.4.1. 例

ユーザーにクラスターロールを適用するには、既存のクラスターロールを特定のユーザー名にバインドする必要があります。

クラスターロールは、使用するロールバインディングの種類に応じて、クラスタースコープまたは namespace スコープにすることができます。RoleBinding オブジェクトを使用する場合は、oc adm policy add-role-to-user コマンドを使用する場合と同様に、クラスターロールが指定した namespace にのみ適用されます。ClusterRoleBinding オブジェクトを使用する場合は、oc adm policy add-cluster-role-to-user コマンドを使用する場合と同様に、クラスターロールがクラスター内のすべての namespace に適用されます。

次のコマンド例では、指定したユーザーに、クラスター内の特定の namespace のアラートルールに対する作成、読み取り、更新、および削除 (CRUD) 権限を付与します。

特定の namespace のアラートルールに対する CRUD 権限を付与するクラスターロールバインディングコマンドの例

$ oc adm policy add-role-to-user alertingrules.loki.grafana.com-v1-admin -n <namespace> <username>
Copy to Clipboard Toggle word wrap

次のコマンドは、指定したユーザーに、すべての namespace のアラートルールに対する管理者権限を付与します。

管理者権限を付与するクラスターロールバインディングコマンドの例

$ oc adm policy add-cluster-role-to-user alertingrules.loki.grafana.com-v1-admin <username>
Copy to Clipboard Toggle word wrap

3.4.5. Loki を使用したログベースのアラートルールの作成

AlertingRule CR には、単一の LokiStack インスタンスのアラートルールグループを宣言するために使用する、仕様および Webhook 検証定義のセットが含まれます。Webhook 検証定義は、ルール検証条件もサポートします。

  • AlertingRule CR に無効な interval 期間が含まれる場合、無効なアラートルールです。
  • AlertingRule CR に無効な for 期間が含まれる場合、無効なアラートルールです。
  • AlertingRule CR に無効な LogQL expr が含まれる場合、無効なアラートルールです。
  • AlertingRule CR に同じ名前のグループが 2 つ含まれる場合、無効なアラートルールです。
  • 上記のいずれも該当しない場合、アラートルールは有効とみなされます。
Expand
表3.2 AlertingRule の定義
テナントタイプAlertingRule CR の有効な namespace

application

<your_application_namespace>

audit

openshift-logging

infrastructure

openshift-/*kube-/\*default

手順

  1. AlertingRule カスタムリソース (CR) を作成します。

    インフラストラクチャー AlertingRule CR の例

      apiVersion: loki.grafana.com/v1
      kind: AlertingRule
      metadata:
        name: loki-operator-alerts
        namespace: openshift-operators-redhat 
    1
    
        labels: 
    2
    
          openshift.io/<label_name>: "true"
      spec:
        tenantID: "infrastructure" 
    3
    
        groups:
          - name: LokiOperatorHighReconciliationError
            rules:
              - alert: HighPercentageError
                expr: | 
    4
    
                  sum(rate({kubernetes_namespace_name="openshift-operators-redhat", kubernetes_pod_name=~"loki-operator-controller-manager.*"} |= "error" [1m])) by (job)
                    /
                  sum(rate({kubernetes_namespace_name="openshift-operators-redhat", kubernetes_pod_name=~"loki-operator-controller-manager.*"}[1m])) by (job)
                    > 0.01
                for: 10s
                labels:
                  severity: critical 
    5
    
                annotations:
                  summary: High Loki Operator Reconciliation Errors 
    6
    
                  description: High Loki Operator Reconciliation Errors 
    7
    Copy to Clipboard Toggle word wrap

    1
    この AlertingRule CR が作成される namespace には、LokiStack spec.rules.namespaceSelector 定義に一致するラベルが必要です。
    2
    labels ブロックは、LokiStack の spec.rules.selector 定義と一致する必要があります。
    3
    infrastructure テナントの AlertingRule CR は、openshift-*kube-\*、または default namespaces でのみサポートされます。
    4
    kubernetes_namespace_name: の値は、metadata.namespace の値と一致する必要があります。
    5
    この必須フィールドの値は、criticalwarning、または info である必要があります。
    6
    このフィールドは必須です。
    7
    このフィールドは必須です。

    アプリケーション AlertingRule CR の例

      apiVersion: loki.grafana.com/v1
      kind: AlertingRule
      metadata:
        name: app-user-workload
        namespace: app-ns 
    1
    
        labels: 
    2
    
          openshift.io/<label_name>: "true"
      spec:
        tenantID: "application"
        groups:
          - name: AppUserWorkloadHighError
            rules:
              - alert:
                expr: | 
    3
    
                  sum(rate({kubernetes_namespace_name="app-ns", kubernetes_pod_name=~"podName.*"} |= "error" [1m])) by (job)
                for: 10s
                labels:
                  severity: critical 
    4
    
                annotations:
                  summary:  
    5
    
                  description:  
    6
    Copy to Clipboard Toggle word wrap

    1
    この AlertingRule CR が作成される namespace には、LokiStack spec.rules.namespaceSelector 定義に一致するラベルが必要です。
    2
    labels ブロックは、LokiStack の spec.rules.selector 定義と一致する必要があります。
    3
    kubernetes_namespace_name: の値は、metadata.namespace の値と一致する必要があります。
    4
    この必須フィールドの値は、criticalwarning、または info である必要があります。
    5
    この必須フィールドの値は、ルールの概要です。
    6
    この必須フィールドの値は、ルールの詳細な説明です。
  2. AlertingRule CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

3.4.6. メンバーリストの作成の失敗を許容する Loki の設定

管理者は通常、Red Hat OpenShift Service on AWS クラスターでプライベートでない IP ネットワーク範囲を使用します。その結果、LokiStack のメンバーリスト設定が失敗します。この設定はデフォルトでプライベート IP ネットワークを使用するためです。

管理者は、メンバーリスト設定の Pod ネットワークを選択できます。LokiStack カスタムリソース (CR) を変更して、hashRing 仕様で podIP アドレスを使用できます。LokiStack CR を設定するには、以下のコマンドを使用します。

$ oc patch LokiStack logging-loki -n openshift-logging  --type=merge -p '{"spec": {"hashRing":{"memberlist":{"instanceAddrType":"podIP"},"type":"memberlist"}}}'
Copy to Clipboard Toggle word wrap

podIP を含む LokiStack の例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
# ...
  hashRing:
    type: memberlist
    memberlist:
      instanceAddrType: podIP
# ...
Copy to Clipboard Toggle word wrap

3.4.7. Loki でストリームベースの保持の有効化

ログストリームに基づいて保持ポリシーを設定できます。これらのルールは、グローバル、テナントごと、またはその両方で設定できます。両方で設定すると、グローバルルールの前にテナントルールが適用されます。

重要

s3 バケットまたは LokiStack カスタムリソース (CR) に保存期間が定義されていない場合、ログは削除されず、s3 バケットに永久に残り、s3 ストレージがいっぱいになる可能性があります。

注記

スキーマ v13 が推奨されます。

手順

  1. LokiStack CR を作成します。

    • 次の例に示すように、ストリームベースの保持をグローバルに有効にします。

      AWS のグローバルストリームベースの保持の例

      apiVersion: loki.grafana.com/v1
      kind: LokiStack
      metadata:
        name: logging-loki
        namespace: openshift-logging
      spec:
        limits:
         global: 
      1
      
            retention: 
      2
      
              days: 20
              streams:
              - days: 4
                priority: 1
                selector: '{kubernetes_namespace_name=~"test.+"}' 
      3
      
              - days: 1
                priority: 1
                selector: '{log_type="infrastructure"}'
        managementState: Managed
        replicationFactor: 1
        size: 1x.small
        storage:
          schemas:
          - effectiveDate: "2020-10-11"
            version: v13
          secret:
            name: logging-loki-s3
            type: aws
        storageClassName: gp3-csi
        tenants:
          mode: openshift-logging
      Copy to Clipboard Toggle word wrap

      1
      すべてのログストリームの保持ポリシーを設定します。注記: このフィールドは、オブジェクトストレージに保存されたログの保持期間には影響しません。
      2
      このブロックが CR に追加されると、クラスターで保持が有効になります。
      3
      ログ stream.spec: 制限を定義するために使用される LogQL クエリー が含まれます。
    • 次の例に示すように、テナントごとにストリームベースの保持を有効にします。

      AWS のテナントごとのストリームベースの保持の例

      apiVersion: loki.grafana.com/v1
      kind: LokiStack
      metadata:
        name: logging-loki
        namespace: openshift-logging
      spec:
        limits:
          global:
            retention:
              days: 20
          tenants: 
      1
      
            application:
              retention:
                days: 1
                streams:
                  - days: 4
                    selector: '{kubernetes_namespace_name=~"test.+"}' 
      2
      
            infrastructure:
              retention:
                days: 5
                streams:
                  - days: 1
                    selector: '{kubernetes_namespace_name=~"openshift-cluster.+"}'
        managementState: Managed
        replicationFactor: 1
        size: 1x.small
        storage:
          schemas:
          - effectiveDate: "2020-10-11"
            version: v13
          secret:
            name: logging-loki-s3
            type: aws
        storageClassName: gp3-csi
        tenants:
          mode: openshift-logging
      Copy to Clipboard Toggle word wrap

      1
      テナントごとの保持ポリシーを設定します。有効なテナントタイプは、applicationaudit、および infrastructure です。
      2
      ログストリームの定義に使用される LogQL クエリー が含まれています。
  2. LokiStack CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
    注記

    これは、保存されたログの保持を管理するためのものではありません。保存されたログのグローバルな保持期間 (最大 30 日間までサポート) は、オブジェクトストレージで設定します。

3.4.8. Loki Pod の配置

Pod の toleration またはノードセレクターを使用して、Loki Pod が実行するノードを制御し、他のワークロードがそれらのノードを使用しないようにできます。

LokiStack カスタムリソース (CR) を使用して toleration をログストア Pod に適用し、ノード仕様を使用して taint をノードに適用できます。ノードの taint は、taint を容認しないすべての Pod を拒否するようノードに指示する key:value ペアです。他の Pod にはない特定の key:value ペアを使用すると、ログストア Pod のみがそのノードで実行できるようになります。

ノードセレクターを使用する LokiStack の例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
# ...
  template:
    compactor: 
1

      nodeSelector:
        node-role.kubernetes.io/infra: "" 
2

    distributor:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    gateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    indexGateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    ingester:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    querier:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    queryFrontend:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    ruler:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
# ...
Copy to Clipboard Toggle word wrap

1
ノードセレクターに適用されるコンポーネント Pod タイプを指定します。
2
定義されたラベルが含まれるノードに移動する Pod を指定します。

ノードセレクターと toleration を使用する LokiStack CR の例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
# ...
  template:
    compactor:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    distributor:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    indexGateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    ingester:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    querier:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    queryFrontend:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    ruler:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    gateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
# ...
Copy to Clipboard Toggle word wrap

LokiStack (CR) の nodeSelector フィールドと tolerations フィールドを設定するには、oc explain コマンドを使用して、特定のリソースの説明とフィールドを表示します。

$ oc explain lokistack.spec.template
Copy to Clipboard Toggle word wrap

出力例

KIND:     LokiStack
VERSION:  loki.grafana.com/v1

RESOURCE: template <Object>

DESCRIPTION:
     Template defines the resource/limits/tolerations/nodeselectors per
     component

FIELDS:
   compactor	<Object>
     Compactor defines the compaction component spec.

   distributor	<Object>
     Distributor defines the distributor component spec.
...
Copy to Clipboard Toggle word wrap

詳細情報用に、特定のフィールドを追加できます。

$ oc explain lokistack.spec.template.compactor
Copy to Clipboard Toggle word wrap

出力例

KIND:     LokiStack
VERSION:  loki.grafana.com/v1

RESOURCE: compactor <Object>

DESCRIPTION:
     Compactor defines the compaction component spec.

FIELDS:
   nodeSelector	<map[string]string>
     NodeSelector defines the labels required by a node to schedule the
     component onto it.
...
Copy to Clipboard Toggle word wrap

3.4.9. 信頼性とパフォーマンスの向上

実稼働環境における Loki の信頼性と効率性を確保するための設定。

3.4.10. 有効期間の短いトークンを使用したクラウドベースのログストアへの認証の有効化

ワークロードアイデンティティーフェデレーションを使用すると、有効期間の短いトークンを使用してクラウドベースのログストアに対して認証できます。

手順

  • 認証を有効にするには、次のいずれかのオプションを使用します。

    • Red Hat OpenShift Service on AWS の Web コンソールを使用して Loki Operator をインストールすると、有効期間が短いトークンを使用するクラスターが自動的に検出されます。プロンプトが表示され、ロールを作成するように求められます。また、Loki Operator が CredentialsRequest オブジェクトを作成するのに必要なデータを提供するように求められます。このオブジェクトにより、シークレットが設定されます。
    • OpenShift CLI (oc) を使用して Loki Operator をインストールする場合は、次の例に示すように、ストレージプロバイダーに適したテンプレートを使用して Subscription オブジェクトを手動で作成する必要があります。この認証ストラテジーは、指定のストレージプロバイダーでのみサポートされます。

      Azure サンプルサブスクリプションの例

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: loki-operator
        namespace: openshift-operators-redhat
      spec:
        channel: "stable-6.0"
        installPlanApproval: Manual
        name: loki-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace
        config:
          env:
            - name: CLIENTID
              value: <your_client_id>
            - name: TENANTID
              value: <your_tenant_id>
            - name: SUBSCRIPTIONID
              value: <your_subscription_id>
            - name: REGION
              value: <your_region>
      Copy to Clipboard Toggle word wrap

      AWS サンプルサブスクリプションの例

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: loki-operator
        namespace: openshift-operators-redhat
      spec:
        channel: "stable-6.0"
        installPlanApproval: Manual
        name: loki-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace
        config:
          env:
          - name: ROLEARN
            value: <role_ARN>
      Copy to Clipboard Toggle word wrap

3.4.11. ノードの障害を許容するための Loki の設定

Loki Operator は、同じコンポーネントの Pod がクラスター内の異なる使用可能なノードにスケジュールされるように要求する Pod アンチアフィニティールールの設定をサポートしています。

アフィニティーとは、スケジュールするノードを制御する Pod の特性です。非アフィニティーとは、Pod がスケジュールされることを拒否する Pod の特性です。

Red Hat OpenShift Service on AWS では、Pod のアフィニティーPod の非アフィニティー によって、他の Pod のキー/値ラベルに基づいて、Pod のスケジュールに適したノードを制限できます。

Operator は、すべての Loki コンポーネント (compactordistributorgatewayindexGatewayingesterquerierqueryFrontend、および ruler コンポーネントを含む) に対してデフォルトの優先 podAntiAffinity ルールを設定します。

requiredDuringSchedulingIgnoredDuringExecution フィールドに必要な設定を指定して、Loki コンポーネントの希望の podAntiAffinity 設定を上書きできます。

インジェスターコンポーネントのユーザー設定の例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
# ...
  template:
    ingester:
      podAntiAffinity:
      # ...
        requiredDuringSchedulingIgnoredDuringExecution: 
1

        - labelSelector:
            matchLabels: 
2

              app.kubernetes.io/component: ingester
          topologyKey: kubernetes.io/hostname
# ...
Copy to Clipboard Toggle word wrap

1
必要なルールを定義するスタンザです。
2
ルールを適用するために一致している必要のあるキー/値のペア (ラベル) です。

3.4.12. クラスターの再起動中の LokiStack 動作

Red Hat OpenShift Service on AWS クラスターが再起動しても、LokiStack の取り込みとクエリーパスは、ノードで使用可能な CPU およびメモリーリソースの範囲内で、引き続き動作します。つまり、Red Hat OpenShift Service on AWS クラスターの更新中に LokiStack でダウンタイムは発生しません。この動作は、PodDisruptionBudget リソースを使用して実現されます。Loki Operator は、Loki に PodDisruptionBudget リソースをプロビジョニングするため、特定の条件下で通常の動作を保証するためにコンポーネントごとに必要最小限、使用可能な Pod 数が決定されます。

3.4.13. 高度なデプロイメントとスケーラビリティー

高可用性、スケーラビリティー、エラー処理のための特殊な設定。

3.4.14. ゾーン対応のデータレプリケーション

Loki Operator は、Pod トポロジーの分散制約を通じて、ゾーン対応のデータレプリケーションのサポートを提供します。この機能を有効にすると、信頼性が向上し、1 つのゾーンで障害が発生した場合のログ損失に対する保護が強化されます。デプロイメントサイズを 1x.extra-small1x.small、または 1x.medium に設定すると、replication.factor フィールドは自動的に 2 に設定されます。

適切なレプリケーションを実現するには、少なくともレプリケーション係数で指定されているのと同じ数のアベイラビリティーゾーンが必要です。レプリケーション係数より多くのアベイラビリティーゾーンを設定することは可能ですが、ゾーンが少ないと書き込みエラーが発生する可能性があります。最適な運用を実現するには、各ゾーンで同じ数のインスタンスをホストする必要があります。

ゾーンレプリケーションが有効になっている LokiStack CR の例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
 name: logging-loki
 namespace: openshift-logging
spec:
 replicationFactor: 2 
1

 replication:
   factor: 2 
2

   zones:
   -  maxSkew: 1 
3

      topologyKey: topology.kubernetes.io/zone 
4
Copy to Clipboard Toggle word wrap

1
非推奨のフィールド。入力された値は replication.factor によって上書きされます。
2
この値は、セットアップ時にデプロイメントサイズが選択されると自動的に設定されます。
3
任意の 2 つのトポロジードメイン間の Pod 数の最大差。デフォルトは 1 で、0 の値を指定することはできません。
4
ノードラベルに対応するトポロジーキーの形式でゾーンを定義します。

3.4.15. 障害が発生したゾーンからの Loki Pod の回復

Red Hat OpenShift Service on AWS では、特定のアベイラビリティーゾーンのリソースがアクセスできなくなると、ゾーン障害が発生します。アベイラビリティーゾーンは、冗長性とフォールトトレランスを強化することを目的とした、クラウドプロバイダーのデータセンター内の分離されたエリアです。Red Hat OpenShift Service on AWS クラスターがこの問題を処理するように設定されていない場合、ゾーン障害によりサービスまたはデータの損失が発生する可能性があります。

Loki Pod は StatefulSet の一部であり、StorageClass オブジェクトによってプロビジョニングされた永続ボリューム要求 (PVC) が付属しています。各 Loki Pod とその PVC は同じゾーンに存在します。クラスターでゾーン障害が発生すると、StatefulSet コントローラーが、障害が発生したゾーン内の影響を受けた Pod の回復を自動的に試みます。

警告

次の手順では、障害が発生したゾーン内の PVC とそこに含まれるすべてのデータを削除します。完全なデータ損失を回避するには、LokiStack CR のレプリケーション係数フィールドを常に 1 より大きい値に設定して、Loki が確実にレプリケートされるようにする必要があります。

前提条件

  • LokiStack CR のレプリケーション係数が 1 より大きいことを確認している。
  • コントロールプレーンによってゾーン障害が検出され、障害が発生したゾーン内のノードがクラウドプロバイダー統合によってマークされている。

StatefulSet コントローラーは、障害が発生したゾーン内の Pod を自動的に再スケジュールしようとします。関連する PVC も障害が発生したゾーンにあるため、別のゾーンへの自動再スケジュールは機能しません。新しいゾーンでステートフル Loki Pod とそのプロビジョニングされた PVC を正常に再作成できるようにするには、障害が発生したゾーンの PVC を手動で削除する必要があります。

手順

  1. 次のコマンドを実行して、Pending 中ステータスの Pod をリスト表示します。

    $ oc get pods --field-selector status.phase==Pending -n openshift-logging
    Copy to Clipboard Toggle word wrap

    oc get pods の出力例

    NAME                           READY   STATUS    RESTARTS   AGE 
    1
    
    logging-loki-index-gateway-1   0/1     Pending   0          17m
    logging-loki-ingester-1        0/1     Pending   0          16m
    logging-loki-ruler-1           0/1     Pending   0          16m
    Copy to Clipboard Toggle word wrap

    1
    これらの Pod は、障害が発生したゾーンに対応する PVC があるため、Pending ステータスになっています。
  2. 次のコマンドを実行して、Pending ステータスの PVC をリストします。

    $ oc get pvc -o=json -n openshift-logging | jq '.items[] | select(.status.phase == "Pending") | .metadata.name' -r
    Copy to Clipboard Toggle word wrap

    oc get pvc の出力例

    storage-logging-loki-index-gateway-1
    storage-logging-loki-ingester-1
    wal-logging-loki-ingester-1
    storage-logging-loki-ruler-1
    wal-logging-loki-ruler-1
    Copy to Clipboard Toggle word wrap

  3. 次のコマンドを実行して Pod の PVC を削除します。

    $ oc delete pvc <pvc_name> -n openshift-logging
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを実行して Pod を削除します。

    $ oc delete pod <pod_name> -n openshift-logging
    Copy to Clipboard Toggle word wrap

    これらのオブジェクトが正常に削除されると、使用可能なゾーンでオブジェクトが自動的に再スケジュールされます。

3.4.15.1. terminating 状態の PVC のトラブルシューティング

PVC メタデータファイナライザーが kubernetes.io/pv-protection に設定されている場合、PVC が削除されずに terminating 状態でハングする可能性があります。ファイナライザーを削除すると、PVC が正常に削除されるようになります。

  • 以下のコマンドを実行して各 PVC のファイナライザーを削除し、削除を再試行します。

    $ oc patch pvc <pvc_name> -p '{"metadata":{"finalizers":null}}' -n openshift-logging
    Copy to Clipboard Toggle word wrap

3.4.16. Loki レート制限エラーのトラブルシューティング

Log Forwarder API がレート制限を超える大きなメッセージブロックを Loki に転送すると、Loki により、レート制限 (429) エラーが生成されます。

これらのエラーは、通常の動作中に発生する可能性があります。たとえば、すでにいくつかのログがあるクラスターにロギングを追加する場合、ロギングが既存のログエントリーをすべて取り込もうとするとレート制限エラーが発生する可能性があります。この場合、新しいログの追加速度が合計レート制限よりも低い場合、履歴データは最終的に取り込まれ、ユーザーの介入を必要とせずにレート制限エラーが解決されます。

レート制限エラーが引き続き発生する場合は、LokiStack カスタムリソース (CR) を変更することで問題を解決できます。

重要

LokiStack CR は、Grafana がホストする Loki では利用できません。このトピックは、Grafana がホストする Loki サーバーには適用されません。

条件

  • Log Forwarder API は、ログを Loki に転送するように設定されている。
  • システムは、次のような 2MB を超えるメッセージのブロックを Loki に送信する。以下に例を示します。

    "values":[["1630410392689800468","{\"kind\":\"Event\",\"apiVersion\":\
    .......
    ......
    ......
    ......
    \"received_at\":\"2021-08-31T11:46:32.800278+00:00\",\"version\":\"1.7.4 1.6.0\"}},\"@timestamp\":\"2021-08-31T11:46:32.799692+00:00\",\"viaq_index_name\":\"audit-write\",\"viaq_msg_id\":\"MzFjYjJkZjItNjY0MC00YWU4LWIwMTEtNGNmM2E5ZmViMGU4\",\"log_type\":\"audit\"}"]]}]}
    Copy to Clipboard Toggle word wrap
  • oc logs -n openshift-logging -l component=collector と入力すると、クラスター内のコレクターログに、次のいずれかのエラーメッセージを含む行が表示されます。

    429 Too Many Requests Ingestion rate limit exceeded
    Copy to Clipboard Toggle word wrap

    Vector エラーメッセージの例

    2023-08-25T16:08:49.301780Z  WARN sink{component_kind="sink" component_id=default_loki_infra component_type=loki component_name=default_loki_infra}: vector::sinks::util::retries: Retrying after error. error=Server responded with an error: 429 Too Many Requests internal_log_rate_limit=true
    Copy to Clipboard Toggle word wrap

    このエラーは受信側にも表示されます。たとえば、LokiStack 取り込み Pod で以下を行います。

    Loki 取り込みエラーメッセージの例

    level=warn ts=2023-08-30T14:57:34.155592243Z caller=grpc_logging.go:43 duration=1.434942ms method=/logproto.Pusher/Push err="rpc error: code = Code(429) desc = entry with timestamp 2023-08-30 14:57:32.012778399 +0000 UTC ignored, reason: 'Per stream rate limit exceeded (limit: 3MB/sec) while attempting to ingest for stream
    Copy to Clipboard Toggle word wrap

手順

  • LokiStack CR の ingestionBurstSize および ingestionRate フィールドを更新します。

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki
      namespace: openshift-logging
    spec:
      limits:
        global:
          ingestion:
            ingestionBurstSize: 16 
    1
    
            ingestionRate: 8 
    2
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    ingestionBurstSize フィールドは、ディストリビューターレプリカごとに最大ローカルレート制限サンプルサイズを MB 単位で定義します。この値はハードリミットです。この値を、少なくとも 1 つのプッシュリクエストで想定される最大ログサイズに設定します。ingestionBurstSize 値より大きい単一リクエストは使用できません。
    2
    ingestionRate フィールドは、1 秒あたりに取り込まれるサンプルの最大量 (MB 単位) に対するソフト制限です。ログのレートが制限を超えているにもかかわらず、コレクターがログの送信を再試行すると、レート制限エラーが発生します。合計平均が制限よりも少ない場合に限り、システムは回復し、ユーザーの介入なしでエラーが解決されます。

3.5. Loki での OTLP データ取り込み

Logging 6.1 では、OpenTelemetry Protocol (OTLP) を使用して、API エンドポイントを使用できます。OTLP は Loki 専用に設計されたものではない標準化された形式です。そのため、OpenTelemetry のデータ形式を Loki のデータモデルにマッピングするには、追加の Loki 設定が必要です。OTLP には、ストリームラベル構造化メタデータ などの概念がありません。代わりに、OTLP はログエントリーに関するメタデータを、次の 3 つのカテゴリーにグループ化された 属性 として提供します。

  • リソース
  • スコープ
  • ログ

必要に応じて、複数のエントリーのメタデータを同時に、または個別に設定できます。

3.5.1. OTLP データ取り込み用の LokiStack 設定

重要

OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

OTLP 取り込み用に LokiStack カスタムリソース (CR) を設定するには、次の手順に従います。

前提条件

  • Loki セットアップが、OTLP ログの取り込みを有効にするためにスキーマバージョン 13 で導入された構造化メタデータをサポートしていることを確認します。

手順

  1. スキーマバージョンを設定します。

    • 新しい LokiStack CR を作成する場合は、ストレージスキーマ設定で version: v13 を設定します。

      注記

      既存の設定の場合は、version: v13 と現在より後の effectiveDate を持つ新しいスキーマエントリーを追加します。スキーマバージョンの更新の詳細は、Upgrading Schemas (Grafana ドキュメント) を参照してください。

  2. ストレージスキーマを次のように設定します。

    ストレージスキーマの設定例

    # ...
    spec:
      storage:
        schemas:
        - version: v13
          effectiveDate: 2024-10-25
    Copy to Clipboard Toggle word wrap

    effectiveDate を過ぎると v13 スキーマが有効になり、LokiStack は構造化メタデータを保存できるようになります。

3.5.2. 属性マッピング

Loki Operator を openshift-logging モードに設定すると、Loki Operator がデフォルトの属性マッピングのセットを自動的に適用します。このマッピングは、特定の OTLP 属性を、Loki のストリームラベルおよび構造化メタデータに対応付けるものです。

一般的なセットアップでは、このようなデフォルトのマッピングで十分です。ただし、次の場合には属性マッピングをカスタマイズする必要があることもあります。

  • カスタムコレクターを使用する場合: セットアップに追加の属性を生成するカスタムコレクターが含まれている場合は、これらの属性を Loki に保持するためにマッピングをカスタマイズすることを検討してください。
  • 属性の詳細レベルを調整する場合: デフォルトの属性セットが必要以上に詳細な場合は、必須の属性のみに減らすことができます。そうすることで、過剰なデータ保存を回避し、ロギングプロセスを合理化できます。
重要

ストリームラベルと構造化メタデータのいずれにもマッピングされていない属性は、Loki に保存されません。

3.5.2.1. OpenShift のカスタム属性マッピング

Loki Operator を openshift-logging モードで使用する場合、属性マッピングは OpenShift のデフォルト値に従います。ただし、カスタムマッピングを設定すると、デフォルト値を調整できます。openshift-logging モードでは、必要に応じて、カスタム属性マッピングをすべてのテナントに対してグローバルに設定することも、個々のテナントに対して設定することもできます。カスタムマッピングを定義すると、そのカスタムマッピングが OpenShift のデフォルト値に追加されます。デフォルトのラベルが必要ない場合は、テナント設定で無効にできます。

注記

Loki Operator と Loki の主な違いは、継承の処理にあります。Loki はデフォルトで default_resource_attributes_as_index_labels のみをテナントにコピーします。Loki Operator は openshift-logging モードで各テナントにグローバル設定全体を適用します。

LokiStack 内では、属性マッピング設定は limits 設定を通じて管理されます。次の LokiStack 設定の例を参照してください。

# ...
spec:
  limits:
    global:
      otlp: {} 
1

    tenants:
      application:
        otlp: {} 
2
Copy to Clipboard Toggle word wrap
1
グローバルの OTLP 属性設定を定義します。
2
openshift-logging モード内の application テナントの OTLP 属性設定。
注記

グローバルおよびテナントごとの OTLP 設定の両方で、属性をストリームラベルまたは構造化メタデータにマッピングできます。ログエントリーを Loki ストレージに保存するには、少なくとも 1 つのストリームラベルが必要です。設定がその要件を満たしていることを確認してください。

ストリームラベルはリソースレベルの属性からのみ導出され、LokiStack リソース構造はそれを反映します。

spec:
  limits:
    global:
      otlp:
        streamLabels:
          resourceAttributes:
          - name: "k8s.namespace.name"
          - name: "k8s.pod.name"
          - name: "k8s.container.name"
Copy to Clipboard Toggle word wrap

対照的に、構造化メタデータはリソース、スコープ、またはログレベルの属性から生成できます。

# ...
spec:
  limits:
    global:
      otlp:
        streamLabels:
# ...
        structuredMetadata:
          resourceAttributes:
          - name: "process.command_line"
          - name: "k8s\\.pod\\.labels\\..+"
            regex: true
          scopeAttributes:
          - name: "service.name"
          logAttributes:
          - name: "http.route"
Copy to Clipboard Toggle word wrap
ヒント

Loki で類似の属性をマッピングする場合は、、属性名に regex: true を設定して正規表現を使用します。

重要

データ量が増加する可能性があるため、ストリームラベルに正規表現を使用することは避けてください。

3.5.2.2. OpenShift のデフォルトのカスタマイズ

openshift-logging モードでは、特定の属性が必須であり、OpenShift 機能でのロールのため、設定から削除できません。推奨 のラベルが付いているその他の属性は、パフォーマンスに影響がある場合は無効化されている可能性があります。

カスタム属性なしで openshift-logging モードを使用すると、即座に OpenShift ツールとの互換性が確保されます。ストリームラベルまたは構造化メタデータとして追加の属性が必要な場合は、カスタム設定を使用します。カスタム設定はデフォルト設定とマージできます。

3.6. OpenTelemetry データモデル

このドキュメントでは、Logging 6.1 における Red Hat OpenShift Logging の OpenTelemetry サポートのプロトコルおよびセマンティック規約について概説します。

重要

OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

3.6.1. 転送および取り込みプロトコル

Red Hat OpenShift Logging は、OTLP 仕様 を使用してログを収集し、OpenTelemetry エンドポイントに転送します。OTLP はテレメトリーデータをエンコード、転送、配信します。ログストリームを取り込むための OTLP エンドポイントを提供する Loki ストレージをデプロイすることもできます。このドキュメントでは、さまざまな OpenShift クラスターソースから収集されたログのセマンティック規約を定義します。

3.6.2. セマンティック規約

このソリューションのログコレクターは、次のログストリームを収集します。

  • コンテナーログ
  • クラスターノードジャーナルログ
  • クラスターノード監査ログ
  • Kubernetes および OpenShift API サーバーログ
  • OpenShift Virtual Network (OVN) ログ

これらのストリームは、OpenTelemetry セマンティック属性によって定義されたセマンティック規約に従って転送できます。OpenTelemetry のセマンティック規約では、リソースを属性によって識別される、テレメトリーを生成するエンティティーのイミュータブルな表現と定義しています。たとえばコンテナー内で実行されているプロセスには、container_namecluster_idpod_namenamespace などの属性が含まれ、場合によっては deployment または app_name も含まれます。これらの属性はリソースオブジェクトの下にグループ化されており、繰り返しを減らし、テレメトリーデータとしてのログ送信を最適化するのに役立ちます。

ログには、リソース属性に加え、計装ライブラリーに固有のスコープ属性と、各ログエントリーに固有のログ属性も含まれる場合があります。これらの属性は、各ログエントリーに関するより詳細な情報を提供し、ストレージ内のログをクエリーする際のフィルタリング機能を強化します。

次のセクションでは、一般的に転送される属性を定義しています。

3.6.2.1. ログエントリー構造

すべてのログストリームには、次の ログデータ フィールドが含まれます。

適用可能ソース 列は、各フィールドに適用するログソースを示しています。

  • all: このフィールドは、すべてのログに存在します。
  • container: このフィールドは、アプリケーションとインフラストラクチャーの両方の Kubernetes コンテナーログに存在します。
  • audit: このフィールドは、Kubernetes ログ、OpenShift API ログ、OVN ログに存在します。
  • auditd: このフィールドは、ノード監査ログに存在します。
  • journal: このフィールドは、ノードジャーナルログに存在します。
Expand
名前適用可能ソースコメント

body

all

 

observedTimeUnixNano

all

 

timeUnixNano

all

 

severityText

container、journal

 

attributes

all

(オプション) ストリーム固有の属性を転送する場合に存在します

3.6.2.2. 属性

次の表に示すとおり、ログエントリーにはソースに基づくリソース属性、スコープ属性、ログ属性のセットが含まれます。

ロケーション 列は属性のタイプを示しています。

  • resource: リソース属性を示します
  • scope: スコープ属性を示します
  • log: ログ属性を示します

ストレージ 列は、属性がデフォルトの openshift-logging モードを使用して LokiStack に保存されているか、および保存場所を示しています。

  • stream label:

    • 特定のラベルに基づく効率的なフィルタリングとクエリーを可能にします。
    • Loki Operator が設定でこの属性を強制する場合は、required としてラベル付けできます。
  • structured metadata:

    • キーと値のペアの詳細なフィルタリングと保存を可能にします。
    • JSON 解析を使用することなく、合理化されたクエリーに直接ラベルを使用できるようになります。

OTLP を使用すると、ユーザーは JSON 解析を使用するのではなく、ラベルで直接クエリーをフィルタリングできるため、クエリーの速度と効率が向上します。

Expand
名前Location適用可能ソースストレージ (LokiStack)コメント

log_source

resource

all

required stream label

(非推奨) 互換性属性。openshift.log.source と同じ情報が含まれます。

log_type

resource

all

required stream label

(非推奨) 互換性属性。openshift.log.type と同じ情報が含まれます。

kubernetes.container_name

resource

container

stream label

(非推奨) 互換性属性。k8s.container.name と同じ情報が含まれます。

kubernetes.host

resource

all

stream label

(非推奨) 互換性属性。k8s.node.name と同じ情報が含まれます。

kubernetes.namespace_name

resource

container

required stream label

(非推奨) 互換性属性。k8s.namespace.name と同じ情報が含まれます。

kubernetes.pod_name

resource

container

stream label

(非推奨) 互換性属性。k8s.pod.name と同じ情報が含まれます。

openshift.cluster_id

resource

all

 

(非推奨) 互換性属性。openshift.cluster.uid と同じ情報が含まれます。

level

log

container、journal

 

(非推奨) 互換性属性。severityText と同じ情報が含まれます。

openshift.cluster.uid

resource

all

required stream label

 

openshift.log.source

resource

all

required stream label

 

openshift.log.type

resource

all

required stream label

 

openshift.labels.*

resource

all

structured metadata

 

k8s.node.name

resource

all

stream label

 

k8s.namespace.name

resource

container

required stream label

 

k8s.container.name

resource

container

stream label

 

k8s.pod.labels.*

resource

container

structured metadata

 

k8s.pod.name

resource

container

stream label

 

k8s.pod.uid

resource

container

structured metadata

 

k8s.cronjob.name

resource

container

stream label

Pod 作成者に基づき条件付きで転送されます

k8s.daemonset.name

resource

container

stream label

Pod 作成者に基づき条件付きで転送されます

k8s.deployment.name

resource

container

stream label

Pod 作成者に基づき条件付きで転送されます

k8s.job.name

resource

container

stream label

Pod 作成者に基づき条件付きで転送されます

k8s.replicaset.name

resource

container

structured metadata

Pod 作成者に基づき条件付きで転送されます

k8s.statefulset.name

resource

container

stream label

Pod 作成者に基づき条件付きで転送されます

log.iostream

log

container

structured metadata

 

k8s.audit.event.level

log

audit

structured metadata

 

k8s.audit.event.stage

log

audit

structured metadata

 

k8s.audit.event.user_agent

log

audit

structured metadata

 

k8s.audit.event.request.uri

log

audit

structured metadata

 

k8s.audit.event.response.code

log

audit

structured metadata

 

k8s.audit.event.annotation.*

log

audit

structured metadata

 

k8s.audit.event.object_ref.resource

log

audit

structured metadata

 

k8s.audit.event.object_ref.name

log

audit

structured metadata

 

k8s.audit.event.object_ref.namespace

log

audit

structured metadata

 

k8s.audit.event.object_ref.api_group

log

audit

structured metadata

 

k8s.audit.event.object_ref.api_version

log

audit

structured metadata

 

k8s.user.username

log

audit

structured metadata

 

k8s.user.groups

log

audit

structured metadata

 

process.executable.name

resource

journal

structured metadata

 

process.executable.path

resource

journal

structured metadata

 

process.command_line

resource

journal

structured metadata

 

process.pid

resource

journal

structured metadata

 

service.name

resource

journal

stream label

 

systemd.t.*

log

journal

structured metadata

 

systemd.u.*

log

journal

structured metadata

 
注記

互換性属性 としてマークされた属性は、ViaQ データモデルとの最小限の下位互換性をサポートします。これらは非推奨の属性であり、UI 機能の継続を保証するための互換性レイヤーとして機能します。これらの属性は、Logging UI が今後のリリースにおける OpenTelemetry 対応機能を完全にサポートするまで引き続きサポートされます。

Loki は、ストレージへの保存時に属性名を変更します。名前は小文字になり、セット内のすべての文字 (./-) はアンダースコア (_) に置き換えられます。たとえば、k8s.namespace.namek8s_namespace_name になります。

3.7. ロギングの可視化

ロギングの可視化は、Cluster Observability Operator の Logging UI プラグインをデプロイすることで提供されます。そのためには Operator のインストールが必要です。

重要

現在は テクノロジープレビュー (TP) 機能である Cluster Observability Operator (COO) の一般提供 (GA) リリースが近づくまで、Red Hat は、Red Hat OpenShift Service on AWS 4.14 以降の Logging UI プラグインの COO で Logging 6.0 以降を使用しているお客様にサポートを提供します。COO にはいくつかの独立した機能が含まれており、その一部はまだテクノロジープレビュー機能であるため、このサポート例外は一時的なものです。ただし、Logging UI プラグインは GA の準備が完了しています。

第4章 Logging 6.0

4.1. Logging 6.0.0

このリリースには、Logging for Red Hat OpenShift バグ修正リリース 6.0.0 が含まれています。

注記

ロギングは、コアの Red Hat OpenShift Service on AWS とは異なるリリースサイクルで、インストール可能なコンポーネントとして提供されます。Red Hat OpenShift Container Platform ライフサイクルポリシー は、リリースの互換性を概説しています。

Expand
表4.1 アップストリームコンポーネントのバージョン
Logging バージョンコンポーネントのバージョン

Operator

eventrouter

logfilemetricexporter

loki

lokistack-gateway

opa-openshift

vector

6.0

0.4

1.1

3.1.0

0.1

0.1

0.37.1

4.1.1. 削除通知

  • このリリースにより、ロギングは ClusterLogging.logging.openshift.io および ClusterLogForwarder.logging.openshift.io カスタムリソースをサポートしなくなりました。代替の機能に関する詳細は、製品ドキュメントを参照してください。(LOG-5803)
  • このリリースにより、ロギングでは、ログストレージ (Elasticsearch など)、視覚化 (Kibana など)、または Fluentd ベースのログコレクターが管理またはデプロイされなくなりました。(LOG-5368)
注記

elasticsearch-operator によって管理される Elasticsearch と Kibana を引き続き使用するには、管理者は ClusterLogging リソースを削除する前に、それらのオブジェクトの ownerRefs を変更する必要があります。

4.1.2. 新機能および機能拡張

  • この機能は、ストレージ、視覚化、収集などのコンポーネントの役割を関連する各 Operator に移すことで、Red Hat OpenShift のロギング用の新しいアーキテクチャーを導入します。ログの収集および転送用の ClusterLogForwarder.observability.openshift.io API を導入します。ClusterLogging.logging.openshift.io および ClusterLogForwarder.logging.openshift.io API のサポートと、Red Hat Managed Elastic スタック (Elasticsearch および Kibana) のサポートが削除されました。ログの保存には Red Hat LokiStack への移行が推奨されます。既存の Managed Elasticsearch デプロイメントは、限られた期間使用できます。ログ収集の自動移行は提供されていないため、管理者は新しい ClusterLogForwarder.observability.openshift.io 仕様を作成して、以前のカスタムリソースを置き換える必要があります。詳細は、公式の製品ドキュメントを参照してください。(LOG-3493)
  • このリリースでは、ロギングビュープラグインをデプロイする役割が Red Hat OpenShift Logging Operator から Cluster Observability Operator (COO) に移動します。視覚化が必要な新しいログストレージのインストールでは、Cluster Observability Operator と関連する UIPlugin リソースをデプロイする必要があります。詳細は、ロギングの可視化 を参照してください。(LOG-5461)

    重要

    現在は テクノロジープレビュー (TP) 機能である Cluster Observability Operator (COO) の一般提供 (GA) リリースが近づくまで、Red Hat は、Red Hat OpenShift Service on AWS 4.14 以降の Logging UI プラグインの COO で Logging 6.0 以降を使用しているお客様にサポートを提供します。COO にはいくつかの独立した機能が含まれており、その一部はまだテクノロジープレビュー機能であるため、このサポート例外は一時的なものです。ただし、Logging UI プラグインは GA の準備が完了しています。

  • この機能拡張により、Vector ドキュメントの推奨事項に基づいて、Vector コレクターのデプロイメントのメモリーと CPU 使用量のデフォルトの要求と制限が設定されます。(LOG-4745)
  • この機能拡張により、アップストリームバージョン v0.37.1 に合わせて Vector が更新されます。(LOG-5296)
  • この機能拡張により、ログコレクターがログをノードのファイルシステムにバッファーし、利用可能な領域の 15% 超を使用する場合にトリガーするアラートが導入され、バックプレッシャーの問題の可能性を示すようになりました。(LOG-5381)
  • この機能拡張により、すべてのコンポーネントのセレクターが更新され、共通の Kubernetes ラベルが使用されます。(LOG-5906)
  • この機能拡張により、コレクター設定がシークレットではなく ConfigMap としてデプロイされるように変更され、ClusterLogForwarder が Unmanaged に設定されている場合にユーザーが設定を表示および編集できるようになります。(LOG-5599)
  • この機能拡張により、trace、debug、info、warn、error、または off などのオプションと共に、ClusterLogForwarder のアノテーションを使用して Vector コレクターログレベルを設定する機能が追加されました。(LOG-5372)
  • この機能拡張により、Amazon CloudWatch 出力で複数の AWS ロールが使用される設定を拒否するための検証が追加され、誤ったログルーティングが防止されます。(LOG-5640)
  • この機能拡張により、メトリクスダッシュボードから Log Bytes Collected および Log Bytes Sent グラフが削除されます。(LOG-5964)
  • この機能拡張により、must-gather 機能が更新され、ClusterLogForwarder.observability.openshift.io リソースから Red Hat Managed LokiStack など、Logging 6.0 コンポーネントを検査するための情報のみがキャプチャーされるようになりました。(LOG-5949)
  • この機能拡張により、特定のエラー状態に対する早期警告が提供され、Azure ストレージシークレットの検証が改善されます。(LOG-4571)

4.1.3. テクノロジープレビュー機能

  • このリリースでは、OpenTelemetry を使用したログ転送のテクノロジープレビュー機能が導入されています。新しい出力タイプ `OTLP` を使用すると、OpenTelemetry データモデルとリソースのセマンティック規則を使用して、JSON でエンコードされたログレコードを送信できます。(LOG-4225)

4.1.4. バグ修正

  • この更新前は、CollectorHighErrorRate および CollectorVeryHighErrorRate アラートがまだ存在していました。この更新により、両方のアラートが logging 6.0 リリースで削除されましたが、今後のリリースで復活する可能性はあります。(LOG-3432)

4.1.5. CVE

4.2. Logging 6.0

ClusterLogForwarder カスタムリソース (CR) は、ログの収集と転送の中心的な設定ポイントです。

4.2.1. 入力および出力

入力では、転送するログのソースを指定します。Logging には、クラスターのさまざまな部分からログを選択する次の組み込みの入力タイプが用意されています。

  • application
  • receiver
  • infrastructure
  • audit

namespace または Pod ラベルに基づいてカスタム入力を定義し、ログの選択を微調整することもできます。

出力は、ログが送信される宛先を定義します。各出力タイプには独自の設定オプションセットがあり、動作と認証設定をカスタマイズできます。

4.2.2. レシーバー入力タイプ

レシーバー入力タイプにより、Logging システムは外部ソースからのログを受け入れることができます。ログを受信するための 2 つの形式 (httpsyslog) がサポートされます。

ReceiverSpec フィールドでレシーバー入力の設定を定義します。

4.2.3. パイプラインとフィルター

パイプラインは、入力から出力へのログのフローを決定します。パイプラインは、1 つ以上の入力参照、出力参照、およびオプションのフィルター参照で構成されます。フィルターを使用すると、パイプライン内のログメッセージを変換または削除できます。フィルターは順番に適用されるため、フィルターの順序は重要であり、最初の方のフィルターを使用すると、ログメッセージが後のステージに到達するのを防ぐことができます。

4.2.4. Operator の行動

Cluster Logging Operator は、managementState フィールドに基づいて、コレクターのデプロイメントと設定を管理します。

  • Managed (デフォルト) に設定すると、仕様で定義された設定に合わせて、Operator がロギングリソースをアクティブに管理します。
  • Unmanaged に設定すると、Operator はアクションを実行せず、ロギングコンポーネントを手動で管理できます。

4.2.5. 検証

ロギングには、スムーズでエラーのない設定エクスペリエンスを確保するために、広範な検証ルールやデフォルト値が含まれます。ClusterLogForwarder リソースは、必須フィールド、フィールド間の依存関係、および入力値の形式の検証チェックを強制します。特定のフィールドにはデフォルト値が提供されるため、一般的なシナリオで明示的な設定を行う必要性が軽減されます。

4.2.6. クイックスタート

前提条件

  • cluster-admin 権限で Red Hat OpenShift Service on AWS クラスターにアクセスできる。
  • OpenShift CLI (oc) がインストールされている。
  • サポートされているオブジェクトストアにアクセスできる。たとえば、AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation などです。

手順

  1. OperatorHub から Red Hat OpenShift Logging OperatorLoki Operator、および Cluster Observability Operator (COO) をインストールします。
  2. 既存のオブジェクトストレージバケットにアクセスするためのシークレットを作成します。

    AWS のコマンド例

    $ oc create secret generic logging-loki-s3 \
      --from-literal=bucketnames="<bucket_name>" \
      --from-literal=endpoint="<aws_bucket_endpoint>" \
      --from-literal=access_key_id="<aws_access_key_id>" \
      --from-literal=access_key_secret="<aws_access_key_secret>" \
      --from-literal=region="<aws_region_of_your_bucket>" \
      -n openshift-logging
    Copy to Clipboard Toggle word wrap

  3. openshift-logging namespace に LokiStack カスタムリソース (CR) を作成します。

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki
      namespace: openshift-logging
    spec:
      managementState: Managed
      size: 1x.extra-small
      storage:
        schemas:
        - effectiveDate: '2022-06-01'
          version: v13
        secret:
          name: logging-loki-s3
          type: s3
      storageClassName: gp3-csi
      tenants:
        mode: openshift-logging
    Copy to Clipboard Toggle word wrap
  4. コレクターのサービスアカウントを作成します。

    $ oc create sa collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
  5. ClusterRole をサービスアカウントにバインドします。

    $ oc adm policy add-cluster-role-to-user logging-collector-logs-writer -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
  6. Observe タブの Log セクションを有効にするには、UIPlugin を作成します。

    apiVersion: observability.openshift.io/v1alpha1
    kind: UIPlugin
    metadata:
      name: logging
    spec:
      type: Logging
      logging:
        lokiStack:
          name: logging-loki
    Copy to Clipboard Toggle word wrap
  7. コレクターサービスアカウントにロールを追加します。

    $ oc adm policy add-cluster-role-to-user collect-application-logs -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    $ oc adm policy add-cluster-role-to-user collect-audit-logs -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
    $ oc adm policy add-cluster-role-to-user collect-infrastructure-logs -z collector -n openshift-logging
    Copy to Clipboard Toggle word wrap
  8. ClusterLogForwarder CR を作成して、ログ転送を設定します。

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: collector
      namespace: openshift-logging
    spec:
      serviceAccount:
        name: collector
      outputs:
      - name: default-lokistack
        type: lokiStack
        lokiStack:
          target:
            name: logging-loki
            namespace: openshift-logging
          authentication:
            token:
              from: serviceAccount
        tls:
          ca:
            key: service-ca.crt
            configMapName: openshift-service-ca.crt
      pipelines:
      - name: default-logstore
        inputRefs:
        - application
        - infrastructure
        outputRefs:
        - default-lokistack
    Copy to Clipboard Toggle word wrap

検証

  • Red Hat OpenShift Service on AWS Web コンソールの Observe タブの Log セクションにログが表示されていることを確認します。

4.3. Logging 6.0 へのアップグレード

Logging v6.0 は以前のリリースからの大幅なアップグレードであり、Cluster Logging の長年の目標のいくつかを達成しています。

  • ロギングコンポーネント (collectors、storage、visualization など) を管理するための個別の Operator の導入。
  • Elastic 製品 (Elasticsearch、Kibana など) に基づく管理ログストレージと視覚化のサポートが削除されました。
  • Fluentd ログコレクター実装の非推奨化。
  • ClusterLogging.logging.openshift.io および ClusterLogForwarder.logging.openshift.io リソースのサポートが削除されました。
注記

cluster-logging-operator は、自動アップグレードプロセスを提供しません。

ログの収集、転送、およびストレージのさまざまな設定を指定すると、cluster-logging-operator によって自動アップグレードは提供されません。このドキュメントは、管理者が既存の ClusterLogging.logging.openshift.io および ClusterLogForwarder.logging.openshift.io 仕様を新しい API に変換する際に役立ちます。一般的なユースケース向けに移行された ClusterLogForwarder.observability.openshift.io リソースの例が含まれています。

4.3.1. oc explain コマンドの使用

oc explain コマンドは、カスタムリソース (CR) 内のフィールドの詳細な説明を提供する OpenShift CLI oc の重要なツールです。このコマンドは、OpenShift クラスターのリソースを設定またはトラブルシューティングする管理者および開発者にとって非常に重要です。

4.3.1.1. リソースの説明

oc explain は、特定のオブジェクトに関連するすべてのフィールドの詳細な説明を提供します。これには、Pod やサービスなどの標準リソースだけでなく、ステートフルセットや Operator によって定義されたカスタムリソースなどのより複雑なエンティティーも含まれます。

ClusterLogForwarder カスタムリソースの outputs フィールドのドキュメントを表示するには、以下を使用します。

$ oc explain clusterlogforwarders.observability.openshift.io.spec.outputs
Copy to Clipboard Toggle word wrap
注記

clusterlogforwarder の代わりに、短い形式の obsclf を使用できます。

これにより、これらのフィールドの詳細情報 (タイプ、デフォルト値、関連するサブフィールドなど) が表示されます。

4.3.1.2. 階層構造

このコマンドは、リソースフィールドの構造を階層形式で表示し、さまざまな設定オプション間の関係を明確にします。

たとえば、LokiStack カスタムリソースの storage 設定をドリルダウンする方法を次に示します。

$ oc explain lokistacks.loki.grafana.com
$ oc explain lokistacks.loki.grafana.com.spec
$ oc explain lokistacks.loki.grafana.com.spec.storage
$ oc explain lokistacks.loki.grafana.com.spec.storage.schemas
Copy to Clipboard Toggle word wrap

各コマンドは、リソース仕様のより深いレベルを表示し、構造を明確にします。

4.3.1.3. タイプ情報

oc explain は、各フィールドのタイプ (文字列、整数、ブール値など) も示すため、リソース定義で正しいデータタイプが使用されていることを確認できます。

以下に例を示します。

$ oc explain lokistacks.loki.grafana.com.spec.size
Copy to Clipboard Toggle word wrap

これは、整数値を使用して size を定義する必要があることを示しています。

4.3.1.4. デフォルト値

該当する場合は、コマンドはフィールドのデフォルト値を表示し、明示的に指定されていない場合に使用される値に関する洞察を提供します。

ここでも、例として lokistacks.loki.grafana.com を使用します。

$ oc explain lokistacks.spec.template.distributor.replicas
Copy to Clipboard Toggle word wrap

出力例

GROUP:      loki.grafana.com
KIND:       LokiStack
VERSION:    v1

FIELD: replicas <integer>

DESCRIPTION:
    Replicas defines the number of replica pods of the component.
Copy to Clipboard Toggle word wrap

4.3.2. ログのストレージ

このリリースで利用できる唯一のマネージドログストレージソリューションは、loki-operator によって管理される Lokistack です。以前は Managed Elasticsearch オファリングの優先される代替手段として利用可能だったこのソリューションは、デプロイメントプロセスで変更されないままとなります。

重要

elasticsearch-operator によって提供される既存の Red Hat Managed Elasticsearch または Kibana デプロイメントを引き続き使用するには、openshift-logging namespace の elasticsearch という名前の Elasticsearch リソースと kibana という名前の Kibana リソースから所有者参照を削除してから、同じ namespace の instance という名前の ClusterLogging リソースを削除します。

  1. ClusterLogging を一時的に Unmanaged 状態に設定します。

    $ oc -n openshift-logging patch clusterlogging/instance -p '{"spec":{"managementState": "Unmanaged"}}' --type=merge
    Copy to Clipboard Toggle word wrap
  2. Elasticsearch リソースから ClusterLogging ownerReferences を削除します。

    次のコマンドは、ClusterLoggingElasticsearch リソースを所有していないことを確認します。ClusterLogging リソースの logStore フィールドが更新されても、Elasticsearch リソースには影響しなくなります。

    $ oc -n openshift-logging patch elasticsearch/elasticsearch -p '{"metadata":{"ownerReferences": []}}' --type=merge
    Copy to Clipboard Toggle word wrap
  3. Kibana リソースから ClusterLogging ownerReferences を削除します。

    次のコマンドは、ClusterLoggingKibana リソースを所有していないことを確認します。ClusterLogging リソースの visualization フィールドが更新されても、Kibana リソースには影響しなくなります。

    $ oc -n openshift-logging patch kibana/kibana -p '{"metadata":{"ownerReferences": []}}' --type=merge
    Copy to Clipboard Toggle word wrap
  4. ClusterLoggingManaged に設定します。

    $ oc -n openshift-logging patch clusterlogging/instance -p '{"spec":{"managementState": "Managed"}}' --type=merge
    Copy to Clipboard Toggle word wrap

4.3.3. ログの視覚化

ログ視覚化用の OpenShift コンソール UI プラグインは、cluster-logging-operator から cluster-observability-operator に移動されました。

4.3.4. ログの収集および転送

ログ収集と転送の設定は、observability.openshift.io API グループの一部である新しい API で指定されるようになりました。次のセクションでは、古い API リソースとの違いを説明します。

注記

Vector は唯一のサポートされているコレクター実装です。

4.3.5. 管理、リソース割り当て、ワークロードのスケジュール

管理状態 (マネージド、マネージド以外など)、リソース要求と制限、toleration、およびノード選択の設定が、新しい ClusterLogForwarder API の一部になりました。

以前の設定

apiVersion: "logging.openshift.io/v1"
kind: "ClusterLogging"
spec:
  managementState: "Managed"
  collection:
    resources:
      limits: {}
      requests: {}
    nodeSelector: {}
    tolerations: {}
Copy to Clipboard Toggle word wrap

現在の設定

apiVersion: "observability.openshift.io/v1"
kind: ClusterLogForwarder
spec:
  managementState: Managed
  collector:
    resources:
      limits: {}
      requests: {}
    nodeSelector: {}
    tolerations: {}
Copy to Clipboard Toggle word wrap

4.3.6. 入力仕様

入力仕様は、ClusterLogForwarder 仕様のオプション部分です。管理者は引き続き、applicationinfrastructureaudit の定義済み値を使用して、これらのソースを収集できます。

4.3.6.1. アプリケーション入力

namespace とコンテナーの包含と除外が 1 つのフィールドに統合されました。

5.9 namespace とコンテナーの包含と除外を含むアプリケーション入力

apiVersion: "logging.openshift.io/v1"
kind: ClusterLogForwarder
spec:
  inputs:
   - name: application-logs
     type: application
     application:
       namespaces:
       - foo
       - bar
       includes:
       - namespace: my-important
         container: main
       excludes:
       - container: too-verbose
Copy to Clipboard Toggle word wrap

6.0 namespace とコンテナーの包含と除外を含むアプリケーション入力

apiVersion: "observability.openshift.io/v1"
kind: ClusterLogForwarder
spec:
  inputs:
   - name: application-logs
     type: application
     application:
       includes:
       - namespace: foo
       - namespace: bar
       - namespace: my-important
         container: main
       excludes:
       - container: too-verbose
Copy to Clipboard Toggle word wrap

注記

applicationinfrastructureaudit は予約語であり、入力を定義する際は名前として使用できません。

4.3.6.2. Input Receiver

Input Receiver への変更は次のとおりです。

  • レシーバーレベルでのタイプの明示的な設定。
  • ポート設定がレシーバーレベルに移動されました。

5.9 Input Receiver

apiVersion: "logging.openshift.io/v1"
kind: ClusterLogForwarder
spec:
  inputs:
  - name: an-http
    receiver:
      http:
        port: 8443
        format: kubeAPIAudit
  - name: a-syslog
    receiver:
      type: syslog
      syslog:
        port: 9442
Copy to Clipboard Toggle word wrap

6.0 Input Receiver

apiVersion: "observability.openshift.io/v1"
kind: ClusterLogForwarder
spec:
  inputs:
  - name: an-http
    type: receiver
    receiver:
      type: http
      port: 8443
      http:
        format: kubeAPIAudit
  - name: a-syslog
    type: receiver
    receiver:
      type: syslog
      port: 9442
Copy to Clipboard Toggle word wrap

4.3.7. 出力仕様

出力仕様に対する高レベルの変更には以下が含まれます。

  • URL 設定が各出力タイプの仕様に移動されました。
  • チューニングパラメーターが各出力タイプの仕様に移動されました。
  • TLS 設定と認証の分離。
  • TLS および認証用のキーとシークレット/configmap の明示的な設定。

4.3.8. シークレットと TLS 設定

シークレットと TLS 設定は、各出力の認証と TLS 設定に分離されました。管理者が認識されたキーを使用してシークレットを定義するのではなく、仕様で明示的に定義する必要があります。TLS と認可設定をアップグレードするには、管理者は既存のシークレットを引き続き使用するために、以前に認識されたキーを理解する必要があります。次のセクションの例では、ClusterLogForwarder シークレットを設定して、既存の Red Hat 管理のログストレージソリューションに転送する方法を詳しく説明します。

4.3.9. Red Hat Managed Elasticsearch

v5.9 Red Hat Managed Elasticsearch への転送

apiVersion: logging.openshift.io/v1
kind: ClusterLogging
metadata:
  name: instance
  namespace: openshift-logging
spec:
  logStore:
    type: elasticsearch
Copy to Clipboard Toggle word wrap

v6.0 Red Hat Managed Elasticsearch への転送

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: instance
  namespace: openshift-logging
spec:
  serviceAccount:
    name: <service_account_name>
  managementState: Managed
  outputs:
  - name: audit-elasticsearch
    type: elasticsearch
    elasticsearch:
      url: https://elasticsearch:9200
      version: 6
      index: audit-write
    tls:
      ca:
        key: ca-bundle.crt
        secretName: collector
      certificate:
        key: tls.crt
        secretName: collector
      key:
        key: tls.key
        secretName: collector
  - name: app-elasticsearch
    type: elasticsearch
    elasticsearch:
      url: https://elasticsearch:9200
      version: 6
      index: app-write
    tls:
      ca:
        key: ca-bundle.crt
        secretName: collector
      certificate:
        key: tls.crt
        secretName: collector
      key:
        key: tls.key
        secretName: collector
  - name: infra-elasticsearch
    type: elasticsearch
    elasticsearch:
      url: https://elasticsearch:9200
      version: 6
      index: infra-write
    tls:
      ca:
        key: ca-bundle.crt
        secretName: collector
      certificate:
        key: tls.crt
        secretName: collector
      key:
        key: tls.key
        secretName: collector
  pipelines:
  - name: app
    inputRefs:
    - application
    outputRefs:
    - app-elasticsearch
  - name: audit
    inputRefs:
    - audit
    outputRefs:
    - audit-elasticsearch
  - name: infra
    inputRefs:
    - infrastructure
    outputRefs:
    - infra-elasticsearch
Copy to Clipboard Toggle word wrap

4.3.10. Red Hat Managed LokiStack

v5.9 Red Hat Managed LokiStack への転送

apiVersion: logging.openshift.io/v1
kind: ClusterLogging
metadata:
  name: instance
  namespace: openshift-logging
spec:
  logStore:
    type: lokistack
    lokistack:
      name: lokistack-dev
Copy to Clipboard Toggle word wrap

v6.0 Red Hat Managed LokiStack への転送

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: instance
  namespace: openshift-logging
spec:
  serviceAccount:
    name: <service_account_name>
  outputs:
  - name: default-lokistack
    type: lokiStack
    lokiStack:
      target:
        name: lokistack-dev
        namespace: openshift-logging
      authentication:
        token:
          from: serviceAccount
    tls:
      ca:
        key: service-ca.crt
        configMapName: openshift-service-ca.crt
  pipelines:
  - outputRefs:
    - default-lokistack
  - inputRefs:
    - application
    - infrastructure
Copy to Clipboard Toggle word wrap

4.3.11. フィルターとパイプラインの設定

パイプライン設定では、入力ソースから出力先へのルーティングのみが定義され、必要な変換はフィルターとして個別に設定されるようになりました。以前のリリースのパイプラインのすべての属性は、このリリースではフィルターに変換されています。個々のフィルターは filters 仕様で定義され、パイプラインによって参照されます。

5.9 Filters

apiVersion: logging.openshift.io/v1
kind: ClusterLogForwarder
spec:
  pipelines:
   - name: application-logs
     parse: json
     labels:
       foo: bar
     detectMultilineErrors: true
Copy to Clipboard Toggle word wrap

6.0 Filter の設定

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
spec:
  filters:
  - name: detectexception
    type: detectMultilineException
  - name: parse-json
    type: parse
  - name: labels
    type: openshiftLabels
    openshiftLabels:
      foo: bar
  pipelines:
  - name: application-logs
    filterRefs:
    - detectexception
    - labels
    - parse-json
Copy to Clipboard Toggle word wrap

4.3.12. 検証とステータス

ほとんどの検証は、リソースが作成または更新されたときに実行され、即時のフィードバックが提供されます。これは、作成後に検証が行われ、リソースのステータスを検査する必要があった以前のリリースからの移行になります。作成時または更新時に検証できない場合は、引き続き作成後に一部の検証が行われます。

Operator がログコレクターをデプロイする前に、ClusterLogForwarder.observability.openshift.io のインスタンスが、Authorized、Valid、Ready の条件を満たしている必要があります。これらの条件の例は次のとおりです。

6.0 ステータス条件

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
status:
  conditions:
  - lastTransitionTime: "2024-09-13T03:28:44Z"
    message: 'permitted to collect log types: [application]'
    reason: ClusterRolesExist
    status: "True"
    type: observability.openshift.io/Authorized
  - lastTransitionTime: "2024-09-13T12:16:45Z"
    message: ""
    reason: ValidationSuccess
    status: "True"
    type: observability.openshift.io/Valid
  - lastTransitionTime: "2024-09-13T12:16:45Z"
    message: ""
    reason: ReconciliationComplete
    status: "True"
    type: Ready
  filterConditions:
  - lastTransitionTime: "2024-09-13T13:02:59Z"
    message: filter "detectexception" is valid
    reason: ValidationSuccess
    status: "True"
    type: observability.openshift.io/ValidFilter-detectexception
  - lastTransitionTime: "2024-09-13T13:02:59Z"
    message: filter "parse-json" is valid
    reason: ValidationSuccess
    status: "True"
    type: observability.openshift.io/ValidFilter-parse-json
  inputConditions:
  - lastTransitionTime: "2024-09-13T12:23:03Z"
    message: input "application1" is valid
    reason: ValidationSuccess
    status: "True"
    type: observability.openshift.io/ValidInput-application1
  outputConditions:
  - lastTransitionTime: "2024-09-13T13:02:59Z"
    message: output "default-lokistack-application1" is valid
    reason: ValidationSuccess
    status: "True"
    type: observability.openshift.io/ValidOutput-default-lokistack-application1
  pipelineConditions:
  - lastTransitionTime: "2024-09-13T03:28:44Z"
    message: pipeline "default-before" is valid
    reason: ValidationSuccess
    status: "True"
    type: observability.openshift.io/ValidPipeline-default-before
Copy to Clipboard Toggle word wrap

注記

条件が満たされ、適用可能な場合の "ステータス" 値は "True" になります。ステータスが "True" 以外の条件は、理由と問題を説明するメッセージを提供します。

4.4. ログ転送の設定

ClusterLogForwarder (CLF) を使用すると、ユーザーはさまざまな宛先へのログの転送を設定できます。さまざまなソースからログメッセージを選択し、それらを変換またはフィルタリングできるパイプラインを介して送信して、1 つ以上の出力に転送する柔軟な方法を提供します。

ClusterLogForwarder の主な機能

  • 入力を使用してログメッセージを選択する
  • 出力を使用してログを外部の宛先に転送する
  • フィルターを使用してログメッセージをフィルタリング、変換、および破棄する
  • 入力、フィルター、出力を接続するログ転送パイプラインを定義する

4.4.1. ログ収集のセットアップ

このリリースの Cluster Logging では、管理者が ClusterLogForwarder に関連付けられたサービスアカウントにログ収集権限を明示的に付与する必要があります。これは、ClusterLogging およびオプションで ClusterLogForwarder.logging.openshift.io リソースで構成されるレガシーロギングシナリオでは、以前のリリースでは必要ありませんでした。

Red Hat OpenShift Logging Operator は、collect-audit-logscollect-application-logscollect-infrastructure-logs クラスターロールを提供します。これにより、コレクターは監査ログ、アプリケーションログ、およびインフラストラクチャーログをそれぞれ収集できます。

必要なクラスターロールをサービスアカウントにバインドして、ログ収集をセットアップします。

4.4.1.1. レガシーサービスアカウント

既存のレガシーサービスアカウント logcollector を使用するには、次の ClusterRoleBinding を作成します。

$ oc adm policy add-cluster-role-to-user collect-application-logs system:serviceaccount:openshift-logging:logcollector
Copy to Clipboard Toggle word wrap
$ oc adm policy add-cluster-role-to-user collect-infrastructure-logs system:serviceaccount:openshift-logging:logcollector
Copy to Clipboard Toggle word wrap

さらに、監査ログを収集する場合は、次の ClusterRoleBinding を作成します。

$ oc adm policy add-cluster-role-to-user collect-audit-logs system:serviceaccount:openshift-logging:logcollector
Copy to Clipboard Toggle word wrap
4.4.1.2. サービスアカウントの作成

前提条件

  • Red Hat OpenShift Logging Operator が openshift-logging namespace にインストールされている。
  • 管理者権限がある。

手順

  1. コレクターのサービスアカウントを作成します。認証にトークンを必要とするストレージにログを書き込む場合は、サービスアカウントにトークンを含める必要があります。
  2. 適切なクラスターロールをサービスアカウントにバインドします。

    バインドコマンドの例

    $ oc adm policy add-cluster-role-to-user <cluster_role_name> system:serviceaccount:<namespace_name>:<service_account_name>
    Copy to Clipboard Toggle word wrap

4.4.1.2.1. サービスアカウントのクラスターロールバインディング

role_binding.yaml ファイルは、ClusterLogging Operator の ClusterRole を特定の ServiceAccount にバインドし、クラスター全体で Kubernetes リソースを管理できるようにします。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: manager-rolebinding
roleRef:                                           
1

  apiGroup: rbac.authorization.k8s.io              
2

  kind: ClusterRole                                
3

  name: cluster-logging-operator                   
4

subjects:                                          
5

  - kind: ServiceAccount                           
6

    name: cluster-logging-operator                 
7

    namespace: openshift-logging                   
8
Copy to Clipboard Toggle word wrap
1
roleRef: バインディングが適用される ClusterRole を参照します。
2
apiGroup: RBAC API グループを示し、ClusterRole が Kubernetes の RBAC システムの一部であることを指定します。
3
kind: 参照されるロールがクラスター全体に適用される ClusterRole であることを指定します。
4
name: ServiceAccount にバインドされる ClusterRole の名前 (ここでは cluster-logging-operator)。
5
subjects: ClusterRole から権限が付与されるエンティティー (ユーザーまたはサービスアカウント) を定義します。
6
kind: サブジェクトが ServiceAccount であることを指定します。
7
Name: 権限が付与される ServiceAccount の名前。
8
namespace: ServiceAccount が配置されている namespace を示します。
4.4.1.2.2. アプリケーションログの書き込み

write-application-logs-clusterrole.yaml ファイルは、Loki ロギングアプリケーションにアプリケーションログを書き込む権限を付与する ClusterRole を定義します。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-logging-write-application-logs
rules:                                              
1

  - apiGroups:                                      
2

      - loki.grafana.com                            
3

    resources:                                      
4

      - application                                 
5

    resourceNames:                                  
6

      - logs                                        
7

    verbs:                                          
8

      - create                                      
9
Copy to Clipboard Toggle word wrap
1
rules: この ClusterRole によって付与される権限を指定します。
2
apiGroups: Loki ロギングシステムに関連する API グループ loki.grafana.com を参照します。
3
loki.grafana.com: Loki 関連のリソースを管理するための API グループ。
4
resources: この ClusterRole がやり取りする権限を付与するリソースタイプ。
5
application: Loki ロギングシステム内のアプリケーションリソースを参照します。
6
resourceNames: このロールが管理できるリソースの名前を指定します。
7
logs: 作成できるログリソースを参照します。
8
verbs: リソースで許可されるアクション。
9
create: Loki システムに新しいログを作成する権限を付与します。
4.4.1.2.3. 監査ログの書き込み

write-audit-logs-clusterrole.yaml ファイルは、Loki ロギングシステムに監査ログを作成する権限を付与する ClusterRole を定義します。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-logging-write-audit-logs
rules:                                              
1

  - apiGroups:                                      
2

      - loki.grafana.com                            
3

    resources:                                      
4

      - audit                                       
5

    resourceNames:                                  
6

      - logs                                        
7

    verbs:                                          
8

      - create                                      
9
Copy to Clipboard Toggle word wrap
1
rules: この ClusterRole によって付与される権限を定義します。
2
apiGroups: API グループ loki.grafana.com を指定します。
3
loki.grafana.com: Loki ロギングリソースを管理する API グループ。
4
resources: このロールが管理するリソースタイプ (この場合は audit) を指します。
5
audit: ロールが Loki 内の監査ログを管理することを指定します。
6
resourceNames: ロールがアクセスできる特定のリソースを定義します。
7
logs: このロールで管理できるログを指します。
8
verbs: リソースで許可されるアクション。
9
create: 新しい監査ログを作成する権限を付与します。
4.4.1.2.4. インフラストラクチャーログの書き込み

write-infrastructure-logs-clusterrole.yaml ファイルは、Loki ロギングシステムにインフラストラクチャーログを作成する権限を付与する ClusterRole を定義します。

YAML 例

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-logging-write-infrastructure-logs
rules:                                              
1

  - apiGroups:                                      
2

      - loki.grafana.com                            
3

    resources:                                      
4

      - infrastructure                              
5

    resourceNames:                                  
6

      - logs                                        
7

    verbs:                                          
8

      - create                                      
9
Copy to Clipboard Toggle word wrap

1
ルール: この ClusterRole が付与する権限を指定します。
2
apiGroups: Loki 関連リソースの API グループを指定します。
3
loki.grafana.com: Loki ロギングシステムを管理する API グループ。
4
resources: このロールが対話できるリソースタイプを定義します。
5
infrastructure: このロールが管理するインフラストラクチャー関連のリソースを指します。
6
resourceNames: このロールが管理できるリソースの名前を指定します。
7
logs: インフラストラクチャーに関連するログリソースを指します。
8
verbs: このロールによって許可されるアクションです。
9
create: Loki システムにインフラストラクチャーログを作成する権限を付与します。
4.4.1.2.5. ClusterLogForwarder 編集者ロール

clusterlogforwarder-editor-role.yaml ファイルは、ユーザーが OpenShift で ClusterLogForwarders を管理できるようにする ClusterRole を定義します。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: clusterlogforwarder-editor-role
rules:                                              
1

  - apiGroups:                                      
2

      - observability.openshift.io                  
3

    resources:                                      
4

      - clusterlogforwarders                        
5

    verbs:                                          
6

      - create                                      
7

      - delete                                      
8

      - get                                         
9

      - list                                        
10

      - patch                                       
11

      - update                                      
12

      - watch                                       
13
Copy to Clipboard Toggle word wrap
1
ルール: この ClusterRole が付与する権限を指定します。
2
apiGroups: OpenShift 固有の API グループを指します。
3
obervability.openshift.io: ロギングなどの可観測性リソースを管理するための API グループ。
4
resources: このロールが管理できるリソースを指定します。
5
clusterlogforwarders: OpenShift のログ転送リソースを指します。
6
verbs: ClusterLogForwarders で許可されるアクションを指定します。
7
create: 新しい ClusterLogForwarders を作成する権限を付与します。
8
delete: 既存の ClusterLogForwarders を削除する権限を付与します。
9
get: 特定の ClusterLogForwarders に関する情報を取得する権限を付与します。
10
list: すべての ClusterLogForwarders のリスト表示を許可します。
11
patch: ClusterLogForwarders を部分的に変更する権限を付与します。
12
update: 既存の ClusterLogForwarders を更新する権限を付与します。
13
watch: ClusterLogForwarders への変更を監視する権限を付与します。

4.4.2. コレクターのログレベルの変更

コレクターでログレベルを変更するには、observability.openshift.io/log-level アノテーションを tracedebuginfowarnerror、および off に設定します。

ログレベルアノテーションの例

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: collector
  annotations:
    observability.openshift.io/log-level: debug
# ...
Copy to Clipboard Toggle word wrap

4.4.3. Operator の管理

ClusterLogForwarder リソースには、Operator がリソースをアクティブに管理するか、管理対象外のままにするかを制御する managementState フィールドがあります。

Managed
(デフォルト) Operator は、CLF 仕様の目的の状態に一致するようにロギングリソースを駆動します。
管理対象外
Operator は、ロギングコンポーネントに関連するアクションを一切実行しません。

これにより、管理者は managementStateUnmanaged に設定して、ログ転送を一時的に停止できます。

4.4.4. ClusterLogForwarder の構造

CLF には、次の主要コンポーネントを含む spec セクションがあります。

Inputs
転送するログメッセージを選択します。組み込みの入力タイプである applicationinfrastructure、および audit は、クラスターのさまざまな部分からログを転送します。カスタム入力を定義することもできます。
出力
ログを転送する宛先を定義します。各出力には、一意の名前とタイプ固有の設定があります。
Pipelines
ログが入力からフィルターを経由して出力されるまでのパスを定義します。パイプラインには一意の名前があり、入力名、出力名、フィルター名のリストで構成されます。
Filters
パイプライン内のログメッセージを変換または破棄します。ユーザーは、特定のログフィールドに一致するフィルターを定義し、メッセージを破棄または変更できます。フィルターはパイプラインで指定された順序で適用されます。
4.4.4.1. Inputs

入力は spec.inputs の下の配列で設定されます。組み込みの入力タイプは 3 つあります。

application
インフラストラクチャー namespace 内のログを除く、すべてのアプリケーションコンテナーからログを選択します。
infrastructure

次の namespace で実行されているノードおよびインフラストラクチャーコンポーネントからログを選択します。

  • default
  • kube
  • openshift
  • kube- または openshift- 接頭辞を含む
audit
OpenShift API サーバー監査ログ、Kubernetes API サーバー監査ログ、ovn 監査ログ、および auditd からのノード監査ログからログを選択します。

ユーザーは、特定の namespace からログを選択するか、または Pod ラベルを使用してログを選択する application のカスタム入力を定義できます。

4.4.4.2. 出力

出力は spec.outputs の下の配列で設定されます。各出力には一意の名前とタイプが必要です。サポートされているタイプは次のとおりです。

azureMonitor
ログを Azure Monitor に転送します。
cloudwatch
ログを AWS CloudWatch に転送します。
googleCloudLogging
ログを Google Cloud Logging に転送します。
http
ログを汎用 HTTP エンドポイントに転送します。
kafka
ログを Kafka ブローカーに転送します。
loki
ログを Loki ロギングバックエンドに転送します。
lokistack
Red Hat OpenShift Service on AWS の認証と統合された、Loki と Web プロキシーを組み合わせたロギング対応の環境にログを転送します。LokiStack のプロキシーは、Red Hat OpenShift Service on AWS の認証を使用してマルチテナンシーを適用します。
otlp
OpenTelemetry プロトコルを使用してログを転送します。
splunk
ログを Splunk に転送します。
syslog
ログを外部の syslog サーバーに転送します。

各出力タイプには独自の設定フィールドがあります。

4.4.4.3. Pipelines

パイプラインは spec.pipelines の下の配列で設定されます。各パイプラインには一意の名前があり、次の要素で構成される必要があります。

inputRefs
このパイプラインにログを転送する入力の名前。
outputRefs
ログを送信する出力の名前。
filterRefs
(オプション) 適用するフィルターの名前。

filterRefs は順番に適用されるため、順序が重要です。以前のフィルターは、後のフィルターで処理されないメッセージを破棄する可能性があります。

4.4.4.4. Filters

フィルターは spec.filters の下の配列で設定されます。構造化フィールドの値に基づいて受信ログメッセージを照合し、変更または削除できます。

管理者は次のタイプのフィルターを設定できます。

4.4.4.5. 複数行の例外検出の有効化

コンテナーログの複数行のエラー検出を有効にします。

警告

この機能を有効にすると、パフォーマンスに影響が出る可能性があり、追加のコンピューティングリソースや代替のロギングソリューションが必要になる場合があります。

ログパーサーは頻繁に、同じ例外の個別の行を別々の例外として誤って識別します。その結果、余分なログエントリーが発生し、トレースされた情報が不完全または不正確な状態で表示されます。

Java 例外の例

java.lang.NullPointerException: Cannot invoke "String.toString()" because "<param1>" is null
    at testjava.Main.handle(Main.java:47)
    at testjava.Main.printMe(Main.java:19)
    at testjava.Main.main(Main.java:10)
Copy to Clipboard Toggle word wrap

  • ロギングを有効にして複数行の例外を検出し、それらを 1 つのログエントリーに再アセンブルできるようにする場合は、ClusterLogForwarder カスタムリソース (CR) に .spec.filters の下の detectMultilineErrors フィールドが含まれていることを確認します。

ClusterLogForwarder CR の例

apiVersion: "observability.openshift.io/v1"
kind: ClusterLogForwarder
metadata:
  name: <log_forwarder_name>
  namespace: <log_forwarder_namespace>
spec:
  serviceAccount:
    name: <service_account_name>
  filters:
  - name: <name>
    type: detectMultilineException
  pipelines:
    - inputRefs:
        - <input-name>
      name: <pipeline-name>
      filterRefs:
        - <filter-name>
      outputRefs:
        - <output-name>
Copy to Clipboard Toggle word wrap

4.4.4.5.1. 詳細

ログメッセージが例外スタックトレースを形成する連続したシーケンスとして表示される場合、それらは単一の統合ログレコードに結合されます。最初のログメッセージの内容は、シーケンス内のすべてのメッセージフィールドの連結コンテンツに置き換えられます。

コレクターは次の言語をサポートしています。

  • Java
  • JS
  • Ruby
  • Python
  • Golang
  • PHP
  • Dart
4.4.4.6. 不要なログレコードを削除するコンテンツフィルターの設定

drop フィルターが設定されている場合、ログコレクターは転送する前にフィルターに従ってログストリームを評価します。コレクターは、指定された設定に一致する不要なログレコードを削除します。

手順

  1. フィルターの設定を ClusterLogForwarder CR の filters 仕様に追加します。

    以下の例は、正規表現に基づいてログレコードを削除するように ClusterLogForwarder CR を設定する方法を示しています。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      filters:
      - name: <filter_name>
        type: drop 
    1
    
        drop: 
    2
    
        - test: 
    3
    
          - field: .kubernetes.labels."foo-bar/baz" 
    4
    
            matches: .+ 
    5
    
          - field: .kubernetes.pod_name
            notMatches: "my-pod" 
    6
    
      pipelines:
      - name: <pipeline_name> 
    7
    
        filterRefs: ["<filter_name>"]
    # ...
    Copy to Clipboard Toggle word wrap

    1
    フィルターのタイプを指定します。drop フィルターは、フィルター設定に一致するログレコードをドロップします。
    2
    drop フィルターを適用するための設定オプションを指定します。
    3
    ログレコードが削除されるかどうかを評価するために使用されるテストの設定を指定します。
    • テストに指定されたすべての条件が true の場合、テストは合格し、ログレコードは削除されます。
    • drop フィルター設定に複数のテストが指定されている場合、いずれかのテストに合格すると、レコードは削除されます。
    • 条件の評価中にエラーが発生した場合 (たとえば、評価対象のログレコードにフィールドがない場合)、その条件は false と評価されます。
    4
    ドットで区切られたフィールドパス (ログレコード内のフィールドへのパス) を指定します。パスには、英数字とアンダースコア (a-zA-Z0-9_) を含めることができます (例: .kubernetes.namespace_name)。セグメントにこの範囲外の文字が含まれている場合、セグメントを引用符で囲む必要があります (例: .kubernetes.labels."foo.bar-bar/baz")。1 つの test 設定に複数のフィールドパスを含めることができますが、テストに合格して drop フィルターを適用するには、すべてのフィールドパスが true と評価される必要があります。
    5
    正規表現を指定します。ログレコードがこの正規表現と一致する場合は、破棄されます。単一の field パスに対して matches または notMatches 条件のいずれかを設定できますが、両方を設定することはできません。
    6
    正規表現を指定します。ログレコードがこの正規表現に一致しない場合、破棄されます。単一の field パスに対して matches または notMatches 条件のいずれかを設定できますが、両方を設定することはできません。
    7
    drop フィルターが適用されるパイプラインを指定します。
  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

追加例

次の例は、優先度の高いログレコードのみを保持するように drop フィルターを設定する方法を示しています。

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
# ...
spec:
  serviceAccount:
    name: <service_account_name>
  filters:
  - name: important
    type: drop
    drop:
    - test:
      - field: .message
        notMatches: "(?i)critical|error"
      - field: .level
        matches: "info|warning"
# ...
Copy to Clipboard Toggle word wrap

単一の test 設定に複数のフィールドパスを追加する以外に、OR チェックとして扱われる追加のテストも追加できます。次の例では、いずれかの test 設定が true と評価されるとレコードが削除されます。ただし、2 番目の test 設定では、true と評価されるためには、両方のフィールド仕様が true である必要があります。

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
# ...
spec:
  serviceAccount:
    name: <service_account_name>
  filters:
  - name: important
    type: drop
    drop:
    - test:
      - field: .kubernetes.namespace_name
        matches: "^open"
    - test:
      - field: .log_type
        matches: "application"
      - field: .kubernetes.pod_name
        notMatches: "my-pod"
# ...
Copy to Clipboard Toggle word wrap
4.4.4.7. API 監査フィルターの概要

OpenShift API サーバーは、API 呼び出しごとに、リクエスト、レスポンス、リクエスターの ID の詳細を示す監査イベントを生成するため、大量のデータが生成されます。API 監査フィルターはルールを使用して、重要でないイベントを除外してイベントサイズを減少できるようにし、監査証跡をより管理しやすくします。ルールは順番にチェックされ、最初の一致でチェックが停止します。イベントに含まれるデータの量は、level フィールドの値によって決まります。

  • None: イベントはドロップされます。
  • Metadata: 監査メタデータが含まれ、リクエストおよびレスポンスの本文は削除されます。
  • Request: 監査メタデータとリクエスト本文が含まれ、レスポンス本文は削除されます。
  • RequestResponse: メタデータ、リクエスト本文、レスポンス本文のすべてのデータが含まれます。レスポンス本文が非常に大きくなる可能性があります。たとえば、oc get pods -A はクラスター内のすべての Pod の YAML 記述を含むレスポンス本文を生成します。

ClusterLogForwarder カスタムリソース (CR) は、以下の追加機能を提供しますが、標準の Kubernetes 監査ポリシー と同じ形式を使用します。

ワイルドカード
ユーザー、グループ、namespace、およびリソースの名前には、先頭または末尾に * アスタリスク文字を付けることができます。たとえば、namespace openshift-\*openshift-apiserver または openshift-authentication に一致します。リソース \*/status は、Pod/status または Deployment/status と一致します。
デフォルトのルール

ポリシーのルールに一致しないイベントは、以下のようにフィルターされます。

  • getlistwatch などの読み取り専用システムイベントは削除されます。
  • サービスアカウントと同じ namespace 内で発生するサービスアカウント書き込みイベントは破棄されます。
  • 他のすべてのイベントは、設定されたレート制限に従って転送されます。

これらのデフォルトを無効にするには、level フィールドのみが含まれるルールでルールリストを終了するか、空のルールを追加します。

応答コードが省略される
省略する整数ステータスコードのリスト。イベントが作成されない HTTP ステータスコードをリストする OmitResponseCodes フィールドを使用して、応答で HTTP ステータスコードに基づいてイベントを破棄できます。デフォルト値は [404, 409, 422, 429] です。値が空のリスト [] の場合、ステータスコードは省略されません。

ClusterLogForwarder CR の監査ポリシーは、Red Hat OpenShift Service on AWS の監査ポリシーに加えて動作します。ClusterLogForwarder CR 監査フィルターは、ログコレクターが転送する内容を変更し、verb、user、group、namespace、または resource でフィルタリングする機能を提供します。複数のフィルターを作成して、同じ監査ストリームの異なるサマリーを異なる場所に送信できます。たとえば、詳細なストリームをローカルクラスターログストアに送信し、詳細度の低いストリームをリモートサイトに送信できます。

注記

監査ログを収集するには、クラスターロール collect-audit-logs が必要です。提供されている例は、監査ポリシーで可能なルールの範囲を示すことを目的としており、推奨される設定ではありません。

監査ポリシーの例

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: <log_forwarder_name>
  namespace: <log_forwarder_namespace>
spec:
  serviceAccount:
    name: <service_account_name>
  pipelines:
    - name: my-pipeline
      inputRefs: audit 
1

      filterRefs: my-policy 
2

  filters:
    - name: my-policy
      type: kubeAPIAudit
      kubeAPIAudit:
        # Don't generate audit events for all requests in RequestReceived stage.
        omitStages:
          - "RequestReceived"

        rules:
          # Log pod changes at RequestResponse level
          - level: RequestResponse
            resources:
            - group: ""
              resources: ["pods"]

          # Log "pods/log", "pods/status" at Metadata level
          - level: Metadata
            resources:
            - group: ""
              resources: ["pods/log", "pods/status"]

          # Don't log requests to a configmap called "controller-leader"
          - level: None
            resources:
            - group: ""
              resources: ["configmaps"]
              resourceNames: ["controller-leader"]

          # Don't log watch requests by the "system:kube-proxy" on endpoints or services
          - level: None
            users: ["system:kube-proxy"]
            verbs: ["watch"]
            resources:
            - group: "" # core API group
              resources: ["endpoints", "services"]

          # Don't log authenticated requests to certain non-resource URL paths.
          - level: None
            userGroups: ["system:authenticated"]
            nonResourceURLs:
            - "/api*" # Wildcard matching.
            - "/version"

          # Log the request body of configmap changes in kube-system.
          - level: Request
            resources:
            - group: "" # core API group
              resources: ["configmaps"]
            # This rule only applies to resources in the "kube-system" namespace.
            # The empty string "" can be used to select non-namespaced resources.
            namespaces: ["kube-system"]

          # Log configmap and secret changes in all other namespaces at the Metadata level.
          - level: Metadata
            resources:
            - group: "" # core API group
              resources: ["secrets", "configmaps"]

          # Log all other resources in core and extensions at the Request level.
          - level: Request
            resources:
            - group: "" # core API group
            - group: "extensions" # Version of group should NOT be included.

          # A catch-all rule to log all other requests at the Metadata level.
          - level: Metadata
Copy to Clipboard Toggle word wrap

1
収集されるログのタイプ。このフィールドの値は、監査ログの場合は audit、アプリケーションログの場合は application、インフラストラクチャーログの場合は infrastructure、またはアプリケーションに定義された指定の入力になります。
2
監査ポリシーの名前。

input セレクターを使用して、ラベル式または照合するラベルキーとその値に基づいてアプリケーションログを含めることができます。

手順

  1. ClusterLogForwarder CR の input 仕様にフィルターの設定を追加します。

    以下の例は、ラベル式または一致したラベルキー/値に基づいてログを組み込むように ClusterLogForwarder CR を設定する方法を示しています。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      inputs:
        - name: mylogs
          application:
            selector:
              matchExpressions:
              - key: env 
    1
    
                operator: In 
    2
    
                values: ["prod", "qa"] 
    3
    
              - key: zone
                operator: NotIn
                values: ["east", "west"]
              matchLabels: 
    4
    
                app: one
                name: app1
          type: application
    # ...
    Copy to Clipboard Toggle word wrap

    1
    照合するラベルキーを指定します。
    2
    Operator を指定します。有効な値には、InNotInExistsDoesNotExist などがあります。
    3
    文字列値の配列を指定します。operator 値が Exists または DoesNotExist のいずれかの場合、値の配列は空である必要があります。
    4
    正確なキーまたは値のマッピングを指定します。
  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
4.4.4.9. ログレコードを削除するコンテンツフィルターの設定

prune フィルターが設定されると、ログコレクターは転送前にフィルターをもとにログレベルを評価します。コレクターは、Pod アノテーションなどの値の低いフィールドを削除してログレコードを整理します。

手順

  1. フィルターの設定を ClusterLogForwarder CR の prune 仕様に追加します。

    次の例は、フィールドパスに基づいてログレコードを削除するように ClusterLogForwarder CR を設定する方法を示しています。

    重要

    両方が指定されている場合、最初に notIn 配列に基づいてレコードが整理され、in 配列よりも優先されます。notIn 配列を使用してレコードが整理された後、in 配列を使用してレコードが整理されます。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      filters:
      - name: <filter_name>
        type: prune 
    1
    
        prune: 
    2
    
          in: [.kubernetes.annotations, .kubernetes.namespace_id] 
    3
    
          notIn: [.kubernetes,.log_type,.message,."@timestamp"] 
    4
    
      pipelines:
      - name: <pipeline_name> 
    5
    
        filterRefs: ["<filter_name>"]
    # ...
    Copy to Clipboard Toggle word wrap

    1
    フィルターのタイプを指定します。prune フィルターでは、設定されたフィールドでログレコードをプルーニングします。
    2
    prune フィルターを適用するための設定オプションを指定します。in フィールドと notIn フィールドは、ログレコード内のフィールドへのパスであるドット区切りのフィールドパスの配列として指定されます。これらのパスには、英数字とアンダースコア (a-zA-Z0-9_) を含めることができます (例: .kubernetes.namespace_name)。セグメントにこの範囲外の文字が含まれている場合、セグメントを引用符で囲む必要があります (例: .kubernetes.labels."foo.bar-bar/baz")
    3
    オプション: この配列で指定されたフィールドはすべてログレコードから削除されます。
    4
    オプション: この配列で指定されていないフィールドはログレコードから削除されます。
    5
    prune フィルターを適用するパイプラインを指定します。
    注記

    フィルターは、log_type.log_source、および .message フィールドを除外します。

  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

4.4.5. ソースによる監査およびインフラストラクチャーログ入力のフィルタリング

input セレクターを使用して、ログを収集する audit および infrastructure ソースのリストを定義できます。

手順

  1. ClusterLogForwarder CR に audit および infrastructure ソースを定義する設定を追加します。

    次の例は、ClusterLogForwarder CR を設定して audit および infrastructure ソースを定義する方法を示しています。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      inputs:
        - name: mylogs1
          type: infrastructure
          infrastructure:
            sources: 
    1
    
              - node
        - name: mylogs2
          type: audit
          audit:
            sources: 
    2
    
              - kubeAPI
              - openshiftAPI
              - ovn
    # ...
    Copy to Clipboard Toggle word wrap

    1
    収集するインフラストラクチャーソースのリストを指定します。有効なソースには以下が含まれます。
    • node: ノードからのジャーナルログ
    • container: namespace にデプロイされたワークロードからのログ
    2
    収集する audit ソースのリストを指定します。有効なソースには以下が含まれます。
    • kubeAPI: Kubernetes API サーバーからのログ
    • openshiftAPI: OpenShift API サーバーからのログ
    • auditd: ノードの auditd サービスからのログ
    • ovn: オープン仮想ネットワークサービスからのログ
  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

input セレクターを使用して、namespace とコンテナー名に基づいてアプリケーションログを含めたり除外したりできます。

手順

  1. ClusterLogForwarder CR に namespace とコンテナー名を含めるか除外するかの設定を追加します。

    以下の例は、namespace およびコンテナー名を含めるか、除外するように ClusterLogForwarder CR を設定する方法を示しています。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      inputs:
        - name: mylogs
          application:
            includes:
              - namespace: "my-project" 
    1
    
                container: "my-container" 
    2
    
            excludes:
              - container: "other-container*" 
    3
    
                namespace: "other-namespace" 
    4
    
          type: application
    # ...
    Copy to Clipboard Toggle word wrap

    1
    ログがこれらの namespace からのみ収集されることを指定します。
    2
    ログがこれらのコンテナーからのみ収集されることを指定します。
    3
    ログを収集するときに無視する namespace のパターンを指定します。
    4
    ログを収集するときに無視するコンテナーのセットを指定します。
    注記

    excludes フィールドは includes フィールドよりも優先されます。

  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

4.5. LokiStack でのログの保存

アプリケーション、監査、インフラストラクチャー関連のログを保存するように LokiStack CR を設定できます。

4.5.1. 前提条件

  • CLI または Web コンソールを使用して Loki Operator をインストールしている。
  • ClusterLogForwarder を作成するのと同じ namespace に serviceAccount がある。
  • serviceAccountcollect-audit-logscollect-application-logscollect-infrastructure-logs のクラスターロールが割り当てられている。
4.5.1.1. コアのセットアップと設定

ロールベースのアクセス制御、基本的なモニタリング、および Loki をデプロイするための Pod の配置。

4.5.2. Loki デプロイメントのサイズ

Loki のサイズは 1x.<size> の形式に従います。この場合の 1x はインスタンスの数を、<size> は性能を指定します。

1x.pico 設定は、最小限のリソースと制限要件を持つ単一の Loki デプロイメントを定義し、すべての Loki コンポーネントに高可用性 (HA) サポートを提供します。この設定は、単一のレプリケーションファクターまたは自動圧縮を必要としないデプロイメントに適しています。

ディスク要求はサイズ設定にかかわらず類似しているため、お客様はさまざまなサイズをテストして、それぞれのデプロイメントニーズに最適なサイズを決定できます。

重要

デプロイメントサイズの 1x の数は変更できません。

Expand
表4.2 Loki のサイズ
 1x.demo1x.pico [6.1+ のみ]1x.extra-small1x.small1x.medium

Data transfer

デモ使用のみ

50 GB/日

100 GB/日

500 GB/日

2 TB/日

1 秒あたりのクエリー数 (QPS)

デモ使用のみ

200 ミリ秒で 1 - 25 QPS

200 ミリ秒で 1 - 25 QPS

200 ミリ秒で 25 - 50 QPS

200 ミリ秒で 25 - 75 QPS

レプリケーション係数

なし

2

2

2

2

合計 CPU 要求

なし

仮想 CPU 7 個

仮想 CPU 14 個

仮想 CPU 34 個

仮想 CPU 54 個

ルーラーを使用する場合の合計 CPU リクエスト

なし

仮想 CPU 8 個

仮想 CPU 16 個

仮想 CPU 42 個

仮想 CPU 70 個

合計メモリー要求

なし

17 Gi

31 Gi

67 Gi

139 Gi

ルーラーを使用する場合の合計メモリーリクエスト

なし

18 Gi

35 Gi

83 Gi

171 Gi

合計ディスク要求

40 Gi

590 Gi

430 Gi

430 Gi

590 Gi

ルーラーを使用する場合の合計ディスクリクエスト

60 Gi

910 Gi

750 Gi

750 Gi

910 Gi

4.5.3. LokiStack ルールの RBAC 権限の認可

管理者は、クラスターロールをユーザー名にバインドすることで、ユーザーが独自のアラートおよび記録ルールを作成および管理できるようにすることができます。クラスターロールは、ユーザーに必要なロールベースのアクセス制御 (RBAC) 権限を含む ClusterRole オブジェクトとして定義されます。

LokiStack では、アラートおよび記録ルール用の次のクラスターロールが利用できます。

Expand
ルール名説明

alertingrules.loki.grafana.com-v1-admin

このロールを持つユーザーは、アラートルールを管理する管理レベルのアクセス権を持ちます。このクラスターロールは、loki.grafana.com/v1 API グループ内の AlertingRule リソースを作成、読み取り、更新、削除、リスト表示、および監視する権限を付与します。

alertingrules.loki.grafana.com-v1-crdview

このロールを持つユーザーは、loki.grafana.com/v1 API グループ内の AlertingRule リソースに関連するカスタムリソース定義 (CRD) の定義を表示できますが、これらのリソースを変更または管理する権限を持ちません。

alertingrules.loki.grafana.com-v1-edit

このロールを持つユーザーは、AlertingRule リソースを作成、更新、および削除する権限を持ちます。

alertingrules.loki.grafana.com-v1-view

このロールを持つユーザーは、loki.grafana.com/v1 API グループ内の AlertingRule リソースを読み取ることができます。既存のアラートルールの設定、ラベル、およびアノテーションを検査できますが、それらを変更することはできません。

recordingrules.loki.grafana.com-v1-admin

このロールを持つユーザーは、記録ルールを管理する管理レベルのアクセス権を持ちます。このクラスターロールは、loki.grafana.com/v1 API グループ内の RecordingRule リソースを作成、読み取り、更新、削除、リスト表示、および監視する権限を付与します。

recordingrules.loki.grafana.com-v1-crdview

このロールを持つユーザーは、loki.grafana.com/v1 API グループ内の RecordingRule リソースに関連するカスタムリソース定義 (CRD) の定義を表示できますが、これらのリソースを変更または管理する権限を持ちません。

recordingrules.loki.grafana.com-v1-edit

このロールを持つユーザーは、RecordingRule リソースを作成、更新、および削除する権限を持ちます。

recordingrules.loki.grafana.com-v1-view

このロールを持つユーザーは、loki.grafana.com/v1 API グループ内の RecordingRule リソースを読み取ることができます。既存のアラートルールの設定、ラベル、およびアノテーションを検査できますが、それらを変更することはできません。

4.5.3.1. 例

ユーザーにクラスターロールを適用するには、既存のクラスターロールを特定のユーザー名にバインドする必要があります。

クラスターロールは、使用するロールバインディングの種類に応じて、クラスタースコープまたは namespace スコープにすることができます。RoleBinding オブジェクトを使用する場合は、oc adm policy add-role-to-user コマンドを使用する場合と同様に、クラスターロールが指定した namespace にのみ適用されます。ClusterRoleBinding オブジェクトを使用する場合は、oc adm policy add-cluster-role-to-user コマンドを使用する場合と同様に、クラスターロールがクラスター内のすべての namespace に適用されます。

次のコマンド例では、指定したユーザーに、クラスター内の特定の namespace のアラートルールに対する作成、読み取り、更新、および削除 (CRUD) 権限を付与します。

特定の namespace のアラートルールに対する CRUD 権限を付与するクラスターロールバインディングコマンドの例

$ oc adm policy add-role-to-user alertingrules.loki.grafana.com-v1-admin -n <namespace> <username>
Copy to Clipboard Toggle word wrap

次のコマンドは、指定したユーザーに、すべての namespace のアラートルールに対する管理者権限を付与します。

管理者権限を付与するクラスターロールバインディングコマンドの例

$ oc adm policy add-cluster-role-to-user alertingrules.loki.grafana.com-v1-admin <username>
Copy to Clipboard Toggle word wrap

4.5.4. Loki を使用したログベースのアラートルールの作成

AlertingRule CR には、単一の LokiStack インスタンスのアラートルールグループを宣言するために使用する、仕様および Webhook 検証定義のセットが含まれます。Webhook 検証定義は、ルール検証条件もサポートします。

  • AlertingRule CR に無効な interval 期間が含まれる場合、無効なアラートルールです。
  • AlertingRule CR に無効な for 期間が含まれる場合、無効なアラートルールです。
  • AlertingRule CR に無効な LogQL expr が含まれる場合、無効なアラートルールです。
  • AlertingRule CR に同じ名前のグループが 2 つ含まれる場合、無効なアラートルールです。
  • 上記のいずれも該当しない場合、アラートルールは有効とみなされます。
Expand
表4.3 AlertingRule の定義
テナントタイプAlertingRule CR の有効な namespace

application

<your_application_namespace>

audit

openshift-logging

infrastructure

openshift-/*kube-/\*default

手順

  1. AlertingRule カスタムリソース (CR) を作成します。

    インフラストラクチャー AlertingRule CR の例

      apiVersion: loki.grafana.com/v1
      kind: AlertingRule
      metadata:
        name: loki-operator-alerts
        namespace: openshift-operators-redhat 
    1
    
        labels: 
    2
    
          openshift.io/<label_name>: "true"
      spec:
        tenantID: "infrastructure" 
    3
    
        groups:
          - name: LokiOperatorHighReconciliationError
            rules:
              - alert: HighPercentageError
                expr: | 
    4
    
                  sum(rate({kubernetes_namespace_name="openshift-operators-redhat", kubernetes_pod_name=~"loki-operator-controller-manager.*"} |= "error" [1m])) by (job)
                    /
                  sum(rate({kubernetes_namespace_name="openshift-operators-redhat", kubernetes_pod_name=~"loki-operator-controller-manager.*"}[1m])) by (job)
                    > 0.01
                for: 10s
                labels:
                  severity: critical 
    5
    
                annotations:
                  summary: High Loki Operator Reconciliation Errors 
    6
    
                  description: High Loki Operator Reconciliation Errors 
    7
    Copy to Clipboard Toggle word wrap

    1
    この AlertingRule CR が作成される namespace には、LokiStack spec.rules.namespaceSelector 定義に一致するラベルが必要です。
    2
    labels ブロックは、LokiStack の spec.rules.selector 定義と一致する必要があります。
    3
    infrastructure テナントの AlertingRule CR は、openshift-*kube-\*、または default namespaces でのみサポートされます。
    4
    kubernetes_namespace_name: の値は、metadata.namespace の値と一致する必要があります。
    5
    この必須フィールドの値は、criticalwarning、または info である必要があります。
    6
    このフィールドは必須です。
    7
    このフィールドは必須です。

    アプリケーション AlertingRule CR の例

      apiVersion: loki.grafana.com/v1
      kind: AlertingRule
      metadata:
        name: app-user-workload
        namespace: app-ns 
    1
    
        labels: 
    2
    
          openshift.io/<label_name>: "true"
      spec:
        tenantID: "application"
        groups:
          - name: AppUserWorkloadHighError
            rules:
              - alert:
                expr: | 
    3
    
                  sum(rate({kubernetes_namespace_name="app-ns", kubernetes_pod_name=~"podName.*"} |= "error" [1m])) by (job)
                for: 10s
                labels:
                  severity: critical 
    4
    
                annotations:
                  summary:  
    5
    
                  description:  
    6
    Copy to Clipboard Toggle word wrap

    1
    この AlertingRule CR が作成される namespace には、LokiStack spec.rules.namespaceSelector 定義に一致するラベルが必要です。
    2
    labels ブロックは、LokiStack の spec.rules.selector 定義と一致する必要があります。
    3
    kubernetes_namespace_name: の値は、metadata.namespace の値と一致する必要があります。
    4
    この必須フィールドの値は、criticalwarning、または info である必要があります。
    5
    この必須フィールドの値は、ルールの概要です。
    6
    この必須フィールドの値は、ルールの詳細な説明です。
  2. AlertingRule CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

4.5.5. メンバーリストの作成の失敗を許容する Loki の設定

管理者は通常、Red Hat OpenShift Service on AWS クラスターでプライベートでない IP ネットワーク範囲を使用します。その結果、LokiStack のメンバーリスト設定が失敗します。この設定はデフォルトでプライベート IP ネットワークを使用するためです。

管理者は、メンバーリスト設定の Pod ネットワークを選択できます。LokiStack カスタムリソース (CR) を変更して、hashRing 仕様で podIP アドレスを使用できます。LokiStack CR を設定するには、以下のコマンドを使用します。

$ oc patch LokiStack logging-loki -n openshift-logging  --type=merge -p '{"spec": {"hashRing":{"memberlist":{"instanceAddrType":"podIP"},"type":"memberlist"}}}'
Copy to Clipboard Toggle word wrap

podIP を含む LokiStack の例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
# ...
  hashRing:
    type: memberlist
    memberlist:
      instanceAddrType: podIP
# ...
Copy to Clipboard Toggle word wrap

4.5.6. Loki でストリームベースの保持の有効化

ログストリームに基づいて保持ポリシーを設定できます。これらのルールは、グローバル、テナントごと、またはその両方で設定できます。両方で設定すると、グローバルルールの前にテナントルールが適用されます。

重要

s3 バケットまたは LokiStack カスタムリソース (CR) に保存期間が定義されていない場合、ログは削除されず、s3 バケットに永久に残り、s3 ストレージがいっぱいになる可能性があります。

注記

スキーマ v13 が推奨されます。

手順

  1. LokiStack CR を作成します。

    • 次の例に示すように、ストリームベースの保持をグローバルに有効にします。

      AWS のグローバルストリームベースの保持の例

      apiVersion: loki.grafana.com/v1
      kind: LokiStack
      metadata:
        name: logging-loki
        namespace: openshift-logging
      spec:
        limits:
         global: 
      1
      
            retention: 
      2
      
              days: 20
              streams:
              - days: 4
                priority: 1
                selector: '{kubernetes_namespace_name=~"test.+"}' 
      3
      
              - days: 1
                priority: 1
                selector: '{log_type="infrastructure"}'
        managementState: Managed
        replicationFactor: 1
        size: 1x.small
        storage:
          schemas:
          - effectiveDate: "2020-10-11"
            version: v13
          secret:
            name: logging-loki-s3
            type: aws
        storageClassName: gp3-csi
        tenants:
          mode: openshift-logging
      Copy to Clipboard Toggle word wrap

      1
      すべてのログストリームの保持ポリシーを設定します。注記: このフィールドは、オブジェクトストレージに保存されたログの保持期間には影響しません。
      2
      このブロックが CR に追加されると、クラスターで保持が有効になります。
      3
      ログ stream.spec: 制限を定義するために使用される LogQL クエリー が含まれます。
    • 次の例に示すように、テナントごとにストリームベースの保持を有効にします。

      AWS のテナントごとのストリームベースの保持の例

      apiVersion: loki.grafana.com/v1
      kind: LokiStack
      metadata:
        name: logging-loki
        namespace: openshift-logging
      spec:
        limits:
          global:
            retention:
              days: 20
          tenants: 
      1
      
            application:
              retention:
                days: 1
                streams:
                  - days: 4
                    selector: '{kubernetes_namespace_name=~"test.+"}' 
      2
      
            infrastructure:
              retention:
                days: 5
                streams:
                  - days: 1
                    selector: '{kubernetes_namespace_name=~"openshift-cluster.+"}'
        managementState: Managed
        replicationFactor: 1
        size: 1x.small
        storage:
          schemas:
          - effectiveDate: "2020-10-11"
            version: v13
          secret:
            name: logging-loki-s3
            type: aws
        storageClassName: gp3-csi
        tenants:
          mode: openshift-logging
      Copy to Clipboard Toggle word wrap

      1
      テナントごとの保持ポリシーを設定します。有効なテナントタイプは、applicationaudit、および infrastructure です。
      2
      ログストリームの定義に使用される LogQL クエリー が含まれています。
  2. LokiStack CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
    注記

    これは、保存されたログの保持を管理するためのものではありません。保存されたログのグローバルな保持期間 (最大 30 日間までサポート) は、オブジェクトストレージで設定します。

4.5.7. Loki Pod の配置

Pod の toleration またはノードセレクターを使用して、Loki Pod が実行するノードを制御し、他のワークロードがそれらのノードを使用しないようにできます。

LokiStack カスタムリソース (CR) を使用して toleration をログストア Pod に適用し、ノード仕様を使用して taint をノードに適用できます。ノードの taint は、taint を容認しないすべての Pod を拒否するようノードに指示する key:value ペアです。他の Pod にはない特定の key:value ペアを使用すると、ログストア Pod のみがそのノードで実行できるようになります。

ノードセレクターを使用する LokiStack の例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
# ...
  template:
    compactor: 
1

      nodeSelector:
        node-role.kubernetes.io/infra: "" 
2

    distributor:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    gateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    indexGateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    ingester:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    querier:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    queryFrontend:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    ruler:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
# ...
Copy to Clipboard Toggle word wrap

1
ノードセレクターに適用されるコンポーネント Pod タイプを指定します。
2
定義されたラベルが含まれるノードに移動する Pod を指定します。

ノードセレクターと toleration を使用する LokiStack CR の例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
# ...
  template:
    compactor:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    distributor:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    indexGateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    ingester:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    querier:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    queryFrontend:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    ruler:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    gateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
# ...
Copy to Clipboard Toggle word wrap

LokiStack (CR) の nodeSelector フィールドと tolerations フィールドを設定するには、oc explain コマンドを使用して、特定のリソースの説明とフィールドを表示します。

$ oc explain lokistack.spec.template
Copy to Clipboard Toggle word wrap

出力例

KIND:     LokiStack
VERSION:  loki.grafana.com/v1

RESOURCE: template <Object>

DESCRIPTION:
     Template defines the resource/limits/tolerations/nodeselectors per
     component

FIELDS:
   compactor	<Object>
     Compactor defines the compaction component spec.

   distributor	<Object>
     Distributor defines the distributor component spec.
...
Copy to Clipboard Toggle word wrap

詳細情報用に、特定のフィールドを追加できます。

$ oc explain lokistack.spec.template.compactor
Copy to Clipboard Toggle word wrap

出力例

KIND:     LokiStack
VERSION:  loki.grafana.com/v1

RESOURCE: compactor <Object>

DESCRIPTION:
     Compactor defines the compaction component spec.

FIELDS:
   nodeSelector	<map[string]string>
     NodeSelector defines the labels required by a node to schedule the
     component onto it.
...
Copy to Clipboard Toggle word wrap

4.5.7.1. 信頼性とパフォーマンスの向上

実稼働環境における Loki の信頼性と効率性を確保するための設定。

4.5.8. 有効期間の短いトークンを使用したクラウドベースのログストアへの認証の有効化

ワークロードアイデンティティーフェデレーションを使用すると、有効期間の短いトークンを使用してクラウドベースのログストアに対して認証できます。

手順

  • 認証を有効にするには、次のいずれかのオプションを使用します。

    • Red Hat OpenShift Service on AWS の Web コンソールを使用して Loki Operator をインストールすると、有効期間が短いトークンを使用するクラスターが自動的に検出されます。プロンプトが表示され、ロールを作成するように求められます。また、Loki Operator が CredentialsRequest オブジェクトを作成するのに必要なデータを提供するように求められます。このオブジェクトにより、シークレットが設定されます。
    • OpenShift CLI (oc) を使用して Loki Operator をインストールする場合は、次の例に示すように、ストレージプロバイダーに適したテンプレートを使用して Subscription オブジェクトを手動で作成する必要があります。この認証ストラテジーは、指定のストレージプロバイダーでのみサポートされます。

      Azure サンプルサブスクリプションの例

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: loki-operator
        namespace: openshift-operators-redhat
      spec:
        channel: "stable-6.0"
        installPlanApproval: Manual
        name: loki-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace
        config:
          env:
            - name: CLIENTID
              value: <your_client_id>
            - name: TENANTID
              value: <your_tenant_id>
            - name: SUBSCRIPTIONID
              value: <your_subscription_id>
            - name: REGION
              value: <your_region>
      Copy to Clipboard Toggle word wrap

      AWS サンプルサブスクリプションの例

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: loki-operator
        namespace: openshift-operators-redhat
      spec:
        channel: "stable-6.0"
        installPlanApproval: Manual
        name: loki-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace
        config:
          env:
          - name: ROLEARN
            value: <role_ARN>
      Copy to Clipboard Toggle word wrap

4.5.9. ノードの障害を許容するための Loki の設定

Loki Operator は、同じコンポーネントの Pod がクラスター内の異なる使用可能なノードにスケジュールされるように要求する Pod アンチアフィニティールールの設定をサポートしています。

アフィニティーとは、スケジュールするノードを制御する Pod の特性です。非アフィニティーとは、Pod がスケジュールされることを拒否する Pod の特性です。

Red Hat OpenShift Service on AWS では、Pod のアフィニティーPod の非アフィニティー によって、他の Pod のキー/値ラベルに基づいて、Pod のスケジュールに適したノードを制限できます。

Operator は、すべての Loki コンポーネント (compactordistributorgatewayindexGatewayingesterquerierqueryFrontend、および ruler コンポーネントを含む) に対してデフォルトの優先 podAntiAffinity ルールを設定します。

requiredDuringSchedulingIgnoredDuringExecution フィールドに必要な設定を指定して、Loki コンポーネントの希望の podAntiAffinity 設定を上書きできます。

インジェスターコンポーネントのユーザー設定の例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
# ...
  template:
    ingester:
      podAntiAffinity:
      # ...
        requiredDuringSchedulingIgnoredDuringExecution: 
1

        - labelSelector:
            matchLabels: 
2

              app.kubernetes.io/component: ingester
          topologyKey: kubernetes.io/hostname
# ...
Copy to Clipboard Toggle word wrap

1
必要なルールを定義するスタンザです。
2
ルールを適用するために一致している必要のあるキー/値のペア (ラベル) です。

4.5.10. クラスターの再起動中の LokiStack 動作

Red Hat OpenShift Service on AWS クラスターが再起動しても、LokiStack の取り込みとクエリーパスは、ノードで使用可能な CPU およびメモリーリソースの範囲内で、引き続き動作します。つまり、Red Hat OpenShift Service on AWS クラスターの更新中に LokiStack でダウンタイムは発生しません。この動作は、PodDisruptionBudget リソースを使用して実現されます。Loki Operator は、Loki に PodDisruptionBudget リソースをプロビジョニングするため、特定の条件下で通常の動作を保証するためにコンポーネントごとに必要最小限、使用可能な Pod 数が決定されます。

4.5.10.1. 高度なデプロイメントとスケーラビリティー

高可用性、スケーラビリティー、エラー処理のための特殊な設定。

4.5.11. ゾーン対応のデータレプリケーション

Loki Operator は、Pod トポロジーの分散制約を通じて、ゾーン対応のデータレプリケーションのサポートを提供します。この機能を有効にすると、信頼性が向上し、1 つのゾーンで障害が発生した場合のログ損失に対する保護が強化されます。デプロイメントサイズを 1x.extra-small1x.small、または 1x.medium に設定すると、replication.factor フィールドは自動的に 2 に設定されます。

適切なレプリケーションを実現するには、少なくともレプリケーション係数で指定されているのと同じ数のアベイラビリティーゾーンが必要です。レプリケーション係数より多くのアベイラビリティーゾーンを設定することは可能ですが、ゾーンが少ないと書き込みエラーが発生する可能性があります。最適な運用を実現するには、各ゾーンで同じ数のインスタンスをホストする必要があります。

ゾーンレプリケーションが有効になっている LokiStack CR の例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
 name: logging-loki
 namespace: openshift-logging
spec:
 replicationFactor: 2 
1

 replication:
   factor: 2 
2

   zones:
   -  maxSkew: 1 
3

      topologyKey: topology.kubernetes.io/zone 
4
Copy to Clipboard Toggle word wrap

1
非推奨のフィールド。入力された値は replication.factor によって上書きされます。
2
この値は、セットアップ時にデプロイメントサイズが選択されると自動的に設定されます。
3
任意の 2 つのトポロジードメイン間の Pod 数の最大差。デフォルトは 1 で、0 の値を指定することはできません。
4
ノードラベルに対応するトポロジーキーの形式でゾーンを定義します。

4.5.12. 障害が発生したゾーンからの Loki Pod の回復

Red Hat OpenShift Service on AWS では、特定のアベイラビリティーゾーンのリソースがアクセスできなくなると、ゾーン障害が発生します。アベイラビリティーゾーンは、冗長性とフォールトトレランスを強化することを目的とした、クラウドプロバイダーのデータセンター内の分離されたエリアです。Red Hat OpenShift Service on AWS クラスターがこの問題を処理するように設定されていない場合、ゾーン障害によりサービスまたはデータの損失が発生する可能性があります。

Loki Pod は StatefulSet の一部であり、StorageClass オブジェクトによってプロビジョニングされた永続ボリューム要求 (PVC) が付属しています。各 Loki Pod とその PVC は同じゾーンに存在します。クラスターでゾーン障害が発生すると、StatefulSet コントローラーが、障害が発生したゾーン内の影響を受けた Pod の回復を自動的に試みます。

警告

次の手順では、障害が発生したゾーン内の PVC とそこに含まれるすべてのデータを削除します。完全なデータ損失を回避するには、LokiStack CR のレプリケーション係数フィールドを常に 1 より大きい値に設定して、Loki が確実にレプリケートされるようにする必要があります。

前提条件

  • LokiStack CR のレプリケーション係数が 1 より大きいことを確認している。
  • コントロールプレーンによってゾーン障害が検出され、障害が発生したゾーン内のノードがクラウドプロバイダー統合によってマークされている。

StatefulSet コントローラーは、障害が発生したゾーン内の Pod を自動的に再スケジュールしようとします。関連する PVC も障害が発生したゾーンにあるため、別のゾーンへの自動再スケジュールは機能しません。新しいゾーンでステートフル Loki Pod とそのプロビジョニングされた PVC を正常に再作成できるようにするには、障害が発生したゾーンの PVC を手動で削除する必要があります。

手順

  1. 次のコマンドを実行して、Pending 中ステータスの Pod をリスト表示します。

    $ oc get pods --field-selector status.phase==Pending -n openshift-logging
    Copy to Clipboard Toggle word wrap

    oc get pods の出力例

    NAME                           READY   STATUS    RESTARTS   AGE 
    1
    
    logging-loki-index-gateway-1   0/1     Pending   0          17m
    logging-loki-ingester-1        0/1     Pending   0          16m
    logging-loki-ruler-1           0/1     Pending   0          16m
    Copy to Clipboard Toggle word wrap

    1
    これらの Pod は、障害が発生したゾーンに対応する PVC があるため、Pending ステータスになっています。
  2. 次のコマンドを実行して、Pending ステータスの PVC をリストします。

    $ oc get pvc -o=json -n openshift-logging | jq '.items[] | select(.status.phase == "Pending") | .metadata.name' -r
    Copy to Clipboard Toggle word wrap

    oc get pvc の出力例

    storage-logging-loki-index-gateway-1
    storage-logging-loki-ingester-1
    wal-logging-loki-ingester-1
    storage-logging-loki-ruler-1
    wal-logging-loki-ruler-1
    Copy to Clipboard Toggle word wrap

  3. 次のコマンドを実行して Pod の PVC を削除します。

    $ oc delete pvc <pvc_name> -n openshift-logging
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを実行して Pod を削除します。

    $ oc delete pod <pod_name> -n openshift-logging
    Copy to Clipboard Toggle word wrap

    これらのオブジェクトが正常に削除されると、使用可能なゾーンでオブジェクトが自動的に再スケジュールされます。

4.5.12.1. terminating 状態の PVC のトラブルシューティング

PVC メタデータファイナライザーが kubernetes.io/pv-protection に設定されている場合、PVC が削除されずに terminating 状態でハングする可能性があります。ファイナライザーを削除すると、PVC が正常に削除されるようになります。

  • 以下のコマンドを実行して各 PVC のファイナライザーを削除し、削除を再試行します。

    $ oc patch pvc <pvc_name> -p '{"metadata":{"finalizers":null}}' -n openshift-logging
    Copy to Clipboard Toggle word wrap

4.5.13. Loki レート制限エラーのトラブルシューティング

Log Forwarder API がレート制限を超える大きなメッセージブロックを Loki に転送すると、Loki により、レート制限 (429) エラーが生成されます。

これらのエラーは、通常の動作中に発生する可能性があります。たとえば、すでにいくつかのログがあるクラスターにロギングを追加する場合、ロギングが既存のログエントリーをすべて取り込もうとするとレート制限エラーが発生する可能性があります。この場合、新しいログの追加速度が合計レート制限よりも低い場合、履歴データは最終的に取り込まれ、ユーザーの介入を必要とせずにレート制限エラーが解決されます。

レート制限エラーが引き続き発生する場合は、LokiStack カスタムリソース (CR) を変更することで問題を解決できます。

重要

LokiStack CR は、Grafana がホストする Loki では利用できません。このトピックは、Grafana がホストする Loki サーバーには適用されません。

条件

  • Log Forwarder API は、ログを Loki に転送するように設定されている。
  • システムは、次のような 2MB を超えるメッセージのブロックを Loki に送信する。以下に例を示します。

    "values":[["1630410392689800468","{\"kind\":\"Event\",\"apiVersion\":\
    .......
    ......
    ......
    ......
    \"received_at\":\"2021-08-31T11:46:32.800278+00:00\",\"version\":\"1.7.4 1.6.0\"}},\"@timestamp\":\"2021-08-31T11:46:32.799692+00:00\",\"viaq_index_name\":\"audit-write\",\"viaq_msg_id\":\"MzFjYjJkZjItNjY0MC00YWU4LWIwMTEtNGNmM2E5ZmViMGU4\",\"log_type\":\"audit\"}"]]}]}
    Copy to Clipboard Toggle word wrap
  • oc logs -n openshift-logging -l component=collector と入力すると、クラスター内のコレクターログに、次のいずれかのエラーメッセージを含む行が表示されます。

    429 Too Many Requests Ingestion rate limit exceeded
    Copy to Clipboard Toggle word wrap

    Vector エラーメッセージの例

    2023-08-25T16:08:49.301780Z  WARN sink{component_kind="sink" component_id=default_loki_infra component_type=loki component_name=default_loki_infra}: vector::sinks::util::retries: Retrying after error. error=Server responded with an error: 429 Too Many Requests internal_log_rate_limit=true
    Copy to Clipboard Toggle word wrap

    このエラーは受信側にも表示されます。たとえば、LokiStack 取り込み Pod で以下を行います。

    Loki 取り込みエラーメッセージの例

    level=warn ts=2023-08-30T14:57:34.155592243Z caller=grpc_logging.go:43 duration=1.434942ms method=/logproto.Pusher/Push err="rpc error: code = Code(429) desc = entry with timestamp 2023-08-30 14:57:32.012778399 +0000 UTC ignored, reason: 'Per stream rate limit exceeded (limit: 3MB/sec) while attempting to ingest for stream
    Copy to Clipboard Toggle word wrap

手順

  • LokiStack CR の ingestionBurstSize および ingestionRate フィールドを更新します。

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki
      namespace: openshift-logging
    spec:
      limits:
        global:
          ingestion:
            ingestionBurstSize: 16 
    1
    
            ingestionRate: 8 
    2
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    ingestionBurstSize フィールドは、ディストリビューターレプリカごとに最大ローカルレート制限サンプルサイズを MB 単位で定義します。この値はハードリミットです。この値を、少なくとも 1 つのプッシュリクエストで想定される最大ログサイズに設定します。ingestionBurstSize 値より大きい単一リクエストは使用できません。
    2
    ingestionRate フィールドは、1 秒あたりに取り込まれるサンプルの最大量 (MB 単位) に対するソフト制限です。ログのレートが制限を超えているにもかかわらず、コレクターがログの送信を再試行すると、レート制限エラーが発生します。合計平均が制限よりも少ない場合に限り、システムは回復し、ユーザーの介入なしでエラーが解決されます。

4.6. ロギングの可視化

ロギングの可視化は、Cluster Observability Operator の Logging UI プラグインをデプロイすることで提供されます。そのためには Operator のインストールが必要です。

重要

現在は テクノロジープレビュー (TP) 機能である Cluster Observability Operator (COO) の一般提供 (GA) リリースが近づくまで、Red Hat は、Red Hat OpenShift Service on AWS 4.14 以降の Logging UI プラグインの COO で Logging 6.0 以降を使用しているお客様にサポートを提供します。COO にはいくつかの独立した機能が含まれており、その一部はまだテクノロジープレビュー機能であるため、このサポート例外は一時的なものです。ただし、Logging UI プラグインは GA の準備が完了しています。

Legal Notice

Copyright © 2025 Red Hat

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat