迁移至Rancher v2.5日志

从 v2.5 开始,Rancher 中可用的日志功能已经完全改观。采用了 banzai cloud 的logging operator;Rancher 在部署 logging 时,配置了这个工具来使用。

在新的日志功能的众多特性和变化中,有一项是取消了特定项目的日志配置。取而代之的是,现在在命名空间级别配置日志。集群级日志仍然可用,但配置选项有所不同。

注意

v2.5 之前的用户界面现在被称为集群管理器。v2.5+的仪表盘被称为Cluster Explorer

安装

要在 Rancher v2.5+中安装日志,请参考安装说明

术语

在 v2.5 中,日志配置集中在集群浏览器中的日志菜单选项下。集群和命名空间的日志都是通过这个菜单选项来配置的。

注意

日志是以每个集群为基础安装的。您需要在集群之间进行导航,以便为每个集群配置日志

对于 v2.5 以上的日志,有四个关键概念需要理解:

  1. Outputs

    Outputs 是一个配置资源,它决定了收集到的日志的目的地。这是存储 ElasticSearch、Kafka 等聚合器的设置的地方。Outputs 是命名空间的资源。

  2. Flows

    流量是一种配置资源,用于确定日志的收集、过滤和目标规则。在一个流中,人们将配置要收集哪些日志,如何突变或过滤它们,以及将日志发送到哪些输出。流是命名空间的资源,既可以连接到同一命名空间的_Output,也可以连接到ClusterOutput

  3. ClusterOutputs

    ClusterOutputs 的功能与 Outputs 相同,只是它们是一种集群范围的资源。当在整个集群范围内收集日志时,或者如果你希望向你的集群中的所有命名空间提供一个输出,那么 ClusterOutputs 是必要的。

  4. ClusterFlows

    ClusterFlows 的功能与 Flows 相同,但在集群层面。它们用于配置整个集群的日志收集,而不是每个命名空间级别的。ClusterFlows 也是定义突变和过滤器的地方,与 Flows 一样。

集群日志

要配置 v2.5+日志的集群范围,需要设置一个 ClusterFlow。这个对象定义了日志的来源,任何要应用的转换或过滤器,以及最终的日志输出。

重要

ClusterFlows 必须在cattle-logging-system命名空间中定义。如果在任何其他命名空间中定义,ClusterFlows 将不起作用。

在之前的日志中,为了从整个集群中收集日志,只需要启用集群级日志并定义所需的输出。这一基本方法在 v2.5+日志中仍然存在。要复制遗留的集群级日志,请遵循以下步骤:

  1. 根据输出配置下的说明定义一个 ClusterOutput。
  2. 创建一个 ClusterFlow,确保设置为在cattle-logging-system命名空间中创建。
    1. 从流程定义中删除所有的 Include 和 Exclude 规则。这样可以确保所有的日志都被收集。
    2. 如果您不希望配置任何过滤器,您不需要配置任何过滤器—默认行为不需要创建它们
    3. 定义你的群组产出

这将导致收集来自集群中所有来源(所有 pods 和所有系统组件)的日志,并将其发送到您在 ClusterFlow 中定义的输出。

项目日志

在 v2.5+中,日志不是项目感知的。这意味着,为了收集在项目命名空间中运行的 pod 的日志,您需要为这些命名空间定义 Flows

要从特定的命名空间收集日志,请按照以下步骤进行。

  1. 根据输出配置下的说明,定义一个 Output 或 ClusterOutput。
  2. 创建一个 Flow,确保它被设置为在你要收集日志的命名空间中创建。
    1. 如果您希望定义 Include 或 Exclude 规则,您可以这样做。否则,删除所有规则将导致目标命名空间中的所有 pod 的日志都被收集。
      1. 如果您不希望,您不需要配置任何过滤器—默认行为不需要创建它们。
      1. 定义你的输出:这些输出可以是 ClusterOutput 或 Output 对象。

这将导致收集命名空间(pods)中所有来源的日志,并将其发送到你在 Flow 中定义的输出。

要从一个项目中收集日志,请对项目中的每个命名空间重复上述步骤。或者,您可以用一个通用的标签来标记您的项目工作负载(例如:project=my-project),然后使用 ClusterFlow 来收集与此标签相匹配的所有 pod 的日志。

输出配置

在之前的日志中,有五个日志目的地可供选择:Elasticsearch、Splunk、Kafka、Fluentd 和 Syslog。除了 Syslog 之外,所有这些目的地都可以在日志 v2.5+中使用。

Elasticsearch

之前的日志v2.5+ 的日志说明
EndpointTarget -> Host请确保指定协议(https 或 http),以及端口。
X-Pack Security -> UsernameAccess -> User
X-Pack Security -> PasswordAccess -> Password密码现在必须存储在密文中
SSL Configuration -> Client Private KeySSL -> Client Key私钥现在必须存储在一个密文中。
SSL Configuration -> Client CertificateSSL -> Client Cert证书现在必须存储在一个密文中。
SSL Configuration -> Client Key PasswordSSL -> Client Key Pass密码现在必须存储在密文中
SSL Configuration -> Enabled SSL VerificationSSL -> Certificate Authority File证书现在必须存储在一个密文中。

在之前的日志中,索引是根据index mode部分的格式自动创建的。在 v2.5 日志中,默认行为已改为记录到单个索引。您仍然可以通过编辑为 YAML 并输入以下值来配置输出对象上的索引模式功能。

  1. ...
  2. spec:
  3. elasticsearch:
  4. ...
  5. logstash_format: true
  6. logstash_prefix: <desired prefix>
  7. logstash_dateformat: "%Y-%m-%d"

