第 6 章 将日志转发到第三方系统

默认情况下,集群日志将容器和基础架构日志发送到 ClusterLogging 自定义资源中定义的默认内部 Elasticsearch 日志存储。但是,它不会将审计日志发送到内部存储,因为它不提供安全存储。如果此默认配置满足您的需要,则不需要配置 Log Forwarding API。

要将日志发送到其他日志聚合器,请使用 OpenShift Container Platform Log Forwarding API。通过这个 API,您可以将容器、基础架构和审计日志发送到集群内部或外部的特定端点。您可以向不同的系统发送不同类型的日志,这样不同个人就能够访问不同的系统。您还可以根据机构的要求,启用 TLS 支持以安全地发送日志。

注意

要将审计日志发送到内部日志存储,请使用 Log Forwarding API,如将计日志转发到日志存储 中所述。

当外部转发日志时,Cluster Logging Operator 会创建或修改 Fluentd 配置映射来使用所需的协议发送日志。您需要在外部日志聚合器上配置协议。

另外,您可以创建一个配置映射来使用 Fluentd forward 协议syslog 协议 将日志发送到外部系统。但是,这些转发日志的方法在 OpenShift Container Platform 中已弃用,并将在以后的版本中删除。

重要

您不能在同一集群中使用配置映射方法和 Log Forwarding API。

6.1. 关于将日志转发到第三方系统

将集群日志转发到外部第三方系统需要结合 ClusterLogForwarder 自定义资源(CR)中指定的输出管道,将日志发送到 OpenShift Container Platform 集群内部和外部的特定端点。您还可以使用 输入 将与特定项目关联的应用程序日志转发到端点。

  • 输出 是您定义的日志数据的目的地,或您希望发送日志的位置。输出可以是以下类型之一:

    • elasticsearch.一个外部 Elasticsearch 6(所有发行版本)实例。elasticsearch 输出可以使用 TLS 连接。
    • fluentdForward。一个支持 Fluentd 的外部日志聚合解决方案。这个选项使用 Fluentd 转发协议。fluentForward 输出可以使用 TCP 或 TLS 连接,并通过在 secret 中提供一个 shared_key 字段来支持共享密钥身份验证。共享密钥身份验证可在使用或不使用 TLS 的情况下使用。
    • syslog。支持 syslog RFC3164RFC5424 协议的外部日志聚合解决方案。syslog 输出可以使用 UDP、TCP 或 TLS 连接。
    • kafka.Kafka 代理。kafka 输出可以使用 TCP 或 TLS 连接。
    • default.内部 OpenShift Container Platform Elasticsearch 实例。您不需要配置默认输出。如果配置 default 输出,您会收到错误消息,因为 Cluster Logging Operator 保留了 default 输出。

    如果输出 URL 方案需要 TLS(HTTPS、TLS 或 UDPS),则需要启用 TLS 服务器端的身份验证。为了同时启用客户端身份验证,输出必须在 openshift-logging 项目中命名一个 secret。secret 必须具有代表指向以下整数的键:tls.crttls.keyca-bundle.crt

  • 管道( pipeline )定义从一个日志类型到一个或多个输出,或您要发送的日志的简单路由。日志类型是以下之一:

    • application.由集群中运行的用户应用程序生成的容器日志(基础架构容器应用程序除外)。
    • infrastructure.在 openshift*kube*default 项目中运行的容器日志,以及来源于节点文件系统的 journal 日志。
    • audit.由 auditd、节点审计系统以及 Kubernetes API 服务器和 OpenShift API 服务器的审计日志生成的日志。

    您可以使用管道中的 key:value 对为出站日志消息添加标签。例如,您可以在转发给其他数据中心的消息中添加一个标签,或者根据类型为日志添加标签。添加到对象的标签也会通过日志消息转发。

  • input 会将与特定项目关联的应用程序日志转发到管道。

在管道中,您要定义使用 inputRef 参数转发哪些日志类型,以及将日志转发到使用 outputRef 参数的位置。

请注意:

  • 如果 ClusterLogForwarder 对象存在,则日志不会转发到默认的 Elasticsearch 实例,除非有带有 default 输出的管道。
  • 默认情况下,集群日志将容器和基础架构日志发送到 ClusterLogging 自定义资源中定义的默认内部 Elasticsearch 日志存储。但是,它不会将审计日志发送到内部存储,因为它不提供安全存储。如果此默认配置满足您的需要,则不需要配置 Log Forwarding API。
  • 如果您没有为日志类型定义管道,则将丢弃未定义类型的日志。例如,如果您为 applicationaudit 类型指定管道,但没有为 infrastructure 类型指定管道,则 infrastructure 日志会丢弃。
  • 您可以使用 ClusterLogForwarder 自定义资源(CR)中的多种输出类型将日志发送到支持不同协议的服务器。
  • 内部 OpenShift Container Platform Elasticsearch 实例不会为审计日志提供安全存储。您需要自己确保转发审计日志的系统符合您所在机构及政府的相关要求,并具有适当的安全性。OpenShift Container Platform 集群日志记录本身并不会遵循这些规范。
  • 您需要创建并维护外部目的地可能需要的额外配置,如密钥和 secret 、服务帐户、端口打开或全局代理服务器配置。

