Quarkus - 使用 kubernetes 集群配置日志记录

时间:2021-04-22 16:12:52

标签: java kubernetes quarkus

根据 official resource,日志配置依赖于 application.properties 文件。

现在我需要根据使用的集群进行几个配置(假设我们有典型的开发、暂存和生产环境,因此开发应该有一个调试级别和至少是 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

3 个答案:

答案 0 :(得分:0)

在 Quarkus 中有两种方法可以使用 ConfigMap 来读取运行时配置。

第一个是让 Quarkus 使用 here 描述的 quarkus-kubernetes-config 扩展来查询 API 服务器。

配置 Kubernetes Deployment 以将 ConfigMap 值转换为 Pod 的环境变量的第二种方法。这可以通过 here 中描述的 quarkus-kubernetes 扩展完成。

因此,您将在 ConfigMap 中添加适当的 quarkus 日志配置(即键值对),然后使用上述方法之一在运行时使用它

答案 1 :(得分:0)

如果您使用 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_LEVELhttps://quarkus.io/guides/config-reference#environment_variables

答案 2 :(得分:0)

可以通过以下方式编辑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