7.6. 将日志转发到 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
         parse: json 11
         labels:
           logType: "application" 12
       - name: infra-topic 13
         inputRefs:
         - infrastructure
         outputRefs:
         - infra-logs
         labels:
           logType: "infra"
       - name: audit-topic
         inputRefs:
         - audit
         outputRefs:
         - audit-logs
         - default 14
         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
    可选:转发结构化的 JSON 日志条目作为 JSON 对象,在 structured 项。日志条目必须包含有效的结构化 JSON;否则,OpenShift Logging 会删除 structured 字段,并将日志条目发送到默认索引 app-00000x
    12
    可选:字符串。要添加到日志中的一个或多个标签。
    13
    可选:配置多个输出,将日志转发到任何受支持类型的其他外部日志聚合器:
    • 可选。描述管道的名称。
    • inputRefs 是使用管道转发的日志类型:applicationinfrastructureaudit
    • outputRefs 是要使用的输出名称。
    • 可选:字符串。要添加到日志中的一个或多个标签。
    14
    可选:指定 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

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

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