以下示例将审计日志转发到安全的外部 Elasticsearch 实例,基础架构日志发送到不安全的外部 Elasticsearch 实例,应用程序日志发送到 Kafka 代理,以及 my-apps-logs 项目中的应用程序日志发送到内部 Elasticsearch 实例。

日志转发输出和管道示例

apiVersion: "logging.openshift.io/v1"
kind: ClusterLogForwarder
metadata:
  name: instance 1
  namespace: openshift-logging 2
spec:
  outputs:
   - name: elasticsearch-secure 3
     type: "elasticsearch"
     url: https://elasticsearch.secure.com:9200
     secret:
        name: elasticsearch
   - name: elasticsearch-insecure 4
     type: "elasticsearch"
     url: http://elasticsearch.insecure.com:9200
   - name: kafka-app 5
     type: "kafka"
     url: tls://kafka.secure.com:9093/app-topic
  inputs: 6
   - name: my-app-logs
     application:
        namespaces:
        - my-project
  pipelines:
   - name: audit-logs 7
     inputRefs:
      - audit
     outputRefs:
      - elasticsearch-secure
      - default
     labels:
       secure: "true" 8
       datacenter: "east"
   - name: infrastructure-logs 9
     inputRefs:
      - infrastructure
     outputRefs:
      - elasticsearch-insecure
     labels:
       datacenter: "west"
   - name: my-app 10
     inputRefs:
      - my-app-logs
     outputRefs:
      - default
   - inputRefs: 11
      - application
     outputRefs:
      - kafka-app
     labels:
       datacenter: "south"

1
ClusterLogForwarder CR 的名称必须是 instance
2
ClusterLogForwarder CR 的命名空间必须是 openshift-logging
3
使用带有安全 URL 的 secret 来配置安全 Elasticsearch 输出。
  • 描述输出的名称。
  • 输出类型: elasticsearch
  • Elasticsearch 实例的安全 URL 和端口作为有效的绝对 URL,包括前缀。
  • 用于 TLS 通信的端点所需的 secret。secret 必须存在于 openshift-logging 项目中。
4
配置不安全的 Elasticsearch 输出:
  • 描述输出的名称。
  • 输出类型: elasticsearch
  • Elasticsearch 实例的不安全 URL 和端口作为有效的绝对 URL,包括前缀。
5
使用客户端验证的 TLS 通信通过安全 URL 配置 Kafka 输出
  • 描述输出的名称。
  • 输出的类型: kafka
  • 将 Kafka 代理的 URL 和端口指定为一个有效的绝对 URL,包括前缀。
6
用于过滤 my-project 命名空间中的应用程序日志的输入配置。
7
用于将审计日志发送到安全的外部 Elasticsearch 实例的管道配置:
  • 可选。描述管道的名称。
  • inputRefs 是日志类型,在这个示例中是 audit
  • outputRefs 是输出使用的名称,在本例中,elasticsearch-secure 可以转发到安全的 Elasticsearch 实例,default 转发到内部 Elasticsearch 实例。
  • 可选:添加到日志的标签。
8
可选:字符串。要添加到日志中的一个或多个标签。对值加引号(如 "true"),以便它们被识别为字符串值,而不是作为布尔值。
9
管道配置,将基础架构日志发送到不安全的外部 Elasticsearch 实例。
10
管道配置,用于将日志从 my-project 项目发送到内部 Elasticsearch 实例。
  • 可选。描述管道的名称。
  • inputRefs 是一个特定的输入: my-app-logs
  • outputRefsdefault
  • 可选:字符串。要添加到日志中的一个或多个标签。
11
将日志发送到 Kafka 代理的管道配置,不带有管道名称:
  • inputRefs 是日志类型,在这个示例中是 application
  • outputRefs 是要使用的输出名称。
  • 可选:字符串。要添加到日志中的一个或多个标签。

当外部日志聚合器不可用时,Fluentd 日志处理

如果外部日志记录聚合器不可用且无法接收日志,Fluentd 会继续收集日志并将其存储在缓冲中。当日志聚合器可用时,日志转发会恢复,包括缓冲的日志。如果缓冲区已满,Fluentd 会停止收集日志。OpenShift Container Platform 轮转日志并删除日志。您无法调整缓冲区大小,或者将持久性卷声明(PVC)添加到 Fluentd 守护进程集或 Pod 中。

6.1.1. 将日志转发到外部 Elasticsearch 实例

除了内部 OpenShift Container Platform Elasticsearch 实例外,您还可以将日志转发到外部 Elasticsearch 实例。您需要配置外部日志聚合器,以接收来自 OpenShift Container Platform 的日志数据。

