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的方法DeploymentConfigMap值变成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