7.7. 配置日志记录收集器

OpenShift Container Platform 使用 Fluentd 从集群中收集操作和应用程序日志,并借助 Kubernetes Pod 和命名空间元数据丰富这些日志。

您可以配置日志轮转和日志位置,使用外部日志聚合器,以及为日志收集器进行其他配置。

注意

除非另有说明,否则在执行这些配置之前,必须将集群日志记录设置为非受管状态。如需更多信息,请参阅更改集群日志记录管理状态

处于非受管状态的 Operator 不被正式支持,集群管理员需要完全掌控各个组件的配置和升级。

如需了解更多信息,请参阅非受管 Operator 的支持策略

7.7.1. 查看日志记录收集器 Pod

您可以使用 oc get pods --all-namespaces -o wide 命令查看部署了 Fluentd 的节点。

流程

openshift-logging 项目中运行以下命令:

$ oc get pods --all-namespaces -o wide | grep fluentd

NAME                         READY     STATUS    RESTARTS   AGE     IP            NODE                           NOMINATED NODE   READINESS GATES
fluentd-5mr28                1/1       Running   0          4m56s   10.129.2.12   ip-10-0-164-233.ec2.internal   <none>           <none>
fluentd-cnc4c                1/1       Running   0          4m56s   10.128.2.13   ip-10-0-155-142.ec2.internal   <none>           <none>
fluentd-nlp8z                1/1       Running   0          4m56s   10.131.0.13   ip-10-0-138-77.ec2.internal    <none>           <none>
fluentd-rknlk                1/1       Running   0          4m56s   10.128.0.33   ip-10-0-128-130.ec2.internal   <none>           <none>
fluentd-rsm49                1/1       Running   0          4m56s   10.129.0.37   ip-10-0-163-191.ec2.internal   <none>           <none>
fluentd-wjt8s                1/1       Running   0          4m56s   10.130.0.42   ip-10-0-156-251.ec2.internal   <none>           <none>

7.7.2. 配置日志收集器 CPU 和内存限值

日志收集器允许对 CPU 和内存限值进行调整。

流程

  1. openshift-logging 项目中编辑集群日志记录自定义资源 (CR):

    $ oc edit ClusterLogging instance
    $ oc edit ClusterLogging instance
    
    apiVersion: "logging.openshift.io/v1"
    kind: "ClusterLogging"
    metadata:
      name: "instance"
    
    ....
    
    spec:
      collection:
        logs:
          fluentd:
            resources:
              limits: 1
                memory: 736Mi
              requests:
                cpu: 100m
                memory: 736Mi
    1
    根据需要指定 CPU 和内存限值及请求。显示的值是默认值。

7.7.3. 为 Fluentd 配置缓冲数据块限制

如果 Fluentd 日志记录器保存大量日志,Fluentd 会执行文件缓冲来降低内存用量并防止数据丢失。

Fluentd 文件缓冲以数据块的形式存储记录。数据块存储在缓冲区中。

您可以通过编辑 Fluentd Daemonset 中的环境变量来调整集群中的文件缓冲:

注意