要配置日志转发到外部 Elasticsearch 实例,请创建一个 ClusterLogForwarder 自定义资源(CR),其中包含输出到该实例的输出以及使用输出的管道。外部 Elasticsearch 输出可以使用 HTTP(不安全)或 HTTPS(安全 HTTP)连接。

要将日志转发到外部和内部 Elasticsearch 实例,请将输出和管道创建到外部实例,以及一个使用 default 输出将日志转发到内部实例的管道。您不需要创建 default 输出。如果配置 default 输出,您会收到错误消息,因为 Cluster Logging Operator 保留了 default 输出。

注意

如果您想将日志转发到内部 OpenShift Container Platform Elasticsearch 实例,则不需要创建一个 ClusterLogForwarder CR。

先决条件

  • 您必须有配置为使用指定协议或格式接收日志数据的日志服务器。

流程

  1. 创建一个类似如下的 ClusterLogForwarder CR YAML 文件:

    apiVersion: "logging.openshift.io/v1"
    kind: ClusterLogForwarder
    metadata:
      name: instance 1
      namespace: openshift-logging 2
    spec:
      outputs:
       - name: elasticsearch-insecure 3
         type: "elasticsearch" 4
         url: http://elasticsearch.insecure.com:9200 5
       - name: elasticsearch-secure
         type: "elasticsearch"
         url: https://elasticsearch.secure.com:9200
         secret:
            name: es-secret 6
      pipelines:
       - name: application-logs 7
         inputRefs: 8
         - application
         - audit
         outputRefs:
         - elasticsearch-secure 9
         - default 10
         labels:
           myLabel: "myValue" 11
       - name: infrastructure-audit-logs 12
         inputRefs:
         - infrastructure
         outputRefs:
         - elasticsearch-insecure
         labels:
           logs: "audit-infra"
    1
    ClusterLogForwarder CR 的名称必须是 instance
    2
    ClusterLogForwarder CR 的命名空间必须是 openshift-logging
    3
    指定输出的名称。
    4
    指定 elasticsearch 类型。
    5
    指定外部 Elasticsearch 实例的 URL 和端口作为有效的绝对 URL。您可以使用 http (不安全)或 https (安全 HTTP)协议。如果启用了使用 CIDR 注解的集群范围代理,输出必须是服务器名称或 FQDN,而不是 IP 地址。
    6
    如果使用 https 前缀,则必须指定 TLS 通信端点所需的 secret 名称。secret 必须存在于 openshift-logging 项目中,且必须具有指向它们所代表的相应证书的 tls.crttls.keyca-bundle.crt 的键。
    7
    可选:指定管道的名称。
    8
    指定使用该管道转发哪些日志类型:applicationinfrastructureaudit
    9
    指定要与该管道搭配使用的输出来转发日志。
    10
    可选:指定将日志发送到内部 Elasticsearch 实例的 default 输出。
    11
    可选:字符串。要添加到日志中的一个或多个标签。
    12
    可选:配置多个输出,将日志转发到任何受支持类型的其他外部日志聚合器:
    • 可选。描述管道的名称。
    • inputRefs 是使用管道转发的日志类型:applicationinfrastructureaudit
    • outputRefs 是要使用的输出名称。
    • 可选:字符串。要添加到日志中的一个或多个标签。
  2. 创建 CR 对象。

    $ oc create -f <file-name>.yaml

Cluster Logging Operator 会重新部署 Fluentd pod。如果 pod 没有重新部署,您可以删除 Fluentd pod 来强制重新部署。

$ oc delete pod --selector logging-infra=fluentd

6.1.2. 使用 Fluentd 转发协议转发日志

您可以使用 Fluentd forward 协议将日志副本发送到您配置为接受该协议的外部日志聚合器。除了使用默认的 Elasticsearch 日志存储外,您还可以进行此操作。您还必须配置外部日志聚合器,以接收来自 OpenShift Container Platform 的日志数据。

要使用 forward 协议配置日志转发,请创建一个 ClusterLogForwarder 自定义资源(CR),并将一个或多个输出输出到使用这些输出的 Fluentd 服务器和管道。Fluentd 输出可以使用 TCP(不安全)或 TLS(安全 TCP)连接。

注意

另外,您可以通过配置映射来使用 forward 协议转发日志。但是,此方法在 OpenShift Container Platform 中已弃用,并将在以后的发行版本中删除。

先决条件

  • 您必须有配置为使用指定协议或格式接收日志数据的日志服务器。

