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。有关更多信息,请参阅 运行时依赖项。