1.4. ClusterLogForwarder の構造


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

Inputs
転送するログメッセージを選択します。組み込みの入力タイプである applicationinfrastructure、および 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 に転送します。
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 の例

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

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

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

1.4.4. Pipelines

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

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

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

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)
Copy to Clipboard Toggle word wrap

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

ClusterLogForwarder CR の例

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

1.4.6.1. 詳細

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

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

  • Java
  • JS
  • Ruby
  • Python
  • golang
  • PHP
  • Dart

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

すべてのクラスターログを収集すると、大量のデータが生成されますが、これは移動および保存にコストがかかる可能性があります。ボリュームを減らすには、転送前に不要なログレコードを除外するように ドロップ フィルターを設定することができます。ログコレクターは、フィルターに対してログストリームを評価し、指定された条件に一致するレコードをドロップします。

ドロップ フィルターは test フィールドを使用して、ログレコードを評価するための条件を 1 つ以上定義します。フィルターは次のルールを適用して、レコードをドロップするかどうかを確認します。

  • 指定されたすべての条件が true と評価されると、テストに合格します。
  • テストに合格すると、フィルターはログレコードをドロップします。
  • ドロップ フィルター設定で複数のテストを定義すると、テストに合格すると、フィルターはログレコードをドロップします。
  • たとえば、条件の評価でエラーがある場合(参照フィールドがないなど)、その条件は false と評価されます。

前提条件

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

手順

  1. 既存の ClusterLogForwarder 設定を抽出し、ローカルファイルとして保存します。

    $ oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
    Copy to Clipboard Toggle word wrap

    詳細は、以下のようになります。

    • <name > は、設定する ClusterLogForwarder インスタンスの名前です。
    • <namespace > は、ClusterLogForwarder インスタンスを作成した namespace です(例: openshift-logging )。
    • <filename& gt; は、設定を保存するローカルファイルの名前です。
  2. 不要なログレコードを ClusterLogForwarder CR の filter 仕様 ドロップする設定を追加します。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: instance
      namespace: openshift-logging
    spec:
      # ...
      filters:
      - name: drop-filter
        type: drop 
    1
    
        drop: 
    2
    
        - test: 
    3
    
          - field: .kubernetes.labels."app.version-1.2/beta" 
    4
    
            matches: .+ 
    5
    
          - field: .kubernetes.pod_name
            notMatches: "my-pod" 
    6
    
      pipelines:
      - name: my-pipeline 
    7
    
        filterRefs:
        - drop-filter
      # ...
    Copy to Clipboard Toggle word wrap

    1
    フィルターのタイプを指定します。drop フィルターは、フィルター設定に一致するログレコードをドロップします。
    2
    ドロップ フィルターの設定オプションを指定します。
    3
    フィルターがログレコードをドロップするかどうかを評価するための条件を指定します。
    4
    ログレコードのフィールドへのドットで区切られたパスを指定します。
    • 各パスのセグメントには、英数字とアンダースコア、a-zA-Z、0-9_ を含めることができます(例: .kubernetes.namespace_name )。
    • セグメントに異なる文字が含まれる場合、セグメントは引用符で囲む必要があります(例: .kubernetes.labels."app.version-1.2/beta ")。
    • 単一の テスト設定に複数のフィールドパスを含めることができますが、テスト に合格し、ドロップ フィルターを適用するには、すべて true と評価する必要があります。
    5
    正規表現を指定します。ログレコードがこの正規表現と一致する場合は、破棄されます。
    6
    正規表現を指定します。ログレコードがこの正規表現に一致しない場合、破棄されます。
    7
    ドロップ フィルターを使用するパイプラインを指定します。
    注記

    単一の field パスに対して matches または notMatches 条件のいずれかを設定できますが、両方を設定することはできません。

    優先度の高いログレコードのみを保持する設定例

    # ...
    filters:
    - name: important
      type: drop
      drop:
      - test:
        - field: .message
          notMatches: "(?i)critical|error"
        - field: .level
          matches: "info|warning"
    # ...
    Copy to Clipboard Toggle word wrap

    複数のテストを使用した設定例

    # ...
    filters:
    - name: important
      type: drop
      drop:
      - test: 
    1
    
        - field: .kubernetes.namespace_name
          matches: "openshift.*"
      - test: 
    2
    
        - field: .log_type
          matches: "application"
        - field: .kubernetes.pod_name
          notMatches: "my-pod"
    # ...
    Copy to Clipboard Toggle word wrap

    1
    フィルターは、openshift で始まる namespace を含むログを破棄します。
    2
    フィルターは、Pod 名に my-pod を持たないアプリケーションログを破棄します。
  3. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

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

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

