Logging
OpenShift Container Platform でのロギングの設定と使用
概要
第1章 Logging 6.2
1.1. サポート
このドキュメントで説明されている設定オプションのみがロギングでサポートされています。
他の設定オプションはサポートされていないため、使用しないでください。設定のパラダイムが OpenShift Container Platform リリース間で変更される可能性があり、このような変更は、設定のすべての可能性が制御されている場合のみ適切に対応できます。Operator は相違点を調整するように設計されているため、このドキュメントで説明されている以外の設定を使用すると、変更は上書きされます。
OpenShift Container Platform ドキュメントで説明されていない設定を実行する必要がある場合は、Red Hat OpenShift Logging Operator を Unmanaged
に設定する必要があります。管理外のロギングインスタンスはサポートされていないため、ステータスを Managed
に戻すまで更新は受信されません。
Logging は、コアの OpenShift Container Platform とは異なるリリースサイクルで、インストール可能なコンポーネントとして提供されます。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) のログコレクター設定
- 履歴または長期のログの保持または保管
- 保証されたログシンク
- 安全なストレージ - 監査ログはデフォルトでは保存されません
1.1.1. サポート対象の API カスタムリソース定義
次の表は、サポートされている 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 からサポート |
1.1.2. サポートされない設定
以下のコンポーネントを変更するには、Red Hat OpenShift Logging Operator を Unmanaged
(管理外) の状態に設定する必要があります。
- コレクター設定ファイル
- コレクター daemonset
明示的にサポート対象外とされているケースには、以下が含まれます。
- 環境変数を使用したロギングコレクターの設定。環境変数を使用してログコレクターを変更することはできません。
- ログコレクターによってログを正規化する方法の設定。デフォルトのログの正規化を変更することはできません。
1.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.
警告CVO のオーバーライドを設定すると、クラスター全体がサポートされない状態になります。サポートを継続するには、オーバーライドを削除した後に、報告された問題を再現する必要があります。
1.1.4. Red Hat サポート用のロギングデータの収集
サポートケースを作成する際、ご使用のクラスターのデバッグ情報を Red Hat サポートに提供していただくと Red Hat のサポートに役立ちます。
must-gather ツール を使用すると、プロジェクトレベルのリソース、クラスターレベルのリソース、および各ロギングコンポーネントの診断情報を収集できます。迅速なサポートを得るには、OpenShift Container Platform とロギングの両方の診断情報を提供してください。
1.1.4.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
で始まる新規ディレクトリーに保存されます。このディレクトリーは、現行の作業ディレクトリーに作成されます。
1.1.4.2. ロギングデータの収集
oc adm must-gather
CLI コマンドを使用して、ロギングに関する情報を収集できます。
手順
must-gather
でロギング情報を収集するには、以下を実行します。
-
must-gather
情報を保存する必要のあるディレクトリーに移動します。 ログイメージに対して
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}')
must-gather
ツールは、現行ディレクトリー内のmust-gather.local
で始まる新規ディレクトリーを作成します。例:must-gather.local.4157245944708210408
作成された
must-gather
ディレクトリーから圧縮ファイルを作成します。たとえば、Linux オペレーティングシステムを使用するコンピューターで以下のコマンドを実行します。$ tar -cvaf must-gather.tar.gz must-gather.local.4157245944708210408
- 圧縮ファイルを Red Hat カスタマーポータル で作成したサポートケースに添付します。
1.2. Logging 6.2 リリースノート
1.2.1. Logging 6.2.2 リリースノート
このリリースには RHBA-2025:4526 が含まれています。
1.2.1.1. バグ修正
-
この更新前は、
responseStatus.code
フィールドのないログによって、Lokidistributor
コンポーネントで解析エラーが発生していました。これは、OpenTelemetry データモデルを使用している場合に発生しました。この更新により、responseStatus.code
フィールドのないログが正しく解析されるようになりました。(LOG-7012) - この更新前は、Cloudwatch 出力は最大 256 KB のログイベントをサポートしていました。この更新により、Cloudwatch 出力は、Amazon Web Services (AWS) が公開した更新に合わせて最大 1 MB のサイズをサポートするようになりました。(LOG-7013)
-
この更新前は、標準の
auditd
ログ形式ではmsg=audit(TIMESTAMP:ID)
構造のログエントリーごとに 1 つのmsg
フィールドが想定されていたため、複数のmsg
キーを持つauditd
ログメッセージが原因でコレクター Pod でエラーが発生する可能性がありました。この更新により、最初のmsg
値のみが使用されるようになり、問題が解決され、監査メタデータが正確に抽出されます。(LOG-7014) - この更新前は、Elasticsearch 出力でトークンベースの認証を試行すると、設定エラーのためにコレクター Pod でクラッシュループが発生していました。この更新により、Elasticsearch 出力を使用したトークン認証によって有効な設定が生成されます。(LOG-7017)
1.2.2. Logging 6.2.1 リリースノート
このリリースには RHBA-2025:3908 が含まれています。
1.2.2.1. バグ修正
-
この更新前は、管理クラスターから収集されたアプリケーションプログラミングインターフェイス (API) 監査ログで、管理クラスターの
cluster_id
値が使用されていました。この更新により、API 監査ログがゲストクラスターのcluster_id
値を使用するようになりました。(LOG-4445) -
この更新前は、
oc explain obsclf.spec.filters
コマンドを発行しても、サポートされているすべてのフィルターがコマンド出力にリスト表示されませんでした。この更新により、サポートされているすべてのフィルタータイプがコマンド出力にリスト表示されるようになりました。(LOG-6753) -
この更新前は、ログコレクターが、LokiStack 出力への入力が複数存在する
ClusterLogForwarder
リソースを無効としてフラグ付けしていました。これはログコレクターの内部処理ロジックが正しくないことが原因でした。今回の更新でこの問題が修正されています。(LOG-6758) -
この更新前は、
clusterlogforwarder.spec.outputs.syslog
リソースに対してoc explain
コマンドを発行すると、不完全な結果が返されていました。この更新により、RFC
およびenrichment
属性でサポートされていない型が結果に正しくリスト表示されるようになりました。(LOG-6869) - この更新前は、OpenTelemetry (OTEL) チューニング設定が空の場合、検証エラーが発生していました。この更新では、検証ルールが更新され、空のチューニング設定を受け入れるようになりました。(LOG-6878)
-
この更新前は、Red Hat OpenShift Logging Operator が、ログコレクターに必要な
securitycontextconstraint
リソースを更新できませんでした。この更新により、必要なクラスターロールが Red Hat OpenShift Logging Operator のサービスアカウントに提供されるようになりました。その結果、Red Hat OpenShift Logging Operator がsecuritycontextconstraint
リソースを作成または更新できるようになります。(LOG-6879) -
この更新前は、
syslog
リソースの URL 属性に関する API ドキュメントで、サポートされている値としてudps
値が誤って記載されていました。この更新により、udps
に関する記載がすべて削除されました。(LOG-6896) -
この更新前は、Red Hat OpenShift Logging Operator が、更新の競合により、ログ内のオブジェクトを時折更新できないことがありました。この更新により、問題が解決されました。
Update()
関数の代わりにPatch()
関数を使用することで、オブジェクトの更新中に競合が発生しなくなりました。(LOG-6953) - この更新前は、ネットワークの問題により異常な状態になった Loki インジェスターが、ネットワークが回復した後もその状態のままでした。この更新により、サービス検出の実行頻度を上げるように Loki Operator を設定して、異常なインジェスターをグループに再参加させることが可能になりました。(LOG-6992)
- この更新前は、Vector コレクターが Open Virtual Network (OVN) および Auditd ログを転送できませんでした。この更新により、Vector コレクターが OVN および Auditd ログを転送できるようになりました。(LOG-6997)
1.2.2.2. CVE
1.2.3. Logging 6.2.0 リリースノート
このリリースには、Logging for Red Hat OpenShift バグ修正リリース 6.2.0 が含まれています。
1.2.3.1. 新機能および改良された機能
1.2.3.1.1. ログの収集
-
この更新により、HTTP 出力に、HTTP プロキシー経由でログデータを送信するために使用できる
proxy
フィールドが含まれるようになりました。(LOG-6069)
1.2.3.1.2. ログのストレージ
- この更新により、Loki での時間ベースのストリームシャーディングが Loki Operator によって有効になりました。これにより、Loki が使用するスライディングタイムウィンドウよりも古いログエントリーが取り込まれる問題が解決されます。(LOG-6757)
- この更新により、Swift をオブジェクトストアとして使用するときに、Loki Operator を使用してカスタム認証局 (CA) 証明書を設定できるようになりました。(LOG-4818)
- この更新により、OpenShift 4.17 以降のリリースで Cluster Credential Operator を Loki Operator とともに使用して、Google Cloud Platform (GCP) で Workload Identity Federation を設定できるようになりました。(LOG-6158)
1.2.3.2. テクノロジープレビュー
OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
-
この更新により、OpenShift Logging が提供する OpenTelemetry サポートがさらに改善されます。特に、
LokiStack
への転送時に ViaQ データモデルからOpenTelemetry
への移行が可能になる点が改善されます。(LOG-6146) -
この更新により、
otlp
設定の Loki Operator からstructuredMetadata
フィールドが削除されました。これは、構造化メタデータがデフォルトのタイプになったことによるものです。さらに、この更新により、OpenTelemetry
プロトコル (OTLP) を介してデータを受信する場合に管理者がOpenTelemetry
属性をドロップするのに使用できるdrop
フィールドが導入されています。(LOG-6507)
1.2.3.3. バグ修正
-
この更新前は、コンソールログに表示されるタイムスタンプが、メッセージ内の
@timestamp
フィールドと一致しませんでした。この更新により、タイムスタンプがコンソールに正しく表示されるようになります。(LOG-6222) -
ClusterLogForwarder
6.x の導入に伴い、一貫したテンプレートメカニズムを実現するためにClusterLogForwarder
API が変更されました。しかし、これはfacility
およびseverity
フィールドのsyslog
出力仕様 API には適用されていませんでした。この更新により、facility
およびseverity
フィールドに必要な検証がClusterLogForwarder
API に追加されます。(LOG-6661) -
この更新前は、
LokiStack
サイズとして1x.pico
が設定されている場合、Loki 設定を生成する Loki Operator のエラーにより、削除されるワーカーの数がゼロになっていました。この更新では、削除するワーカーの数が 10 に設定されます。(LOG-6781)
1.2.3.4. 既知の問題
以前のデータモデルでは、すべての情報が JSON でエンコードされていました。コンソールでは、現在も以前のデータモデルのクエリーを使用して、古いエントリーと新しいエントリーの両方をデコードします。
LokiStack
出力用の新しいOpenTelemetry
データモデルを使用して保存されたログでは、ログコンソールに次のエラーが表示されます。__error__ JSONParserErr __error_details__ Value looks like object, but can't find closing '}' symbol
このエラーはクエリーの結果にすぎず、データ関連のエラーではないため、無視できます。(LOG-6808)
-
現在、API ドキュメントの
drop
フィールドの説明で、OpenTelemetry
プロトコル (OTLP) 属性がexcluded
ではなくincluded
と誤って記載されています。(LOG-6839).
1.2.3.5. CVE
1.3. Logging 6.2
ClusterLogForwarder
カスタムリソース (CR) は、ログの収集と転送の中心的な設定ポイントです。
1.3.1. 入力と出力
入力では、転送するログのソースを指定します。Logging には、クラスターのさまざまな部分からログを選択する次の組み込みの入力タイプが用意されています。
-
application
-
receiver
-
infrastructure
-
audit
namespace または Pod ラベルに基づいてカスタム入力を定義し、ログの選択を微調整することもできます。
出力は、ログが送信される宛先を定義します。各出力タイプには独自の設定オプションセットがあり、動作と認証設定をカスタマイズできます。
1.3.2. レシーバー入力タイプ
レシーバー入力タイプにより、Logging システムは外部ソースからのログを受け入れることができます。ログを受信するための 2 つの形式 (http
と syslog
) がサポートされます。
ReceiverSpec
フィールドでレシーバー入力の設定を定義します。
1.3.3. パイプラインとフィルター
パイプラインは、入力から出力へのログのフローを決定します。パイプラインは、1 つ以上の入力参照、出力参照、およびオプションのフィルター参照で構成されます。フィルターを使用すると、パイプライン内のログメッセージを変換または削除できます。フィルターは順番に適用されるため、フィルターの順序は重要であり、最初の方のフィルターを使用すると、ログメッセージが後のステージに到達するのを防ぐことができます。
1.3.4. Operator の動作
Cluster Logging Operator は、ClusterLogForwarder
リソースの managementState
フィールドに基づき、コレクターのデプロイメントと設定を管理します。
-
Managed
(デフォルト) に設定すると、仕様で定義された設定に合わせて、Operator がロギングリソースをアクティブに管理します。 -
Unmanaged
に設定すると、Operator はアクションを実行せず、ロギングコンポーネントを手動で管理できます。
1.3.5. 検証
ロギングには、スムーズでエラーのない設定エクスペリエンスを確保するために、広範な検証ルールやデフォルト値が含まれます。ClusterLogForwarder
リソースは、必須フィールド、フィールド間の依存関係、および入力値の形式の検証チェックを強制します。特定のフィールドにはデフォルト値が提供されるため、一般的なシナリオで明示的な設定を行う必要性が軽減されます。
1.3.6. クイックスタート
OpenShift Logging は 2 つのデータモデルをサポートしています。
- ViaQ (一般提供)
- OpenTelemetry (テクノロジープレビュー)
ClusterLogForwarder
の lokiStack.dataModel
フィールドを設定することにより、要件に基づきこれらのデータモデルのいずれかを選択できます。ViaQ は、ログを LokiStack に転送する際のデフォルトのデータモデルです。
OpenShift Logging の今後のリリースでは、デフォルトのデータモデルが ViaQ から OpenTelemetry に変更されます。
1.3.6.1. ViaQ のクイックスタート
デフォルトの ViaQ データモデルを使用するには、次の手順に従います。
前提条件
-
cluster-admin
権限を使用して OpenShift Container Platform クラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。 - サポートされているオブジェクトストアにアクセスできる。たとえば、AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation などです。
手順
-
OperatorHub から
Red Hat OpenShift Logging Operator
、Loki Operator
、およびCluster Observability Operator (COO)
をインストールします。 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
注記事前に
logging-loki-s3
シークレットが事前に作成されていることを確認します。このシークレットの内容は、使用しているオブジェクトストレージにより異なります。詳細は、シークレットと TLS 設定を参照してください。コレクターのサービスアカウントを作成します。
$ oc create sa collector -n openshift-logging
コレクターのサービスアカウントによる
LokiStack
CR へのデータ書き込みを許可します。$ oc adm policy add-cluster-role-to-user logging-collector-logs-writer -z collector -n openshift-logging
注記ClusterRole
リソースは、Cluster Logging Operato のインストール中に自動的に作成されるため、手動で作成する必要はありません。ログを収集するために、次のコマンドを実行してコレクターのサービスアカウントを使用します。
$ oc adm policy add-cluster-role-to-user collect-application-logs -z collector -n openshift-logging
$ oc adm policy add-cluster-role-to-user collect-audit-logs -z collector -n openshift-logging
$ oc adm policy add-cluster-role-to-user collect-infrastructure-logs -z collector -n openshift-logging
注記この例では、コレクターを 3 つのロール (アプリケーション、インフラストラクチャー、監査) すべてにバインドしますが、デフォルトでは、アプリケーションログとインフラストラクチャーログのみが収集されます。監査ログを収集するには、
ClusterLogForwarder
設定を更新して監査ログを含めます。環境に必要な特定のログタイプに基づきロールを割り当てます。UIPlugin
CR を作成して、Observe タブの Log セクションを有効にします。apiVersion: observability.openshift.io/v1alpha1 kind: UIPlugin metadata: name: logging spec: type: Logging logging: lokiStack: name: logging-loki
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
注記dataModel
フィールドはオプションであり、デフォルトでは未設定 (dataModel: ""
) になっています。これにより、Cluster Logging Operator (CLO) はデータモデルを自動的に選択できるようになります。現在、このフィールドが設定されていない場合の CLO はデフォルトで ViaQ モデルになりますが、これは今後のリリースで変更される予定です。dataModel: ViaQ
を指定すると、デフォルトが変更されても設定の互換性が維持されます。
検証
- OpenShift Container Platform Web コンソールの Observe タブの Log セクションにログが表示されていることを確認します。
1.3.6.2. OpenTelemetry のクイックスタート
OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
OTLP 取り込みを設定し、OpenTelemetry データモデルを有効にするには、次の手順を実行します。
前提条件
- クラスター管理者のパーミッション。
手順
- OperatorHub から、Red Hat OpenShift Logging Operator、Loki Operator、Cluster Observability Operator (COO) をインストールします。
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
注記事前に
logging-loki-s3
シークレットが事前に作成されていることを確認します。このシークレットの内容は、使用しているオブジェクトストレージにより異なります。詳細は、「シークレットと TLS 設定」を参照してください。コレクターのサービスアカウントを作成します。
$ oc create sa collector -n openshift-logging
コレクターのサービスアカウントによる
LokiStack
CR へのデータ書き込みを許可します。$ oc adm policy add-cluster-role-to-user logging-collector-logs-writer -z collector
注記ClusterRole
リソースは、Cluster Logging Operato のインストール中に自動的に作成されるため、手動で作成する必要はありません。コレクターのサービスアカウントによるログ収集を許可します。
$ oc project openshift-logging
$ oc adm policy add-cluster-role-to-user collect-application-logs -z collector
$ oc adm policy add-cluster-role-to-user collect-audit-logs -z collector
$ oc adm policy add-cluster-role-to-user collect-infrastructure-logs -z collector
注記この例では、コレクターを 3 つのロール (アプリケーション、インフラストラクチャー、監査) すべてにバインドします。デフォルトでは、アプリケーションログとインフラストラクチャーログのみが収集されます。監査ログを収集するには、
ClusterLogForwarder
設定を更新して監査ログを含めます。環境に必要な特定のログタイプに基づきロールを割り当てます。UIPlugin
CR を作成して、Observe タブの Log セクションを有効にします。apiVersion: observability.openshift.io/v1alpha1 kind: UIPlugin metadata: name: logging spec: type: Logging logging: lokiStack: name: logging-loki
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
注記dataModel
がOtel
の場合、lokiStack.labelKeys
は使用できません。dataModel
がOtel
の場合に同様の機能を得るには、「OTLP データ取り込み用の LokiStack 設定」を参照してください。
検証
- OpenShift Web コンソールで Observe → OpenShift Logging → LokiStack → Writes に移動し、Distributor - Structured Metadata を確認して、OTLP が正常に機能していることを確認します。
1.4. ロギングのインストール
OpenShift Container Platform Operator は、カスタムリソース (CR) を使用してアプリケーションとそのコンポーネントを管理します。ユーザーは、CR を通じて高レベルの構成と設定を指定します。Operator は、Operator のロジックに組み込まれたベストプラクティスに基づいて、高レベルの指示を低レベルのアクションに変換します。カスタムリソース定義 (CRD) は CR を定義し、Operator のユーザーが使用できるすべての設定をリストします。Operator をインストールすると、CR を生成するための CRD が作成されます。
ロギングを開始するには、次の Operator をインストールする必要があります。
- ログストアを管理する Loki Operator。
- ログの収集と転送を管理する Red Hat OpenShift Logging Operator。
- 視覚化を管理する Cluster Observability Operator (COO)。
ロギングをインストールまたは設定するには、OpenShift Container Platform Web コンソールまたは OpenShift Container Platform CLI のいずれかを使用できます。
Loki Operator の後に Red Hat OpenShift Logging Operator を設定する必要があります。
1.4.1. CLI を使用したインストール
次のセクションでは、CLI を使用して Loki Operator と Red Hat OpenShift Logging Operator をインストールする方法について説明します。
1.4.1.1. CLI を使用した Loki Operator のインストール
OpenShift Container Platform コマンドラインインターフェイス (CLI) を使用して、ログストア Loki
を管理するための Loki Operator を OpenShift Container Platform クラスターにインストールします。リソース LokiStack を Loki Operator と調整することで、Loki
ログストアをデプロイおよび設定できます。
前提条件
- 管理者権限がある。
-
OpenShift CLI (
oc
) がインストールされている。 - サポートされているオブジェクトストアにアクセスできる。例: AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation。
手順
Loki Operator の
Namespace
オブジェクトを作成します。Namespace
オブジェクトの例apiVersion: v1 kind: Namespace metadata: name: openshift-operators-redhat 1 labels: openshift.io/cluster-monitoring: "true" 2
- 1
- namespace として
openshift-operators-redhat
を指定する必要があります。Operator の監視を有効にするには、openshift-operators-redhat
namespace ではなくopenshift-operators
namespace からメトリクスを取得するように Cluster Monitoring Operator を設定します。openshift-operators
namespace には、信頼されていないコミュニティー Operator が含まれている可能性があります。コミュニティー Operator は、OpenShift Container Platform メトリクスと同じ名前のメトリクスを公開して競合を引き起こす可能性があります。 - 2
- クラスターモニタリングが
openshift-operators-redhat
namespace をスクレイピングできるようにするために、示されているラベルを指定する文字列値。
次のコマンドを実行して、
Namespace
オブジェクトを適用します。$ oc apply -f <filename>.yaml
OperatorGroup
オブジェクトを作成します。OperatorGroup
オブジェクトのサンプルapiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: loki-operator namespace: openshift-operators-redhat 1 spec: upgradeStrategy: Default
- 1
- namespace として
openshift-operators-redhat
を指定する必要があります。
以下のコマンドを実行して
OperatorGroup
オブジェクトを適用します。$ oc apply -f <filename>.yaml
Loki Operator の
Subscription
オブジェクトを作成します。Subscription
オブジェクトの例apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: loki-operator namespace: openshift-operators-redhat 1 spec: channel: stable-6.<y> 2 installPlanApproval: Automatic 3 name: loki-operator source: redhat-operators 4 sourceNamespace: openshift-marketplace
- 1
- namespace として
openshift-operators-redhat
を指定する必要があります。 - 2
- チャネルとして
stable-6.<y>
を指定します。 - 3
- サブスクリプションの承認ストラテジーが
Automatic
に設定されている場合、選択したチャネルで新しい Operator バージョンが利用可能になると、すぐに更新プロセスが開始します。承認ストラテジーがManual
に設定されている場合は、保留中のアップグレードを手動で承認する必要があります。 - 4
- 値として
redhat-operators
を指定します。OpenShift Container Platform クラスターが制限付きネットワークにインストールされている場合 (非接続クラスターの場合)、Operator Lifecycle Manager (OLM) の設定時に作成したCatalogSource
オブジェクトの名前を指定します。
以下のコマンドを実行して
Subscription
オブジェクトを適用します。$ oc apply -f <filename>.yaml
LokiStack をデプロイするための
namespace
オブジェクトを作成します。namespace
オブジェクトの例apiVersion: v1 kind: Namespace metadata: name: openshift-logging 1 labels: openshift.io/cluster-monitoring: "true" 2
次のコマンドを実行して、
namespace
オブジェクトを適用します。$ oc apply -f <filename>.yaml
オブジェクトストレージにアクセスするための認証情報を含むシークレットを作成します。たとえば、Amazon Web Services (AWS) s3 にアクセスするためのシークレットを作成します。
Secret
オブジェクトの例apiVersion: v1 kind: Secret metadata: name: logging-loki-s3 1 namespace: openshift-logging stringData: 2 access_key_id: <access_key_id> access_key_secret: <access_secret> bucketnames: s3-bucket-name endpoint: https://s3.eu-central-1.amazonaws.com region: eu-central-1
重要s3 バケットまたは LokiStack カスタムリソース (CR) に保存期間が定義されていない場合、ログは削除されず、s3 バケットに永久に残り、s3 ストレージがいっぱいになる可能性があります。
次のコマンドを実行して、
Secret
オブジェクトを適用します。$ oc apply -f <filename>.yaml
LokiStack
CR を作成します。LokiStack
CR の例apiVersion: loki.grafana.com/v1 kind: LokiStack metadata: name: logging-loki 1 namespace: openshift-logging 2 spec: size: 1x.small 3 storage: schemas: - version: v13 effectiveDate: "<yyyy>-<mm>-<dd>" 4 secret: name: logging-loki-s3 5 type: s3 6 storageClassName: <storage_class_name> 7 tenants: mode: openshift-logging 8
- 1
logging-loki
という名前を使用します。- 2
- namespace として
openshift-logging
を指定する必要があります。 - 3
- デプロイメントサイズを指定します。Loki の実稼働インスタンスでサポートされているサイズオプションは、
1x.extra-small
、1x.small
、または1x.medium
です。さらに、logging 6.1 以降では1x.pico
がサポートされています。 - 4
- この日付はスキーマが有効になる日付であるため、新規インストールの場合、"昨日" に相当する日付に設定する必要があります。
- 5
- ログストアシークレットの名前を指定します。
- 6
- 対応するストレージタイプを指定します。
- 7
- 一時ストレージのストレージクラスの名前を指定します。最適なパフォーマンスを得るには、ブロックストレージを割り当てるストレージクラスを指定します。
oc get storageclasses
コマンドを使用して、クラスターで使用可能なストレージクラスをリスト表示できます。 - 8
openshift-logging
モードは、デフォルトのテナンシーモードです。このモードでは、監査、インフラストラクチャー、アプリケーションなどのログタイプに対してテナントが作成されます。これにより、個々のユーザーおよびユーザーグループのさまざまなログストリームのアクセス制御が可能になります。
次のコマンドを実行して、
LokiStack
CR オブジェクトを適用します。$ oc apply -f <filename>.yaml
検証
次のコマンドを実行して、インストールを確認します。
$ oc get pods -n openshift-logging
出力例
$ oc get pods -n openshift-logging NAME READY STATUS RESTARTS AGE logging-loki-compactor-0 1/1 Running 0 42m logging-loki-distributor-7d7688bcb9-dvcj8 1/1 Running 0 42m logging-loki-gateway-5f6c75f879-bl7k9 2/2 Running 0 42m logging-loki-gateway-5f6c75f879-xhq98 2/2 Running 0 42m logging-loki-index-gateway-0 1/1 Running 0 42m logging-loki-ingester-0 1/1 Running 0 42m logging-loki-querier-6b7b56bccc-2v9q4 1/1 Running 0 42m logging-loki-query-frontend-84fb57c578-gq2f7 1/1 Running 0 42m
1.4.1.2. CLI を使用した Red Hat OpenShift Logging Operator のインストール
OpenShift CLI (oc
) を使用してログを収集し、ログストアに転送するには、OpenShift Container Platform クラスターに Red Hat OpenShift Logging Operator をインストールします。
前提条件
- 管理者権限がある。
-
OpenShift CLI (
oc
) がインストールされている。 - Loki Operator をインストールして設定した。
-
openshift-logging
namespace を作成した。
手順
OperatorGroup
オブジェクトを作成します。OperatorGroup
オブジェクトのサンプルapiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: cluster-logging namespace: openshift-logging 1 spec: upgradeStrategy: Default
- 1
- namespace として
openshift-logging
を指定する必要があります。
以下のコマンドを実行して
OperatorGroup
オブジェクトを適用します。$ oc apply -f <filename>.yaml
Red Hat OpenShift Logging Operator の
Subscription
オブジェクトを作成します。Subscription
オブジェクトの例apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: cluster-logging namespace: openshift-logging 1 spec: channel: stable-6.<y> 2 installPlanApproval: Automatic 3 name: cluster-logging source: redhat-operators 4 sourceNamespace: openshift-marketplace
- 1
- namespace として
openshift-logging
を指定する必要があります。 - 2
- チャネルとして
stable-6.<y>
を指定します。 - 3
- サブスクリプションの承認ストラテジーが
Automatic
に設定されている場合、選択したチャネルで新しい Operator バージョンが利用可能になると、すぐに更新プロセスが開始します。承認ストラテジーがManual
に設定されている場合は、保留中のアップグレードを手動で承認する必要があります。 - 4
- 値として
redhat-operators
を指定します。OpenShift Container Platform クラスターが制限付きネットワークにインストールされている場合 (非接続クラスターの場合)、Operator Lifecycle Manager (OLM) の設定時に作成したCatalogSource
オブジェクトの名前を指定します。
以下のコマンドを実行して
Subscription
オブジェクトを適用します。$ oc apply -f <filename>.yaml
ログコレクターが使用するサービスアカウントを作成します。
$ oc create sa logging-collector -n openshift-logging
コレクターがログを収集して転送できるように、サービスアカウントに必要な権限を割り当てます。この例では、コレクターにインフラストラクチャーログとアプリケーションログの両方を収集する権限を付与します。
$ oc adm policy add-cluster-role-to-user logging-collector-logs-writer -z logging-collector -n openshift-logging $ oc adm policy add-cluster-role-to-user collect-application-logs -z logging-collector -n openshift-logging $ oc adm policy add-cluster-role-to-user collect-infrastructure-logs -z logging-collector -n openshift-logging
ClusterLogForwarder
CR を作成します。ClusterLogForwarder
CR の例apiVersion: observability.openshift.io/v1 kind: ClusterLogForwarder metadata: name: instance namespace: openshift-logging 1 spec: serviceAccount: name: logging-collector 2 outputs: - name: lokistack-out type: lokiStack 3 lokiStack: target: 4 name: logging-loki namespace: openshift-logging authentication: token: from: serviceAccount tls: ca: key: service-ca.crt configMapName: openshift-service-ca.crt pipelines: - name: infra-app-logs inputRefs: 5 - application - infrastructure outputRefs: - lokistack-out
次のコマンドを実行して、
ClusterLogForwarder CR
オブジェクトを適用します。$ oc apply -f <filename>.yaml
検証
次のコマンドを実行して、インストールを確認します。
$ oc get pods -n openshift-logging
出力例
$ oc get pods -n openshift-logging NAME READY STATUS RESTARTS AGE cluster-logging-operator-fb7f7cf69-8jsbq 1/1 Running 0 98m instance-222js 2/2 Running 0 18m instance-g9ddv 2/2 Running 0 18m instance-hfqq8 2/2 Running 0 18m instance-sphwg 2/2 Running 0 18m instance-vv7zn 2/2 Running 0 18m instance-wk5zz 2/2 Running 0 18m logging-loki-compactor-0 1/1 Running 0 42m logging-loki-distributor-7d7688bcb9-dvcj8 1/1 Running 0 42m logging-loki-gateway-5f6c75f879-bl7k9 2/2 Running 0 42m logging-loki-gateway-5f6c75f879-xhq98 2/2 Running 0 42m logging-loki-index-gateway-0 1/1 Running 0 42m logging-loki-ingester-0 1/1 Running 0 42m logging-loki-querier-6b7b56bccc-2v9q4 1/1 Running 0 42m logging-loki-query-frontend-84fb57c578-gq2f7 1/1 Running 0 42m
1.4.2. Web コンソールを使用したインストール
次のセクションでは、Web コンソールを使用して Loki Operator と Red Hat OpenShift Logging Operator をインストールする方法について説明します。
1.4.2.1. Web コンソールを使用したロギングのインストール
OpenShift Container Platform Web コンソールを使用して、OperatorHub から、ログストア Loki
を管理するための Loki Operator を OpenShift Container Platform クラスターにインストールします。リソース LokiStack を Loki Operator と調整することで、Loki
ログストアをデプロイおよび設定できます。
前提条件
- 管理者権限がある。
- OpenShift Container Platform Web コンソールにアクセスできる。
- サポートされているオブジェクトストア (AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation) にアクセスできる。
手順
- OpenShift Container Platform Web コンソールの Administrator パースペクティブで、Operators → OperatorHub に移動します。
Filter by keyword フィールドに Loki Operator と入力します。使用可能な Operator のリストで Loki Operator をクリックし、Install をクリックします。
重要Community Loki Operator は Red Hat ではサポートされていません。
Update channel として stable-x.y を選択します。
Loki Operator は、グローバルの Operator グループの namespace
openshift-operators-redhat
にデプロイする必要があります。そのため、Installation mode と Installed Namespace はすでに選択されています。この namespace がまだ存在しない場合は、自動的に作成されます。Enable Operator-recommended cluster monitoring on this namespace. を選択します。
このオプションは、
Namespace
オブジェクトにopenshift.io/cluster-monitoring: "true"
ラベルを設定します。クラスターモニタリングがopenshift-operators-redhat
namespace を収集できるように、このオプションを選択する必要があります。Update approval で Automatic を選択し、Install をクリックします。
サブスクリプションの承認ストラテジーが Automatic に設定されている場合、アップグレードプロセスは、選択したチャネルで新規 Operator バージョンが利用可能になるとすぐに開始します。承認ストラテジーが Manual に設定されている場合は、保留中のアップグレードを手動で承認する必要があります。
注記インストールが完了する前に、Operator に
Failed
ステータスが表示される場合があります。Operator のインストールが完了し、InstallSucceeded
というメッセージが表示されたら、ページを更新してください。Operator をインストールしている間に、ログストアをデプロイする namespace を作成します。
- 画面右上の + をクリックして、Import YAML ページにアクセスします。
openshift-logging
namespace の YAML 定義を追加します。namespace
オブジェクトの例apiVersion: v1 kind: Namespace metadata: name: openshift-logging 1 labels: openshift.io/cluster-monitoring: "true" 2
- Create をクリックします。
オブジェクトストレージにアクセスするための認証情報を含むシークレットを作成します。
- 画面右上の + をクリックして、Import YAML ページにアクセスします。
シークレットの YAML 定義を追加します。たとえば、Amazon Web Services (AWS) s3 にアクセスするためのシークレットを作成します。
Secret
オブジェクトの例apiVersion: v1 kind: Secret metadata: name: logging-loki-s3 1 namespace: openshift-logging 2 stringData: 3 access_key_id: <access_key_id> access_key_secret: <access_key> bucketnames: s3-bucket-name endpoint: https://s3.eu-central-1.amazonaws.com region: eu-central-1
重要s3 バケットまたは LokiStack カスタムリソース (CR) に保存期間が定義されていない場合、ログは削除されず、s3 バケットに永久に残り、s3 ストレージがいっぱいになる可能性があります。
- Create をクリックします。
- Installed Operators ページに移動します。Provided API にある Loki Operator を選択し、LokiStack リソースを見つけて、Create Instance をクリックします。
YAML view を選択し、次のテンプレートを使用して
LokiStack
CR を作成します。LokiStack
CR の例apiVersion: loki.grafana.com/v1 kind: LokiStack metadata: name: logging-loki 1 namespace: openshift-logging 2 spec: size: 1x.small 3 storage: schemas: - version: v13 effectiveDate: "<yyyy>-<mm>-<dd>" secret: name: logging-loki-s3 4 type: s3 5 storageClassName: <storage_class_name> 6 tenants: mode: openshift-logging 7
- 1
logging-loki
という名前を使用します。- 2
- namespace として
openshift-logging
を指定する必要があります。 - 3
- デプロイメントサイズを指定します。Loki の実稼働インスタンスでサポートされているサイズオプションは、
1x.extra-small
、1x.small
、または1x.medium
です。さらに、logging 6.1 以降では 1x.pico がサポートされています。 - 4
- ログストアシークレットの名前を指定します。
- 5
- 対応するストレージタイプを指定します。
- 6
- 一時ストレージのストレージクラスの名前を指定します。最適なパフォーマンスを得るには、ブロックストレージを割り当てるストレージクラスを指定します。
oc get storageclasses
コマンドを使用して、クラスターで使用可能なストレージクラスをリスト表示できます。 - 7
openshift-logging
モードは、デフォルトのテナンシーモードです。このモードでは、監査、インフラストラクチャー、アプリケーションなどのログタイプに対してテナントが作成されます。これにより、個々のユーザーおよびユーザーグループのさまざまなログストリームのアクセス制御が可能になります。
- Create をクリックします。
検証
-
LokiStack タブで、
LokiStack
インスタンスが表示されていることを確認します。 -
Status 列に、
Condition: Ready
というメッセージが緑色のチェックマークとともに表示されていることを確認します。
1.4.2.2. Web コンソールを使用した Red Hat OpenShift Logging Operator のインストール
OpenShift Container Platform Web コンソールを使用して、OperatorHub から、ログを収集してログストアに転送するための Red Hat OpenShift Logging Operator を OpenShift Container Platform クラスターにインストールします。
前提条件
- 管理者権限がある。
- OpenShift Container Platform Web コンソールにアクセスできる。
- Loki Operator をインストールして設定した。
手順
- OpenShift Container Platform Web コンソールの Administrator パースペクティブで、Operators → OperatorHub に移動します。
- Filter by keyword フィールドに Red Hat OpenShift Logging Operator と入力します。利用可能な Operator のリストで Red Hat OpenShift Logging Operator をクリックし、Install をクリックします。
Update channel として stable-x.y を選択します。Version フィールドでは最新バージョンがすでに選択されています。
Red Hat OpenShift Logging Operator は、ロギング namespace
openshift-logging
にデプロイする必要があります。そのため、Installation mode と Installed Namespace はすでに選択されています。この namespace がまだ存在しない場合は、自動的に作成されます。Enable Operator-recommended cluster monitoring on this namespace. を選択します。
このオプションは、
Namespace
オブジェクトにopenshift.io/cluster-monitoring: "true"
ラベルを設定します。クラスターモニタリングがopenshift-logging
namespace を収集できるように、このオプションを選択する必要があります。Update approval で Automatic を選択し、Install をクリックします。
サブスクリプションの承認ストラテジーが Automatic に設定されている場合、選択したチャネルで新しい Operator バージョンが利用可能になると、すぐに更新プロセスが開始します。承認ストラテジーが Manual に設定されている場合は、保留中のアップグレードを手動で承認する必要があります。
注記インストールが完了する前に、Operator に
Failed
ステータスが表示される場合があります。Operator のインストールが完了し、InstallSucceeded
というメッセージが表示されたら、ページを更新してください。Operator をインストールしている間に、ログコレクターがログを収集するために使用するサービスアカウントを作成します。
- 画面右上の + をクリックして、Import YAML ページにアクセスします。
サービスアカウントの YAML 定義を入力します。
ServiceAccount
オブジェクトの例apiVersion: v1 kind: ServiceAccount metadata: name: logging-collector 1 namespace: openshift-logging 2
- Create ボタンをクリックします。
ClusterRoleBinding
オブジェクトを作成して、インフラストラクチャーログやアプリケーションログなど、収集するログにアクセスし、ログストアに書き込むために必要な権限をログコレクターに付与します。- 画面右上の + をクリックして、Import YAML ページにアクセスします。
ClusterRoleBinding
リソースの YAML 定義を入力します。ClusterRoleBinding
リソースの例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: logging-collector:write-logs roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: logging-collector-logs-writer 1 subjects: - kind: ServiceAccount name: logging-collector namespace: openshift-logging --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: logging-collector:collect-application roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: collect-application-logs 2 subjects: - kind: ServiceAccount name: logging-collector namespace: openshift-logging --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: logging-collector:collect-infrastructure roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: collect-infrastructure-logs 3 subjects: - kind: ServiceAccount name: logging-collector namespace: openshift-logging
- Create ボタンをクリックします。
- Operators → Installed Operators ページに移動します。Operator を選択し、All instances タブをクリックします。
- サービスアカウントに必要な権限を付与した後、Installed Operator ページに移動します。Provided APIs で Red Hat OpenShift Logging Operator を選択し、ClusterLogForwarder リソースを見つけて、Create Instance をクリックします。
YAML view を選択し、次のテンプレートを使用して
ClusterLogForwarder
CR を作成します。ClusterLogForwarder
CR の例apiVersion: observability.openshift.io/v1 kind: ClusterLogForwarder metadata: name: instance namespace: openshift-logging 1 spec: serviceAccount: name: logging-collector 2 outputs: - name: lokistack-out type: lokiStack 3 lokiStack: target: 4 name: logging-loki namespace: openshift-logging authentication: token: from: serviceAccount tls: ca: key: service-ca.crt configMapName: openshift-service-ca.crt pipelines: - name: infra-app-logs inputRefs: 5 - application - infrastructure outputRefs: - lokistack-out
- Create をクリックします。
検証
-
ClusterLogForwarder タブで、
ClusterLogForwarder
インスタンスが表示されていることを確認します。 Status 列に次のメッセージが表示されていることを確認します。
-
Condition: observability.openshift.io/Authorized
-
observability.openshift.io/Valid, Ready
-
1.5. ログ転送の設定
ClusterLogForwarder
(CLF) を使用すると、ユーザーはさまざまな宛先へのログの転送を設定できます。さまざまなソースからログメッセージを選択し、それらを変換またはフィルタリングできるパイプラインを介して送信して、1 つ以上の出力に転送する柔軟な方法を提供します。
ClusterLogForwarder の主な機能
- 入力を使用してログメッセージを選択する
- 出力を使用してログを外部の宛先に転送する
- フィルターを使用してログメッセージをフィルタリング、変換、およびドロップする
- 入力、フィルター、出力を接続するログ転送パイプラインを定義する
1.5.1. ログ収集のセットアップ
このリリースの Cluster Logging では、管理者が ClusterLogForwarder に関連付けられたサービスアカウントにログ収集権限を明示的に付与する必要があります。これは、ClusterLogging およびオプションで ClusterLogForwarder.logging.openshift.io リソースで構成されるレガシーロギングシナリオでは、以前のリリースでは必要ありませんでした。
Red Hat OpenShift Logging Operator は、collect-audit-logs
、collect-application-logs
、collect-infrastructure-logs
クラスターロールを提供します。これにより、コレクターは監査ログ、アプリケーションログ、およびインフラストラクチャーログをそれぞれ収集できます。
必要なクラスターロールをサービスアカウントにバインドして、ログ収集をセットアップします。
1.5.1.1. レガシーサービスアカウント
既存のレガシーサービスアカウント logcollector
を使用するには、次の ClusterRoleBinding を作成します。
$ oc adm policy add-cluster-role-to-user collect-application-logs system:serviceaccount:openshift-logging:logcollector
$ oc adm policy add-cluster-role-to-user collect-infrastructure-logs system:serviceaccount:openshift-logging:logcollector
さらに、監査ログを収集する場合は、次の ClusterRoleBinding を作成します。
$ oc adm policy add-cluster-role-to-user collect-audit-logs system:serviceaccount:openshift-logging:logcollector
1.5.1.2. サービスアカウントの作成
前提条件
-
Red Hat OpenShift Logging Operator が
openshift-logging
namespace にインストールされている。 - 管理者権限がある。
手順
- コレクターのサービスアカウントを作成します。認証にトークンを必要とするストレージにログを書き込む場合は、サービスアカウントにトークンを含める必要があります。
適切なクラスターロールをサービスアカウントにバインドします。
バインドコマンドの例
$ oc adm policy add-cluster-role-to-user <cluster_role_name> system:serviceaccount:<namespace_name>:<service_account_name>
1.5.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
- 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 を示します。
1.5.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
- 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 システムに新しいログを作成する権限を付与します。
1.5.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
- 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: 新しい監査ログを作成する権限を付与します。
1.5.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
- 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 システムにインフラストラクチャーログを作成する権限を付与します。
1.5.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
- 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 への変更を監視する権限を付与します。
1.5.2. コレクターのログレベルの変更
コレクターでログレベルを変更するには、observability.openshift.io/log-level
アノテーションを trace
、debug
、info
、warn
、error
、および off
に設定します。
ログレベルアノテーションの例
apiVersion: observability.openshift.io/v1 kind: ClusterLogForwarder metadata: name: collector annotations: observability.openshift.io/log-level: debug # ...
1.5.3. Operator の管理
ClusterLogForwarder
リソースには、Operator がリソースをアクティブに管理するか、管理対象外のままにするかを制御する managementState
フィールドがあります。
- Managed
- (デフォルト) Operator は、CLF 仕様の目的の状態に一致するようにロギングリソースを駆動します。
- 管理対象外
- Operator は、ロギングコンポーネントに関連するアクションを一切実行しません。
これにより、管理者は managementState
を Unmanaged
に設定して、ログ転送を一時的に停止できます。
1.5.4. ClusterLogForwarder の構造
CLF には、次の主要コンポーネントを含む spec
セクションがあります。
- Inputs
-
転送するログメッセージを選択します。組み込みの入力タイプである
application
、infrastructure
、およびaudit
は、クラスターのさまざまな部分からログを転送します。カスタム入力を定義することもできます。 - 出力
- ログを転送する宛先を定義します。各出力には、一意の名前とタイプ固有の設定があります。
- Pipelines
- ログが入力からフィルターを経由して出力されるまでのパスを定義します。パイプラインには一意の名前があり、入力名、出力名、フィルター名のリストで構成されます。
- Filters
- パイプライン内のログメッセージを変換またはドロップします。ユーザーは、特定のログフィールドに一致するフィルターを定義し、メッセージをドロップまたは変更できます。フィルターはパイプラインで指定された順序で適用されます。
1.5.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
のカスタム入力を定義できます。
1.5.4.2. 出力
出力は spec.outputs
の下の配列で設定されます。各出力には一意の名前とタイプが必要です。サポートされているタイプは次のとおりです。
- azureMonitor
- ログを Azure Monitor に転送します。
- cloudwatch
- ログを AWS CloudWatch に転送します。
- elasticsearch
- ログを外部の Elasticsearch インスタンスに転送します。
- googleCloudLogging
- ログを Google Cloud Logging に転送します。
- http
- ログを汎用 HTTP エンドポイントに転送します。
- kafka
- ログを Kafka ブローカーに転送します。
- loki
- ログを Loki ロギングバックエンドに転送します。
- lokistack
- ログを、OpenShift Container Platform 認証インテグレーションによる Loki と Web プロキシーのロギングがサポートされている組み合わせに転送します。LokiStack のプロキシーは、OpenShift Container Platform 認証を使用してマルチテナンシーを適用します。
- otlp
- OpenTelemetry プロトコルを使用してログを転送します。
- splunk
- ログを Splunk に転送します。
- syslog
- ログを外部の syslog サーバーに転送します。
各出力タイプには独自の設定フィールドがあります。
1.5.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
OTLP 出力では OpenTelemetry データモデルが使用されますが、これは他の出力タイプで使用される ViaQ データモデルとは異なります。これは、OpenTelemetry Observability フレームワークで定義された OpenTelemetry Semantic Conventions を使用することで OTLP に準拠しています。
1.5.5.1. Pipelines
パイプラインは spec.pipelines
の下の配列で設定されます。各パイプラインには一意の名前があり、次の要素で構成される必要があります。
- inputRefs
- このパイプラインにログを転送する入力の名前。
- outputRefs
- ログを送信する出力の名前。
- filterRefs
- (オプション) 適用するフィルターの名前。
filterRef の順序は、順次適用されるため重要です。以前のフィルターは、後のフィルターで処理されないメッセージをドロップする可能性があります。
1.5.5.2. Filters
フィルターは spec.filters
の下の配列で設定されます。構造化フィールドの値に基づいて受信ログメッセージを照合し、変更または削除できます。
管理者は次のタイプのフィルターを設定できます。
1.5.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)
-
ロギングを有効にして複数行の例外を検出し、それらを 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>
1.5.6.1. 詳細
ログメッセージが例外スタックトレースを形成する連続したシーケンスとして表示される場合、それらは単一の統合ログレコードに結合されます。最初のログメッセージの内容は、シーケンス内のすべてのメッセージフィールドの連結コンテンツに置き換えられます。
コレクターは次の言語をサポートしています。
- Java
- JS
- Ruby
- Python
- golang
- PHP
- Dart
1.5.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
1.5.8. syslog プロトコルを使用したログの転送
syslog RFC3164 または RFC5424 プロトコルを使用して、デフォルトの Elasticsearch ログストアの代わり、またはそれに加えてプロトコルを受け入れるように設定された外部ログアグリゲーターに、ログのコピーを送信できます。syslog サーバーなど、外部ログアグリゲーターを OpenShift Container Platform からログを受信するように設定する必要があります。
syslog プロトコルを使用してログ転送を設定するには、syslog サーバーへの 1 つ以上の出力と、それらの出力を使用するパイプラインを含む ClusterLogForwarder
カスタムリソース (CR) を作成する必要があります。syslog 出力では、UDP、TCP、または TLS 接続を使用できます。
前提条件
- 指定されたプロトコルまたは形式を使用してロギングデータを受信するように設定されたロギングサーバーが必要です。
手順
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
- 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 を指定します。有効なスキームは、
tcp
、tls
、およびudp
です。たとえば、tls://syslog-receiver.example.com:6514
です。 - 11
- Transport Layer Security (TLS) クライアント接続のオプションを制御するための設定を指定します。
- 12
- パイプラインを使用して転送するログタイプ (
application
、infrastructure
またはaudit
) を指定します。 - 13
- パイプラインの名前を指定します。
- 14
- サービスアカウントの名前。
CR オブジェクトを作成します。
$ oc create -f <filename>.yaml
1.5.8.1. メッセージ出力へのログソース情報の追加
ClusterLogForwarder
カスタムリソース (CR) に enrichment
フィールドを追加することで、レコードの message
フィールドに namespace_name
、pod_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 # ...
この設定は、RFC3164 と RFC5424 の両方と互換性があります。
enrichment: None を使用した syslog メッセージ出力の例
2025-03-03T11:48:01+00:00 example-worker-x syslogsyslogserverd846bb9b: {...}
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: {...}
1.5.9. 不要なログレコードを削除するコンテンツフィルターの設定
drop
フィルターが設定されている場合、ログコレクターは転送する前にフィルターに従ってログストリームを評価します。コレクターは、指定された設定に一致する不要なログレコードを削除します。
手順
フィルターの設定を
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>"] # ...
- 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
フィルターが適用されるパイプラインを指定します。
次のコマンドを実行して、
ClusterLogForwarder
CR を適用します。$ oc apply -f <filename>.yaml
追加例
次の例は、優先度の高いログレコードのみを保持するように 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" # ...
単一の 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" # ...
1.5.10. API 監査フィルターの概要
OpenShift API サーバーは、API 呼び出しごとに、リクエスト、レスポンス、リクエスターの ID の詳細を示す監査イベントを生成するため、大量のデータが生成されます。API 監査フィルターはルールを使用して、重要でないイベントを除外してイベントサイズを減少できるようにし、監査証跡をより管理しやすくします。ルールは順番にチェックされ、最初の一致でチェックが停止します。イベントに含まれるデータの量は、level
フィールドの値によって決まります。
-
None
: イベントはドロップされます。 -
Metadata
: 監査メタデータが含まれ、リクエストおよびレスポンスの本文は削除されます。 -
Request
: 監査メタデータとリクエスト本文が含まれ、レスポンス本文は削除されます。 -
RequestResponse
: メタデータ、リクエスト本文、レスポンス本文のすべてのデータが含まれます。レスポンス本文が非常に大きくなる可能性があります。たとえば、oc get pods -A
はクラスター内のすべての Pod の YAML 記述を含むレスポンス本文を生成します。
ClusterLogForwarder
カスタムリソース (CR) は、以下の追加機能を提供しますが、標準の Kubernetes 監査ポリシー と同じ形式を使用します。
- ワイルドカード
-
ユーザー、グループ、namespace、およびリソースの名前には、先頭または末尾に
*
アスタリスク文字を付けることができます。たとえば、namespaceopenshift-\*
はopenshift-apiserver
またはopenshift-authentication
に一致します。リソース\*/status
は、Pod/status
またはDeployment/status
と一致します。 - デフォルトのルール
ポリシーのルールに一致しないイベントは、以下のようにフィルターされます。
-
get
、list
、watch
などの読み取り専用システムイベントは削除されます。 - サービスアカウントと同じ namespace 内で発生するサービスアカウント書き込みイベントはドロップされます。
- 他のすべてのイベントは、設定されたレート制限に従って転送されます。
-
これらのデフォルトを無効にするには、level
フィールドのみが含まれるルールでルールリストを終了するか、空のルールを追加します。
- 応答コードが省略される
-
省略する整数ステータスコードのリスト。イベントが作成されない HTTP ステータスコードをリストする
OmitResponseCodes
フィールドを使用して、応答で HTTP ステータスコードに基づいてイベントをドロップできます。デフォルト値は[404, 409, 422, 429]
です。値が空のリスト[]
の場合、ステータスコードは省略されません。
ClusterLogForwarder
CR の監査ポリシーは、OpenShift Container Platform の監査ポリシーに加えて動作します。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
1.5.11. ラベル式または一致するラベルキーと値を含む入力時でのアプリケーションログのフィルタリング
input
セレクターを使用して、ラベル式または照合するラベルキーとその値に基づいてアプリケーションログを含めることができます。
手順
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 # ...
次のコマンドを実行して、
ClusterLogForwarder
CR を適用します。$ oc apply -f <filename>.yaml
1.5.12. ログレコードを削除するコンテンツフィルターの設定
prune
フィルターが設定されると、ログコレクターは転送前にフィルターをもとにログレベルを評価します。コレクターは、Pod アノテーションなどの値の低いフィールドを削除してログレコードを整理します。
手順
フィルターの設定を
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>"] # ...
- 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
フィールドを除外します。次のコマンドを実行して、
ClusterLogForwarder
CR を適用します。$ oc apply -f <filename>.yaml
1.5.13. ソースによる監査およびインフラストラクチャーログ入力のフィルタリング
input
セレクターを使用して、ログを収集する audit
および infrastructure
ソースのリストを定義できます。
手順
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 # ...
次のコマンドを実行して、
ClusterLogForwarder
CR を適用します。$ oc apply -f <filename>.yaml
1.5.14. namespace またはコンテナー名を含めるか除外して入力時にアプリケーションログをフィルタリングする手順
input
セレクターを使用して、namespace とコンテナー名に基づいてアプリケーションログを含めたり除外したりできます。
手順
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 # ...
注記excludes
フィールドはincludes
フィールドよりも優先されます。次のコマンドを実行して、
ClusterLogForwarder
CR を適用します。$ oc apply -f <filename>.yaml
1.6. LokiStack でのログの保存
アプリケーション、監査、インフラストラクチャー関連のログを保存するように LokiStack
カスタムリソース (CR) を設定できます。
Loki は、水平スケーリング可能で可用性の高いマルチテナントログ集約システムで、OpenShift Observability UI で視覚化できる Logging for Red Hat OpenShift 用の GA ログストアとして提供されます。OpenShift Logging が提供する Loki 設定は、収集されたログを使用してユーザーが迅速にトラブルシューティングを実行できるように設計された短期ログストアです。この目的のために、Logging for Red Hat OpenShift の Loki 設定は短期ストレージを備えており、最新のクエリーに最適化されています。長期間にわたる保存やクエリーの場合、ユーザーはクラスター外部のログストアを探す必要があります。
1.6.1. Loki デプロイメントのサイズ
Loki のサイズは 1x.<size>
の形式に従います。この場合の 1x
はインスタンスの数を、<size>
は性能を指定します。
1x.pico
設定は、最小限のリソースと制限要件を持つ単一の Loki デプロイメントを定義し、すべての Loki コンポーネントに高可用性 (HA) サポートを提供します。この設定は、単一のレプリケーションファクターまたは自動圧縮を必要としないデプロイメントに適しています。
ディスク要求はサイズ設定にかかわらず類似しているため、お客様はさまざまなサイズをテストして、それぞれのデプロイメントニーズに最適なサイズを決定できます。
デプロイメントサイズの 1x
の数は変更できません。
1x.demo | 1x.pico [6.1+ のみ] | 1x.extra-small | 1x.small | 1x.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 |
1.6.2. 前提条件
- コマンドラインインターフェイス (CLI) または Web コンソールを使用して Loki Operator をインストールした。
-
ClusterLogForwarder
CR と同じ namespace にserviceAccount
CR を作成した。 -
collect-audit-logs
、collect-application-logs
、およびcollect-infrastructure-logs
クラスターロールをserviceAccount
CR に割り当てた。
1.6.3. コアのセットアップと設定
ロールベースのアクセス制御、基本的なモニタリング、Pod の配置を使用して、Loki をデプロイします。
1.6.4. LokiStack ルールの RBAC 権限の認可
管理者は、クラスターロールをユーザー名にバインドすることで、ユーザーが独自のアラートおよび記録ルールを作成および管理できるようにすることができます。クラスターロールは、ユーザーに必要なロールベースのアクセス制御 (RBAC) 権限を含む ClusterRole
オブジェクトとして定義されます。
LokiStack では、アラートおよび記録ルール用の次のクラスターロールが利用できます。
ルール名 | 説明 |
---|---|
|
このロールを持つユーザーは、アラートルールを管理する管理レベルのアクセス権を持ちます。このクラスターロールは、 |
|
このロールを持つユーザーは、 |
|
このロールを持つユーザーは、 |
|
このロールを持つユーザーは、 |
|
このロールを持つユーザーは、記録ルールを管理する管理レベルのアクセス権を持ちます。このクラスターロールは、 |
|
このロールを持つユーザーは、 |
|
このロールを持つユーザーは、 |
|
このロールを持つユーザーは、 |
1.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>
次のコマンドは、指定したユーザーに、すべての namespace のアラートルールに対する管理者権限を付与します。
管理者権限を付与するクラスターロールバインディングコマンドの例
$ oc adm policy add-cluster-role-to-user alertingrules.loki.grafana.com-v1-admin <username>
1.6.5. Loki を使用したログベースのアラートルールの作成
AlertingRule
CR には、単一の LokiStack
インスタンスのアラートルールグループを宣言するために使用する、仕様および Webhook 検証定義のセットが含まれます。Webhook 検証定義は、ルール検証条件もサポートします。
-
AlertingRule
CR に無効なinterval
期間が含まれる場合、無効なアラートルールです。 -
AlertingRule
CR に無効なfor
期間が含まれる場合、無効なアラートルールです。 -
AlertingRule
CR に無効な LogQLexpr
が含まれる場合、無効なアラートルールです。 -
AlertingRule
CR に同じ名前のグループが 2 つ含まれる場合、無効なアラートルールです。 - 上記のいずれも該当しない場合、アラートルールは有効とみなされます。
テナントタイプ | AlertingRule CR の有効な namespace |
---|---|
application |
|
audit |
|
infrastructure |
|
手順
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
- 1
- この
AlertingRule
CR が作成される namespace には、LokiStackspec.rules.namespaceSelector
定義に一致するラベルが必要です。 - 2
labels
ブロックは、LokiStack のspec.rules.selector
定義と一致する必要があります。- 3
infrastructure
テナントのAlertingRule
CR は、openshift-*
、kube-\*
、またはdefault
namespaces でのみサポートされます。- 4
kubernetes_namespace_name:
の値は、metadata.namespace
の値と一致する必要があります。- 5
- この必須フィールドの値は、
critical
、warning
、または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
- 1
- この
AlertingRule
CR が作成される namespace には、LokiStackspec.rules.namespaceSelector
定義に一致するラベルが必要です。 - 2
labels
ブロックは、LokiStack のspec.rules.selector
定義と一致する必要があります。- 3
kubernetes_namespace_name:
の値は、metadata.namespace
の値と一致する必要があります。- 4
- この必須フィールドの値は、
critical
、warning
、またはinfo
である必要があります。 - 5
- この必須フィールドの値は、ルールの概要です。
- 6
- この必須フィールドの値は、ルールの詳細な説明です。
AlertingRule
CR を適用します。$ oc apply -f <filename>.yaml
1.6.6. メンバーリストの作成の失敗を許容する Loki の設定
OpenShift Container Platform クラスターでは、管理者は通常、非プライベート IP ネットワーク範囲を使用します。その結果、LokiStack メンバーリストはデフォルトでプライベート IP ネットワークのみを使用するため、LokiStack メンバーリストの設定は失敗します。
管理者は、メンバーリスト設定の 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"}}}'
podIP
を含む LokiStack の例
apiVersion: loki.grafana.com/v1 kind: LokiStack metadata: name: logging-loki namespace: openshift-logging spec: # ... hashRing: type: memberlist memberlist: instanceAddrType: podIP # ...
1.6.7. Loki でストリームベースの保持の有効化
ログストリームに基づいて保持ポリシーを設定できます。これらのルールは、グローバル、テナントごと、またはその両方で設定できます。両方で設定すると、グローバルルールの前にテナントルールが適用されます。
s3 バケットまたは LokiStack カスタムリソース (CR) に保存期間が定義されていない場合、ログは削除されず、s3 バケットに永久に残り、s3 ストレージがいっぱいになる可能性があります。
スキーマ v13 が推奨されます。
手順
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
- 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
- 1
- テナントごとの保持ポリシーを設定します。有効なテナントタイプは、
application
、audit
、およびinfrastructure
です。 - 2
- ログストリームの定義に使用される LogQL クエリー が含まれています。
LokiStack
CR を適用します。$ oc apply -f <filename>.yaml
注記これは、保存されたログの保持を管理するためのものではありません。保存されたログのグローバルな保持期間 (最大 30 日間までサポート) は、オブジェクトストレージで設定します。
1.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: "" # ...
ノードセレクターと 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 # ...
LokiStack (CR) の nodeSelector
フィールドと tolerations
フィールドを設定するには、oc explain
コマンドを使用して、特定のリソースの説明とフィールドを表示します。
$ oc explain lokistack.spec.template
出力例
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. ...
詳細情報用に、特定のフィールドを追加できます。
$ oc explain lokistack.spec.template.compactor
出力例
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. ...
1.6.9. 信頼性とパフォーマンスの向上
実稼働環境で Loki の信頼性と効率性を確保するには、次の設定を使用します。
1.6.10. 有効期間の短いトークンを使用したクラウドベースのログストアへの認証の有効化
ワークロードアイデンティティーフェデレーションを使用すると、有効期間の短いトークンを使用してクラウドベースのログストアに対して認証できます。
手順
認証を有効にするには、次のいずれかのオプションを使用します。
-
OpenShift Container Platform 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>
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>
-
OpenShift Container Platform Web コンソールを使用して Loki Operator をインストールすると、有効期間が短いトークンを使用するクラスターが自動的に検出されます。プロンプトが表示され、ロールを作成するように求められます。また、Loki Operator が
1.6.11. ノードの障害を許容するための Loki の設定
Loki Operator は、同じコンポーネントの Pod がクラスター内の異なる使用可能なノードにスケジュールされるように要求する Pod アンチアフィニティールールの設定をサポートしています。
アフィニティーとは、スケジュールするノードを制御する Pod の特性です。非アフィニティーとは、Pod がスケジュールされることを拒否する Pod の特性です。
OpenShift Container Platform では、Pod のアフィニティー と Pod の非アフィニティー によって、他の Pod のキー/値ラベルに基づいて、Pod のスケジュールに適したノードを制限できます。
Operator は、すべての Loki コンポーネント (compactor
、distributor
、gateway
、indexGateway
、ingester
、querier
、queryFrontend
、および 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 # ...
1.6.12. クラスターの再起動中の LokiStack 動作
OpenShift Container Platform クラスターが再起動されると、LokiStack の取り込みとクエリーパスは、ノードで使用可能な CPU およびメモリーリソース内で引き続き動作します。つまり、OpenShift Container Platform クラスターの更新中に LokiStack でダウンタイムは発生しません。この動作は、PodDisruptionBudget
リソースを使用して実現されます。Loki Operator は、Loki に PodDisruptionBudget
リソースをプロビジョニングするため、特定の条件下で通常の動作を保証するためにコンポーネントごとに必要最小限、使用可能な Pod 数が決定されます。
1.6.13. 高度なデプロイメントとスケーラビリティー
高可用性、スケーラビリティー、およびエラー処理を設定するには、次の情報を使用します。
1.6.14. ゾーン対応のデータレプリケーション
Loki Operator は、Pod トポロジーの分散制約を通じて、ゾーン対応のデータレプリケーションのサポートを提供します。この機能を有効にすると、信頼性が向上し、1 つのゾーンで障害が発生した場合のログ損失に対する保護が強化されます。デプロイメントサイズを 1x.extra.small
、1x.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
1.6.15. 障害が発生したゾーンからの Loki Pod の回復
OpenShift Container Platform では、特定のアベイラビリティーゾーンのリソースにアクセスできなくなると、ゾーン障害が発生します。アベイラビリティーゾーンは、冗長性とフォールトトレランスを強化することを目的とした、クラウドプロバイダーのデータセンター内の分離されたエリアです。OpenShift Container Platform クラスターがこの問題を処理するように設定されていない場合、ゾーン障害によりサービスまたはデータの損失が発生する可能性があります。
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 を手動で削除する必要があります。
手順
次のコマンドを実行して、
Pending
中ステータスの Pod をリスト表示します。$ oc get pods --field-selector status.phase==Pending -n openshift-logging
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
- 1
- これらの Pod は、障害が発生したゾーンに対応する PVC があるため、
Pending
ステータスになっています。
次のコマンドを実行して、
Pending
ステータスの PVC をリストします。$ oc get pvc -o=json -n openshift-logging | jq '.items[] | select(.status.phase == "Pending") | .metadata.name' -r
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
次のコマンドを実行して Pod の PVC を削除します。
$ oc delete pvc <pvc_name> -n openshift-logging
次のコマンドを実行して Pod を削除します。
$ oc delete pod <pod_name> -n openshift-logging
これらのオブジェクトが正常に削除されると、使用可能なゾーンでオブジェクトが自動的に再スケジュールされます。
1.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
1.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\"}"]]}]}
oc logs -n openshift-logging -l component=collector
と入力すると、クラスター内のコレクターログに、次のいずれかのエラーメッセージを含む行が表示されます。429 Too Many Requests Ingestion rate limit exceeded
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
このエラーは受信側にも表示されます。たとえば、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
手順
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 # ...
- 1
ingestionBurstSize
フィールドは、ディストリビューターレプリカごとに最大ローカルレート制限サンプルサイズを MB 単位で定義します。この値はハードリミットです。この値を、少なくとも 1 つのプッシュリクエストで想定される最大ログサイズに設定します。ingestionBurstSize
値より大きい単一リクエストは使用できません。- 2
ingestionRate
フィールドは、1 秒あたりに取り込まれるサンプルの最大量 (MB 単位) に対するソフト制限です。ログのレートが制限を超えているにもかかわらず、コレクターがログの送信を再試行すると、レート制限エラーが発生します。合計平均が制限よりも少ない場合に限り、システムは回復し、ユーザーの介入なしでエラーが解決されます。
1.7. Loki での OTLP データ取り込み
Logging では、OpenTelemetry Protocol (OTLP) を使用して、API エンドポイントを使用できます。OTLP は Loki 専用に設計されたものではない標準化された形式です。そのため、OpenTelemetry のデータ形式を Loki のデータモデルにマッピングするには、追加の Loki 設定が必要です。OTLP には、ストリームラベル や 構造化メタデータ などの概念がありません。代わりに、OTLP はログエントリーに関するメタデータを、次の 3 つのカテゴリーにグループ化された 属性 として提供します。
- リソース
- スコープ
- ログ
必要に応じて、複数のエントリーのメタデータを同時に、または個別に設定できます。
1.7.1. OTLP データ取り込み用の LokiStack 設定
OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
OTLP 取り込み用に LokiStack
カスタムリソース (CR) を設定するには、次の手順に従います。
前提条件
- Loki セットアップが、OTLP ログの取り込みを有効にするためにスキーマバージョン 13 で導入された構造化メタデータをサポートしていることを確認します。
手順
スキーマバージョンを設定します。
新しい
LokiStack
CR を作成する場合は、ストレージスキーマ設定でversion: v13
を設定します。注記既存の設定の場合は、
version: v13
と現在より後のeffectiveDate
を持つ新しいスキーマエントリーを追加します。スキーマバージョンの更新の詳細は、Upgrading Schemas (Grafana ドキュメント) を参照してください。
ストレージスキーマを次のように設定します。
ストレージスキーマの設定例
# ... spec: storage: schemas: - version: v13 effectiveDate: 2024-10-25
effectiveDate
を過ぎると v13 スキーマが有効になり、LokiStack
は構造化メタデータを保存できるようになります。
1.7.2. 属性マッピング
Loki Operator を openshift-logging
モードに設定すると、Loki Operator がデフォルトの属性マッピングのセットを自動的に適用します。このマッピングは、特定の OTLP 属性を、Loki のストリームラベルおよび構造化メタデータに対応付けるものです。
一般的なセットアップでは、このようなデフォルトのマッピングで十分です。ただし、次の場合には属性マッピングをカスタマイズする必要があることもあります。
- カスタムコレクターの使用: 保存する必要がない追加の属性を生成するカスタムコレクターがセットアップに含まれている場合は、マッピングをカスタマイズして、その属性が Loki によって削除されるようにすることを検討してください。
- 属性の詳細レベルを調整する場合: デフォルトの属性セットが必要以上に詳細な場合は、必須の属性のみに減らすことができます。そうすることで、過剰なデータ保存を回避し、ロギングプロセスを合理化できます。
1.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: {}
属性をストリームラベルにマッピングするには、グローバルの OTLP 設定とテナントごとの OTLP 設定の両方を使用できます。
ストリームラベルはリソースレベルの属性からのみ導出されます。これは LokiStack
のリソース構造に反映されています。次の LokiStack
設定の例を参照してください。
spec: limits: global: otlp: streamLabels: resourceAttributes: - name: "k8s.namespace.name" - name: "k8s.pod.name" - name: "k8s.container.name"
ログエントリーから、リソース、スコープ、またはログタイプの属性を削除できます。
# ... 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"
regex: true
を設定することで正規表現を使用し、類似した名前を持つ属性に設定を適用できます。
データ量が増加する可能性があるため、ストリームラベルに正規表現を使用することは避けてください。
ストリームラベルとして明示的に設定されていない属性、またはエントリーから削除されていない属性は、デフォルトで構造化メタデータとして保存されます。
1.7.2.2. OpenShift のデフォルトのカスタマイズ
openshift-logging
モードでは特定の属性が必須です。この属性は、OpenShift の機能における役割があるため、設定から削除できません。推奨 ラベルが付いたその他の属性は、パフォーマンスに影響がある場合、削除できます。属性の詳細は、OpenTelemetry データモデル属性 を参照してください。
カスタム属性なしで openshift-logging
モードを使用すると、即座に OpenShift ツールとの互換性が確保されます。ストリームラベルとして追加の属性が必要な場合、または一部の属性を削除する必要がある場合は、カスタム設定を使用します。カスタム設定はデフォルト設定とマージできます。
1.7.2.3. 推奨属性の削除
openshift-logging
モードでデフォルト属性を減らすには、推奨属性を無効にします。
# ...
spec:
tenants:
mode: openshift-logging
openshift:
otlp:
disableRecommendedAttributes: true 1
- 1
- 推奨属性を削除するには、
disableRecommendedAttributes: true
を設定します。これにより、デフォルトの属性が必須属性またはストリームラベルに制限されます。注記この設定により、デフォルトのストリームラベルが削除されるため、クエリーのパフォーマンスに悪影響が及ぶ可能性があります。クエリーに不可欠な属性を保持するためには、このオプションをカスタム属性設定と組み合わせる必要があります。
1.7.3. 関連情報
- Loki labels (Grafana ドキュメント)
- Structured metadata (Grafana ドキュメント)
- OpenTelemetry データモデル
- OpenTelemetry attribute (OpenTelemetry ドキュメント)
1.8. ロギングの可視化
ロギングの可視化は、Cluster Observability Operator の Logging UI プラグイン をデプロイすることで提供されます。そのためには Operator のインストールが必要です。
第2章 Logging 6.1
2.1. サポート
このドキュメントで説明されている設定オプションのみがロギングでサポートされています。
他の設定オプションはサポートされていないため、使用しないでください。設定のパラダイムが OpenShift Container Platform リリース間で変更される可能性があり、このような変更は、設定のすべての可能性が制御されている場合のみ適切に対応できます。Operator は相違点を調整するように設計されているため、このドキュメントで説明されている以外の設定を使用すると、変更は上書きされます。
OpenShift Container Platform ドキュメントで説明されていない設定を実行する必要がある場合は、Red Hat OpenShift Logging Operator を Unmanaged
に設定する必要があります。管理外のロギングインスタンスはサポートされていないため、ステータスを Managed
に戻すまで更新は受信されません。
Logging は、コアの OpenShift Container Platform とは異なるリリースサイクルで、インストール可能なコンポーネントとして提供されます。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 について説明しています。
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.
警告CVO のオーバーライドを設定すると、クラスター全体がサポートされない状態になります。サポートを継続するには、オーバーライドを削除した後に、報告された問題を再現する必要があります。
2.1.4. Red Hat サポート用のロギングデータの収集
サポートケースを作成する際、ご使用のクラスターのデバッグ情報を Red Hat サポートに提供していただくと Red Hat のサポートに役立ちます。
must-gather ツール を使用すると、プロジェクトレベルのリソース、クラスターレベルのリソース、および各ロギングコンポーネントの診断情報を収集できます。迅速なサポートを得るには、OpenShift Container Platform とロギングの両方の診断情報を提供してください。
2.1.4.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.4.2. ロギングデータの収集
oc adm must-gather
CLI コマンドを使用して、ロギングに関する情報を収集できます。
手順
must-gather
でロギング情報を収集するには、以下を実行します。
-
must-gather
情報を保存する必要のあるディレクトリーに移動します。 ログイメージに対して
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}')
must-gather
ツールは、現行ディレクトリー内のmust-gather.local
で始まる新規ディレクトリーを作成します。例:must-gather.local.4157245944708210408
作成された
must-gather
ディレクトリーから圧縮ファイルを作成します。たとえば、Linux オペレーティングシステムを使用するコンピューターで以下のコマンドを実行します。$ tar -cvaf must-gather.tar.gz must-gather.local.4157245944708210408
- 圧縮ファイルを Red Hat カスタマーポータル で作成したサポートケースに添付します。
2.2. Logging 6.1 リリースノート
2.2.1. Logging 6.1.6 リリースノート
このリリースには RHBA-2025:4529 が含まれています。
2.2.1.1. バグ修正
- この更新前は、Elasticsearch 出力でトークンベースの認証を試行すると、設定エラーのためにコレクター Pod でクラッシュループが発生していました。この更新により、Elasticsearch 出力を使用したトークン認証によって有効な設定が生成されます。(LOG-7018)
-
この更新前は、標準の
auditd
ログ形式ではmsg=audit(TIMESTAMP:ID)
構造のログエントリーごとに 1 つのmsg
フィールドが想定されていたため、複数のmsg
キーを持つauditd
ログメッセージが原因でコレクター Pod でエラーが発生する可能性がありました。この更新により、最初のmsg
値のみが使用されるようになり、問題が解決され、監査メタデータが正確に抽出されます。(LOG-7029)
2.2.1.2. CVE
Red Hat のセキュリティー評価の詳細は、重大度評価 を参照してください。
2.2.2. Logging 6.1.5 リリースノート
このリリースには RHSA-2025:3907 が含まれています。
2.2.2.1. 新機能および機能拡張
- この更新前は、時間ベースのストリームシャーディングが Loki で有効でなかったため、Loki が履歴データを保存できませんでした。この更新により、Loki Operator によって Loki の時間ベースのストリームシャーディングが有効になり、Loki が履歴データを保存できるようになりました。(LOG-6991)
2.2.2.2. バグ修正
- この更新前は、Vector コレクターが Open Virtual Network (OVN) および Auditd ログを転送できませんでした。この更新により、Vector コレクターが OVN および Auditd ログを転送できるようになりました。(LOG-6996)
2.2.2.3. CVE
Red Hat のセキュリティー評価の詳細は、重大度評価 を参照してください。
2.2.3. Logging 6.1.4 リリースノート
このリリースには、Logging for Red Hat OpenShift バグ修正リリース 6.1.4 が含まれています。
2.2.3.1. バグ修正
-
この更新前は、必要なパターン (
app-
、infra-
、audit-
) にインデックス名が従っていない場合、Red Hat Managed Elasticsearch がログを受信できず、自動インデックス作成が制限されるため、index_not_found_exception
エラーが発生していました。この更新により、oc explain obsclf.spec.outputs.elasticsearch.index
コマンドのドキュメントと説明が改善され、インデックスの命名制限が明確になり、ユーザーがログ転送を正しく設定できるようになりました。(LOG-6623) -
この更新前は、LokiStack サイズとして
1x.pico
を使用すると、削除ワーカーの数がゼロに設定されていました。この問題は、Loki 設定を生成する Operator のエラーが原因で発生していました。この更新により、削除ワーカーの数が 10 に設定されるようになりました。(LOG-6797) -
この更新前は、Operator がログコレクターに必要な
securitycontextconstraint
オブジェクトを更新できませんでした。これは以前のリリースからのリグレッションでした。この更新により、Operator がクラスターロールをサービスアカウントに復元し、リソースを更新するようになりました。(LOG-6816)
2.2.3.2. CVE
Red Hat のセキュリティー評価の詳細は、重大度評価 を参照してください。
2.2.4. Logging 6.1.3 リリースノート
このリリースには、Logging for Red Hat OpenShift バグ修正リリース 6.1.3 が含まれています。
2.2.4.1. バグ修正
-
この更新前は、Loki Operator で新しい
1x.pico
サイズを使用すると、Ingester Pod 用に作成されたPodDisruptionBudget
によって、3 つの Ingester Pod のうち 2 つをエビクトすることが Kubernetes に許可されていました。この更新により、Ingester Pod を 1 つだけエビクトすることを許可するPodDisruptionBudget
を Operator が作成するようになりました。(LOG-6693) -
この更新前は、Operator は
syslog facility
とseverity level
のテンプレート化をサポートしていませんでした。これは API の他の部分と一貫していました。代わりに、Operator は5.x
API に依存していましたが、この API はサポートされなくなりました。この更新により、API に必要な検証を追加し、必要な形式に一致しないリソースを拒否することで、Operator がテンプレートをサポートするようになりました。(LOG-6788) -
この更新前は、空の
OTEL
チューニング設定により検証エラーが発生していました。この更新により、検証ルールで空のOTEL
チューニング設定が許可されるようになりました。(LOG-6532)
2.2.4.2. CVE
2.2.5. Logging 6.1.2 リリースノート
このリリースには、Logging for Red Hat OpenShift バグ修正リリース 6.1.2 が含まれています。
2.2.5.1. 新機能および改良された機能
-
この機能拡張により、
lokiStack
出力にOTel
セマンティックストリームラベルが追加され、ViaQ
とOTel
の両方のストリームラベルを使用してログをクエリーできるようになります。(LOG-6579)
2.2.5.2. バグ修正
- この更新前は、コレクターのアラートルールに概要フィールドとメッセージフィールドが含まれていました。この更新により、コレクターのアラートルールに概要フィールドと説明フィールドが含まれるようになりました。(LOG-6126)
-
この更新前は、古い Pod のデプロイメントから新しい Pod のデプロイメントへの移行中に競合状態が発生していました。そのため、Operator のアップグレード後にコレクターメトリクスダッシュボードが削除されることがありました。この更新により、ダッシュボードの
ConfigMap
にラベルが追加され、アップグレードされたデプロイメントが現在の所有者として指定され、削除されなくなりました。(LOG-6280) -
この更新前は、アプリケーション入力にインフラストラクチャー namespace を含めると、その
log_type
がapplication
に設定されていました。この更新により、アプリケーション入力に含まれるインフラストラクチャー namespace のlog_type
が、infrastructure
に設定されるようになります。(LOG-6373) -
この更新前は、Cluster Logging Operator がキャッシュされたクライアントを使用して
SecurityContextConstraint
クラスターリソースを取得していたため、キャッシュが無効な場合にエラーが発生する可能性がありました。この更新により、Operator がキャッシュを使用する代わりに、常に API サーバーからデータを取得するようになりました。(LOG-6418) -
この更新前は、ロギングの
must-gather
によって、UIPlugin
、ClusterLogForwarder
、LogFileMetricExporter
、LokiStack
などのリソースが収集されませんでした。この更新により、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)
2.2.5.3. CVE
2.2.6. Logging 6.1.1 リリースノート
このリリースには、Logging for Red Hat OpenShift バグ修正リリース 6.1.1 が含まれています。
2.2.6.1. 新機能および改良された機能
- この更新により、Loki Operator は、OpenShift Container Platform 4.17 以降の Cluster Credential Operator (CCO) を使用した、Google Cloud Platform (GCP) での Workload Identity Federation の設定をサポートするようになりました。(LOG-6420)
2.2.6.2. バグ修正
-
この更新前は、コレクターは長い監査ログメッセージをエラーメッセージ Internal log [Found line that exceeds max_line_bytes; discarding.] で破棄していました。この更新により、監査設定のしきい値を増やすことで、長い監査メッセージの破棄が回避できるようになります。最大行サイズ
max_line_bytes
は3145728
バイトです。読み取りサイクル中に読み取られる最大バイト数max_read_bytes
は262144
バイトです。(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)
2.2.6.3. CVE
2.2.7. Logging 6.1.0 リリースノート
このリリースには、Logging for Red Hat OpenShift バグ修正リリース 6.1.0 が含まれています。
2.2.7.1. 新機能および改良された機能
2.2.7.1.1. ログの収集
-
この機能拡張により、収集されたコンテナーログから送信される属性にソース
iostream
が追加されます。値は、コレクターがそれを受信した方法に基づき、stdout
またはstderr
のいずれかに設定されます。(LOG-5292) - この更新により、コレクターのデフォルトのメモリー制限が 1024 Mi から 2048 Mi に増加します。ユーザーは、クラスターの特定のニーズと仕様に基づきリソース制限を調整する必要があります。(LOG-6072)
-
この更新により、ユーザーは
ClusterLogForwarder
CR の syslog 出力配信モードをAtLeastOnce
またはAtMostOnce
のいずれかに設定できるようになります。(LOG-6355)
2.2.7.1.2. ログのストレージ
-
この更新により、新しい
1x.pico
LokiStack サイズは、ワークロードとログボリュームが少ないクラスター (最大 50 GB/日) をサポーするようになります。(LOG-5939)
2.2.7.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 データ形式を使用するログ転送を設定するには、dataModel
をOtel
に設定します。デフォルトはViaq
に設定されています。データマッピングの詳細は、OTLP 仕様 を参照してください。
2.2.7.3. バグ修正
なし。
2.2.7.4. CVE
2.3. Logging 6.1
ClusterLogForwarder
カスタムリソース (CR) は、ログの収集と転送の中心的な設定ポイントです。
2.3.1. 入力と出力
入力では、転送するログのソースを指定します。Logging には、クラスターのさまざまな部分からログを選択する次の組み込みの入力タイプが用意されています。
-
application
-
receiver
-
infrastructure
-
audit
namespace または Pod ラベルに基づいてカスタム入力を定義し、ログの選択を微調整することもできます。
出力は、ログが送信される宛先を定義します。各出力タイプには独自の設定オプションセットがあり、動作と認証設定をカスタマイズできます。
2.3.2. レシーバー入力タイプ
レシーバー入力タイプにより、Logging システムは外部ソースからのログを受け入れることができます。ログを受信するための 2 つの形式 (http
と syslog
) がサポートされます。
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 (テクノロジープレビュー)
ClusterLogForwarder
の lokiStack.dataModel
フィールドを設定することにより、要件に基づきこれらのデータモデルのいずれかを選択できます。ViaQ は、ログを LokiStack に転送する際のデフォルトのデータモデルです。
OpenShift Logging の今後のリリースでは、デフォルトのデータモデルが ViaQ から OpenTelemetry に変更されます。
2.3.6.1. ViaQ のクイックスタート
デフォルトの ViaQ データモデルを使用するには、次の手順に従います。
前提条件
-
cluster-admin
権限を使用して OpenShift Container Platform クラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。 - サポートされているオブジェクトストアにアクセスできる。たとえば、AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation などです。
手順
-
OperatorHub から
Red Hat OpenShift Logging Operator
、Loki Operator
、およびCluster Observability Operator (COO)
をインストールします。 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
注記事前に
logging-loki-s3
シークレットが事前に作成されていることを確認します。このシークレットの内容は、使用しているオブジェクトストレージにより異なります。詳細は、シークレットと TLS 設定を参照してください。コレクターのサービスアカウントを作成します。
$ oc create sa collector -n openshift-logging
コレクターのサービスアカウントによる
LokiStack
CR へのデータ書き込みを許可します。$ oc adm policy add-cluster-role-to-user logging-collector-logs-writer -z collector -n openshift-logging
注記ClusterRole
リソースは、Cluster Logging Operato のインストール中に自動的に作成されるため、手動で作成する必要はありません。ログを収集するために、次のコマンドを実行してコレクターのサービスアカウントを使用します。
$ oc adm policy add-cluster-role-to-user collect-application-logs -z collector -n openshift-logging
$ oc adm policy add-cluster-role-to-user collect-audit-logs -z collector -n openshift-logging
$ oc adm policy add-cluster-role-to-user collect-infrastructure-logs -z collector -n openshift-logging
注記この例では、コレクターを 3 つのロール (アプリケーション、インフラストラクチャー、監査) すべてにバインドしますが、デフォルトでは、アプリケーションログとインフラストラクチャーログのみが収集されます。監査ログを収集するには、
ClusterLogForwarder
設定を更新して監査ログを含めます。環境に必要な特定のログタイプに基づきロールを割り当てます。UIPlugin
CR を作成して、Observe タブの Log セクションを有効にします。apiVersion: observability.openshift.io/v1alpha1 kind: UIPlugin metadata: name: logging spec: type: Logging logging: lokiStack: name: logging-loki
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
注記dataModel
フィールドはオプションであり、デフォルトでは未設定 (dataModel: ""
) になっています。これにより、Cluster Logging Operator (CLO) はデータモデルを自動的に選択できるようになります。現在、このフィールドが設定されていない場合の CLO はデフォルトで ViaQ モデルになりますが、これは今後のリリースで変更される予定です。dataModel: ViaQ
を指定すると、デフォルトが変更されても設定の互換性が維持されます。
検証
- OpenShift Container Platform Web コンソールの Observe タブの Log セクションにログが表示されていることを確認します。
2.3.6.2. OpenTelemetry のクイックスタート
OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
OTLP 取り込みを設定し、OpenTelemetry データモデルを有効にするには、次の手順を実行します。
前提条件
- クラスター管理者のパーミッション。
手順
- OperatorHub から、Red Hat OpenShift Logging Operator、Loki Operator、Cluster Observability Operator (COO) をインストールします。
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
注記事前に
logging-loki-s3
シークレットが事前に作成されていることを確認します。このシークレットの内容は、使用しているオブジェクトストレージにより異なります。詳細は、「シークレットと TLS 設定」を参照してください。コレクターのサービスアカウントを作成します。
$ oc create sa collector -n openshift-logging
コレクターのサービスアカウントによる
LokiStack
CR へのデータ書き込みを許可します。$ oc adm policy add-cluster-role-to-user logging-collector-logs-writer -z collector
注記ClusterRole
リソースは、Cluster Logging Operato のインストール中に自動的に作成されるため、手動で作成する必要はありません。コレクターのサービスアカウントによるログ収集を許可します。
$ oc project openshift-logging
$ oc adm policy add-cluster-role-to-user collect-application-logs -z collector
$ oc adm policy add-cluster-role-to-user collect-audit-logs -z collector
$ oc adm policy add-cluster-role-to-user collect-infrastructure-logs -z collector
注記この例では、コレクターを 3 つのロール (アプリケーション、インフラストラクチャー、監査) すべてにバインドします。デフォルトでは、アプリケーションログとインフラストラクチャーログのみが収集されます。監査ログを収集するには、
ClusterLogForwarder
設定を更新して監査ログを含めます。環境に必要な特定のログタイプに基づきロールを割り当てます。UIPlugin
CR を作成して、Observe タブの Log セクションを有効にします。apiVersion: observability.openshift.io/v1alpha1 kind: UIPlugin metadata: name: logging spec: type: Logging logging: lokiStack: name: logging-loki
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
注記dataModel
がOtel
の場合、lokiStack.labelKeys
は使用できません。dataModel
がOtel
の場合に同様の機能を得るには、「OTLP データ取り込み用の LokiStack 設定」を参照してください。
検証
- OpenShift Web コンソールで Observe → OpenShift Logging → LokiStack → Writes に移動し、Distributor - Structured Metadata を確認して、OTLP が正常に機能していることを確認します。
2.4. ロギングのインストール
OpenShift Container Platform Operator は、カスタムリソース (CR) を使用してアプリケーションとそのコンポーネントを管理します。ユーザーは、CR を通じて高レベルの構成と設定を指定します。Operator は、Operator のロジックに組み込まれたベストプラクティスに基づいて、高レベルの指示を低レベルのアクションに変換します。カスタムリソース定義 (CRD) は CR を定義し、Operator のユーザーが使用できるすべての設定をリストします。Operator をインストールすると、CR を生成するための CRD が作成されます。
ロギングを開始するには、次の Operator をインストールする必要があります。
- ログストアを管理する Loki Operator。
- ログの収集と転送を管理する Red Hat OpenShift Logging Operator。
- 視覚化を管理する Cluster Observability Operator (COO)。
ロギングをインストールまたは設定するには、OpenShift Container Platform Web コンソールまたは OpenShift Container Platform CLI のいずれかを使用できます。
Loki Operator の後に Red Hat OpenShift Logging Operator を設定する必要があります。
2.4.1. CLI を使用したインストール
次のセクションでは、CLI を使用して Loki Operator と Red Hat OpenShift Logging Operator をインストールする方法について説明します。
2.4.1.1. CLI を使用した Loki Operator のインストール
OpenShift Container Platform コマンドラインインターフェイス (CLI) を使用して、ログストア Loki
を管理するための Loki Operator を OpenShift Container Platform クラスターにインストールします。リソース LokiStack を Loki Operator と調整することで、Loki
ログストアをデプロイおよび設定できます。
前提条件
- 管理者権限がある。
-
OpenShift CLI (
oc
) がインストールされている。 - サポートされているオブジェクトストアにアクセスできる。例: AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation。
手順
Loki Operator の
Namespace
オブジェクトを作成します。Namespace
オブジェクトの例apiVersion: v1 kind: Namespace metadata: name: openshift-operators-redhat 1 labels: openshift.io/cluster-monitoring: "true" 2
- 1
- namespace として
openshift-operators-redhat
を指定する必要があります。Operator の監視を有効にするには、openshift-operators-redhat
namespace ではなくopenshift-operators
namespace からメトリクスを取得するように Cluster Monitoring Operator を設定します。openshift-operators
namespace には、信頼されていないコミュニティー Operator が含まれている可能性があります。コミュニティー Operator は、OpenShift Container Platform メトリクスと同じ名前のメトリクスを公開して競合を引き起こす可能性があります。 - 2
- クラスターモニタリングが
openshift-operators-redhat
namespace をスクレイピングできるようにするために、示されているラベルを指定する文字列値。
次のコマンドを実行して、
Namespace
オブジェクトを適用します。$ oc apply -f <filename>.yaml
OperatorGroup
オブジェクトを作成します。OperatorGroup
オブジェクトのサンプルapiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: loki-operator namespace: openshift-operators-redhat 1 spec: upgradeStrategy: Default
- 1
- namespace として
openshift-operators-redhat
を指定する必要があります。
以下のコマンドを実行して
OperatorGroup
オブジェクトを適用します。$ oc apply -f <filename>.yaml
Loki Operator の
Subscription
オブジェクトを作成します。Subscription
オブジェクトの例apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: loki-operator namespace: openshift-operators-redhat 1 spec: channel: stable-6.<y> 2 installPlanApproval: Automatic 3 name: loki-operator source: redhat-operators 4 sourceNamespace: openshift-marketplace
- 1
- namespace として
openshift-operators-redhat
を指定する必要があります。 - 2
- チャネルとして
stable-6.<y>
を指定します。 - 3
- サブスクリプションの承認ストラテジーが
Automatic
に設定されている場合、選択したチャネルで新しい Operator バージョンが利用可能になると、すぐに更新プロセスが開始します。承認ストラテジーがManual
に設定されている場合は、保留中のアップグレードを手動で承認する必要があります。 - 4
- 値として
redhat-operators
を指定します。OpenShift Container Platform クラスターが制限付きネットワークにインストールされている場合 (非接続クラスターの場合)、Operator Lifecycle Manager (OLM) の設定時に作成したCatalogSource
オブジェクトの名前を指定します。
以下のコマンドを実行して
Subscription
オブジェクトを適用します。$ oc apply -f <filename>.yaml
LokiStack をデプロイするための
namespace
オブジェクトを作成します。namespace
オブジェクトの例apiVersion: v1 kind: Namespace metadata: name: openshift-logging 1 labels: openshift.io/cluster-monitoring: "true" 2
次のコマンドを実行して、
namespace
オブジェクトを適用します。$ oc apply -f <filename>.yaml
オブジェクトストレージにアクセスするための認証情報を含むシークレットを作成します。たとえば、Amazon Web Services (AWS) s3 にアクセスするためのシークレットを作成します。
Secret
オブジェクトの例apiVersion: v1 kind: Secret metadata: name: logging-loki-s3 1 namespace: openshift-logging stringData: 2 access_key_id: <access_key_id> access_key_secret: <access_secret> bucketnames: s3-bucket-name endpoint: https://s3.eu-central-1.amazonaws.com region: eu-central-1
重要s3 バケットまたは LokiStack カスタムリソース (CR) に保存期間が定義されていない場合、ログは削除されず、s3 バケットに永久に残り、s3 ストレージがいっぱいになる可能性があります。
次のコマンドを実行して、
Secret
オブジェクトを適用します。$ oc apply -f <filename>.yaml
LokiStack
CR を作成します。LokiStack
CR の例apiVersion: loki.grafana.com/v1 kind: LokiStack metadata: name: logging-loki 1 namespace: openshift-logging 2 spec: size: 1x.small 3 storage: schemas: - version: v13 effectiveDate: "<yyyy>-<mm>-<dd>" 4 secret: name: logging-loki-s3 5 type: s3 6 storageClassName: <storage_class_name> 7 tenants: mode: openshift-logging 8
- 1
logging-loki
という名前を使用します。- 2
- namespace として
openshift-logging
を指定する必要があります。 - 3
- デプロイメントサイズを指定します。Loki の実稼働インスタンスでサポートされているサイズオプションは、
1x.extra-small
、1x.small
、または1x.medium
です。さらに、logging 6.1 以降では1x.pico
がサポートされています。 - 4
- この日付はスキーマが有効になる日付であるため、新規インストールの場合、"昨日" に相当する日付に設定する必要があります。
- 5
- ログストアシークレットの名前を指定します。
- 6
- 対応するストレージタイプを指定します。
- 7
- 一時ストレージのストレージクラスの名前を指定します。最適なパフォーマンスを得るには、ブロックストレージを割り当てるストレージクラスを指定します。
oc get storageclasses
コマンドを使用して、クラスターで使用可能なストレージクラスをリスト表示できます。 - 8
openshift-logging
モードは、デフォルトのテナンシーモードです。このモードでは、監査、インフラストラクチャー、アプリケーションなどのログタイプに対してテナントが作成されます。これにより、個々のユーザーおよびユーザーグループのさまざまなログストリームのアクセス制御が可能になります。
次のコマンドを実行して、
LokiStack
CR オブジェクトを適用します。$ oc apply -f <filename>.yaml
検証
次のコマンドを実行して、インストールを確認します。
$ oc get pods -n openshift-logging
出力例
$ oc get pods -n openshift-logging NAME READY STATUS RESTARTS AGE logging-loki-compactor-0 1/1 Running 0 42m logging-loki-distributor-7d7688bcb9-dvcj8 1/1 Running 0 42m logging-loki-gateway-5f6c75f879-bl7k9 2/2 Running 0 42m logging-loki-gateway-5f6c75f879-xhq98 2/2 Running 0 42m logging-loki-index-gateway-0 1/1 Running 0 42m logging-loki-ingester-0 1/1 Running 0 42m logging-loki-querier-6b7b56bccc-2v9q4 1/1 Running 0 42m logging-loki-query-frontend-84fb57c578-gq2f7 1/1 Running 0 42m
2.4.1.2. CLI を使用した Red Hat OpenShift Logging Operator のインストール
OpenShift CLI (oc
) を使用してログを収集し、ログストアに転送するには、OpenShift Container Platform クラスターに Red Hat OpenShift Logging Operator をインストールします。
前提条件
- 管理者権限がある。
-
OpenShift CLI (
oc
) がインストールされている。 - Loki Operator をインストールして設定した。
-
openshift-logging
namespace を作成した。
手順
OperatorGroup
オブジェクトを作成します。OperatorGroup
オブジェクトのサンプルapiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: cluster-logging namespace: openshift-logging 1 spec: upgradeStrategy: Default
- 1
- namespace として
openshift-logging
を指定する必要があります。
以下のコマンドを実行して
OperatorGroup
オブジェクトを適用します。$ oc apply -f <filename>.yaml
Red Hat OpenShift Logging Operator の
Subscription
オブジェクトを作成します。Subscription
オブジェクトの例apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: cluster-logging namespace: openshift-logging 1 spec: channel: stable-6.<y> 2 installPlanApproval: Automatic 3 name: cluster-logging source: redhat-operators 4 sourceNamespace: openshift-marketplace
- 1
- namespace として
openshift-logging
を指定する必要があります。 - 2
- チャネルとして
stable-6.<y>
を指定します。 - 3
- サブスクリプションの承認ストラテジーが
Automatic
に設定されている場合、選択したチャネルで新しい Operator バージョンが利用可能になると、すぐに更新プロセスが開始します。承認ストラテジーがManual
に設定されている場合は、保留中のアップグレードを手動で承認する必要があります。 - 4
- 値として
redhat-operators
を指定します。OpenShift Container Platform クラスターが制限付きネットワークにインストールされている場合 (非接続クラスターの場合)、Operator Lifecycle Manager (OLM) の設定時に作成したCatalogSource
オブジェクトの名前を指定します。
以下のコマンドを実行して
Subscription
オブジェクトを適用します。$ oc apply -f <filename>.yaml
ログコレクターが使用するサービスアカウントを作成します。
$ oc create sa logging-collector -n openshift-logging
コレクターがログを収集して転送できるように、サービスアカウントに必要な権限を割り当てます。この例では、コレクターにインフラストラクチャーログとアプリケーションログの両方を収集する権限を付与します。
$ oc adm policy add-cluster-role-to-user logging-collector-logs-writer -z logging-collector -n openshift-logging $ oc adm policy add-cluster-role-to-user collect-application-logs -z logging-collector -n openshift-logging $ oc adm policy add-cluster-role-to-user collect-infrastructure-logs -z logging-collector -n openshift-logging
ClusterLogForwarder
CR を作成します。ClusterLogForwarder
CR の例apiVersion: observability.openshift.io/v1 kind: ClusterLogForwarder metadata: name: instance namespace: openshift-logging 1 spec: serviceAccount: name: logging-collector 2 outputs: - name: lokistack-out type: lokiStack 3 lokiStack: target: 4 name: logging-loki namespace: openshift-logging authentication: token: from: serviceAccount tls: ca: key: service-ca.crt configMapName: openshift-service-ca.crt pipelines: - name: infra-app-logs inputRefs: 5 - application - infrastructure outputRefs: - lokistack-out
次のコマンドを実行して、
ClusterLogForwarder CR
オブジェクトを適用します。$ oc apply -f <filename>.yaml
検証
次のコマンドを実行して、インストールを確認します。
$ oc get pods -n openshift-logging
出力例
$ oc get pods -n openshift-logging NAME READY STATUS RESTARTS AGE cluster-logging-operator-fb7f7cf69-8jsbq 1/1 Running 0 98m instance-222js 2/2 Running 0 18m instance-g9ddv 2/2 Running 0 18m instance-hfqq8 2/2 Running 0 18m instance-sphwg 2/2 Running 0 18m instance-vv7zn 2/2 Running 0 18m instance-wk5zz 2/2 Running 0 18m logging-loki-compactor-0 1/1 Running 0 42m logging-loki-distributor-7d7688bcb9-dvcj8 1/1 Running 0 42m logging-loki-gateway-5f6c75f879-bl7k9 2/2 Running 0 42m logging-loki-gateway-5f6c75f879-xhq98 2/2 Running 0 42m logging-loki-index-gateway-0 1/1 Running 0 42m logging-loki-ingester-0 1/1 Running 0 42m logging-loki-querier-6b7b56bccc-2v9q4 1/1 Running 0 42m logging-loki-query-frontend-84fb57c578-gq2f7 1/1 Running 0 42m
2.4.2. Web コンソールを使用したインストール
次のセクションでは、Web コンソールを使用して Loki Operator と Red Hat OpenShift Logging Operator をインストールする方法について説明します。
2.4.2.1. Web コンソールを使用したロギングのインストール
OpenShift Container Platform Web コンソールを使用して、OperatorHub から、ログストア Loki
を管理するための Loki Operator を OpenShift Container Platform クラスターにインストールします。リソース LokiStack を Loki Operator と調整することで、Loki
ログストアをデプロイおよび設定できます。
前提条件
- 管理者権限がある。
- OpenShift Container Platform Web コンソールにアクセスできる。
- サポートされているオブジェクトストア (AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation) にアクセスできる。
手順
- OpenShift Container Platform Web コンソールの Administrator パースペクティブで、Operators → OperatorHub に移動します。
Filter by keyword フィールドに Loki Operator と入力します。使用可能な Operator のリストで Loki Operator をクリックし、Install をクリックします。
重要Community Loki Operator は Red Hat ではサポートされていません。
Update channel として stable-x.y を選択します。
Loki Operator は、グローバルの Operator グループの namespace
openshift-operators-redhat
にデプロイする必要があります。そのため、Installation mode と Installed Namespace はすでに選択されています。この namespace がまだ存在しない場合は、自動的に作成されます。Enable Operator-recommended cluster monitoring on this namespace. を選択します。
このオプションは、
Namespace
オブジェクトにopenshift.io/cluster-monitoring: "true"
ラベルを設定します。クラスターモニタリングがopenshift-operators-redhat
namespace を収集できるように、このオプションを選択する必要があります。Update approval で Automatic を選択し、Install をクリックします。
サブスクリプションの承認ストラテジーが Automatic に設定されている場合、アップグレードプロセスは、選択したチャネルで新規 Operator バージョンが利用可能になるとすぐに開始します。承認ストラテジーが Manual に設定されている場合は、保留中のアップグレードを手動で承認する必要があります。
注記インストールが完了する前に、Operator に
Failed
ステータスが表示される場合があります。Operator のインストールが完了し、InstallSucceeded
というメッセージが表示されたら、ページを更新してください。Operator をインストールしている間に、ログストアをデプロイする namespace を作成します。
- 画面右上の + をクリックして、Import YAML ページにアクセスします。
openshift-logging
namespace の YAML 定義を追加します。namespace
オブジェクトの例apiVersion: v1 kind: Namespace metadata: name: openshift-logging 1 labels: openshift.io/cluster-monitoring: "true" 2
- Create をクリックします。
オブジェクトストレージにアクセスするための認証情報を含むシークレットを作成します。
- 画面右上の + をクリックして、Import YAML ページにアクセスします。
シークレットの YAML 定義を追加します。たとえば、Amazon Web Services (AWS) s3 にアクセスするためのシークレットを作成します。
Secret
オブジェクトの例apiVersion: v1 kind: Secret metadata: name: logging-loki-s3 1 namespace: openshift-logging 2 stringData: 3 access_key_id: <access_key_id> access_key_secret: <access_key> bucketnames: s3-bucket-name endpoint: https://s3.eu-central-1.amazonaws.com region: eu-central-1
重要s3 バケットまたは LokiStack カスタムリソース (CR) に保存期間が定義されていない場合、ログは削除されず、s3 バケットに永久に残り、s3 ストレージがいっぱいになる可能性があります。
- Create をクリックします。
- Installed Operators ページに移動します。Provided API にある Loki Operator を選択し、LokiStack リソースを見つけて、Create Instance をクリックします。
YAML view を選択し、次のテンプレートを使用して
LokiStack
CR を作成します。LokiStack
CR の例apiVersion: loki.grafana.com/v1 kind: LokiStack metadata: name: logging-loki 1 namespace: openshift-logging 2 spec: size: 1x.small 3 storage: schemas: - version: v13 effectiveDate: "<yyyy>-<mm>-<dd>" secret: name: logging-loki-s3 4 type: s3 5 storageClassName: <storage_class_name> 6 tenants: mode: openshift-logging 7
- 1
logging-loki
という名前を使用します。- 2
- namespace として
openshift-logging
を指定する必要があります。 - 3
- デプロイメントサイズを指定します。Loki の実稼働インスタンスでサポートされているサイズオプションは、
1x.extra-small
、1x.small
、または1x.medium
です。さらに、logging 6.1 以降では 1x.pico がサポートされています。 - 4
- ログストアシークレットの名前を指定します。
- 5
- 対応するストレージタイプを指定します。
- 6
- 一時ストレージのストレージクラスの名前を指定します。最適なパフォーマンスを得るには、ブロックストレージを割り当てるストレージクラスを指定します。
oc get storageclasses
コマンドを使用して、クラスターで使用可能なストレージクラスをリスト表示できます。 - 7
openshift-logging
モードは、デフォルトのテナンシーモードです。このモードでは、監査、インフラストラクチャー、アプリケーションなどのログタイプに対してテナントが作成されます。これにより、個々のユーザーおよびユーザーグループのさまざまなログストリームのアクセス制御が可能になります。
- Create をクリックします。
検証
-
LokiStack タブで、
LokiStack
インスタンスが表示されていることを確認します。 -
Status 列に、
Condition: Ready
というメッセージが緑色のチェックマークとともに表示されていることを確認します。
2.4.2.2. Web コンソールを使用した Red Hat OpenShift Logging Operator のインストール
OpenShift Container Platform Web コンソールを使用して、OperatorHub から、ログを収集してログストアに転送するための Red Hat OpenShift Logging Operator を OpenShift Container Platform クラスターにインストールします。
前提条件
- 管理者権限がある。
- OpenShift Container Platform Web コンソールにアクセスできる。
- Loki Operator をインストールして設定した。
手順
- OpenShift Container Platform Web コンソールの Administrator パースペクティブで、Operators → OperatorHub に移動します。
- Filter by keyword フィールドに Red Hat OpenShift Logging Operator と入力します。利用可能な Operator のリストで Red Hat OpenShift Logging Operator をクリックし、Install をクリックします。
Update channel として stable-x.y を選択します。Version フィールドでは最新バージョンがすでに選択されています。
Red Hat OpenShift Logging Operator は、ロギング namespace
openshift-logging
にデプロイする必要があります。そのため、Installation mode と Installed Namespace はすでに選択されています。この namespace がまだ存在しない場合は、自動的に作成されます。Enable Operator-recommended cluster monitoring on this namespace. を選択します。
このオプションは、
Namespace
オブジェクトにopenshift.io/cluster-monitoring: "true"
ラベルを設定します。クラスターモニタリングがopenshift-logging
namespace を収集できるように、このオプションを選択する必要があります。Update approval で Automatic を選択し、Install をクリックします。
サブスクリプションの承認ストラテジーが Automatic に設定されている場合、選択したチャネルで新しい Operator バージョンが利用可能になると、すぐに更新プロセスが開始します。承認ストラテジーが Manual に設定されている場合は、保留中のアップグレードを手動で承認する必要があります。
注記インストールが完了する前に、Operator に
Failed
ステータスが表示される場合があります。Operator のインストールが完了し、InstallSucceeded
というメッセージが表示されたら、ページを更新してください。Operator をインストールしている間に、ログコレクターがログを収集するために使用するサービスアカウントを作成します。
- 画面右上の + をクリックして、Import YAML ページにアクセスします。
サービスアカウントの YAML 定義を入力します。
ServiceAccount
オブジェクトの例apiVersion: v1 kind: ServiceAccount metadata: name: logging-collector 1 namespace: openshift-logging 2
- Create ボタンをクリックします。
ClusterRoleBinding
オブジェクトを作成して、インフラストラクチャーログやアプリケーションログなど、収集するログにアクセスし、ログストアに書き込むために必要な権限をログコレクターに付与します。- 画面右上の + をクリックして、Import YAML ページにアクセスします。
ClusterRoleBinding
リソースの YAML 定義を入力します。ClusterRoleBinding
リソースの例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: logging-collector:write-logs roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: logging-collector-logs-writer 1 subjects: - kind: ServiceAccount name: logging-collector namespace: openshift-logging --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: logging-collector:collect-application roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: collect-application-logs 2 subjects: - kind: ServiceAccount name: logging-collector namespace: openshift-logging --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: logging-collector:collect-infrastructure roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: collect-infrastructure-logs 3 subjects: - kind: ServiceAccount name: logging-collector namespace: openshift-logging
- Create ボタンをクリックします。
- Operators → Installed Operators ページに移動します。Operator を選択し、All instances タブをクリックします。
- サービスアカウントに必要な権限を付与した後、Installed Operator ページに移動します。Provided APIs で Red Hat OpenShift Logging Operator を選択し、ClusterLogForwarder リソースを見つけて、Create Instance をクリックします。
YAML view を選択し、次のテンプレートを使用して
ClusterLogForwarder
CR を作成します。ClusterLogForwarder
CR の例apiVersion: observability.openshift.io/v1 kind: ClusterLogForwarder metadata: name: instance namespace: openshift-logging 1 spec: serviceAccount: name: logging-collector 2 outputs: - name: lokistack-out type: lokiStack 3 lokiStack: target: 4 name: logging-loki namespace: openshift-logging authentication: token: from: serviceAccount tls: ca: key: service-ca.crt configMapName: openshift-service-ca.crt pipelines: - name: infra-app-logs inputRefs: 5 - application - infrastructure outputRefs: - lokistack-out
- Create をクリックします。
検証
-
ClusterLogForwarder タブで、
ClusterLogForwarder
インスタンスが表示されていることを確認します。 Status 列に次のメッセージが表示されていることを確認します。
-
Condition: observability.openshift.io/Authorized
-
observability.openshift.io/Valid, Ready
-
2.5. ログ転送の設定
ClusterLogForwarder
(CLF) を使用すると、ユーザーはさまざまな宛先へのログの転送を設定できます。さまざまなソースからログメッセージを選択し、それらを変換またはフィルタリングできるパイプラインを介して送信して、1 つ以上の出力に転送する柔軟な方法を提供します。
ClusterLogForwarder の主な機能
- 入力を使用してログメッセージを選択する
- 出力を使用してログを外部の宛先に転送する
- フィルターを使用してログメッセージをフィルタリング、変換、およびドロップする
- 入力、フィルター、出力を接続するログ転送パイプラインを定義する
2.5.1. ログ収集のセットアップ
このリリースの Cluster Logging では、管理者が ClusterLogForwarder に関連付けられたサービスアカウントにログ収集権限を明示的に付与する必要があります。これは、ClusterLogging およびオプションで ClusterLogForwarder.logging.openshift.io リソースで構成されるレガシーロギングシナリオでは、以前のリリースでは必要ありませんでした。
Red Hat OpenShift Logging Operator は、collect-audit-logs
、collect-application-logs
、collect-infrastructure-logs
クラスターロールを提供します。これにより、コレクターは監査ログ、アプリケーションログ、およびインフラストラクチャーログをそれぞれ収集できます。
必要なクラスターロールをサービスアカウントにバインドして、ログ収集をセットアップします。
2.5.1.1. レガシーサービスアカウント
既存のレガシーサービスアカウント logcollector
を使用するには、次の ClusterRoleBinding を作成します。
$ oc adm policy add-cluster-role-to-user collect-application-logs system:serviceaccount:openshift-logging:logcollector
$ oc adm policy add-cluster-role-to-user collect-infrastructure-logs system:serviceaccount:openshift-logging:logcollector
さらに、監査ログを収集する場合は、次の ClusterRoleBinding を作成します。
$ oc adm policy add-cluster-role-to-user collect-audit-logs system:serviceaccount:openshift-logging:logcollector
2.5.1.2. サービスアカウントの作成
前提条件
-
Red Hat OpenShift Logging Operator が
openshift-logging
namespace にインストールされている。 - 管理者権限がある。
手順
- コレクターのサービスアカウントを作成します。認証にトークンを必要とするストレージにログを書き込む場合は、サービスアカウントにトークンを含める必要があります。
適切なクラスターロールをサービスアカウントにバインドします。
バインドコマンドの例
$ oc adm policy add-cluster-role-to-user <cluster_role_name> system:serviceaccount:<namespace_name>:<service_account_name>
2.5.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
- 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.5.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
- 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.5.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
- 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.5.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
- 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.5.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
- 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.5.2. コレクターのログレベルの変更
コレクターでログレベルを変更するには、observability.openshift.io/log-level
アノテーションを trace
、debug
、info
、warn
、error
、および off
に設定します。
ログレベルアノテーションの例
apiVersion: observability.openshift.io/v1 kind: ClusterLogForwarder metadata: name: collector annotations: observability.openshift.io/log-level: debug # ...
2.5.3. Operator の管理
ClusterLogForwarder
リソースには、Operator がリソースをアクティブに管理するか、管理対象外のままにするかを制御する managementState
フィールドがあります。
- Managed
- (デフォルト) Operator は、CLF 仕様の目的の状態に一致するようにロギングリソースを駆動します。
- 管理対象外
- Operator は、ロギングコンポーネントに関連するアクションを一切実行しません。
これにより、管理者は managementState
を Unmanaged
に設定して、ログ転送を一時的に停止できます。
2.5.4. ClusterLogForwarder の構造
CLF には、次の主要コンポーネントを含む spec
セクションがあります。
- Inputs
-
転送するログメッセージを選択します。組み込みの入力タイプである
application
、infrastructure
、およびaudit
は、クラスターのさまざまな部分からログを転送します。カスタム入力を定義することもできます。 - 出力
- ログを転送する宛先を定義します。各出力には、一意の名前とタイプ固有の設定があります。
- Pipelines
- ログが入力からフィルターを経由して出力されるまでのパスを定義します。パイプラインには一意の名前があり、入力名、出力名、フィルター名のリストで構成されます。
- Filters
- パイプライン内のログメッセージを変換またはドロップします。ユーザーは、特定のログフィールドに一致するフィルターを定義し、メッセージをドロップまたは変更できます。フィルターはパイプラインで指定された順序で適用されます。
2.5.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.5.4.2. 出力
出力は spec.outputs
の下の配列で設定されます。各出力には一意の名前とタイプが必要です。サポートされているタイプは次のとおりです。
- azureMonitor
- ログを Azure Monitor に転送します。
- cloudwatch
- ログを AWS CloudWatch に転送します。
- googleCloudLogging
- ログを Google Cloud Logging に転送します。
- http
- ログを汎用 HTTP エンドポイントに転送します。
- kafka
- ログを Kafka ブローカーに転送します。
- loki
- ログを Loki ロギングバックエンドに転送します。
- lokistack
- ログを、OpenShift Container Platform 認証インテグレーションによる Loki と Web プロキシーのロギングがサポートされている組み合わせに転送します。LokiStack のプロキシーは、OpenShift Container Platform 認証を使用してマルチテナンシーを適用します。
- otlp
- OpenTelemetry プロトコルを使用してログを転送します。
- splunk
- ログを Splunk に転送します。
- syslog
- ログを外部の syslog サーバーに転送します。
各出力タイプには独自の設定フィールドがあります。
2.5.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
OTLP 出力では OpenTelemetry データモデルが使用されますが、これは他の出力タイプで使用される ViaQ データモデルとは異なります。これは、OpenTelemetry Observability フレームワークで定義された OpenTelemetry Semantic Conventions を使用することで OTLP に準拠しています。
2.5.5.1. Pipelines
パイプラインは spec.pipelines
の下の配列で設定されます。各パイプラインには一意の名前があり、次の要素で構成される必要があります。
- inputRefs
- このパイプラインにログを転送する入力の名前。
- outputRefs
- ログを送信する出力の名前。
- filterRefs
- (オプション) 適用するフィルターの名前。
filterRef の順序は、順次適用されるため重要です。以前のフィルターは、後のフィルターで処理されないメッセージをドロップする可能性があります。
2.5.5.2. Filters
フィルターは spec.filters
の下の配列で設定されます。構造化フィールドの値に基づいて受信ログメッセージを照合し、変更または削除できます。
管理者は次のタイプのフィルターを設定できます。
2.5.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)
-
ロギングを有効にして複数行の例外を検出し、それらを 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>
2.5.5.3.1. 詳細
ログメッセージが例外スタックトレースを形成する連続したシーケンスとして表示される場合、それらは単一の統合ログレコードに結合されます。最初のログメッセージの内容は、シーケンス内のすべてのメッセージフィールドの連結コンテンツに置き換えられます。
コレクターは次の言語をサポートしています。
- Java
- JS
- Ruby
- Python
- golang
- PHP
- Dart
2.5.5.4. 不要なログレコードを削除するコンテンツフィルターの設定
drop
フィルターが設定されている場合、ログコレクターは転送する前にフィルターに従ってログストリームを評価します。コレクターは、指定された設定に一致する不要なログレコードを削除します。
手順
フィルターの設定を
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>"] # ...
- 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
フィルターが適用されるパイプラインを指定します。
次のコマンドを実行して、
ClusterLogForwarder
CR を適用します。$ oc apply -f <filename>.yaml
追加例
次の例は、優先度の高いログレコードのみを保持するように 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" # ...
単一の 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" # ...
2.5.5.5. API 監査フィルターの概要
OpenShift API サーバーは、API 呼び出しごとに、リクエスト、レスポンス、リクエスターの ID の詳細を示す監査イベントを生成するため、大量のデータが生成されます。API 監査フィルターはルールを使用して、重要でないイベントを除外してイベントサイズを減少できるようにし、監査証跡をより管理しやすくします。ルールは順番にチェックされ、最初の一致でチェックが停止します。イベントに含まれるデータの量は、level
フィールドの値によって決まります。
-
None
: イベントはドロップされます。 -
Metadata
: 監査メタデータが含まれ、リクエストおよびレスポンスの本文は削除されます。 -
Request
: 監査メタデータとリクエスト本文が含まれ、レスポンス本文は削除されます。 -
RequestResponse
: メタデータ、リクエスト本文、レスポンス本文のすべてのデータが含まれます。レスポンス本文が非常に大きくなる可能性があります。たとえば、oc get pods -A
はクラスター内のすべての Pod の YAML 記述を含むレスポンス本文を生成します。
ClusterLogForwarder
カスタムリソース (CR) は、以下の追加機能を提供しますが、標準の Kubernetes 監査ポリシー と同じ形式を使用します。
- ワイルドカード
-
ユーザー、グループ、namespace、およびリソースの名前には、先頭または末尾に
*
アスタリスク文字を付けることができます。たとえば、namespaceopenshift-\*
はopenshift-apiserver
またはopenshift-authentication
に一致します。リソース\*/status
は、Pod/status
またはDeployment/status
と一致します。 - デフォルトのルール
ポリシーのルールに一致しないイベントは、以下のようにフィルターされます。
-
get
、list
、watch
などの読み取り専用システムイベントは削除されます。 - サービスアカウントと同じ namespace 内で発生するサービスアカウント書き込みイベントはドロップされます。
- 他のすべてのイベントは、設定されたレート制限に従って転送されます。
-
これらのデフォルトを無効にするには、level
フィールドのみが含まれるルールでルールリストを終了するか、空のルールを追加します。
- 応答コードが省略される
-
省略する整数ステータスコードのリスト。イベントが作成されない HTTP ステータスコードをリストする
OmitResponseCodes
フィールドを使用して、応答で HTTP ステータスコードに基づいてイベントをドロップできます。デフォルト値は[404, 409, 422, 429]
です。値が空のリスト[]
の場合、ステータスコードは省略されません。
ClusterLogForwarder
CR の監査ポリシーは、OpenShift Container Platform の監査ポリシーに加えて動作します。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
2.5.5.6. ラベル式または一致するラベルキーと値を含む入力時でのアプリケーションログのフィルタリング
input
セレクターを使用して、ラベル式または照合するラベルキーとその値に基づいてアプリケーションログを含めることができます。
手順
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 # ...
次のコマンドを実行して、
ClusterLogForwarder
CR を適用します。$ oc apply -f <filename>.yaml
2.5.5.7. ログレコードを削除するコンテンツフィルターの設定
prune
フィルターが設定されると、ログコレクターは転送前にフィルターをもとにログレベルを評価します。コレクターは、Pod アノテーションなどの値の低いフィールドを削除してログレコードを整理します。
手順
フィルターの設定を
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>"] # ...
- 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
フィールドを除外します。次のコマンドを実行して、
ClusterLogForwarder
CR を適用します。$ oc apply -f <filename>.yaml
2.5.6. ソースによる監査およびインフラストラクチャーログ入力のフィルタリング
input
セレクターを使用して、ログを収集する audit
および infrastructure
ソースのリストを定義できます。
手順
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 # ...
次のコマンドを実行して、
ClusterLogForwarder
CR を適用します。$ oc apply -f <filename>.yaml
2.5.7. namespace またはコンテナー名を含めるか除外して入力時にアプリケーションログをフィルタリングする手順
input
セレクターを使用して、namespace とコンテナー名に基づいてアプリケーションログを含めたり除外したりできます。
手順
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 # ...
注記excludes
フィールドはincludes
フィールドよりも優先されます。次のコマンドを実行して、
ClusterLogForwarder
CR を適用します。$ oc apply -f <filename>.yaml
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
の数は変更できません。
1x.demo | 1x.pico [6.1+ のみ] | 1x.extra-small | 1x.small | 1x.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
を作成するのと同じ namespace にserviceAccount
がある。 -
serviceAccount
にcollect-audit-logs
、collect-application-logs
、collect-infrastructure-logs
のクラスターロールが割り当てられている。
2.6.3. コアのセットアップと設定
ロールベースのアクセス制御、基本的なモニタリング、および Loki をデプロイするための Pod の配置。
2.6.4. LokiStack ルールの RBAC 権限の認可
管理者は、クラスターロールをユーザー名にバインドすることで、ユーザーが独自のアラートおよび記録ルールを作成および管理できるようにすることができます。クラスターロールは、ユーザーに必要なロールベースのアクセス制御 (RBAC) 権限を含む ClusterRole
オブジェクトとして定義されます。
LokiStack では、アラートおよび記録ルール用の次のクラスターロールが利用できます。
ルール名 | 説明 |
---|---|
|
このロールを持つユーザーは、アラートルールを管理する管理レベルのアクセス権を持ちます。このクラスターロールは、 |
|
このロールを持つユーザーは、 |
|
このロールを持つユーザーは、 |
|
このロールを持つユーザーは、 |
|
このロールを持つユーザーは、記録ルールを管理する管理レベルのアクセス権を持ちます。このクラスターロールは、 |
|
このロールを持つユーザーは、 |
|
このロールを持つユーザーは、 |
|
このロールを持つユーザーは、 |
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>
次のコマンドは、指定したユーザーに、すべての namespace のアラートルールに対する管理者権限を付与します。
管理者権限を付与するクラスターロールバインディングコマンドの例
$ oc adm policy add-cluster-role-to-user alertingrules.loki.grafana.com-v1-admin <username>
2.6.5. Loki を使用したログベースのアラートルールの作成
AlertingRule
CR には、単一の LokiStack
インスタンスのアラートルールグループを宣言するために使用する、仕様および Webhook 検証定義のセットが含まれます。Webhook 検証定義は、ルール検証条件もサポートします。
-
AlertingRule
CR に無効なinterval
期間が含まれる場合、無効なアラートルールです。 -
AlertingRule
CR に無効なfor
期間が含まれる場合、無効なアラートルールです。 -
AlertingRule
CR に無効な LogQLexpr
が含まれる場合、無効なアラートルールです。 -
AlertingRule
CR に同じ名前のグループが 2 つ含まれる場合、無効なアラートルールです。 - 上記のいずれも該当しない場合、アラートルールは有効とみなされます。
テナントタイプ | AlertingRule CR の有効な namespace |
---|---|
application |
|
audit |
|
infrastructure |
|
手順
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
- 1
- この
AlertingRule
CR が作成される namespace には、LokiStackspec.rules.namespaceSelector
定義に一致するラベルが必要です。 - 2
labels
ブロックは、LokiStack のspec.rules.selector
定義と一致する必要があります。- 3
infrastructure
テナントのAlertingRule
CR は、openshift-*
、kube-\*
、またはdefault
namespaces でのみサポートされます。- 4
kubernetes_namespace_name:
の値は、metadata.namespace
の値と一致する必要があります。- 5
- この必須フィールドの値は、
critical
、warning
、または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
- 1
- この
AlertingRule
CR が作成される namespace には、LokiStackspec.rules.namespaceSelector
定義に一致するラベルが必要です。 - 2
labels
ブロックは、LokiStack のspec.rules.selector
定義と一致する必要があります。- 3
kubernetes_namespace_name:
の値は、metadata.namespace
の値と一致する必要があります。- 4
- この必須フィールドの値は、
critical
、warning
、またはinfo
である必要があります。 - 5
- この必須フィールドの値は、ルールの概要です。
- 6
- この必須フィールドの値は、ルールの詳細な説明です。
AlertingRule
CR を適用します。$ oc apply -f <filename>.yaml
2.6.6. メンバーリストの作成の失敗を許容する Loki の設定
OpenShift Container Platform クラスターでは、管理者は通常、非プライベート IP ネットワーク範囲を使用します。その結果、LokiStack メンバーリストはデフォルトでプライベート IP ネットワークのみを使用するため、LokiStack メンバーリストの設定は失敗します。
管理者は、メンバーリスト設定の 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"}}}'
podIP
を含む LokiStack の例
apiVersion: loki.grafana.com/v1 kind: LokiStack metadata: name: logging-loki namespace: openshift-logging spec: # ... hashRing: type: memberlist memberlist: instanceAddrType: podIP # ...
2.6.7. Loki でストリームベースの保持の有効化
ログストリームに基づいて保持ポリシーを設定できます。これらのルールは、グローバル、テナントごと、またはその両方で設定できます。両方で設定すると、グローバルルールの前にテナントルールが適用されます。
s3 バケットまたは LokiStack カスタムリソース (CR) に保存期間が定義されていない場合、ログは削除されず、s3 バケットに永久に残り、s3 ストレージがいっぱいになる可能性があります。
スキーマ v13 が推奨されます。
手順
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
- 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
- 1
- テナントごとの保持ポリシーを設定します。有効なテナントタイプは、
application
、audit
、およびinfrastructure
です。 - 2
- ログストリームの定義に使用される LogQL クエリー が含まれています。
LokiStack
CR を適用します。$ oc apply -f <filename>.yaml
注記これは、保存されたログの保持を管理するためのものではありません。保存されたログのグローバルな保持期間 (最大 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: "" # ...
ノードセレクターと 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 # ...
LokiStack (CR) の nodeSelector
フィールドと tolerations
フィールドを設定するには、oc explain
コマンドを使用して、特定のリソースの説明とフィールドを表示します。
$ oc explain lokistack.spec.template
出力例
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. ...
詳細情報用に、特定のフィールドを追加できます。
$ oc explain lokistack.spec.template.compactor
出力例
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. ...
2.6.9. 信頼性とパフォーマンスの向上
実稼働環境における Loki の信頼性と効率性を確保するための設定。
2.6.10. 有効期間の短いトークンを使用したクラウドベースのログストアへの認証の有効化
ワークロードアイデンティティーフェデレーションを使用すると、有効期間の短いトークンを使用してクラウドベースのログストアに対して認証できます。
手順
認証を有効にするには、次のいずれかのオプションを使用します。
-
OpenShift Container Platform 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>
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>
-
OpenShift Container Platform Web コンソールを使用して Loki Operator をインストールすると、有効期間が短いトークンを使用するクラスターが自動的に検出されます。プロンプトが表示され、ロールを作成するように求められます。また、Loki Operator が
2.6.11. ノードの障害を許容するための Loki の設定
Loki Operator は、同じコンポーネントの Pod がクラスター内の異なる使用可能なノードにスケジュールされるように要求する Pod アンチアフィニティールールの設定をサポートしています。
アフィニティーとは、スケジュールするノードを制御する Pod の特性です。非アフィニティーとは、Pod がスケジュールされることを拒否する Pod の特性です。
OpenShift Container Platform では、Pod のアフィニティー と Pod の非アフィニティー によって、他の Pod のキー/値ラベルに基づいて、Pod のスケジュールに適したノードを制限できます。
Operator は、すべての Loki コンポーネント (compactor
、distributor
、gateway
、indexGateway
、ingester
、querier
、queryFrontend
、および 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 # ...
2.6.12. クラスターの再起動中の LokiStack 動作
OpenShift Container Platform クラスターが再起動されると、LokiStack の取り込みとクエリーパスは、ノードで使用可能な CPU およびメモリーリソース内で引き続き動作します。つまり、OpenShift Container Platform クラスターの更新中に LokiStack でダウンタイムは発生しません。この動作は、PodDisruptionBudget
リソースを使用して実現されます。Loki Operator は、Loki に PodDisruptionBudget
リソースをプロビジョニングするため、特定の条件下で通常の動作を保証するためにコンポーネントごとに必要最小限、使用可能な Pod 数が決定されます。
2.6.13. 高度なデプロイメントとスケーラビリティー
高可用性、スケーラビリティー、エラー処理のための特殊な設定。
2.6.14. ゾーン対応のデータレプリケーション
Loki Operator は、Pod トポロジーの分散制約を通じて、ゾーン対応のデータレプリケーションのサポートを提供します。この機能を有効にすると、信頼性が向上し、1 つのゾーンで障害が発生した場合のログ損失に対する保護が強化されます。デプロイメントサイズを 1x.extra.small
、1x.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
2.6.15. 障害が発生したゾーンからの Loki Pod の回復
OpenShift Container Platform では、特定のアベイラビリティーゾーンのリソースにアクセスできなくなると、ゾーン障害が発生します。アベイラビリティーゾーンは、冗長性とフォールトトレランスを強化することを目的とした、クラウドプロバイダーのデータセンター内の分離されたエリアです。OpenShift Container Platform クラスターがこの問題を処理するように設定されていない場合、ゾーン障害によりサービスまたはデータの損失が発生する可能性があります。
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 を手動で削除する必要があります。
手順
次のコマンドを実行して、
Pending
中ステータスの Pod をリスト表示します。$ oc get pods --field-selector status.phase==Pending -n openshift-logging
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
- 1
- これらの Pod は、障害が発生したゾーンに対応する PVC があるため、
Pending
ステータスになっています。
次のコマンドを実行して、
Pending
ステータスの PVC をリストします。$ oc get pvc -o=json -n openshift-logging | jq '.items[] | select(.status.phase == "Pending") | .metadata.name' -r
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
次のコマンドを実行して Pod の PVC を削除します。
$ oc delete pvc <pvc_name> -n openshift-logging
次のコマンドを実行して Pod を削除します。
$ oc delete pod <pod_name> -n openshift-logging
これらのオブジェクトが正常に削除されると、使用可能なゾーンでオブジェクトが自動的に再スケジュールされます。
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
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\"}"]]}]}
oc logs -n openshift-logging -l component=collector
と入力すると、クラスター内のコレクターログに、次のいずれかのエラーメッセージを含む行が表示されます。429 Too Many Requests Ingestion rate limit exceeded
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
このエラーは受信側にも表示されます。たとえば、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
手順
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 # ...
- 1
ingestionBurstSize
フィールドは、ディストリビューターレプリカごとに最大ローカルレート制限サンプルサイズを MB 単位で定義します。この値はハードリミットです。この値を、少なくとも 1 つのプッシュリクエストで想定される最大ログサイズに設定します。ingestionBurstSize
値より大きい単一リクエストは使用できません。- 2
ingestionRate
フィールドは、1 秒あたりに取り込まれるサンプルの最大量 (MB 単位) に対するソフト制限です。ログのレートが制限を超えているにもかかわらず、コレクターがログの送信を再試行すると、レート制限エラーが発生します。合計平均が制限よりも少ない場合に限り、システムは回復し、ユーザーの介入なしでエラーが解決されます。
2.7. Loki での OTLP データ取り込み
Logging 6.1 では、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 で導入された構造化メタデータをサポートしていることを確認します。
手順
スキーマバージョンを設定します。
新しい
LokiStack
CR を作成する場合は、ストレージスキーマ設定でversion: v13
を設定します。注記既存の設定の場合は、
version: v13
と現在より後のeffectiveDate
を持つ新しいスキーマエントリーを追加します。スキーマバージョンの更新の詳細は、Upgrading Schemas (Grafana ドキュメント) を参照してください。
ストレージスキーマを次のように設定します。
ストレージスキーマの設定例
# ... spec: storage: schemas: - version: v13 effectiveDate: 2024-10-25
effectiveDate
を過ぎると v13 スキーマが有効になり、LokiStack
は構造化メタデータを保存できるようになります。
2.7.2. 属性マッピング
Loki Operator を openshift-logging
モードに設定すると、Loki Operator がデフォルトの属性マッピングのセットを自動的に適用します。このマッピングは、特定の OTLP 属性を、Loki のストリームラベルおよび構造化メタデータに対応付けるものです。
一般的なセットアップでは、このようなデフォルトのマッピングで十分です。ただし、次の場合には属性マッピングをカスタマイズする必要があることもあります。
- カスタムコレクターを使用する場合: セットアップに追加の属性を生成するカスタムコレクターが含まれている場合は、これらの属性を 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: otlp: {} 2
グローバルおよびテナントごとの OTLP 設定の両方で、属性をストリームラベルまたは構造化メタデータにマッピングできます。ログエントリーを Loki ストレージに保存するには、少なくとも 1 つのストリームラベルが必要です。設定がその要件を満たしていることを確認してください。
ストリームラベルはリソースレベルの属性からのみ導出され、LokiStack
リソース構造はそれを反映します。
spec: limits: global: otlp: streamLabels: resourceAttributes: - name: "k8s.namespace.name" - name: "k8s.pod.name" - name: "k8s.container.name"
対照的に、構造化メタデータはリソース、スコープ、またはログレベルの属性から生成できます。
# ... 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"
Loki で類似の属性をマッピングする場合は、、属性名に regex: true
を設定して正規表現を使用します。
データ量が増加する可能性があるため、ストリームラベルに正規表現を使用することは避けてください。
2.7.2.2. OpenShift のデフォルトのカスタマイズ
openshift-logging
モードでは、特定の属性が必須であり、OpenShift 機能でのロールのため、設定から削除できません。推奨 のラベルが付いているその他の属性は、パフォーマンスに影響がある場合は無効化されている可能性があります。
カスタム属性なしで openshift-logging
モードを使用すると、即座に OpenShift ツールとの互換性が確保されます。ストリームラベルまたは構造化メタデータとして追加の属性が必要な場合は、カスタム設定を使用します。カスタム設定はデフォルト設定とマージできます。
2.7.2.3. 推奨属性の削除
openshift-logging
モードでデフォルト属性を減らすには、推奨属性を無効にします。
# ...
spec:
tenants:
mode: openshift-logging
openshift:
otlp:
disableRecommendedAttributes: true 1
- 1
- 推奨属性を削除するには、
disableRecommendedAttributes: true
を設定します。これにより、デフォルトの属性が 必須属性 に制限されます。
このオプションは、デフォルトの属性によってパフォーマンスやストレージの問題が発生する場合に役立ちます。この設定により、デフォルトのストリームラベルが削除されるため、クエリーのパフォーマンスに悪影響が及ぶ可能性があります。クエリーに不可欠な属性を保持するためには、このオプションをカスタム属性設定と組み合わせる必要があります。
2.7.3. 関連情報
2.8. OpenTelemetry データモデル
このドキュメントでは、Logging 6.1 における Red Hat OpenShift Logging の OpenTelemetry サポートのプロトコルおよびセマンティック規約について概説します。
OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
2.8.1. 転送および取り込みプロトコル
Red Hat OpenShift Logging は、OTLP 仕様 を使用してログを収集し、OpenTelemetry エンドポイントに転送します。OTLP はテレメトリーデータをエンコード、転送、配信します。ログストリームを取り込むための OTLP エンドポイントを提供する Loki ストレージをデプロイすることもできます。このドキュメントでは、さまざまな OpenShift クラスターソースから収集されたログのセマンティック規約を定義します。
2.8.2. セマンティック規約
このソリューションのログコレクターは、次のログストリームを収集します。
- コンテナーログ
- クラスターノードジャーナルログ
- クラスターノード監査ログ
- Kubernetes および OpenShift API サーバーログ
- OpenShift Virtual Network (OVN) ログ
これらのストリームは、OpenTelemetry セマンティック属性によって定義されたセマンティック規約に従って転送できます。OpenTelemetry のセマンティック規約では、リソースを属性によって識別される、テレメトリーを生成するエンティティーのイミュータブルな表現と定義しています。たとえばコンテナー内で実行されているプロセスには、container_name
、cluster_id
、pod_name
、namespace
などの属性が含まれ、場合によっては deployment
または app_name
も含まれます。これらの属性はリソースオブジェクトの下にグループ化されており、繰り返しを減らし、テレメトリーデータとしてのログ送信を最適化するのに役立ちます。
ログには、リソース属性に加え、計装ライブラリーに固有のスコープ属性と、各ログエントリーに固有のログ属性も含まれる場合があります。これらの属性は、各ログエントリーに関するより詳細な情報を提供し、ストレージ内のログをクエリーする際のフィルタリング機能を強化します。
次のセクションでは、一般的に転送される属性を定義しています。
2.8.2.1. ログエントリー構造
すべてのログストリームには、次の ログデータ フィールドが含まれます。
適用可能ソース 列は、各フィールドに適用するログソースを示しています。
-
all
: このフィールドは、すべてのログに存在します。 -
container
: このフィールドは、アプリケーションとインフラストラクチャーの両方の Kubernetes コンテナーログに存在します。 -
audit
: このフィールドは、Kubernetes ログ、OpenShift API ログ、OVN ログに存在します。 -
auditd
: このフィールドは、ノード監査ログに存在します。 -
journal
: このフィールドは、ノードジャーナルログに存在します。
名前 | 適用可能ソース | コメント |
---|---|---|
| all | |
| all | |
| all | |
| container、journal | |
| all | (オプション) ストリーム固有の属性を転送する場合に存在します |
2.8.2.2. 属性
次の表に示すとおり、ログエントリーにはソースに基づくリソース属性、スコープ属性、ログ属性のセットが含まれます。
場所 列は属性のタイプを示しています。
-
resource
: リソース属性を示します -
scope
: スコープ属性を示します -
log
: ログ属性を示します
ストレージ 列は、属性がデフォルトの openshift-logging
モードを使用して LokiStack に保存されているか、および保存場所を示しています。
stream label
:- 特定のラベルに基づく効率的なフィルタリングとクエリーを可能にします。
-
Loki Operator が設定でこの属性を強制する場合は、
required
としてラベル付けできます。
structured metadata
:- キーと値のペアの詳細なフィルタリングと保存を可能にします。
- JSON 解析を使用することなく、合理化されたクエリーに直接ラベルを使用できるようになります。
OTLP を使用すると、ユーザーは JSON 解析を使用するのではなく、ラベルで直接クエリーをフィルタリングできるため、クエリーの速度と効率が向上します。
名前 | 場所 | 適用可能ソース | ストレージ (LokiStack) | コメント |
---|---|---|---|---|
| resource | all | required stream label |
(非推奨) 互換性属性。 |
| resource | all | required stream label |
(非推奨) 互換性属性。 |
| resource | container | stream label |
(非推奨) 互換性属性。 |
| resource | all | stream label |
(非推奨) 互換性属性。 |
| resource | container | required stream label |
(非推奨) 互換性属性。 |
| resource | container | stream label |
(非推奨) 互換性属性。 |
| resource | all |
(非推奨) 互換性属性。 | |
| log | container、journal |
(非推奨) 互換性属性。 | |
| resource | all | required stream label | |
| resource | all | required stream label | |
| resource | all | required stream label | |
| resource | all | structured metadata | |
| resource | all | stream label | |
| resource | container | required stream label | |
| resource | container | stream label | |
| resource | container | structured metadata | |
| resource | container | stream label | |
| resource | container | structured metadata | |
| resource | container | stream label | Pod 作成者に基づき条件付きで転送されます |
| resource | container | stream label | Pod 作成者に基づき条件付きで転送されます |
| resource | container | stream label | Pod 作成者に基づき条件付きで転送されます |
| resource | container | stream label | Pod 作成者に基づき条件付きで転送されます |
| resource | container | structured metadata | Pod 作成者に基づき条件付きで転送されます |
| resource | container | stream label | Pod 作成者に基づき条件付きで転送されます |
| log | container | structured metadata | |
| log | audit | structured metadata | |
| log | audit | structured metadata | |
| log | audit | structured metadata | |
| log | audit | structured metadata | |
| log | audit | structured metadata | |
| log | audit | structured metadata | |
| log | audit | structured metadata | |
| log | audit | structured metadata | |
| log | audit | structured metadata | |
| log | audit | structured metadata | |
| log | audit | structured metadata | |
| log | audit | structured metadata | |
| log | audit | structured metadata | |
| resource | journal | structured metadata | |
| resource | journal | structured metadata | |
| resource | journal | structured metadata | |
| resource | journal | structured metadata | |
| resource | journal | stream label | |
| log | journal | structured metadata | |
| log | journal | structured metadata |
互換性属性 としてマークされた属性は、ViaQ データモデルとの最小限の下位互換性をサポートします。これらは非推奨の属性であり、UI 機能の継続を保証するための互換性レイヤーとして機能します。これらの属性は、Logging UI が今後のリリースにおける OpenTelemetry 対応機能を完全にサポートするまで引き続きサポートされます。
Loki は、ストレージへの保存時に属性名を変更します。名前は小文字になり、セット内のすべての文字 (.
、/
、-
) はアンダースコア (_
) に置き換えられます。たとえば、k8s.namespace.name
は k8s_namespace_name
になります。
2.8.3. 関連情報
2.9. ロギングの可視化
ロギングの可視化は、Cluster Observability Operator の Logging UI プラグイン をデプロイすることで提供されます。そのためには Operator のインストールが必要です。
Legal Notice
Copyright © 2024 Red Hat, Inc.
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.