×

收集集群中的所有日志可能会产生大量数据,传输和存储这些数据可能成本很高。

您可以通过过滤掉不需要存储的低优先级数据来减少日志数据的数量。日志记录提供内容过滤器,您可以使用这些过滤器来减少日志数据的数量。

内容过滤器与input选择器不同。input选择器根据源元数据选择或忽略整个日志流。内容过滤器编辑日志流以根据记录内容删除和修改记录。

可以使用以下方法之一减少日志数据量

配置内容过滤器以丢弃不需要的日志记录

配置drop过滤器后,日志收集器会在转发之前根据过滤器评估日志流。收集器会丢弃与指定配置匹配的不需要的日志记录。

先决条件
  • 您已安装 Red Hat OpenShift Logging Operator。

  • 您拥有管理员权限。

  • 您已创建ClusterLogForwarder自定义资源 (CR)。

步骤
  1. 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 指定用于评估是否丢弃日志记录的测试的配置。
    • 如果为测试指定的所有条件都为真,则测试通过,并且会丢弃日志记录。

    • drop过滤器配置指定多个测试时,如果任何测试通过,则会丢弃记录。

    • 如果评估条件时出错(例如,正在评估的日志记录中缺少字段),则该条件将评估为假。

    4 指定一个点分隔的字段路径,它是日志记录中字段的路径。路径可以包含字母数字字符和下划线 (a-zA-Z0-9_),例如.kubernetes.namespace_name。如果段包含此范围之外的字符,则该段必须用引号括起来,例如.kubernetes.labels."foo.bar-bar/baz"。您可以在单个test配置中包含多个字段路径,但它们都必须评估为真,测试才能通过并应用drop过滤器。
    5 指定正则表达式。如果日志记录与该正则表达式匹配,则会将其丢弃。您可以为单个field路径设置matchesnotMatches条件,但不能同时设置两者。
    6 指定正则表达式。如果日志记录与该正则表达式不匹配,则会将其丢弃。您可以为单个field路径设置matchesnotMatches条件,但不能同时设置两者。
    7 指定应用drop过滤器的管道。
  2. 运行以下命令应用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配置评估为真,则会丢弃记录。但是,对于第二个test配置,两个字段规范都必须为真,才能将其评估为真。

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"
# ...

配置内容过滤器以修剪日志记录

配置prune过滤器后,日志收集器会在转发之前根据过滤器评估日志流。收集器会通过删除 pod 注解等低价值字段来修剪日志记录。

先决条件
  • 您已安装 Red Hat OpenShift Logging Operator。

  • 您拥有管理员权限。

  • 您已创建ClusterLogForwarder自定义资源 (CR)。

步骤
  1. ClusterLogForwarder CR 中的prune规范添加过滤器的配置。

    以下示例显示如何配置ClusterLogForwarder CR 以基于字段路径修剪日志记录

    如果两者都指定,则首先根据notIn数组修剪记录,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过滤器的配置选项。innotIn字段指定为点分隔字段路径的数组,这些路径是日志记录中字段的路径。这些路径可以包含字母数字字符和下划线 (a-zA-Z0-9_),例如.kubernetes.namespace_name。如果段包含此范围之外的字符,则该段必须用引号括起来,例如.kubernetes.labels."foo.bar-bar/baz"
    3 可选:此数组中指定的任何字段都将从日志记录中删除。
    4 可选:此数组中未指定的任何字段都将从日志记录中删除。
    5 指定应用prune过滤器的管道。
  2. 运行以下命令应用ClusterLogForwarder CR

    $ oc apply -f <filename>.yaml