Log4j Kubernetes 支持

Log4j 通过提供查找来检索容器信息来支持 Kubernetes。

Accessing Kubernetes

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

Lookup Attributes

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

  • accountName-服务帐户名称。

  • clusterName-运行应用程序的群集的名称。

  • containerId-分配给容器的完整 ID。

  • containerName-分配给容器的名称。

  • host-主机名。

  • hostIp-主机的 IP 地址。

  • imageId-分配给图像的 ID。

  • imageName-分配给图像的名称。

  • 标签-在列表中格式化的所有标签。

  • labels.app-应用程序名称。

  • labels.podTemplateHash-窗格的模板哈希值。

  • masterUrl-访问 API 服务器所需的 URL。

  • namespaceId-各种 kubernetes 组件位于其中的名称空间的 ID。

  • namespaceName-各种 kubernetes 组件位于其中的名称空间。

  • podId-窗格的 ID 号。

  • podIp-窗格的 IP 地址。

  • podName-窗格的名称。

可以通过添加属性来访问属性

${k8s:containerId}

配置。请注意,kubernetes 变量在记录初始化期间仅解析一次,因此不应使用多个'$'字符来引用它们。

Configuration

Kubernetes 自动提供访问 Kubernetes API 服务器所需的许多配置。但是,通常需要提供访问 Kubernetes API 服务器或应用程序分配到的名称空间所需的 url。可以使用 Log4j 变量名配置以下属性,并通过 Log4j 的常规属性解析机制 mechansim 定位该属性,或者当应用程序在 Spring Boot 中运行并且创建了 Spring Environment 时,Log4j 将解析 spring 属性。请注意,Spring Boot 会初始化日志记录 3 次,只有最后一次会出现一个 Spring Environment。

Log4j 属性名称SpringProperty 名称DefaultDescription
log4j2.kubernetes.client.apiVersionspring.cloud.kubernetes.client.apiVersionv1Kubernetes API 版本
log4j2.kubernetes.client.caCertDataspring.cloud.kubernetes.client.caCertData Kubernetes API CACertData
log4j2.kubernetes.client.caCertFilespring.cloud.kubernetes.client.caCertFile Kubernetes API CACertFile
log4j2.kubernetes.client.clientCertDataspring.cloud.kubernetes.client.clientCertData Kubernetes API ClientCertData
log4j2.kubernetes.client.clientCertFilespring.cloud.kubernetes.client.clientCertFile Kubernetes API ClientCertFile
log4j2.kubernetes.client.clientKeyAlgospring.cloud.kubernetes.client.clientKeyAlgoRSAKubernetes API ClientKeyAlgo
log4j2.kubernetes.client.clientKeyDataspring.cloud.kubernetes.client.clientKeyData Kubernetes API ClientKeyData
log4j2.kubernetes.client.clientKeyFilespring.cloud.kubernetes.client.clientKeyFile Kubernetes API ClientKeyFile
log4j2.kubernetes.client.clientKeyPassPhrasespring.cloud.kubernetes.client.clientKeyPassphrasechangeitKubernetes API ClientKeyPassphrase
log4j2.kubernetes.client.connectionTimeoutspring.cloud.kubernetes.client.connectionTimeout10sConnection timeout
log4j2.kubernetes.client.httpProxyspring.cloud.kubernetes.client.http-proxy
log4j2.kubernetes.client.httpsProxyspring.cloud.kubernetes.client.https-proxy
log4j2.kubernetes.client.loggingInbervalspring.cloud.kubernetes.client.loggingInterval20sLogging interval
log4j2.kubernetes.client.masterUrlspring.cloud.kubernetes.client.masterUrlkubernetes.default.svcKubernetes API 主节点 URL
log4j2.kubernetes.client.namespaccespring.cloud.kubernetes.client.namespacedefaultKubernetes Namespace
log4j2.kubernetes.client.noProxyspring.cloud.kubernetes.client.noProxy
log4j2.kubernetes.client.passwordspring.cloud.kubernetes.client.password Kubernetes API 密码
log4j2.kubernetes.client.proxyPasswordspring.cloud.kubernetes.client.proxyPassword
log4j2.kubernetes.client.proxyUsernamespring.cloud.kubernetes.client.proxyUsername
log4j2.kubernetes.client.requestTimeoutspring.cloud.kubernetes.client.requestTimeout10sRequest timeout
log4j2.kubernetes.client.rollingTimeoutspring.cloud.kubernetes.client.rollingTimeout900sRolling timeout
log4j2.kubernetes.client.trustCertsspring.cloud.kubernetes.client.trustCertsfalseKubernetes API 信任证书
log4j2.kubernetes.client.usernamespring.cloud.kubernetes.client.username Kubernetes API 用户名
log4j2.kubernetes.client.watchReconnectIntervalspring.cloud.kubernetes.client.watchReconnectInterval1sReconnect Interval
log4j2.kubernetes.client.watchReconnectLimitspring.cloud.kubernetes.client.watchReconnectLimit-1重新连接间隔限制重试

Requirements

Log4j Kubernetes 需要 Log4j Core,Log4j API 和最少的 Java8.有关更多信息,请参阅Runtime Dependencies