第 12 章 性能和可靠性调整


12.1. 流控制机制

如果生成日志比可以收集的速度快,很难预测或控制发送到输出的日志卷。无法预测或控制发送到输出的日志卷可能会导致日志丢失。如果有系统中断,且日志缓冲区在没有用户控制的情况下被累计,则在连接被恢复时可能会造成长时间恢复时间和高延迟。

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

12.1.1. 流控制机制的好处

  • 提前可以更准确地预测日志的成本和卷。
  • 无容器无法生成分离其他容器的未绑定日志流量。
  • 忽略低值日志可减少日志记录基础架构的负载。
  • 通过分配更高的速率限制,可以首选使用高值日志。

12.1.2. 配置速率限制

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

因为从每个节点的文件系统收集日志,所以会在每个集群节点上部署收集器。例如,在 3 节点集群中,每个收集器的最大速率限制为每秒 10 个记录,日志集合的最大速率为每秒 30 个记录。

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

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

输出速率限制
将出站日志的速度限制为所选输出,例如,与输出的网络或存储容量匹配。输出速率限制控制每个输出率的聚合。
输入速率限制
限制所选容器的日志收集的每容器速率。

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

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

先决条件

  • 已安装 Red Hat OpenShift Logging Operator。
  • 有管理员权限。

流程

  1. 在指定输出的 ClusterLogForwarder CR 中添加 maxRecordsPerSecond limit 值。

    以下示例演示了如何为名为 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

其他资源

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

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

先决条件

  • 已安装 Red Hat OpenShift Logging Operator。
  • 有管理员权限。

流程

  1. 在一个指定输出的 ClusterLogForwarder CR 中添加 maxRecordsPerSecond limit 值。

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

    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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.