流程

  1. 创建一个类似如下的 ClusterLogForwarder CR YAML 文件:

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: instance 1
      namespace: openshift-logging 2
    spec:
      outputs:
       - name: fluentd-server-secure 3
         type: fluentdForward 4
         url: 'tls://fluentdserver.security.example.com:24224' 5
         secret: 6
            name: fluentd-secret
       - name: fluentd-server-insecure
         type: fluentdForward
         url: 'tcp://fluentdserver.home.example.com:24224'
      pipelines:
       - name: forward-to-fluentd-secure 7
         inputRefs:  8
         - application
         - audit
         outputRefs:
         - fluentd-server-secure 9
         - default 10
         labels:
           clusterId: "C1234" 11
       - name: forward-to-fluentd-insecure 12
         inputRefs:
         - infrastructure
         outputRefs:
         - fluentd-server-insecure
         labels:
           clusterId: "C1234"
    1
    ClusterLogForwarder CR 的名称必须是 instance
    2
    ClusterLogForwarder CR 的命名空间必须是 openshift-logging
    3
    指定输出的名称。
    4
    指定 fluentdForward 类型。
    5
    指定外部 Fluentd 实例的 URL 和端口作为有效的绝对 URL。您可以使用 tcp (不安全)或者 tls (安全 TCP)协议。如果启用了使用 CIDR 注解的集群范围代理,输出必须是服务器名称或 FQDN,而不是 IP 地址。
    6
    如果使用 tls 前缀,您必须为 TLS 通信指定端点所需的 secret 名称。secret 必须存在于 openshift-logging 项目中,且必须具有指向它们所代表的相应证书的 tls.crttls.keyca-bundle.crt 的键。
    7
    可选。为管道指定一个名称。
    8
    指定使用该管道转发哪些日志类型:applicationinfrastructureaudit
    9
    指定要与该管道搭配使用的输出来转发日志。
    10
    可选。指定将日志转发到内部 Elasticsearch 实例的默认输出。
    11
    可选:字符串。要添加到日志中的一个或多个标签。
    12
    可选:配置多个输出,将日志转发到任何受支持类型的其他外部日志聚合器:
    • 可选。描述管道的名称。
    • inputRefs 是使用管道转发的日志类型:applicationinfrastructureaudit
    • outputRefs 是要使用的输出名称。
    • 可选:字符串。要添加到日志中的一个或多个标签。
  2. 创建 CR 对象。

    $ oc create -f <file-name>.yaml

Cluster Logging Operator 会重新部署 Fluentd pod。如果 pod 没有重新部署,您可以删除 Fluentd pod 来强制重新部署。

$ oc delete pod --selector logging-infra=fluentd

6.1.3. 使用 syslog 协议转发日志

您可以使用 syslog RFC3164RFC5424 协议将日志副本发送到配置为接受该协议的外部日志聚合器(替代默认的 Elasticsearch 日志存储或作为它的补充)。您需要配置外部日志聚合器(如 syslog 服务器)来接收来自 OpenShift Container Platform 的日志。

要使用 syslog 协议配置日志转,,请创建一个 ClusterLogForwarder 自定义资源(CR),并将一个或多个输出输出到使用这些输出的 syslog 服务器和管道。syslog 输出可以使用 UDP、TCP 或 TLS 连接。

注意

另外,您可以使用配置映射使用 syslog RFC3164 协议转发日志。但是,此方法在 OpenShift Container Platform 中已弃用,并将在以后的发行版本中删除。

先决条件

  • 您必须有配置为使用指定协议或格式接收日志数据的日志服务器。

流程

  1. 创建一个类似如下的 ClusterLogForwarder CR YAML 文件:

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: instance 1
      namespace: openshift-logging 2
    spec:
      outputs:
       - name: rsyslog-east 3
         type: syslog 4
         syslog: 5
           facility: local0
           rfc: RFC3164
           payloadKey: message
           severity: informational
         url: 'tls://rsyslogserver.east.example.com:514' 6
         secret: 7
            name: syslog-secret
       - name: rsyslog-west
         type: syslog
         syslog:
          appName: myapp
          facility: user
          msgID: mymsg
          procID: myproc
          rfc: RFC5424
          severity: debug
         url: 'udp://rsyslogserver.west.example.com:514'
      pipelines:
       - name: syslog-east 8
         inputRefs: 9
         - audit
         - application
         outputRefs: 10
         - rsyslog-east
         - default 11
         labels:
           secure: "true" 12
           syslog: "east"
       - name: syslog-west 13
         inputRefs:
         - infrastructure
         outputRefs:
         - rsyslog-west
         - default
         labels:
           syslog: "west"
    1
    ClusterLogForwarder CR 的名称必须是 instance
    2
    ClusterLogForwarder CR 的命名空间必须是 openshift-logging
    3
    指定输出的名称。
    4
    指定 syslog 类型。
    5
    可选。指定以下列出的 syslog 参数。
    6
    指定外部 syslog 实例的 URL 和端口。您可以使用 udp (不安全)、tcp (不安全)或者 tls (安全 TCP)协议。如果启用了使用 CIDR 注解的集群范围代理,输出必须是服务器名称或 FQDN,而不是 IP 地址。
    7
    如果使用 tls 前缀,您必须为 TLS 通信指定端点所需的 secret 名称。secret 必须存在于 openshift-logging 项目中,且必须具有指向它们所代表的相应证书的 tls.crttls.keyca-bundle.crt 的键。
    8
    可选:指定管道的名称。
    9
    指定使用该管道转发哪些日志类型:applicationinfrastructureaudit
    10
    指定要与该管道搭配使用的输出来转发日志。
    11
    可选:指定将日志转发到内部 Elasticsearch 实例的 default 输出。
    12
    可选:字符串。要添加到日志中的一个或多个标签。对值加引号(如 "true"),以便它们被识别为字符串值,而不是作为布尔值。
    13
    可选:配置多个输出,将日志转发到任何受支持类型的其他外部日志聚合器:
    • 可选。描述管道的名称。
    • inputRefs 是使用管道转发的日志类型:applicationinfrastructureaudit
    • outputRefs 是要使用的输出名称。
    • 可选:字符串。要添加到日志中的一个或多个标签。
  2. 创建 CR 对象。

    $ oc create -f <file-name>.yaml

