Quarkus - 使用 kubernetes 集群配置日志记录
Quarkus - configure logging with kubernetes cluster
根据 official resource,日志记录配置依赖于 application.properties 文件。
现在我需要根据正在使用的集群进行一些配置(假设我们有典型的开发、暂存和生产环境,因此开发应该有 DEBUG 级别和生产至少 INFO)。
起初我想使用 Kubernetes ConfigMaps,但我看不出与 quarkus 日志记录有任何联系。
我该如何解决这个问题?
编辑:
这是我的 ConfigMap
kind: ConfigMap
apiVersion: v1
metadata:
name: kube-cm-config-map
namespace: default
uid: d992d86f-c247-471d-8e31-53e9a1858b76
resourceVersion: '8484'
creationTimestamp: '2021-04-22T13:12:43Z'
managedFields:
- manager: kubectl-create
operation: Update
apiVersion: v1
time: '2021-04-22T13:12:43Z'
fieldsType: FieldsV1
fieldsV1:
'f:data':
.: {}
'f:myenv': {}
'f:myname': {}
- manager: kubectl-edit
operation: Update
apiVersion: v1
time: '2021-04-22T16:52:18Z'
fieldsType: FieldsV1
fieldsV1:
'f:data':
'f:log.file.level': {}
- manager: dashboard
operation: Update
apiVersion: v1
time: '2021-04-23T08:03:06Z'
fieldsType: FieldsV1
fieldsV1:
'f:data':
'f:quarkus.log.file.level': {}
data:
log.file.level: DEBUG
myenv: cl1
myname: cluster1
quarkus.log.file.level: DEBUG
编辑2
这是我的配置图(通过命令 kubectl edit cm ):
apiVersion: v1
data:
QUARKUS_LOG_FILE_ENABLE: "true"
QUARKUS_LOG_FILE_FORMAT: '%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n'
QUARKUS_LOG_FILE_LEVEL: ERROR
QUARKUS_LOG_FILE_PATH: /tmp/kube-cm.log
myenv: cl1
myname: cluster 1b
kind: ConfigMap
metadata:
creationTimestamp: "2021-04-22T13:12:43Z"
name: kube-cm-config-map
namespace: default
resourceVersion: "39810"
uid: d992d86f-c247-471d-8e31-53e9a1858b76
有两种方法可以在 Quarkus 中使用 ConfigMap
来读取运行时配置。
首先是让 Quarkus 使用 quarkus-kubernetes-config
扩展查询 API 服务器,该扩展描述为 here.
第二种配置Kubernetes的方法Deployment
将ConfigMap
值变成Pod的环境变量。这可以通过描述 here.
的 quarkus-kubernetes
扩展来完成
因此您将在 ConfigMap 中添加适当的 quarkus 日志记录配置(即键值对),然后使用上述方法之一在运行时使用它
如果您使用 Kubernetes 资源 yaml 来部署您的应用程序,请使用下面的代码片段将您的自定义 ConfigMap 作为环境变量推送到您的应用程序 (https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables):
spec:
containers:
- name:
image:
envFrom:
- configMapRef:
name: kube-cm-config-map
为每个环境使用不同的 ConfigMap,但名称相同。如果您的环境 (dev/qa/etc) 是 Kubernetes 命名空间,那么设置起来非常容易。只需复制每个命名空间中的ConfigMap,并更改每个命名空间中的日志级别值。
此外,将 ConfigMap 属性的命名约定从 log.file.level
更改为 LOG_FILE_LEVEL
参见 https://quarkus.io/guides/config-reference#environment_variables
通过以下方式编辑 cm 解决:
data:
QUARKUS_LOG_FILE_ENABLE: "true"
QUARKUS_LOG_FILE_FORMAT: '%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n'
QUARKUS_LOG_FILE_LEVEL: ERROR
QUARKUS_LOG_FILE_PATH: /tmp/kube-cm.log
然后我在 quarkus 上设置 application.properties:
quarkus.kubernetes.env.configmaps=kube-cm-config-map
根据 official resource,日志记录配置依赖于 application.properties 文件。
现在我需要根据正在使用的集群进行一些配置(假设我们有典型的开发、暂存和生产环境,因此开发应该有 DEBUG 级别和生产至少 INFO)。
起初我想使用 Kubernetes ConfigMaps,但我看不出与 quarkus 日志记录有任何联系。
我该如何解决这个问题?
编辑:
这是我的 ConfigMap
kind: ConfigMap
apiVersion: v1
metadata:
name: kube-cm-config-map
namespace: default
uid: d992d86f-c247-471d-8e31-53e9a1858b76
resourceVersion: '8484'
creationTimestamp: '2021-04-22T13:12:43Z'
managedFields:
- manager: kubectl-create
operation: Update
apiVersion: v1
time: '2021-04-22T13:12:43Z'
fieldsType: FieldsV1
fieldsV1:
'f:data':
.: {}
'f:myenv': {}
'f:myname': {}
- manager: kubectl-edit
operation: Update
apiVersion: v1
time: '2021-04-22T16:52:18Z'
fieldsType: FieldsV1
fieldsV1:
'f:data':
'f:log.file.level': {}
- manager: dashboard
operation: Update
apiVersion: v1
time: '2021-04-23T08:03:06Z'
fieldsType: FieldsV1
fieldsV1:
'f:data':
'f:quarkus.log.file.level': {}
data:
log.file.level: DEBUG
myenv: cl1
myname: cluster1
quarkus.log.file.level: DEBUG
编辑2
这是我的配置图(通过命令 kubectl edit cm ):
apiVersion: v1
data:
QUARKUS_LOG_FILE_ENABLE: "true"
QUARKUS_LOG_FILE_FORMAT: '%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n'
QUARKUS_LOG_FILE_LEVEL: ERROR
QUARKUS_LOG_FILE_PATH: /tmp/kube-cm.log
myenv: cl1
myname: cluster 1b
kind: ConfigMap
metadata:
creationTimestamp: "2021-04-22T13:12:43Z"
name: kube-cm-config-map
namespace: default
resourceVersion: "39810"
uid: d992d86f-c247-471d-8e31-53e9a1858b76
有两种方法可以在 Quarkus 中使用 ConfigMap
来读取运行时配置。
首先是让 Quarkus 使用 quarkus-kubernetes-config
扩展查询 API 服务器,该扩展描述为 here.
第二种配置Kubernetes的方法Deployment
将ConfigMap
值变成Pod的环境变量。这可以通过描述 here.
quarkus-kubernetes
扩展来完成
因此您将在 ConfigMap 中添加适当的 quarkus 日志记录配置(即键值对),然后使用上述方法之一在运行时使用它
如果您使用 Kubernetes 资源 yaml 来部署您的应用程序,请使用下面的代码片段将您的自定义 ConfigMap 作为环境变量推送到您的应用程序 (https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables):
spec:
containers:
- name:
image:
envFrom:
- configMapRef:
name: kube-cm-config-map
为每个环境使用不同的 ConfigMap,但名称相同。如果您的环境 (dev/qa/etc) 是 Kubernetes 命名空间,那么设置起来非常容易。只需复制每个命名空间中的ConfigMap,并更改每个命名空间中的日志级别值。
此外,将 ConfigMap 属性的命名约定从 log.file.level
更改为 LOG_FILE_LEVEL
参见 https://quarkus.io/guides/config-reference#environment_variables
通过以下方式编辑 cm 解决:
data:
QUARKUS_LOG_FILE_ENABLE: "true"
QUARKUS_LOG_FILE_FORMAT: '%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n'
QUARKUS_LOG_FILE_LEVEL: ERROR
QUARKUS_LOG_FILE_PATH: /tmp/kube-cm.log
然后我在 quarkus 上设置 application.properties:
quarkus.kubernetes.env.configmaps=kube-cm-config-map