Copy

用将要创建的索引的前缀替换 <desired prefix>。在之前的日志中,这默认为集群的名称。

Splunk

之前的日志v2.5+ 的日志说明
HEC Configuration -> EndpointTarget -> Host请确保指定协议(https 或 http),以及端口。
HEC Configuration -> TokenAccess -> TokenToken 现在必须存储在密文中
HEC Configuration -> IndexEdit as YAML -> indexindex 字段必须作为 YAML 键添加到spec.splunkHec下。
HEC Configuration -> SourceEdit as YAML -> sourcesource 字段必须作为 YAML 键添加到spec.splunkHec下。
SSL Configuration -> Client Private KeyEdit as YAML -> client_keyclient_key 字段必须作为 YAML 键添加到spec.splunkHec下。见(1)。
SSL Configuration -> Client CertificateEdit as YAML -> client_certclient_cert 字段必须作为 YAML 键添加到spec.splunkHec下。见(1)。
SSL Configuration -> Client Key PasswordNot Supported目前不支持为客户端私钥指定密码。
SSL Configuration -> SSL VerifyEdit as YAML -> ca_file or ca_pathca_fileca_path字段必须作为 YAML 键添加到spec.splunkHec下。见(2)。

_(1) client_keyclient_cert的值必须分别是密钥和证书文件的路径。这些文件必须挂载到rancher-logging-fluentd pod 中才能使用。

_(2) 用户可以配置 ca_file(PEM 编码的 CA 证书的路径)或 ca_path(PEM 格式的 CA 证书目录的路径)。这些文件必须挂载到rancher-logging-fluentd pod 中才能使用。

Kafka

之前的日志v2.5+ 的日志说明
Kafka Configuration -> Endpoint Type-不再支持将 Zookeeper 作为端点类型。
Kafka Configuration -> EndpointTarget -> Brokers以逗号分隔的 broker 列表(host:port)
Kafka Configuration -> TopicTarget -> Default Topic
SSL Configuration -> Client Private KeySSL -> SSL Client Cert证书现在必须存储在密文中
SSL Configuration -> Client CertificateSSL -> SSL Client Cert Key密钥现在必须存储在密文中
SSL Configuration -> CA Certificate PEMSSL -> SSL CA Cert证书现在必须存储在密文中
SASL Configuration -> UsernameAccess -> Username用户名必须储存在密文中
SASL Configuration -> PasswordAccess -> Password密码必须储存在密文中
SASL Configuration -> Scram MechanismAccess -> Scram Mechanism输入机制为字符串,例如 “sha256 “或 “sha512”

Fluentd

从 v2.5.2 开始,只能使用 “编辑为表单 “选项来添加一个 Fluentd 服务器。要添加多个服务器,请将输出编辑为 YAML 并输入多个服务器。

之前的日志v2.5+ 的日志说明
Fluentd Configuration -> EndpointTarget -> Host, Port分别输入主机和端口
Fluentd Configuration -> Shared KeyAccess -> Shared KeyShared key 现在必须存储在密文中
Fluentd Configuration -> UsernameAccess -> UsernameUsername 现在必须存储在密文中
Fluentd Configuration -> PasswordAccess -> PasswordPassword 现在必须存储在密文中
Fluentd Configuration -> HostnameEdit as YAML -> hostspec.forward.servers[n]下的host字段设置为 YAML 键。
Fluentd Configuration -> WeightEdit as YAML -> weightweight 下的host字段设置为 YAML 键。
SSL Configuration -> Use TLS-不需要明确启用。定义客户端证书字段来代替。
SSL Configuration -> Client Private KeyEdit as YAML -> tls_private_key_path字段设置为spec.forward下的 YAML 键。见(1)
SSL Configuration -> Client CertificateEdit as YAML -> tls_client_cert_path字段设置为spec.forward下的 YAML 键。见(1)
SSL Configuration -> Client Key PasswordEdit as YAML -> tls_client_private_key_passphrase字段设置为spec.forward下的 YAML 键。见(1)
SSL Configuration -> SSL VerifyEdit as YAML -> tls_insecure_modespec.forward 下设置为 YAML 键。默认值:false
SSL Configuration -> CA Certificate PEMEdit as YAML -> tls_cert_path字段设置为spec.forward下的 YAML 键。见(1)
Enable Gzip Compression-在 v2.5 以上的日志记录中不再支持。

_(1) 这些值是作为文件的路径来指定的,这些文件必须安装到rancher-logging-fluentd pod 中才能使用。这些文件必须安装到rancher-logging-fluentd pod 中才能使用。

Syslog

从 v2.5.2 开始,目前不支持使用 v2.5 以上的日志作为输出。

自定义日志字段

为了添加自定义日志字段,你将需要添加以下 YAML 到你的流程配置中。

  1. ---
  2. spec:
  3. filters:
  4. - record_modifier:
  5. records:
  6. - foo: "bar"

Copy

请将 foo: "bar"替换为您希望添加的自定义日志字段。

系统日志

在之前的日志中,从系统组件收集日志是通过在设置集群日志时勾选 “包括系统日志 “的框来完成的。在 v2.5+日志中,系统日志的收集方式有两种:

  1. 收集所有集群日志,不指定任何匹配或排除规则。这样做的结果是收集集群的所有容器日志,其中包括系统日志。
  2. 通过为系统组件添加匹配规则,专门针对系统日志。具体的匹配规则取决于被收集的组件。