Cluster Logging Operator 会重新部署 Fluentd pod。如果 pod 没有重新部署,您可以删除 Fluentd pod 来强制重新部署。

$ oc delete pod --selector logging-infra=fluentd

6.1.3.1. syslog 参数

您可以为 syslog 输出配置以下内容。如需更多信息,请参阅 syslog RFC3164RFC5424 RFC。

  • facility: syslog facility.该值可以是十进制整数,也可以是区分大小写的关键字:

    • 0kern 用于内核信息
    • 1user 代表用户级信息(默认)。
    • 2mail 用于邮件系统。
    • 3daemon 用于系统守护进程
    • 4auth 用于安全/身份验证信息
    • 5syslog 用于 syslogd 内部生成的信息
    • 6lpr 用于打印机子系统
    • 7news 用于网络新闻子系统
    • 8uucp 用于 UUCP 子系统
    • 9cron 用于 clock 守护进程
    • 10authpriv 用于安全身份验证信息
    • 11ftp 用于 FTP 守护进程
    • 12ntp 用于 NTP 子系统
    • 13security 用于 syslog audit 日志
    • 14console 用于 syslog alert 日志
    • 15solaris-cron 用于 scheduling 守护进程
    • 16-23local0 - local7 用于本地使用的工具
  • 可选。payloadKey:用作 syslog 消息有效负载的记录字段。

    注意

    配置 payloadKey 参数可防止将其他参数转发到 syslog。

  • rfc:通过 syslog 发送日志使用的 RFC。默认为 RFC5424。
  • severity:设置传出的 syslog 记录的syslog 的严重性。该值可以是十进制整数,也可以是区分大小写的关键字:

    • 0Emergency 用于代表系统不可用的信息
    • 1Alert 用于代表立即执行操作的信息
    • 2Critical 用于代表关键状况的信息
    • 3Error 用于代表错误状况的信息
    • 4Warning 用于代表警告条件的信息
    • 5Notice 用于代表正常但存在重要条件的信息
    • 6Informational 用于代表提示信息的信息
    • 7Debug 用于代表调试级别的信息(默认)
  • tag:Tag 指定记录字段,作为 syslog 信息上的标签。
  • trimPrefix:从标签中删除指定的前缀。

6.1.3.2. 其他 RFC5424 syslog 参数

以下参数适用于 RFC5424:

  • appName: APP-NAME 是一个自由文本字符串,用于标识发送日志的应用程序。必须为 RFC5424 指定。
  • msgID: MSGID 是一个用于标识消息类型的自由文本字符串。必须为 RFC5424 指定。
  • PROCID: PROCID 是一个自由文本字符串。数值的变化代表 syslog 报告不连续。必须为 RFC5424 指定。

6.1.4. 将日志转发到 Kafka 代理

除了默认的 Elasticsearch 存储外,您还可以将日志转发到外部 Kafka 代理。

要配置日志转发到外部 Kafka 实例,请创建一个 ClusterLogForwarder 自定义资源(CR),包括输出到该实例的输出以及使用输出的管道。您可以在输出中包括特定的 Kafka 主题,也可以使用默认值。Kafka 输出可以使用 TCP(不安全)或者 TLS(安全 TCP)连接。

