12.2. コンテンツによるログのフィルタリング
クラスターからすべてのログを収集すると、大量のデータが生成され、転送や保存にコストがかかる可能性があります。
保存する必要のない優先度の低いデータをフィルタリングすることで、ログデータの容量を削減できます。Logging ではコンテンツフィルターが提供されており、ログデータの量を減らすことができます。
コンテンツフィルターは input
セレクターとは異なります。input
セレクターは、ソースメタデータに基づいてログストリーム全体を選択または無視します。コンテンツフィルターはログストリームを編集して、レコードの内容に基づいてレコードを削除および変更します。
ログデータの量は、次のいずれかの方法を使用して削減できます。
12.2.1. 不要なログレコードを削除するコンテンツフィルターの設定
drop
フィルターが設定されている場合、ログコレクターは転送する前にフィルターに従ってログストリームを評価します。コレクターは、指定された設定に一致する不要なログレコードを削除します。
前提条件
- Red Hat OpenShift Logging Operator がインストールされている。
- 管理者権限がある。
-
ClusterLogForwarder
カスタムリソース (CR) を作成した。
手順
フィルターの設定を
ClusterLogForwarder
CR のfilters
仕様に追加します。以下の例は、正規表現に基づいてログレコードを削除するように
ClusterLogForwarder
CR を設定する方法を示しています。ClusterLogForwarder
CR の例apiVersion: logging.openshift.io/v1 kind: ClusterLogForwarder metadata: # ... spec: 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: logging.openshift.io/v1 kind: ClusterLogForwarder metadata: # ... spec: 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: logging.openshift.io/v1 kind: ClusterLogForwarder metadata: # ... spec: 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" # ...
12.2.2. ログレコードを削除するコンテンツフィルターの設定
prune
フィルターが設定されると、ログコレクターは転送前にフィルターをもとにログレベルを評価します。コレクターは、Pod アノテーションなどの値の低いフィールドを削除してログレコードを整理します。
前提条件
- Red Hat OpenShift Logging Operator がインストールされている。
- 管理者権限がある。
-
ClusterLogForwarder
カスタムリソース (CR) を作成した。
手順
フィルターの設定を
ClusterLogForwarder
CR のprune
仕様に追加します。次の例は、フィールドパスに基づいてログレコードを削除するように
ClusterLogForwarder
CR を設定する方法を示しています。重要両方が指定されている場合、最初に
notIn
配列に基づいてレコードが整理され、in
配列よりも優先されます。notIn
配列を使用してレコードが整理された後、in
配列を使用してレコードが整理されます。ClusterLogForwarder
CR の例apiVersion: logging.openshift.io/v1 kind: ClusterLogForwarder metadata: # ... spec: 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
フィルターを適用するパイプラインを指定します。
次のコマンドを実行して、
ClusterLogForwarder
CR を適用します。$ oc apply -f <filename>.yaml