第 12 章 性能和可靠性调整
12.1. 流控制机制
如果生成日志比可以收集的速度快,很难预测或控制发送到输出的日志卷。无法预测或控制发送到输出的日志卷可能会导致日志丢失。如果有系统中断,且日志缓冲区在没有用户控制的情况下被累计,则在连接被恢复时可能会造成长时间恢复时间和高延迟。
作为管理员,您可以通过为日志记录配置流控制机制来限制日志记录率。
12.1.1. 流控制机制的好处
- 提前可以更准确地预测日志的成本和卷。
- 无容器无法生成分离其他容器的未绑定日志流量。
- 忽略低值日志可减少日志记录基础架构的负载。
- 通过分配更高的速率限制,可以首选使用高值日志。
12.1.2. 配置速率限制
每个收集器配置速率限制,这意味着日志收集器的最大速率是收集器实例的数量乘以速率限制。
因为从每个节点的文件系统收集日志,所以会在每个集群节点上部署收集器。例如,在 3 节点集群中,每个收集器的最大速率限制为每秒 10 个记录,日志集合的最大速率为每秒 30 个记录。
因为写入输出的记录的确切字节大小可能会因转换、不同的编码或其他因素而不同,因此速率限制以记录数而不是字节设置。
您可以通过两种方式在 ClusterLogForwarder
自定义资源 (CR) 中配置速率限制:
- 输出速率限制
- 将出站日志的速度限制为所选输出,例如,与输出的网络或存储容量匹配。输出速率限制控制每个输出率的聚合。
- 输入速率限制
- 限制所选容器的日志收集的每容器速率。
12.1.3. 配置日志转发器输出速率限制
您可以通过配置 ClusterLogForwarder
自定义资源 (CR) 来限制出站日志到指定输出的速度。
先决条件
- 已安装 Red Hat OpenShift Logging Operator。
- 有管理员权限。
步骤
在指定输出的
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 # ...
应用
ClusterLogForwarder
CR:示例命令
$ oc apply -f <filename>.yaml
其他资源
12.1.4. 配置日志转发器输入速率限制
您可以通过配置 ClusterLogForwarder
自定义资源(CR)来限制收集的传入日志率。您可以根据每个容器或每个命名空间设置输入限制。
先决条件
- 已安装 Red Hat OpenShift Logging Operator。
- 有管理员权限。
步骤
在一个指定输出的
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 # ...
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 # ...
应用
ClusterLogForwarder
CR:示例命令
$ oc apply -f <filename>.yaml