12.2. 按内容过滤日志


从集群中收集所有日志可能会产生大量数据,传输和存储这些数据可能比较昂贵。

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

注意

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

您可以使用以下方法之一减少日志数据卷:

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

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

先决条件

  • 已安装 Red Hat OpenShift Logging Operator。
  • 有管理员权限。
  • 您已创建了 ClusterLogForwarder 自定义资源 (CR)。

流程

  1. 将过滤器的配置添加到 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 路径设置 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 配置评估为 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)。

流程

  1. 将过滤器的配置添加到 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 过滤器的配置选项。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

12.2.3. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.