流程

  1. 创建一个类似如下的 ClusterLogForwarder CR YAML 文件:

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: instance 1
      namespace: openshift-logging 2
    spec:
      outputs:
       - name: app-logs 3
         type: kafka 4
         url: tls://kafka.example.devlab.com:9093/app-topic 5
         secret:
           name: kafka-secret 6
       - name: infra-logs
         type: kafka
         url: tcp://kafka.devlab2.example.com:9093/infra-topic 7
       - name: audit-logs
         type: kafka
         url: tls://kafka.qelab.example.com:9093/audit-topic
         secret:
            name: kafka-secret-qe
      pipelines:
       - name: app-topic 8
         inputRefs: 9
         - application
         outputRefs: 10
         - app-logs
         labels:
           logType: "application" 11
       - name: infra-topic 12
         inputRefs:
         - infrastructure
         outputRefs:
         - infra-logs
         labels:
           logType: "infra"
       - name: audit-topic
         inputRefs:
         - audit
         outputRefs:
         - audit-logs
         - default 13
         labels:
           logType: "audit"
    1
    ClusterLogForwarder CR 的名称必须是 instance
    2
    ClusterLogForwarder CR 的命名空间必须是 openshift-logging
    3
    指定输出的名称。
    4
    指定 kafka 类型。
    5
    将 Kafka 代理的 URL 和端口指定为一个有效的绝对 URL,也可以同时指定特定标题。您可以使用 tcp (不安全)或者 tls (安全 TCP)协议。如果启用了使用 CIDR 注解的集群范围代理,输出必须是服务器名称或 FQDN,而不是 IP 地址。
    6
    如果使用 tls 前缀,您必须为 TLS 通信指定端点所需的 secret 名称。secret 必须存在于 openshift-logging 项目中,且必须具有指向它们所代表的相应证书的 tls.crttls.keyca-bundle.crt 的键。
    7
    可选: 要发送不安全的输出,在 URL 前面使用 tcp 前缀。另外,省略此输出中的 secret 键及其 name
    8
    可选:指定管道的名称。
    9
    指定使用该管道转发哪些日志类型:applicationinfrastructureaudit
    10
    指定要与该管道搭配使用的输出来转发日志。
    11
    可选:字符串。要添加到日志中的一个或多个标签。
    12
    可选:配置多个输出,将日志转发到任何受支持类型的其他外部日志聚合器:
    • 可选。描述管道的名称。
    • inputRefs 是使用管道转发的日志类型:applicationinfrastructureaudit
    • outputRefs 是要使用的输出名称。
    • 可选:字符串。要添加到日志中的一个或多个标签。
    13
    可选:指定 default 将日志转发到内部 Elasticsearch 实例。
  2. 可选: 要将单个输出转发到多个 kafka 代理,请指定 kafka 代理数组,如下例所示:

    ...
    spec:
      outputs:
      - name: app-logs
        type: kafka
        secret:
          name: kafka-secret-dev
        kafka:  1
          brokers: 2
            - tls://kafka-broker1.example.com:9093/
            - tls://kafka-broker2.example.com:9093/
          topic: app-topic 3
    ...
    1
    指定一个带有 brokerstopic 键的 kafka 键。
    2
    使用 brokers 键指定一个或多个代理的数组。
    3
    使用 topic 键指定要接收日志的目标主题。
  3. 创建 CR 对象。

    $ oc create -f <file-name>.yaml

Cluster Logging Operator 会重新部署 Fluentd pod。如果 pod 没有重新部署,您可以删除 Fluentd pod 来强制重新部署。

$ oc delete pod --selector logging-infra=fluentd

6.1.5. 从特定项目转发应用程序日志

您可以使用 Cluster Log Forwarder 将应用日志的副本从特定项目发送到外部日志聚合器。除了使用默认的 Elasticsearch 日志存储外,您还可以进行此操作。您还必须配置外部日志聚合器,以接收来自 OpenShift Container Platform 的日志数据。

要从项目中配置转发应用程序日志,创建一个 ClusterLogForwarder 自定义资源(CR),其中至少从一个项目中输入,为其他日志聚合器提供可选输出,以及使用这些输入和输出的管道。

先决条件

  • 您必须有配置为使用指定协议或格式接收日志数据的日志服务器。

流程

  1. 创建一个类似如下的 ClusterLogForwarder CR YAML 文件:

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: instance 1
      namespace: openshift-logging 2
    spec:
      outputs:
       - name: fluentd-server-secure 3
         type: fluentdForward 4
         url: 'tls://fluentdserver.security.example.com:24224' 5
         secret: 6
            name: fluentd-secret
       - name: fluentd-server-insecure
         type: fluentdForward
         url: 'tcp://fluentdserver.home.example.com:24224'
      inputs: 7
       - name: my-app-logs
         application:
            namespaces:
            - my-project
      pipelines:
       - name: forward-to-fluentd-insecure 8
         inputRefs: 9
         - my-app-logs
         outputRefs: 10
         - fluentd-server-insecure
         labels: 11
           project: "my-project"
       - name: forward-to-fluentd-secure 12
         inputRefs:
         - application
         - audit
         - infrastructure
         outputRefs:
         - fluentd-server-secure
         - default
         labels:
           clusterId: "C1234"
    1
    ClusterLogForwarder CR 的名称必须是 instance
    2
    ClusterLogForwarder CR 的命名空间必须是 openshift-logging
    3
    指定输出的名称。
    4
    指定输出类型: elasticsearchfluentdForwardsyslogkafka
    5
    将外部日志聚合器的 URL 和端口指定为有效的绝对 URL。如果启用了使用 CIDR 注解的集群范围代理,输出必须是服务器名称或 FQDN,而不是 IP 地址。
    6
    如果使用 tls 前缀,您必须为 TLS 通信指定端点所需的 secret 名称。secret 必须存在于 openshift-logging 项目中,且必须具有指向它们所代表的相应证书的 tls.crttls.keyca-bundle.crt 的键。
    7
    用于过滤指定项目的应用程序日志的输入配置。
    8
    管道配置,使用输入将项目应用程序日志发送到外部 Fluentd 实例。
    9
    my-app-logs 输入。
    10
    要使用的输出名称。
    11
    可选:字符串。要添加到日志中的一个或多个标签。
    12
    管道配置,将日志发送到其他日志聚合器。
    • 可选:指定管道的名称。
    • 指定使用该管道转发哪些日志类型:applicationinfrastructureaudit
    • 指定要与该管道搭配使用的输出来转发日志。
    • 可选:指定将日志转发到内部 Elasticsearch 实例的 default 输出。
    • 可选:字符串。要添加到日志中的一个或多个标签。
  2. 创建 CR 对象。

    $ oc create -f <file-name>.yaml