修改 Fluentd Daemonset 中的 FILE_BUFFER_LIMITBUFFER_SIZE_LIMIT 参数,您需要把集群日志系统设置为未管理(unmanaged)状态。处于非受管状态的 Operator 不被正式支持,集群管理员需要完全掌控各个组件的配置和升级。

  • BUFFER_SIZE_LIMIT。此参数决定 Fluentd 创建新块之前每个块文件的最大大小。默认值为 8M。此参数设置 Fluentd chunk_limit_size 变量。

    BUFFER_SIZE_LIMIT 可以使每个块文件收集更多记录。但较大的记录需要更长的时间才会被发送到日志存储中。

  • FILE_BUFFER_LIMIT。这个参数决定每个日志输出的文件缓冲区大小。此值只是基于调度 Fluentd pod 的节点中的可用空间的请求。OpenShift Container Platform 不允许 Fluentd 超过节点容量。默认值为 256Mi

    FILE_BUFFER_LIMIT 意味着基于输出数量的更高的 BUFFER_QUEUE_LIMIT。但是,如果节点的空间面临压力,Fluentd 可能会失败。

    默认情况下,如果所有日志都发送到单个资源,则 number_of_outputs1,否则每多一个资源就会递增 1。如果您使用 Log Forwarding API、Fluentd Forward 协议或 syslog 协议将日志转发到外部位置,则可能会有多个输出。

    持久性卷大小必须大于 FILE_BUFFER_LIMIT 与输出相乘的结果。

  • BUFFER_QUEUE_LIMIT。这个参数是允许的最大缓冲块数量。BUFFER_QUEUE_LIMIT 参数无法直接调整。OpenShift Container Platform 根据日志记录输出数量、块大小以及可用文件系统空间来计算这个值。默认是 32 块。要修改 BUFFER_QUEUE_LIMIT,需要修改 FILE_BUFFER_LIMIT 的值。BUFFER_QUEUE_LIMIT 参数设置 Fluentd queue_limit_length 参数。

    OpenShift Container Platform 计算 BUFFER_QUEUE_LIMIT 的公式是 (FILE_BUFFER_LIMIT / (number_of_outputs * BUFFER_SIZE_LIMIT))

    使用默认设置的值,BUFFER_QUEUE_LIMIT 的值是 32:

    • FILE_BUFFER_LIMIT = 256Mi
    • number_of_outputs = 1
    • BUFFER_SIZE_LIMIT = 8Mi

OpenShift Container Platform 使用 Fluentd file 缓冲插件来配置存储块的方式。您可以使用以下命令查看缓冲区文件的位置:

$ oc get cm fluentd -o json | jq -r '.data."fluent.conf"'
<buffer>
   @type file 1
   path '/var/lib/flunetd/retry-elasticseach' 2
1
Fluentd file 缓冲插件。不要更改这个值。
2
保存缓冲块的路径。

先决条件

  • 将集群日志记录设置为非受管状态。处于非受管状态的 Operator 不被正式支持,集群管理员需要完全掌控各个组件的配置和升级。

流程

配置缓冲区块限制:

  1. 编辑 fluentd Daemonset 中的以下任一参数。

    spec:
      template:
        spec:
          containers:
              env:
              - name: FILE_BUFFER_LIMIT 1
                value: "256"
              - name: BUFFER_SIZE_LIMIT 2
                value: 8Mi
    1
    指定每个输出的 Fluentd 文件缓冲大小。
    2
    指定每个 Fluentd 缓冲块的最大大小。

7.7.4. 使用环境变量配置日志记录收集器

您可以使用环境变量来修改 Fluentd 日志收集器的配置。

如需可用环境变量的列表,请参见 Github 中的 Fluentd README

前提条件

  • 将集群日志记录设置为非受管状态。处于非受管状态的 Operator 不被正式支持,集群管理员需要完全掌控各个组件的配置和升级。

流程

根据需要设置任何 Fluentd 环境变量:

oc set env ds/fluentd <env-var>=<value>

例如:

oc set env ds/fluentd LOGGING_FILE_AGE=30

7.7.5. 关于日志记录收集器警报

以下警报由日志记录收集器生成,可以在 Prometheus UI 的 Alerts 选项卡上查看。

所有日志记录收集器警报都列在 OpenShift Container Platform Web 控制台的 MonitoringAlerts 页面中。警报处于以下状态之一:

  • Firing:在超时期限内警报条件为 true。点击在触发警报末尾的 Options 菜单,以查看更多信息或使警告静音。
  • Pending:警报条件当前为 true,但尚未达到超时时间。
  • Not Firing:当前未触发警报。

表 7.3. Fluentd Prometheus 警报

警报消息描述重要性

FluentdErrorsHigh

In the last minute, <value> errors reported by fluentd <instance>.

Fluentd 报告的问题数量超过了指定数量(默认值为 10)。

Critical

FluentdNodeDown

Prometheus could not scrape fluentd <instance> for more than 10m.

Fluentd 报告 Prometheus 可能无法抓取特定的 Fluentd 实例。

Critical

FluentdQueueLengthBurst

In the last minute, fluentd <instance> buffer queue length increased more than 32.Current value is <value>.

Fluentd 报告自己已不堪重负。

Warning

FluentdQueueLengthIncreasing

In the last 12h, fluentd <instance> buffer queue length constantly increased more than 1.Current value is <value>.

Fluentd 报告队列使用方法问题。

Critical