8.9. 将 OpenShift Container Platform 日志发送到外部设备
您可以将 Elasticsearch 日志发送到外部设备,如外部托管的 Elasticsearch 实例或外部 syslog 服务器。还可以配置 Fluentd,使其将日志发送到外部日志聚合器。
除非另有说明,否则在执行这些配置之前,必须将集群日志记录设置为非受管状态。如需更多信息,请参阅更改集群日志记录管理状态。
8.9.1. 配置日志收集器以将日志发送到外部 Elasticsearch 实例 复制链接链接已复制到粘贴板!
日志收集器将日志发送到 Elasticsearch 部署配置的 ES_HOST、ES_PORT、OPS_HOST 和 OPS_PORT 环境变量的值。应用程序日志定向到 ES_HOST 目的地,操作日志则定向到 OPS_HOST。
不支持将日志直接发送到 AWS Elasticsearch 实例。使用 Fluentd Secure Forward 将日志定向到由您控制并且配置了 fluent-plugin-aws-Elasticsearch-service 插件的 Fluentd 实例。
先决条件
- 必须安装 Cluster Logging 和 Elasticsearch。
- 将集群日志记录设置为非受管状态。
流程
将日志定向到特定的 Elasticsearch 实例:
在 openshift-logging 项目中编辑
fluentdDaemonSet。$ oc edit ds/fluentd spec: template: spec: containers: env: - name: ES_HOST value: elasticsearch - name: ES_PORT value: '9200' - name: ES_CLIENT_CERT value: /etc/fluent/keys/app-cert - name: ES_CLIENT_KEY value: /etc/fluent/keys/app-key - name: ES_CA value: /etc/fluent/keys/app-ca - name: OPS_HOST value: elasticsearch - name: OPS_PORT value: '9200' - name: OPS_CLIENT_CERT value: /etc/fluent/keys/infra-cert - name: OPS_CLIENT_KEY value: /etc/fluent/keys/infra-key - name: OPS_CA value: /etc/fluent/keys/infra-ca-
将
ES_HOST和OPS_HOST设为相同的目的地,同时确保ES_PORT和OPS_PORT也具有相同的值,使外部 Elasticsearch 实例同时包含应用程序日志和操作日志。 - 为 TLS 配置外部托管的 Elasticsearch 实例。仅允许使用相互 TLS 的外部托管 Elasticsearch 实例。
如果不使用提供的 Kibana 和 Elasticsearch 镜像,您将没有同样的多租户功能,您的数据也不会由用户访问权限限制到特定的项目。
8.9.2. 配置日志收集器以将日志发送到外部 syslog 服务器 复制链接链接已复制到粘贴板!
在主机上使用 fluent-plugin-remote-syslog 插件,将日志发送到外部 syslog 服务器。
先决条件
将集群日志记录设置为非受管状态。
流程
在
openshift-logging项目中设置fluentdDaemonSet 的环境变量。spec: template: spec: containers: - name: fluentd image: 'registry.redhat.io/openshift4/ose-logging-fluentd:v4.2' env: - name: REMOTE_SYSLOG_HOST1 value: host1 - name: REMOTE_SYSLOG_HOST_BACKUP value: host2 - name: REMOTE_SYSLOG_PORT_BACKUP value: 5555- 1
- 所需的远程 syslog 主机。每个主机都需要。
这将建立两个目的地。
host1上的 syslog 服务器将在默认端口514上接收消息,host2则在端口5555上接收相同的消息。或者,您可以在
openshift-logging项目中自行配置自定义fluentdDaemonSet。Fluentd 环境变量
Expand 参数 描述 USE_REMOTE_SYSLOG默认值为
false。设置为true可启用fluent-plugin-remote-sysloggemREMOTE_SYSLOG_HOST(必需)远程 syslog 服务器的主机名或 IP 地址。
REMOTE_SYSLOG_PORT要连接的端口号。默认值为
514。REMOTE_SYSLOG_SEVERITY设置 syslog 严重性级别。默认值为
debug。REMOTE_SYSLOG_FACILITY设置 syslog 工具。默认值为
local0。REMOTE_SYSLOG_USE_RECORD默认值为
false。设置为true可使用记录的严重性和工具字段对 syslog 消息进行设置。REMOTE_SYSLOG_REMOVE_TAG_PREFIX从标签中删除前缀,默认为
''(空白)。REMOTE_SYSLOG_TAG_KEY如果指定,则使用此字段作为要在记录上查看的键,以对 syslog 消息设置标签。
REMOTE_SYSLOG_PAYLOAD_KEY如果指定,则使用此字段作为要在记录上查看的键,以对 syslog 消息设置有效负载。
REMOTE_SYSLOG_TYPE设置传输层协议类型。默认为
syslog_buffered,它设定 TCP 协议。要切换到 UDP,请将其设定为syslog。警告这种实施是不安全的,应当仅在能保证不嗅探连接的环境中使用。
8.9.3. 配置 Fluentd 将日志发送到外部日志聚合器 复制链接链接已复制到粘贴板!
您可以使用 out_forward 插件,将 Fluentd 配置为将其日志的副本发送到外部日志聚合器,而不是默认的 Elasticsearch。在本地托管的 Fluentd 处理日志记录之后,您可以从那里进一步处理日志记录。
forward 插件仅被 Fluentd 支持 。out_forward 插件实现客户端(发送方),in_forward 实现服务器端(接收方)。
要将 OpenShift Container Platform 配置为使用 out_forward 来发送日志,在 openshift-logging 命名空间内创建一个名为 secure-forward 的 ConfigMap 来指向一个接收器。在接收器上,配置 in_forward 插件来接收来自 OpenShift Container Platform 的日志。有关使用 in_forward 插件的详情,请参考 Fluentd 文档。
默认 secure-forward.conf 部分
# <store>
# @type forward
# <security>
# self_hostname ${hostname} # ${hostname} is a placeholder.
# shared_key <shared_key_between_forwarder_and_forwardee>
# </security>
# transport tls
# tls_verify_hostname true # Set false to ignore server cert hostname.
# tls_cert_path /path/for/certificate/ca_cert.pem
# <buffer>
# @type file
# path '/var/lib/fluentd/forward'
# 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
# # the systemd journald 0.0.8 input plugin will just throw away records if the buffer
# # queue limit is hit - 'block' will halt further reads and keep retrying to flush the
# # buffer to the remote - default is 'exception' because in_tail handles that case
# overflow_action "#{ENV['BUFFER_QUEUE_FULL_ACTION'] || 'exception'}"
# </buffer>
# <server>
# host server.fqdn.example.com # or IP
# port 24284
# </server>
# <server>
# host 203.0.113.8 # ip address to connect
# name server.fqdn.example.com # The name of the server. Used for logging and certificate verification in TLS transport (when host is address).
# </server>
# </store>
流程
将 Fluentd 日志的副本发送到外部日志聚合器:
编辑 Fluentd 配置映射的
secure-forward.conf部分:$ oc edit configmap/fluentd -n openshift-logging输入外部 Fluentd 服务器的名称、主机和端口。
# <server> # host server.fqdn.example.com # or IP # port 24284 # </server> # <server> # host 203.0.113.8 # ip address to connect # name server.fqdn.example.com # The name of the server. Used for logging and certificate verification in TLS transport (when host is address). # </server>例如:
<server> name externalserver11 host 192.168.1.12 port 242243 </server> <server>4 name externalserver1 host 192.168.1.2 port 24224 </server> </store>将您的 CA 证书和私钥的路径添加到
secure-forward.conf部分:# <security> # self_hostname ${hostname} # ${hostname} is a placeholder.1 # shared_key <shared_key_between_forwarder_and_forwardee>2 # </security> # tls_cert_path /path/for/certificate/ca_cert.pem3 例如:
<security> self_hostname client.fqdn.local shared_key cluster_logging_key </security> tls_cert_path /etc/fluent/keys/ca.crt要使用 mTLS,请参阅 Fluentd 文档 来获取有关客户端证书和密钥参数及其他设置的信息。
将用于
secure-forward.conf的证书添加到 Fluentd Pod 上挂载的现有 secret 中。your_ca_cert和your_private_key值必须与configmap/fluentd的secure-forward.conf中指定的值匹配:$ oc patch secrets/fluentd --type=json \ --patch "[{'op':'add','path':'/data/your_ca_cert','value':'$(base64 -w0 /path/to/your_ca_cert.pem)'}]" $ oc patch secrets/fluentd --type=json \ --patch "[{'op':'add','path':'/data/your_private_key','value':'$(base64 -w0 /path/to/your_private_key.pem)'}]"注意将
your_private_key替换为一个通用名称。这个链接指向 JSON 路径,而不是主机系统上的路径。例如:
$ oc patch secrets/fluentd --type=json \ --patch "[{'op':'add','path':'/data/ca.crt','value':'$(base64 -w0 /etc/fluent/keys/ca.crt)'}]" $ oc patch secrets/fluentd --type=json \ --patch "[{'op':'add','path':'/data/ext-agg','value':'$(base64 -w0 /etc/fluent/keys/ext-agg.pem)'}]"在外部聚合器上配置
secure-forward.conf文件,以安全地接受来自 Fluentd 的信息。配置外部聚合器时,它必须能够安全地接受来自 Fluentd 的消息。
您可以参阅 如何设置 inforward 插件 及 out_forward 插件。