Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Kubernetes部署-外部化日志文件_Spring Boot_Kubernetes_Logback - Fatal编程技术网

Spring boot Kubernetes部署-外部化日志文件

Spring boot Kubernetes部署-外部化日志文件,spring-boot,kubernetes,logback,Spring Boot,Kubernetes,Logback,我有一个SpringBoot应用程序,其中包含以下docker文件 FROM docker.com/base/jdk1.8:latest MAINTAINER Application Engineering [ https://docker.com/ ] RUN mkdir -p /opt/docker/svc COPY application/weather-service.war /opt/docker/svc/ CMD java -jar /opt/docker/svc/weath

我有一个SpringBoot应用程序,其中包含以下docker文件

FROM docker.com/base/jdk1.8:latest

MAINTAINER Application Engineering [ https://docker.com/ ]

RUN mkdir -p /opt/docker/svc

COPY application/weather-service.war /opt/docker/svc/

CMD java -jar /opt/docker/svc/weather-service.war --spring.config.location=file:/conf/application.properties -Dlogging.config=/conf/logback.xml
我可以使用kubernetes configMap或secrets for application.properties,并使用卷装载选项,如下所示

"spec": {
        "volumes": [
          {
            "name": "svc-prop",
            "configMap": {
              "name": "svc-app-config",
              "items": [
                {
                  "key": "application.properties",
                  "path": "application.properties"
                }
              ]
            }
          }
         ],
        "containers": [
          "volumeMounts": [
              {
                "name": "svc-prop",
                "mountPath": "/conf"
              }
         ]
如何实现logback.xml的相同功能。在这种情况下,我需要使用机密作为文件吗

我不想将logback.xml文件与图像捆绑在一起,因为我们可能会在运行时更改日志级别


在Kubernetes中,还有其他更好的方法来保存spring boot应用程序的logback.xml吗?

您已经完成了。。。当需要更新logback.xml时,使用ConfigMap并使用“kubectl edit”更新ConfigMap

当一个ConfigMap或一个Secret被更新时,它最终会反映在容器中,如果像via这样进行了配置,那么应用程序最终会接受更改。如果没有,则需要重新启动pod以获取更新的logback.xml

为logback创建configmap

apiVersion: v1
kind: ConfigMap
metadata:
  name: logback-configmap
data:
  logback.xml: |+
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <include resource="org/springframework/boot/logging/logback/base.xml"/>
      <logger name="org.springframework.web" level="DEBUG"/>
    </configuration>
在容器中装载configmap卷

    volumeMounts:
    - mountPath: /path/to/logback.xml
      name: logback

通常,您不希望提供整个
logback.xml
文件,而是需要在运行时最频繁更新的
logger
列表。 为了实现这一点,您可以使用以下功能:

  • 像往常一样编写
    logback.xml
    文件,但
    logger
    列表除外。改用
    包含
    元素:
  • 
    和。要检查记录器文件是否正确装入,请执行以下命令:

    $ kubectl exec restorun-7d757b7c6-wcslx -- ls -l /microservice/config/mount
    total 0
    lrwxrwxrwx    1 root     root            26 Aug 14 05:52 loggers-include.xml -> ..data/loggers-include.xml
    
    此外,如果您已在Logback的
    配置
    元素中设置了
    debug=true
    属性(请参见步骤1),则在应用程序启动期间,您应该在STDOUT中看到以下记录:

    05:52:17,031 |-INFO in ch.qos.logback.core.joran.util.ConfigurationWatchListUtil@6e06451e - Adding [file:/microservice/config/mount/loggers-include.xml] to configuration watch list.
    
  • 现在,您可以编辑您的ConfigMap(例如,将
    com.netflix.hystrix
    设置为级别
    WARN
    ),保存其文件并告诉Kubernetes将更改应用于应用程序:

    $ kubectl apply -f microservice-log-configmap.yaml
    configmap "microservice-loggers" configured
    
    同样,Logback应该通过在标准输出中记录以下消息来反映更改:

        05:59:16,974 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.netflix.hystrix] to WARN
    
    您还可以通过从Spring Boot Actuator直接询问来检查有效日志记录级别(如果您有权访问此端点):

    $curlhttp:///actuator/loggers/com.netflix.hystrix
    {
    “configuredLevel”:“警告”,
    “有效级别”:“警告”
    }
    
  • 如果级别保持不变,请等待一分钟,然后再次检查:通过Kubernetes和Logback传播更改需要一些时间。有关此主题的更多信息:


    • (请参阅安装的配置映射自动更新部分)
    05:52:17,031 |-INFO in ch.qos.logback.core.joran.util.ConfigurationWatchListUtil@6e06451e - Adding [file:/microservice/config/mount/loggers-include.xml] to configuration watch list.
    
    $ kubectl apply -f microservice-log-configmap.yaml
    configmap "microservice-loggers" configured
    
        05:59:16,974 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.netflix.hystrix] to WARN
    
    $ curl http://<k8s-external-ip>/actuator/loggers/com.netflix.hystrix
    {
      "configuredLevel" : "WARN",
      "effectiveLevel" : "WARN"
    }