6.1.6. 使用旧的 Fluentd 方法转发日志

您可以通过创建配置文件和配置映射,使用 Fluentd forward 协议将日志发送到 OpenShift Container Platform 集群外的目的地。您需要配置外部日志聚合器,以接收来自 OpenShift Container Platform 的日志数据。

重要

此转发日志的方法在 OpenShift Container Platform 中已弃用,并将在以后的发行版本中删除。

要使用 Fluentd forward 协议发送日志,请创建一个名为 secure-forward.conf 的配置文件,指向外部日志聚合器。然后,使用该文件在 openshift-logging 项目中创建一个名为 secure-forward 的配置 映射,OpenShift Container Platform 在转发日志时使用它。

先决条件

  • 您必须有配置为使用指定协议或格式接收日志数据的日志服务器。

Fluentd 配置文件示例

<store>
  @type forward
  <security>
    self_hostname ${hostname}
    shared_key "fluent-receiver"
  </security>
  transport tls
  tls_verify_hostname false
  tls_cert_path '/etc/ocp-forward/ca-bundle.crt'
  <buffer>
    @type file
    path '/var/lib/fluentd/secureforwardlegacy'
    queued_chunks_limit_size "1024"
    chunk_limit_size "1m"
    flush_interval "5s"
    flush_at_shutdown "false"
    flush_thread_count "2"
    retry_max_interval "300"
    retry_forever true
    overflow_action "#{ENV['BUFFER_QUEUE_FULL_ACTION'] || 'throw_exception'}"
  </buffer>
  <server>
    host fluent-receiver.example.com
    port 24224
  </server>
</store>

流程

配置 OpenShift Container Platform 使用旧的 Fluentd 方法转发日志:

  1. 创建名为 secure-forward 的 配置文件,并在 <store> 部分中指定类似如下的参数:

    <store>
      @type forward
      <security>
        self_hostname ${hostname}
        shared_key <key> 1
      </security>
      transport tls 2
      tls_verify_hostname <value> 3
      tls_cert_path <path_to_file> 4
      <buffer> 5
        @type file
        path '/var/lib/fluentd/secureforwardlegacy'
        queued_chunks_limit_size "#{ENV['BUFFER_QUEUE_LIMIT'] || '1024' }"
        chunk_limit_size "#{ENV['BUFFER_SIZE_LIMIT'] || '1m' }"
        flush_interval "#{ENV['FORWARD_FLUSH_INTERVAL'] || '5s'}"
        flush_at_shutdown "#{ENV['FLUSH_AT_SHUTDOWN'] || 'false'}"
        flush_thread_count "#{ENV['FLUSH_THREAD_COUNT'] || 2}"
        retry_max_interval "#{ENV['FORWARD_RETRY_WAIT'] || '300'}"
        retry_forever true
      </buffer>
      <server>
        name 6
        host 7
        hostlabel 8
        port 9
      </server>
      <server> 10
        name
        host
      </server>
    1
    输入节点间共享的密钥。
    2
    指定 tls 启用 TLS 验证。
    3
    设置为 true 以验证服务器认证主机名。设置为 false 以忽略服务器 cert 主机名。
    4
    将私有 CA 证书文件的路径指定为 /etc/ocp-forward/ca_cert.pem
    5
    根据需要指定 Fluentd 缓冲参数
    6
    可选:为这个服务器输入一个名称。
    7
    指定服务器的主机名或 IP。
    8
    指定服务器的主机标识。
    9
    指定服务器的端口。
    10
    (可选)添加额外的服务器。如果您指定了两个或者两个以上的服务器,forward 会以轮循(round-robin)顺序使用这些服务器节点。

    要使用 Mutual TLS(mTLS)身份验证,请参阅 Fluentd 文档来获取有关客户端证书、密钥参数和其他设置的信息。

  2. openshift-logging 项目中创建名为 secure-forward 的配置映射:

    $ oc create configmap secure-forward --from-file=secure-forward.conf -n openshift-logging

