×

如果日志产生的速度超过收集速度,则难以预测或控制发送到输出的日志量。无法预测或控制发送到输出的日志量可能导致日志丢失。如果系统出现故障并且日志缓冲区在没有用户控制的情况下累积,这也会导致连接恢复时恢复时间长和延迟高。

作为管理员,您可以通过为日志配置流量控制机制来限制日志记录速率。

流量控制机制的优势

  • 可以更准确地提前预测日志的成本和数量。

  • 嘈杂的容器无法产生无限的日志流量,从而淹没其他容器。

  • 忽略低价值日志可减少日志基础设施的负载。

  • 可以通过分配更高的速率限制来优先处理高价值日志而不是低价值日志。

配置速率限制

速率限制是针对每个收集器配置的,这意味着日志收集的最大速率是收集器实例数量乘以速率限制。

由于日志是从每个节点的文件系统收集的,因此每个集群节点上都会部署一个收集器。例如,在具有 10 个记录/秒/收集器的最大速率限制的 3 节点集群中,日志收集的最大速率为 30 个记录/秒。

由于写入输出的记录的确切字节大小可能会因转换、不同的编码或其他因素而异,因此速率限制以记录数而不是字节数设置。

您可以通过两种方式在ClusterLogForwarder自定义资源 (CR) 中配置速率限制

输出速率限制

限制传出日志到所选输出的速率,例如,以匹配输出的网络或存储容量。输出速率限制控制每个输出的聚合速率。

输入速率限制

限制所选容器的日志收集的每个容器速率。

配置日志转发器输出速率限制

您可以通过配置ClusterLogForwarder自定义资源 (CR) 来限制传出日志到指定输出的速率。

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

  • 您拥有管理员权限。

步骤
  1. 为指定的输出向ClusterLogForwarder CR 添加maxRecordsPerSecond限制值。

    以下示例显示如何为名为kafka-example的 Kafka 代理输出配置每个收集器输出速率限制

    示例ClusterLogForwarder CR
    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
    # ...
    spec:
    # ...
      outputs:
        - name: kafka-example (1)
          type: kafka (2)
          limit:
            maxRecordsPerSecond: 1000000 (3)
    # ...
    1 输出名称。
    2 输出类型。
    3 日志输出速率限制。此值设置每秒可以发送到 Kafka 代理的日志最大数量。此值默认情况下未设置。默认行为是尽力而为,如果日志转发器跟不上,则会丢弃记录。如果此值为0,则不会转发任何日志。
  2. 应用ClusterLogForwarder CR

    示例命令
    $ oc apply -f <filename>.yaml
其他资源

配置日志转发器输入速率限制

您可以通过配置ClusterLogForwarder自定义资源 (CR) 来限制收集的传入日志的速率。您可以按每个容器或每个命名空间设置输入限制。

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

  • 您拥有管理员权限。

步骤
  1. 为指定的输入向ClusterLogForwarder CR 添加maxRecordsPerSecond限制值。

    以下示例显示如何为不同的场景配置输入速率限制

    设置具有特定标签的容器的每个容器限制的示例ClusterLogForwarder CR
    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
    # ...
    spec:
    # ...
      inputs:
        - name: <input_name> (1)
          application:
            selector:
              matchLabels: { example: label } (2)
            containerLimit:
              maxRecordsPerSecond: 0 (3)
    # ...
    1 输入名称。
    2 标签列表。如果这些标签与应用于 Pod 的标签匹配,则maxRecordsPerSecond字段中指定的每个容器限制将应用于这些容器。
    3 配置速率限制。将maxRecordsPerSecond字段设置为0表示不为容器收集任何日志。将maxRecordsPerSecond字段设置为其他值表示最多收集每秒该数量的容器记录。
    设置所选命名空间中容器的每个容器限制的示例ClusterLogForwarder CR
    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
    # ...
    spec:
    # ...
      inputs:
        - name: <input_name> (1)
          application:
            namespaces: [ example-ns-1, example-ns-2 ] (2)
            containerLimit:
              maxRecordsPerSecond: 10 (3)
        - name: <input_name>
          application:
            namespaces: [ test ]
            containerLimit:
              maxRecordsPerSecond: 1000
    # ...
    1 输入名称。
    2 命名空间列表。maxRecordsPerSecond字段中指定的每个容器限制将应用于列出的命名空间中的所有容器。
    3 配置速率限制。将maxRecordsPerSecond字段设置为10表示为列出的命名空间中的每个容器最多收集每秒 10 个记录。
  2. 应用ClusterLogForwarder CR

    示例命令
    $ oc apply -f <filename>.yaml