7.6. 将日志转发到 Kafka 代理
除了默认的 Elasticsearch 存储外,您还可以将日志转发到外部 Kafka 代理。
要配置日志转发到外部 Kafka 实例,请创建一个 ClusterLogForwarder 自定义资源(CR),包括输出到该实例的输出以及使用输出的管道。您可以在输出中包括特定的 Kafka 主题,也可以使用默认值。Kafka 输出可以使用 TCP(不安全)或者 TLS(安全 TCP)连接。
流程
创建一个类似如下的
ClusterLogForwarderCR YAML 文件:apiVersion: logging.openshift.io/v1 kind: ClusterLogForwarder metadata: name: instance1 namespace: openshift-logging2 spec: outputs: - name: app-logs3 type: kafka4 url: tls://kafka.example.devlab.com:9093/app-topic5 secret: name: kafka-secret6 - name: infra-logs type: kafka url: tcp://kafka.devlab2.example.com:9093/infra-topic7 - name: audit-logs type: kafka url: tls://kafka.qelab.example.com:9093/audit-topic secret: name: kafka-secret-qe pipelines: - name: app-topic8 inputRefs:9 - application outputRefs:10 - app-logs parse: json11 labels: logType: "application"12 - name: infra-topic13 inputRefs: - infrastructure outputRefs: - infra-logs labels: logType: "infra" - name: audit-topic inputRefs: - audit outputRefs: - audit-logs - default14 labels: logType: "audit"- 1
ClusterLogForwarderCR 的名称必须是instance。- 2
ClusterLogForwarderCR 的命名空间必须是openshift-logging。- 3
- 指定输出的名称。
- 4
- 指定
kafka类型。 - 5
- 将 Kafka 代理的 URL 和端口指定为一个有效的绝对 URL,也可以同时指定特定标题。您可以使用
tcp(不安全)或者tls(安全 TCP)协议。如果启用了使用 CIDR 注解的集群范围代理,输出必须是服务器名称或 FQDN,而不是 IP 地址。 - 6
- 如果使用
tls前缀,您必须为 TLS 通信指定端点所需的 secret 名称。secret 必须存在于openshift-logging项目中,且必须具有指向它们所代表的相应证书的 tls.crt、tls.key 和 ca-bundle.crt 的键。 - 7
- 可选: 要发送不安全的输出,在 URL 前面使用
tcp前缀。另外,省略此输出中的secret键及其name。 - 8
- 可选:指定管道的名称。
- 9
- 指定使用该管道转发哪些日志类型:
application、infrastructure或audit。 - 10
- 指定要与该管道搭配使用的输出来转发日志。
- 11
- 可选:转发结构化的 JSON 日志条目作为 JSON 对象,在
structured项。日志条目必须包含有效的结构化 JSON;否则,OpenShift Logging 会删除structured字段,并将日志条目发送到默认索引app-00000x。 - 12
- 可选:字符串。要添加到日志中的一个或多个标签。
- 13
- 可选:配置多个输出,将日志转发到任何受支持类型的其他外部日志聚合器:
- 可选。描述管道的名称。
-
inputRefs是使用管道转发的日志类型:application、infrastructure或audit。 -
outputRefs是要使用的输出名称。 - 可选:字符串。要添加到日志中的一个或多个标签。
- 14
- 可选:指定
default将日志转发到内部 Elasticsearch 实例。
可选: 要将单个输出转发到多个 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-topic3 ...创建 CR 对象。
$ oc create -f <file-name>.yaml
Red Hat OpenShift Logging Operator 会重新部署 Fluentd Pod。如果 pod 没有重新部署,您可以删除 Fluentd pod 来强制重新部署。
$ oc delete pod --selector logging-infra=fluentd