Log4j Kubernetes 支持

Log4j 通过提供一个查找来检索容器信息,从而支持 Kubernetes。

访问 Kubernetes

Log4j Kubernetes 支持需要访问 Docker REST 接口。在许多情况下,REST 服务可以自动访问。如果需要,Kubernetes 客户端可以在任何标准 Log4j 配置位置或通过 Spring Boot 配置进行配置。但是请注意,由于 Spring Boot 会导致日志记录初始化 3 次,并且由于 Spring 环境仅在最后一次 Log4j 初始化期间可用,因此 Spring 属性仅在最后一次初始化期间对 Log4j 可用。

查找属性

Log4j Kubernetes 提供对以下容器属性的访问

  • accountName - 服务帐户名称。
  • clusterName - 应用程序正在运行的集群的名称。
  • containerId - 分配给容器的完整 ID。
  • containerName - 分配给容器的名称。
  • host - 主机的名称。
  • hostIp - 主机的 IP 地址。
  • imageId - 分配给映像的 ID。
  • imageName - 分配给映像的名称。
  • labels - 所有标签,格式为列表。
  • labels.app - 应用程序名称。
  • labels.podTemplateHash - Pod 的模板哈希值。
  • masterUrl - 访问 API 服务器所需的 URL。
  • namespaceId - 各种 Kubernetes 组件所在的命名空间的 ID。
  • namespaceName - 各种 Kubernetes 组件所在的命名空间。
  • podId - Pod 的 ID 号。
  • podIp - Pod 的 IP 地址。
  • podName - Pod 的名称。

可以通过添加以下内容来访问属性

${k8s:containerId}

到配置。请注意,Kubernetes 变量仅在日志记录初始化期间解析一次,因此它们不应使用超过一个“$”字符进行引用。

配置

访问 Kubernetes API 服务器所需的许多配置由 Kubernetes 自动提供。但是,通常需要提供访问 Kubernetes API 服务器所需的 URL 或应用程序分配到的命名空间。以下属性可以使用 Log4j 变量名称进行配置,并由 Log4j 的正常属性解析机制定位,或者当应用程序在 Spring Boot 中运行且 Spring 环境已创建时,Log4j 会解析 Spring 属性。请注意,Spring Boot 会初始化日志记录 3 次,只有最后一次会存在 Spring 环境。

Log4j 属性名称 Spring 属性名称 默认值 描述
log4j2.kubernetes.client.apiVersion spring.cloud.kubernetes.client.apiVersion v1 Kubernetes API 版本
log4j2.kubernetes.client.caCertData spring.cloud.kubernetes.client.caCertData Kubernetes API CACertData
log4j2.kubernetes.client.caCertFile spring.cloud.kubernetes.client.caCertFile Kubernetes API CACertFile
log4j2.kubernetes.client.clientCertData spring.cloud.kubernetes.client.clientCertData Kubernetes API ClientCertData
log4j2.kubernetes.client.clientCertFile spring.cloud.kubernetes.client.clientCertFile Kubernetes API ClientCertFile
log4j2.kubernetes.client.clientKeyAlgo spring.cloud.kubernetes.client.clientKeyAlgo RSA Kubernetes API ClientKeyAlgo
log4j2.kubernetes.client.clientKeyData spring.cloud.kubernetes.client.clientKeyData Kubernetes API ClientKeyData
log4j2.kubernetes.client.clientKeyFile spring.cloud.kubernetes.client.clientKeyFile Kubernetes API ClientKeyFile
log4j2.kubernetes.client.clientKeyPassPhrase spring.cloud.kubernetes.client.clientKeyPassphrase changeit Kubernetes API ClientKeyPassphrase
log4j2.kubernetes.client.connectionTimeout spring.cloud.kubernetes.client.connectionTimeout 10s 连接超时
log4j2.kubernetes.client.httpProxy spring.cloud.kubernetes.client.http-proxy
log4j2.kubernetes.client.httpsProxy spring.cloud.kubernetes.client.https-proxy
log4j2.kubernetes.client.loggingInberval spring.cloud.kubernetes.client.loggingInterval 20s 日志记录间隔
log4j2.kubernetes.client.masterUrl spring.cloud.kubernetes.client.masterUrl kubernetes.default.svc Kubernetes API 主节点 URL
log4j2.kubernetes.client.namespacce spring.cloud.kubernetes.client.namespace default Kubernetes 命名空间
log4j2.kubernetes.client.noProxy spring.cloud.kubernetes.client.noProxy
log4j2.kubernetes.client.password spring.cloud.kubernetes.client.password Kubernetes API 密码
log4j2.kubernetes.client.proxyPassword spring.cloud.kubernetes.client.proxyPassword
log4j2.kubernetes.client.proxyUsername spring.cloud.kubernetes.client.proxyUsername
log4j2.kubernetes.client.requestTimeout spring.cloud.kubernetes.client.requestTimeout 10s 请求超时
log4j2.kubernetes.client.rollingTimeout spring.cloud.kubernetes.client.rollingTimeout 900s 滚动超时
log4j2.kubernetes.client.trustCerts spring.cloud.kubernetes.client.trustCerts false Kubernetes API 信任证书
log4j2.kubernetes.client.username spring.cloud.kubernetes.client.username Kubernetes API 用户名
log4j2.kubernetes.client.watchReconnectInterval spring.cloud.kubernetes.client.watchReconnectInterval 1s 重新连接间隔
log4j2.kubernetes.client.watchReconnectLimit spring.cloud.kubernetes.client.watchReconnectLimit -1 重新连接间隔限制重试次数

要求

Log4j Kubernetes 需要 Log4j Core、Log4j API 以及至少 Java 8。有关更多信息,请参阅 运行时依赖项