1.4. ClusterLogForwarder の構造
CLF には、次の主要コンポーネントを含む spec
セクションがあります。
- Inputs
-
転送するログメッセージを選択します。組み込みの入力タイプである
application
、infrastructure
、およびaudit
は、クラスターのさまざまな部分からログを転送します。カスタム入力を定義することもできます。 - 出力
- ログを転送する宛先を定義します。各出力には、一意の名前とタイプ固有の設定があります。
- Pipelines
- ログが入力からフィルターを経由して出力されるまでのパスを定義します。パイプラインには一意の名前があり、入力名、出力名、フィルター名のリストで構成されます。
- Filters
- パイプライン内のログメッセージを変換または破棄します。ユーザーは、特定のログフィールドに一致するフィルターを定義し、メッセージを破棄または変更できます。フィルターはパイプラインで指定された順序で適用されます。
1.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.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.4.3. 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 の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
OTLP 出力では OpenTelemetry データモデルが使用されますが、これは他の出力タイプで使用される ViaQ データモデルとは異なります。これは、OpenTelemetry Observability フレームワークで定義された OpenTelemetry Semantic Conventions を使用することで OTLP に準拠しています。
1.4.4. Pipelines リンクのコピーリンクがクリップボードにコピーされました!
パイプラインは spec.pipelines
の下の配列で設定されます。各パイプラインには一意の名前があり、次の要素で構成される必要があります。
- inputRefs
- このパイプラインにログを転送する入力の名前。
- outputRefs
- ログを送信する出力の名前。
- filterRefs
- (オプション) 適用するフィルターの名前。
filterRefs は順番に適用されるため、順序が重要です。以前のフィルターは、後のフィルターで処理されないメッセージを破棄する可能性があります。
1.4.5. Filters リンクのコピーリンクがクリップボードにコピーされました!
フィルターは spec.filters
の下の配列で設定されます。構造化フィールドの値に基づいて受信ログメッセージを照合し、変更または削除できます。
管理者は次のタイプのフィルターを設定できます。
1.4.6. 複数行の例外検出の有効化 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーログの複数行のエラー検出を有効にします。
この機能を有効にすると、パフォーマンスに影響が出る可能性があり、追加のコンピューティングリソースや代替のロギングソリューションが必要になる場合があります。
ログパーサーは頻繁に、同じ例外の個別の行を別々の例外として誤って識別します。その結果、余分なログエントリーが発生し、トレースされた情報が不完全または不正確な状態で表示されます。
Java 例外の例
java.lang.NullPointerException: Cannot invoke "String.toString()" because "<param1>" is null at testjava.Main.handle(Main.java:47) at testjava.Main.printMe(Main.java:19) at testjava.Main.main(Main.java:10)
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 の例
1.4.6.1. 詳細 リンクのコピーリンクがクリップボードにコピーされました!
ログメッセージが例外スタックトレースを形成する連続したシーケンスとして表示される場合、それらは単一の統合ログレコードに結合されます。最初のログメッセージの内容は、シーケンス内のすべてのメッセージフィールドの連結コンテンツに置き換えられます。
コレクターは次の言語をサポートしています。
- Java
- JS
- Ruby
- Python
- Golang
- PHP
- Dart
1.4.7. HTTP 経由でのログ転送 リンクのコピーリンクがクリップボードにコピーされました!
HTTP 経由でログを転送できるようにするには、ClusterLogForwarder
カスタムリソース (CR) で出力タイプとして http
を指定します。
手順
以下のテンプレートを使用して、
ClusterLogForwarder
CR を作成または編集します。ClusterLogForwarder CR の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.8. syslog プロトコルを使用したログの転送 リンクのコピーリンクがクリップボードにコピーされました!
syslog RFC3164 または RFC5424 プロトコルを使用して、デフォルトの Elasticsearch ログストアの代わり、またはそれに加えてプロトコルを受け入れるように設定された外部ログアグリゲーターに、ログのコピーを送信できます。syslog サーバーなど、外部ログアグリゲーターを OpenShift Container Platform からログを受信するように設定する必要があります。
syslog プロトコルを使用してログ転送を設定するには、syslog サーバーへの 1 つ以上の出力と、それらの出力を使用するパイプラインを含む ClusterLogForwarder
カスタムリソース (CR) を作成する必要があります。syslog 出力では、UDP、TCP、または TLS 接続を使用できます。
前提条件
- 指定されたプロトコルまたは形式を使用してロギングデータを受信するように設定されたロギングサーバーが必要です。
手順
ClusterLogForwarder
CR オブジェクトを定義する YAML ファイルを作成または編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
$ oc create -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.8.1. メッセージ出力へのログソース情報の追加 リンクのコピーリンクがクリップボードにコピーされました!
ClusterLogForwarder
カスタムリソース (CR) に enrichment
フィールドを追加することで、レコードの message
フィールドに namespace_name
、pod_name
、および container_name
要素を追加できます。
この設定は、RFC3164 と RFC5424 の両方と互換性があります。
enrichment: None を使用した syslog メッセージ出力の例
2025-03-03T11:48:01+00:00 example-worker-x syslogsyslogserverd846bb9b: {...}
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: {...}
2025-03-03T11:48:01+00:00 example-worker-x syslogsyslogserverd846bb9b: namespace_name=cakephp-project container_name=mysql pod_name=mysql-1-wr96h,message: {...}