Cluster Logging Operator 会重新部署 Fluentd pod。如果 pod 没有重新部署,您可以删除 Fluentd pod 来强制重新部署。

$ oc delete pod --selector logging-infra=fluentd

6.1.7. 使用旧的 syslog 方法转发日志

您可以通过创建配置文件和配置映射,使用 syslog RFC3164 协议将日志发送到 OpenShift Container Platform 集群外的目的地。您需要配置外部日志聚合器(如 syslog 服务器)来接收来自 OpenShift Container Platform 的日志。

重要

此转发日志的方法在 OpenShift Container Platform 中已弃用,并将在以后的发行版本中删除。

syslog 协议有两个版本:

  • out_syslog:非缓冲的实现(通过 UDP 进行沟通)不会缓冲数据并立即写入结果。
  • out_syslog_uffered:缓冲的实现,它通过 TCP 进行通讯并将数据缓冲到块中

要使用 syslog 协议发送日志,请创建一个名为 syslog.conf 的配置文件,并提供转发日志所需的信息。然后,使用该文件在 openshift-logging 项目中创建一个名为 syslog 的配置映射,OpenShift Container Platform 在转发日志时使用该文件。

先决条件

  • 您必须有配置为使用指定协议或格式接收日志数据的日志服务器。

syslog 配置文件示例

<store>
@type syslog_buffered
remote_syslog rsyslogserver.example.com
port 514
hostname ${hostname}
remove_tag_prefix tag
facility local0
severity info
use_record true
payload_key message
rfc 3164
</store>

您可以配置以下 syslog 参数。如需更多信息,请参阅 syslog RFC3164

  • facility: syslog facility。该值可以是十进制整数,也可以是区分大小写的关键字:

    • 0kern 用于内核信息
    • 1user 代表用户级信息(默认)。
    • 2mail 用于邮件系统。
    • 3daemon 用于系统守护进程
    • 4auth 用于安全/身份验证相关的信息
    • 5syslog 用于 syslogd 内部生成的信息
    • 6lpr 用于行打印机子系统
    • 7news 用于网络新闻子系统
    • 8uucp 用于 UUCP 子系统
    • 9cron 用于 clock 守护进程
    • 10authpriv 用于安全身份验证信息
    • 11ftp 用于 FTP 守护进程
    • 12ntp 用于 NTP 子系统
    • 13security 用于 syslog audit 日志
    • 14console 用于 syslog alert 日志
    • 15solaris-cron 用于 scheduling 守护进程
    • 16-23local0 - local7 用于本地使用的工具
  • payloadKey:用作 syslog 消息有效负载的记录字段。
  • rfc:通过 syslog 发送日志使用的 RFC。
  • severity:设置传出的 syslog 记录的syslog 的严重性。该值可以是十进制整数,也可以是区分大小写的关键字:

    • 0Emergency 用于代表系统不可用的信息
    • 1Alert 用于代表立即执行操作的信息
    • 2Critical 用于代表关键状况的信息
    • 3Error 用于代表错误状况的信息
    • 4Warning 用于代表警告条件的信息
    • 5Notice 用于代表正常但存在重要条件的信息
    • 6Informational 用于代表提示信息的信息
    • 7Debug 用于代表调试级别的信息(默认)
  • tag:记录项,作为 syslog 信息上的标签。
  • trimPrefix:从标签中删除的前缀。

流程

配置 OpenShift Container Platform 使用旧配置方法转发日志:

  1. 创建名为 syslog.conf 的配置文件,并在 <store> 部分中指定类似如下的参数:

    <store>
    @type <type> 1
    remote_syslog <syslog-server> 2
    port 514 3
    hostname ${hostname}
    remove_tag_prefix <prefix> 4
    facility <value>
    severity <value>
    use_record <value>
    payload_key message
    rfc 3164 5
    </store>
    1
    指定要使用的协议,可以是: syslogsyslog_buffered
    2
    指定 syslog 服务器的 FQDN 或 IP 地址。
    3
    指定接收方的端口。
    4
    可选:指定适当的 syslog 参数,例如:
    • 从 syslog 前缀中删除指定的 tag 字段的参数。
    • 参数将指定的字段设置为 syslog 键。
    • 指定 syslog 日志工具或源的参数。
    • 指定 syslog 日志严重性参数。
    • 参数来使用记录中的严重性和工具(如果可用)。如果为 true$1则输出内容中包含 container _name、namespace _name 和 pod_name
    • 参数来指定设置 syslog 消息有效负载的键。默认为 message
    5
    如果使用旧的 syslog 方法,必须把 rfc 值指定为 3164
  2. openshift-logging 项目中创建名为 syslog 的配置映射:

    $ oc create configmap syslog --from-file=syslog.conf -n openshift-logging

Cluster Logging Operator 会重新部署 Fluentd pod。如果 pod 没有重新部署,您可以删除 Fluentd pod 来强制重新部署。

$ oc delete pod --selector logging-infra=fluentd