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