spring-cloud-tencent
spring-cloud-tencent copied to clipboard
Spring Cloud Tencent Config 链接的远程主机无法打开时未显示标注出错误
Describe the bug
官方给的 polaris 地址是这个
Console Address : http://14.116.241.63:8080/ Username: polaris Password: polaris Server Address: grpc://183.47.111.80:8091 The example addresses under spring-cloud-tencent-example all point to the experience service address (grpc://183.47.111.80:8091) by default. If you only experience Spring Cloud Tencent, you can run any example directly with one click.
官方提供的 polaris-config-example demo 的 bootstrap.yml
是这个
server:
port: 48084
spring:
application:
name: polaris-config-example
cloud:
polaris:
address: grpc://183.47.111.80:8091
namespace: default
config:
auto-refresh: true # auto refresh when config file changed
groups:
- name: ${spring.application.name} # group name
files: [ "config/application.properties", "config/bootstrap.yml" ] # config/application.properties takes precedence over config/bootstrap.yml
refresh-behavior: specific_bean
management:
endpoints:
web:
exposure:
include:
- polaris-config
我调整了 polaris 的 properties 文件的内容
server.port=11111
此时配置项是正常的.
问题1. 当我将地址从 grpc://183.47.111.80:8091
调整为 grpc://111.111.111.111:111
. 很明显 该 ip无法访问, 启动时应该提示报错.
然而应用启动时正常的, 启动日志是这样的
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.12.RELEASE)
2022-08-05 10:30:54.966 INFO 71390 --- [ main] c.t.c.p.c.a.PolarisConfigFileLocator : [SCT Config] Load and inject polaris config file. file = ConfigFile{namespace='default', fileGroup='polaris-config-example', fileName='application.properties'}
2022-08-05 10:31:06.971 INFO 71390 --- [ main] c.t.c.p.c.a.PolarisConfigFileLocator : [SCT Config] Load and inject polaris config file. file = ConfigFile{namespace='default', fileGroup='polaris-config-example', fileName='application.yml'}
2022-08-05 10:31:15.001 INFO 71390 --- [ main] c.t.c.p.c.a.PolarisConfigFileLocator : [SCT Config] Load and inject polaris config file. file = ConfigFile{namespace='default', fileGroup='polaris-config-example', fileName='bootstrap.properties'}
2022-08-05 10:31:26.010 INFO 71390 --- [ main] c.t.c.p.c.a.PolarisConfigFileLocator : [SCT Config] Load and inject polaris config file. file = ConfigFile{namespace='default', fileGroup='polaris-config-example', fileName='bootstrap.yml'}
2022-08-05 10:31:33.028 INFO 71390 --- [ main] c.t.c.p.c.a.PolarisConfigFileLocator : [SCT Config] Load and inject polaris config file success. namespace = default, group = polaris-config-example, fileName = config/application.properties
2022-08-05 10:31:43.110 INFO 71390 --- [ main] c.t.c.p.c.a.PolarisConfigFileLocator : [SCT Config] Load and inject polaris config file success. namespace = default, group = polaris-config-example, fileName = config/bootstrap.yml
2022-08-05 10:31:43.113 INFO 71390 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-default-polaris-config-example-application.properties'}, BootstrapPropertySource {name='bootstrapProperties-default-polaris-config-example-application.yml'}, BootstrapPropertySource {name='bootstrapProperties-default-polaris-config-example-bootstrap.properties'}, BootstrapPropertySource {name='bootstrapProperties-default-polaris-config-example-bootstrap.yml'}, BootstrapPropertySource {name='bootstrapProperties-default-polaris-config-example-config/application.properties'}, BootstrapPropertySource {name='bootstrapProperties-default-polaris-config-example-config/bootstrap.yml'}]
2022-08-05 10:31:43.117 INFO 71390 --- [ main] .c.p.c.e.PolarisConfigExampleApplication : No active profile set, falling back to default profiles: default
2022-08-05 10:31:43.363 WARN 71390 --- [ main] o.s.boot.actuate.endpoint.EndpointId : Endpoint ID 'polaris-metadata' contains invalid characters, please migrate to a valid format.
2022-08-05 10:31:43.368 WARN 71390 --- [ main] o.s.boot.actuate.endpoint.EndpointId : Endpoint ID 'polaris-config' contains invalid characters, please migrate to a valid format.
2022-08-05 10:31:43.533 INFO 71390 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=f48492e2-2530-3f9c-9c0b-791505a95396
2022-08-05 10:31:43.689 INFO 71390 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 48084 (http)
2022-08-05 10:31:43.695 INFO 71390 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2022-08-05 10:31:43.695 INFO 71390 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.46]
2022-08-05 10:31:43.758 INFO 71390 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2022-08-05 10:31:43.758 INFO 71390 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 633 ms
2022-08-05 10:31:43.973 INFO 71390 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2022-08-05 10:31:44.044 INFO 71390 --- [ main] c.t.c.c.metadata.StaticMetadataManager : [SCT] Loaded static metadata info. StaticMetadataManager{envMetadata={}, envTransitiveMetadata={}, configMetadata={}, configTransitiveMetadata={}, customSPIMetadata={}, customSPITransitiveMetadata={}, mergedStaticMetadata={}, mergedStaticTransitiveMetadata={}, zone='null', region='null', campus='null'}
2022-08-05 10:31:44.197 INFO 71390 --- [ main] c.t.c.p.c.s.a.SpringValueProcessor : Monitoring key: SPRING_UTIL_TIMEOUT_SEC, beanName: inetUtilsProperties, field: org.springframework.cloud.commons.util.InetUtilsProperties.timeoutSeconds
2022-08-05 10:31:44.197 INFO 71390 --- [ main] c.t.c.p.c.s.a.SpringValueProcessor : Monitoring key: spring.util.timeout.sec, beanName: inetUtilsProperties, field: org.springframework.cloud.commons.util.InetUtilsProperties.timeoutSeconds
2022-08-05 10:31:44.223 INFO 71390 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 1 endpoint(s) beneath base path '/actuator'
2022-08-05 10:31:44.275 INFO 71390 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 48084 (http) with context path ''
2022-08-05 10:31:44.283 INFO 71390 --- [ main] c.t.c.p.c.s.a.SpringValueProcessor : Monitoring key: timeout, beanName: scopedTarget.configController, field: com.tencent.cloud.polaris.config.example.ConfigController.timeout
2022-08-05 10:31:44.292 INFO 71390 --- [ main] .c.p.c.e.PolarisConfigExampleApplication : Started PolarisConfigExampleApplication in 69.658 seconds (JVM running for 70.227)
2022-08-05 10:31:44.576 INFO 71390 --- [(2)-10.45.18.74] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-08-05 10:31:44.576 INFO 71390 --- [(2)-10.45.18.74] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2022-08-05 10:31:44.580 INFO 71390 --- [(2)-10.45.18.74] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms
问题2. 当我将地址从 grpc://183.47.111.80:8091
调整为 grpc://183.47.111.80:1111
. 很明显该端口无法访问, 启动时应该提示报错.
然而应用启动时正常的, 并且正常加载了 grpc://183.47.111.80:8091
时的配置(server.port=11111) 启动日志是这样的
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.12.RELEASE)
2022-08-05 10:35:20.311 INFO 74896 --- [ main] c.t.c.p.c.a.PolarisConfigFileLocator : [SCT Config] Load and inject polaris config file. file = ConfigFile{namespace='default', fileGroup='polaris-config-example', fileName='application.properties'}
2022-08-05 10:35:20.389 INFO 74896 --- [ main] c.t.c.p.c.a.PolarisConfigFileLocator : [SCT Config] Load and inject polaris config file. file = ConfigFile{namespace='default', fileGroup='polaris-config-example', fileName='application.yml'}
2022-08-05 10:35:20.472 INFO 74896 --- [ main] c.t.c.p.c.a.PolarisConfigFileLocator : [SCT Config] Load and inject polaris config file. file = ConfigFile{namespace='default', fileGroup='polaris-config-example', fileName='bootstrap.properties'}
2022-08-05 10:35:20.549 INFO 74896 --- [ main] c.t.c.p.c.a.PolarisConfigFileLocator : [SCT Config] Load and inject polaris config file. file = ConfigFile{namespace='default', fileGroup='polaris-config-example', fileName='bootstrap.yml'}
2022-08-05 10:35:20.620 INFO 74896 --- [ main] c.t.c.p.c.a.PolarisConfigFileLocator : [SCT Config] Load and inject polaris config file success. namespace = default, group = polaris-config-example, fileName = config/application.properties
2022-08-05 10:35:20.684 INFO 74896 --- [ main] c.t.c.p.c.a.PolarisConfigFileLocator : [SCT Config] Load and inject polaris config file success. namespace = default, group = polaris-config-example, fileName = config/bootstrap.yml
2022-08-05 10:35:20.684 INFO 74896 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-default-polaris-config-example-application.properties'}, BootstrapPropertySource {name='bootstrapProperties-default-polaris-config-example-application.yml'}, BootstrapPropertySource {name='bootstrapProperties-default-polaris-config-example-bootstrap.properties'}, BootstrapPropertySource {name='bootstrapProperties-default-polaris-config-example-bootstrap.yml'}, BootstrapPropertySource {name='bootstrapProperties-default-polaris-config-example-config/application.properties'}, BootstrapPropertySource {name='bootstrapProperties-default-polaris-config-example-config/bootstrap.yml'}]
2022-08-05 10:35:20.688 INFO 74896 --- [ main] .c.p.c.e.PolarisConfigExampleApplication : No active profile set, falling back to default profiles: default
2022-08-05 10:35:20.951 WARN 74896 --- [ main] o.s.boot.actuate.endpoint.EndpointId : Endpoint ID 'polaris-metadata' contains invalid characters, please migrate to a valid format.
2022-08-05 10:35:20.957 WARN 74896 --- [ main] o.s.boot.actuate.endpoint.EndpointId : Endpoint ID 'polaris-config' contains invalid characters, please migrate to a valid format.
2022-08-05 10:35:21.116 INFO 74896 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=f48492e2-2530-3f9c-9c0b-791505a95396
2022-08-05 10:35:21.272 INFO 74896 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 11111 (http)
2022-08-05 10:35:21.277 INFO 74896 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2022-08-05 10:35:21.277 INFO 74896 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.46]
2022-08-05 10:35:21.337 INFO 74896 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2022-08-05 10:35:21.337 INFO 74896 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 639 ms
2022-08-05 10:35:21.552 INFO 74896 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2022-08-05 10:35:21.626 INFO 74896 --- [ main] c.t.c.c.metadata.StaticMetadataManager : [SCT] Loaded static metadata info. StaticMetadataManager{envMetadata={}, envTransitiveMetadata={}, configMetadata={}, configTransitiveMetadata={}, customSPIMetadata={}, customSPITransitiveMetadata={}, mergedStaticMetadata={}, mergedStaticTransitiveMetadata={}, zone='null', region='null', campus='null'}
2022-08-05 10:35:21.775 INFO 74896 --- [ main] c.t.c.p.c.s.a.SpringValueProcessor : Monitoring key: SPRING_UTIL_TIMEOUT_SEC, beanName: inetUtilsProperties, field: org.springframework.cloud.commons.util.InetUtilsProperties.timeoutSeconds
2022-08-05 10:35:21.775 INFO 74896 --- [ main] c.t.c.p.c.s.a.SpringValueProcessor : Monitoring key: spring.util.timeout.sec, beanName: inetUtilsProperties, field: org.springframework.cloud.commons.util.InetUtilsProperties.timeoutSeconds
2022-08-05 10:35:21.802 INFO 74896 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 1 endpoint(s) beneath base path '/actuator'
2022-08-05 10:35:21.857 INFO 74896 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 11111 (http) with context path ''
2022-08-05 10:35:21.862 INFO 74896 --- [ main] c.t.c.p.c.s.a.SpringValueProcessor : Monitoring key: timeout, beanName: scopedTarget.configController, field: com.tencent.cloud.polaris.config.example.ConfigController.timeout
2022-08-05 10:35:21.871 INFO 74896 --- [ main] .c.p.c.e.PolarisConfigExampleApplication : Started PolarisConfigExampleApplication in 3.046 seconds (JVM running for 3.619)
2022-08-05 10:35:22.072 INFO 74896 --- [(1)-10.45.18.74] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-08-05 10:35:22.072 INFO 74896 --- [(1)-10.45.18.74] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2022-08-05 10:35:22.077 INFO 74896 --- [(1)-10.45.18.74] o.s.web.servlet.DispatcherServlet : Completed initialization in 5 ms
To Reproduce 见描述
Expected behavior 当问题 1 和问题2 中的配置变更无法访问时, 应显著表示出错误日志表述出错误产生的原因, 而不是提供一个隐式的解决方法
Environment
- Version: [1.7.0-Hoxton.SR12 ]
- OS: [MACOS 11.0 ]
Additional context
@Jansora
Thank you for your feedback ;
According to the information you provided, the expected behavior is to do a health check on the configured remote address before the application is started, and if a problem is found with the remote address, the normal start of the application is directly blocked ?
@Jansora Thank you for your feedback ;
According to the information you provided, the expected behavior is to do a health check on the configured remote address before the application is started, and if a problem is found with the remote address, the normal start of the application is directly blocked ?
on a test machine, it is too common to have several instances on a machine.
when i have multi polaris instances in a linux machine, obviously, their listening port is different.
when a polaris instance is down. and my application has specified to connect the down polaris instance. but application has connected to other healthy instance.
this hidden result is not what I want.
@Jansora 可以在polaris/logs/polaris.log
内看到拉取配置的异常日志。原则上这里不阻塞主进程,不过可以考虑将北极星SDK的error或者warn级别的日志也打印在控制台?
![image](https://user-images.githubusercontent.com/24446200/183034335-895245b3-3637-4978-b0df-88c80c257783.png)
@Jansora 可以在
polaris/logs/polaris.log
内看到拉取配置的异常日志。原则上这里不阻塞主进程,不过可以考虑将北极星SDK的error或者warn级别的日志也打印在控制台?![]()
首先我认为这是个BUG, 因为实际应用启动链接到的 polaris 并不是我想要的, 我不确定这是 STC 或者 polaris sdk 导致的, 其次在配置项明显错误(链接到一个不存在的 polaris)的情况下应用依然启动成功了, 至于日志相关的问题, 我觉得在默认情况下, 至少 ERROR 级别的 polaris 日志应该是被打印出来的.
关于日志, 我站在用户的角度说下我的个人看法哈, 日志打的多点没关系, 我可以通过配置项来屏蔽掉, 如果日志打的少了, 尤其是缺失关键的 ERROR 日志时, 还是比较难定位哪里出现的问题
关于日志, 我站在用户的角度说下我的个人看法哈, 日志打的多点没关系, 我可以通过配置项来屏蔽掉, 如果日志打的少了, 尤其是缺失关键的 ERROR 日志时, 还是比较难定位哪里出现的问题
日志是打印了的,只是没有打印在控制台,北极星的日志目前只输出在文件内。
这里面有两个问题:
问题一:标准输出日志里没有打印 ERROR 日志,只打印到 polaris.log 日志文件里
这里我觉得可以把 ERROR 和 WARN 都默认打印到标准输出里。 INFO 级别的话,最早的时候也都是打印到标准输出里,然后有用户觉得北极星日志打印太多了,所以当时做了一个优化,就是把北极星日志打到独立的 polaris.log 里。
所以总结一下的话,就是可以优先把 ERROR 和 WARN 都默认打印到标准输出里。至于 INFO 日志,最好是让用户也可以配置。但是目前可能做不到,改动点比较多。
问题二:应用启动时,连不上配置中心,是不是应该阻塞应用启动
这个问题确实很关键。按我之前的经验,有些场景下,配置拉失败,应用起不来是最安全的。但是在某些紧急情况下,业务期望不强依赖配置中心,即使配置中心挂了,应用也可以启起来。
解决方案:
- 默认改成强依赖配置中心,应用启动时,当从配置中心获取不到配置时,启动失败,这种方式最保守。
- 也暴露一个开关,用户可以设置不强依赖。当配置拉取失败也可以启动成功。
以上两点,我们排期优化一下。感谢 @Jansora 的意见~