无法拉取apollo配置的可能原因

Posted 境悟初

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法拉取apollo配置的可能原因相关的知识,希望对你有一定的参考价值。

问题描述

在微服务下使用携程的Apollo配置中心,在一个之前部署过的apollo的环境里增加新的配置,死活连不上Apollo里配的配置,具体表现是 apollo-cache-dir下没有任何配置文件。

apollo配置如下:

app.id=$spring.application.name
apollo.meta=http://apollo-host:8080
apollo.cacheDir=apollo-cache-dir
apollo.cluster=default
apollo.bootstrap.enabled=true
apollo.bootstrap.namespaces=application,middleware
apollo.bootstrap.eagerLoad.enabled=true

原因分析:

我从下面的可能原因入手分析

  1. apollo服务本身有问题:我查看apollo的日志,界面一切正常,发布和获取日志都可以
  2. 应用服务本身配置问题:我把应用jar包里所有配置都删掉,确保使用的外部配置,然而问题依然存在

一切没有头绪时,我决定仔细分析apollo的每个参数,看看配置是否有问题(因为这份配置在其他环境没有问题,我也没怀有多大希望)。
我发现了 apollo.bootstrap.eagerLoad.enabled这个配置,官方解释是 将Apollo配置加载提到初始化日志系统之前(1.2.0+)

也就是说,这个参数设为 true,Apollo的加载顺序会放到日志系统加载之前,不过这会导致Apollo的启动过程无法通过日志的方式输出(因为执行Apollo加载的时候,日志系统压根没有准备好呢!所以在Apollo代码中使用Slf4j的日志输出便没有任何内容)。

难怪我一直看不到日志信息,我感觉离解决问题不远了。

我将参数设为 false,果然,启动时看到了apollo的日志:

2022-03-31 18:57:01 [main] INFO  com.ctrip.framework.foundation.internals.provider.DefaultServerProvider -Loading /opt/settings/server.properties
2022-03-31 18:57:01 [main] INFO  com.ctrip.framework.foundation.internals.provider.DefaultServerProvider -Environment is set to [Local] by property 'env' in server.properties.
2022-03-31 18:57:01 [main] WARN  com.ctrip.framework.apollo.spi.DefaultConfigFactory -==== Apollo is in local mode! Won't pull configs from remote server for namespace application ! ====
2022-03-31 18:57:01 [main] WARN  com.ctrip.framework.apollo.spi.DefaultConfigFactory -==== Apollo is in local mode! Won't pull configs from remote server for namespace middleware ! ====

人家做得很到位,还强调了2遍:Apollo is in local mode! Won't pull configs from remote server for namespace application.

就是 /opt/settings/server.properties这个配置文件导致的:

# cat /opt/settings/server.properties
env=Local

看到这里我就无语了,这是线上环境,居然有人改成这样???

我将该配置删掉,得到正常的日志:

com.ctrip.framework.foundation.internals.provider.DefaultServerProvider 
-Environment is set to null. Because it is not available in either 
(1) JVM system property 'env', (2) OS env variable 'ENV' nor (3) property 'env' from the properties InputStream.

总结

本次排查花了较长时间,因为对apollo配置不太熟悉,没有一开始就想到 apollo.bootstrap.eagerLoad.enabled 这个参数。
排查问题最简单快捷的方式是看错误日志,如果没有日志,要反思为什么没有日志?

以上是关于无法拉取apollo配置的可能原因的主要内容,如果未能解决你的问题,请参考以下文章

Podman build 命令无法拉取镜像

Android 模拟器:无法拉取选择

Kubernetes:无法拉取图像

Elastic Beanstalk Docker 映像无法拉取

Clappr 似乎无法拉取视频(使用 rtmp/nginx)

解决Jenkins maven SNAPSHOT相关jar无法拉取问题