8.9. 将 OpenShift Container Platform 日志发送到外部设备


您可以将 Elasticsearch 日志发送到外部设备,如外部托管的 Elasticsearch 实例或外部 syslog 服务器。还可以配置 Fluentd,使其将日志发送到外部日志聚合器。

注意

除非另有说明,否则在执行这些配置之前,必须将集群日志记录设置为非受管状态。如需更多信息,请参阅更改集群日志记录管理状态

8.9.1. 配置日志收集器以将日志发送到外部 Elasticsearch 实例

日志收集器将日志发送到 Elasticsearch 部署配置的 ES_HOSTES_PORTOPS_HOSTOPS_PORT 环境变量的值。应用程序日志定向到 ES_HOST 目的地,操作日志则定向到 OPS_HOST

注意

不支持将日志直接发送到 AWS Elasticsearch 实例。使用 Fluentd Secure Forward 将日志定向到由您控制并且配置了 fluent-plugin-aws-Elasticsearch-service 插件的 Fluentd 实例。

先决条件

  • 必须安装 Cluster Logging 和 Elasticsearch。
  • 将集群日志记录设置为非受管状态。

流程

将日志定向到特定的 Elasticsearch 实例:

  1. 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
  2. ES_HOSTOPS_HOST 设为相同的目的地,同时确保 ES_PORTOPS_PORT 也具有相同的值,使外部 Elasticsearch 实例同时包含应用程序日志和操作日志。
  3. 为 TLS 配置外部托管的 Elasticsearch 实例。仅允许使用相互 TLS 的外部托管 Elasticsearch 实例。
注意

如果不使用提供的 Kibana 和 Elasticsearch 镜像,您将没有同样的多租户功能,您的数据也不会由用户访问权限限制到特定的项目。

8.9.2. 配置日志收集器以将日志发送到外部 syslog 服务器

在主机上使用 fluent-plugin-remote-syslog 插件,将日志发送到外部 syslog 服务器。

先决条件

将集群日志记录设置为非受管状态。

流程

  1. 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 上接收相同的消息。

  2. 或者,您可以在 openshift-logging 项目中自行配置自定义 fluentd DaemonSet。

    Fluentd 环境变量

    参数描述

    USE_REMOTE_SYSLOG

    默认值为 false。设置为 true 可启用fluent-plugin-remote-syslog gem

    REMOTE_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 日志的副本发送到外部日志聚合器:

  1. 编辑 Fluentd 配置映射的 secure-forward.conf 部分:

    $ oc edit configmap/fluentd -n openshift-logging
  2. 输入外部 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>
    1
    (可选),为这个外部集合器输入一个名称。
    2
    指定外部集合器的主机名或 IP。
    3
    指定外部聚合器的端口。
    4
    另外,还可添加额外的外部聚合器。
  3. 将您的 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
    1
    指定自动生成的证书通用名称 (CN) 的默认值。
    2
    指定一个用于验证的共享密钥。
    3
    指定 CA 证书的路径。

    例如:

       <security>
         self_hostname client.fqdn.local
         shared_key cluster_logging_key
       </security>
    
       tls_cert_path /etc/fluent/keys/ca.crt

    要使用 mTLS,请参阅 Fluentd 文档 来获取有关客户端证书和密钥参数及其他设置的信息。

  4. 将用于 secure-forward.conf 的证书添加到 Fluentd Pod 上挂载的现有 secret 中。your_ca_certyour_private_key 值必须与 configmap/fluentdsecure-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)'}]"
  5. 在外部聚合器上配置 secure-forward.conf 文件,以安全地接受来自 Fluentd 的信息。

    配置外部聚合器时,它必须能够安全地接受来自 Fluentd 的消息。

您可以参阅 如何设置 inforward 插件out_forward 插件

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.