blob: d51e757dd680e0b25203555f5f950af1071a498b [file] [log] [blame]
<!-- vim: set syn=markdown : -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
#set($dollar = '$')
#set($h1='#')
#set($h2='##')
$h1 Log4j Kubernetes Support
Log4j supports Kubernetes by providing a Lookup to retrieve container information.
$h2 Accessing Kubernetes
The Log4j Kubernetes support requires access to the Docker REST interface. In many cases the REST service
can be accessed automatically. If needed the Kubernetes client can be configured any of the standard
Log4j configuration locations or via the Spring Boot configuration. Note, however, that since Spring Boot
causes logging to initialize 3 times and since the Spring environment is only available during the last
Log4j initialization Spring properties will only be available to Log4j in the last initialization.
$h2 Lookup Attributes
Log4j Kubernetes provides access to the following container attributes:
* accountName - The service account name.
* clusterName - The name of the cluster the application is running in.
* containerId - The full id assigned to the container.
* containerName - The name assigned to the container.
* host - The name of the host.
* hostIp - The host's ip address.
* imageId - The id assigned to the image.
* imageName - The name assigned to the image.
* labels - All labels formatted in a list.
* labels.app - The application name.
* labels.podTemplateHash - The pod's template hash value.
* masterUrl - The url needed to access the API server.
* namespaceId - The id of the namespace the various kubernetes components are located within.
* namespaceName - The namespace the various kubernetes components are located within.
* podId - The pod's id number.
* podIp - The pod's ip address.
* podName - The name of the pod.
#set( $D = '${' )
#set( $container = 'k8s:containerId}')
Attributes may be accessed by adding
```
$D$container
```
to the configuration. Note that kubernetes variables are only resolved once during logging initialization so they
shouldn't be referenced with more than one '$' character.
$h2 Configuration
Much of the configuration needed to access the Kubernetes API server is provided automatically by Kubernetes.
However, it is not uncommon to need to provide the url required to access the Kubernetes API server or the
namespace the application is assigned to. The properties below may either be configured using the Log4j
variable names and located by Log4j's normal property resolution mechansim or Log4j will resolve the
spring properties when the application is running in Spring Boot and the Spring Environment has been created.
Note that Spring Boot initializes logging 3 times and only the last will have a Spring Environment present.
| Log4j Property Name | Spring Property Name | Default | Description |
|------------------------ |----------------------:|----------:|------------:|
| log4j2.kubernetes.client.apiVersion | spring.cloud.kubernetes.client.apiVersion | v1 | Kubernetes API Version |
| 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 | Connection timeout |
| 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 | Logging interval |
| log4j2.kubernetes.client.masterUrl | spring.cloud.kubernetes.client.masterUrl | kubernetes.default.svc | Kubernetes API Master Node URL |
| log4j2.kubernetes.client.namespacce | spring.cloud.kubernetes.client.namespace | default | Kubernetes Namespace |
| log4j2.kubernetes.client.noProxy | spring.cloud.kubernetes.client.noProxy | | |
| log4j2.kubernetes.client.password | spring.cloud.kubernetes.client.password | | Kubernetes API Password |
| 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 | Request timeout |
| log4j2.kubernetes.client.rollingTimeout | spring.cloud.kubernetes.client.rollingTimeout | 900s | Rolling timeout |
| log4j2.kubernetes.client.trustCerts | spring.cloud.kubernetes.client.trustCerts | false | Kubernetes API Trust Certificates |
| log4j2.kubernetes.client.username | spring.cloud.kubernetes.client.username | | Kubernetes API Username |
| log4j2.kubernetes.client.watchReconnectInterval | spring.cloud.kubernetes.client.watchReconnectInterval | 1s | Reconnect Interval |
| log4j2.kubernetes.client.watchReconnectLimit | spring.cloud.kubernetes.client.watchReconnectLimit | -1 | Reconnect Interval limit retries |
$h2 Requirements
Log4j Kubernetes requires Log4j Core, Log4j API and a minimum of Java 8.
For more information, see [Runtime Dependencies](../runtime-dependencies.html).