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 项目中编辑
fluentd
DaemonSet。$ 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
项目中设置fluentd
DaemonSet 的环境变量。spec: template: spec: containers: - name: fluentd image: 'registry.redhat.io/openshift4/ose-logging-fluentd:v4.2' env: - name: REMOTE_SYSLOG_HOST 1 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
项目中自行配置自定义fluentd
DaemonSet。Fluentd 环境变量
参数 描述 USE_REMOTE_SYSLOG
默认值为
false
。设置为true
可启用fluent-plugin-remote-syslog
gemREMOTE_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 externalserver1 1 host 192.168.1.1 2 port 24224 3 </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.pem 3
例如:
<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 插件。