【问题标题】:Quarkus - configure logging with kubernetes clusterQuarkus - 使用 kubernetes 集群配置日志记录
【发布时间】:2021-07-16 21:32:44
【问题描述】:

根据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

EDIT2

这是我的配置图(通过命令 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

【问题讨论】:

    标签: java kubernetes quarkus


    【解决方案1】:

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

    首先是让 Quarkus 使用 quarkus-kubernetes-config 扩展名查询 API 服务器,该扩展名描述为 here

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

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

    【讨论】:

    • 对不起,我仍然无法让它工作。尝试在 cm: "quarkus.log.file.level": "DEBUG" 或 "log.file.level": "DEBUG" 上进行配置,但仍然看不到任何日志跟踪。另请参阅我在第一篇文章中的编辑。谢谢
    • 为什么只对文件启用调试级别?
    • 这只是一个代码 sn-p。我想要做的是为每个环境保持不同的日志级别
    【解决方案2】:

    如果您使用 Kubernetes 资源 yaml 来部署您的应用程序,请使用下面的 sn-p 将您的自定义 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

    【讨论】:

    • 尝试在配置映射中设置所有可能的值,但没有任何改变。
    • @FabrizioStellato,您是否为文件启用了日志记录:QUARKUS_LOG_FILE_ENABLE=true
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多