8.7. 配置日志记录收集器


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

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

注意

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

处于非受管状态的 Operator 不被正式支持,集群管理员需要完全掌控各个组件的配置和升级。如需了解更多信息,请参阅非受管 Operator 的支持策略

8.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>

8.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
                cpu: 250m
                memory: 1Gi
              requests:
                cpu: 250m
                memory: 1Gi
    1
    根据需要指定 CPU 和内存限值及请求。显示的值是默认值。

8.7.3. 配置所收集日志的位置

日志收集器根据 LOGGING_FILE_PATH 环境变量,将日志写入到指定的文件或默认位置 /var/log/fluentd/fluentd.log

先决条件

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

流程

设置 Fluentd 日志的输出位置:

  1. 编辑 fluentd Daemonset 中的 LOGGING_FILE_PATH 参数。您可以指定特定的文件或 console

    spec:
      template:
        spec:
          containers:
              env:
                - name: LOGGING_FILE_PATH
                  value: console 1
    1
    指定日志输出方法:
    • 通过 console 利用 Fluentd 默认位置。使用 oc logs [-f] <pod_name> 命令来检索日志。
    • 使用 <path-to-log/fluentd.log> 将日志输出发送到指定的文件。使用 oc exec <pod_name> — logs 命令获取日志数据。这是默认的设置。

      或者,使用 CLI:

      $ oc -n openshift-logging set env daemonset/fluentd LOGGING_FILE_PATH=/logs/fluentd.log

8.7.4. 日志收集节流

对于特别冗长的项目,管理员可以减慢日志收集器在处理日志之前读取日志的速度。使用节流时,您有意减慢读取日志的速度,因此 Kibana 可能需要更长的时间才会显示记录。

警告

节流可能会导致日志聚合落后于配置的项目;如果在 Fluentd 赶上之前删除了 Pod,则日志条目可能会丢失。

注意

使用 systemd 系统日志作为日志源时,节流不起作用。节流的实施取决于各个项目中个别日志文件是否能够减慢读取速度。从系统日志中读取时,只有一个日志源,而没有日志文件,因此无法使用基于文件的节流。没有办法可以限制读取到 Fluentd 进程中的日志条目。

先决条件

将集群日志记录设置为非受管状态。

流程

  1. 要配置 Fluentd 以限制特定项目,请于部署后在 Fluentd ConfigMap 中编辑节流配置:

    $ oc edit configmap/fluentd

    throttle-config.yaml 键的格式是 YAML 文件,其包含项目名称以及各个节点上希望读取日志的速度。默认值为每个节点一次读取 1000 行。例如:

    throttle-config.yaml: |
      - opensift-logging:
          read_lines_limit: 10
      - .operations:
          read_lines_limit: 100

8.7.5. 了解 Fluentd 的缓冲数据块限制

如果 Fluentd 日志记录器无法满足大量日志的需求,则需要切换到文件缓冲来降低内存用量并防止数据丢失。

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

注意

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

Fluentd buffer_chunk_limit 由环境变量 BUFFER_SIZE_LIMIT 决定,其默认值为 8m。每个输出的文件缓冲区大小由环境变量 FILE_BUFFER_LIMIT 决定,其默认值为 256Mi。持久性卷大小必须大于 FILE_BUFFER_LIMIT 与输出相乘的结果。

例如,Fluentd pod 上应通过 PVC 或主机挂载准备持久性卷 /var/lib/fluentd。然后,将该区域用作文件缓冲区。

buffer_typebuffer_path 在 Fluentd 配置文件中进行配置,如下所示:

$ egrep "buffer_type|buffer_path" *.conf
output-es-config.conf:
  buffer_type file
  buffer_path `/var/lib/fluentd/buffer-output-es-config`
output-es-ops-config.conf:
  buffer_type file
  buffer_path `/var/lib/fluentd/buffer-output-es-ops-config`

Fluentd buffer_queue_limit 是变量 BUFFER_QUEUE_LIMIT 的值。默认值为 32

环境变量 BUFFER_QUEUE_LIMIT 计算为 (FILE_BUFFER_LIMIT / (number_of_outputs * BUFFER_SIZE_LIMIT))

如果 BUFFER_QUEUE_LIMIT 变量具有默认值:

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

buffer_queue_limit 的值为 32。若要更改 buffer_queue_limit,您必须更改 FILE_BUFFER_LIMIT 的值。

在这个公式中,如果所有日志都发送到单个资源,则 number_of_outputs1,否则每多一个资源就会递增 1。例如,number_of_outputs 的值为:

  • 1 - 如果所有日志都发送到单个 Elasticsearch pod
  • 2 - 如果应用程序日志发送到 Elasticsearch pod,并且 ops 日志发送到另一个 Elasticsearch pod
  • 4 - 如果应用程序日志发送到一个 Elasticsearch pod,ops 日志发送到另一个 Elasticsearch pod,并且这两者都转发到其他 Fluentd 实例

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

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

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

先决条件

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

流程

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

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

例如:

oc set env ds/fluentd LOGGING_FILE_AGE=30

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

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

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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.