12.2. 按内容过滤日志
从集群中收集所有日志可能会产生大量数据,传输和存储这些数据可能比较昂贵。
您可以通过过滤不需要存储的低优先级数据来减少日志数据的卷。日志记录提供内容过滤器,可用于减少日志数据的卷。
内容过滤器与 input
选择器不同。input
选择器选择或忽略基于源元数据的整个日志流。内容过滤器编辑日志流,以根据记录内容删除和修改记录。
您可以使用以下方法之一减少日志数据卷:
12.2.1. 配置内容过滤器以丢弃不需要的日志记录
配置 drop
过滤器后,日志收集器会根据过滤器在转发前评估日志流。收集器丢弃与指定配置匹配的不需要的日志记录。
先决条件
- 已安装 Red Hat OpenShift Logging Operator。
- 有管理员权限。
-
您已创建了
ClusterLogForwarder
自定义资源 (CR)。
流程
将过滤器的配置添加到
ClusterLogForwarder
CR 中的filters
spec 中。以下示例演示了如何配置
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"
。您可以在单个test
配置中包含多个字段路径,但它们都必须评估为 true 才能通过测试以及要应用的drop
过滤器。 - 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,则记录将被丢弃。但是,对于第二个 test
配置,两个字段 specs 都必须是 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
spec 中。以下示例演示了如何配置
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