OpenShift API サーバーは、すべての API 呼び出しの監査イベントを生成します。これらのイベントには、要求、応答、およびリクエスターのアイデンティティーに関する詳細が含まれます。これにより、大量のデータが発生する可能性があります。

API 監査フィルターは、ルールを使用して必須ではないイベントを除外し、イベントサイズを縮小することで監査証拠を管理するのに役立ちます。ルールは順番にチェックされ、最初の一致でチェックが停止します。イベント内のデータの量は level フィールドの値によって異なります。

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

Vector コレクターがロギングデプロイメントに設定されている場合のみ、API 監査ロギング機能を使用できます。

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

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

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

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

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

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

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

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

監査ポリシーの例

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: instance
  namespace: openshift-logging
spec:
  serviceAccount:
    name: example-service-account
  pipelines:
    - name: my-pipeline
      inputRefs:
        - audit 
1

      filterRefs:
        - my-policy 
2

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

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

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

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

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

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

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

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

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

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

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

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

手順

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

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

    ClusterLogForwarder CR の例

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

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

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

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

プルーニング フィルターを設定する場合、ログコレクターは転送前にログストリームをフィルターに対して評価します。コレクターは、Pod アノテーションなどの値の低いフィールドを削除してログレコードを整理します。

前提条件

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

手順

  1. 既存の ClusterLogForwarder 設定を抽出し、ローカルファイルとして保存します。

    $ oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
    Copy to Clipboard Toggle word wrap

    詳細は、以下のようになります。

    • <name > は、設定する ClusterLogForwarder インスタンスの名前です。
    • <namespace > は、ClusterLogForwarder インスタンスを作成した namespace です(例: openshift-logging )。
    • <filename& gt; は、設定を保存するローカルファイルの名前です。
  2. ログレコードを ClusterLogForwarder CR の filters 仕様にプルーニングする設定を追加します。

    重要

    in および notIn パラメーターの両方を指定すると、プルーニング時に notIn 配列が優先されます。notIn 配列を使用してレコードがプルーニングされると、それらは in 配列を使用してプルーニングされます。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: instance
      namespace: openshift-logging
    spec:
      serviceAccount:
        name: my-account
      filters:
      - name: prune-filter
        type: prune 
    1
    
        prune: 
    2
    
          in: [.kubernetes.annotations, .kubernetes.namespace_id] 
    3
    
          notIn: [.kubernetes,.log_type,.message,."@timestamp",.log_source] 
    4
    
      pipelines:
      - name: my-pipeline 
    5
    
        filterRefs: ["prune-filter"]
      # ...
    Copy to Clipboard Toggle word wrap

    1
    フィルターのタイプを指定します。prune フィルターでは、設定されたフィールドでログレコードをプルーニングします。
    2
    プルーニング フィルターの設定オプションを指定します。
    • in フィールドおよび notIn フィールドは、ログレコードのフィールドへのドットで区切られたパスの配列です。
    • 各パスのセグメントには、英数字とアンダースコア、a-zA-Z、0-9_ を含めることができます(例: .kubernetes.namespace_name )。
    • セグメントに異なる文字が含まれる場合、セグメントは引用符で囲む必要があります(例: .kubernetes.labels."app.version-1.2/beta ")。
    3
    オプション:ログレコードから削除するフィールドを指定します。ログコレクターは他のすべてのフィールドを保持します。
    4
    オプション:ログレコードに保持するフィールドを指定します。ログコレクターは、他のすべてのフィールドを削除します。
    5
    prune フィルターを適用するパイプラインを指定します。
    重要
    • フィルターはログレコードから .log_type.log_source.message フィールドを削除できません。これらは notIn フィールドに含める必要があります。
    • googleCloudLogging 出力を使用する場合は、notIn フィールドに .hostname を含める必要があります。
  3. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat