架构师_程序员

查看: 100|回复: 0

[ASP.NET] ASP.NET Core 链路追踪(三)SkyAPM 基于 Consul 动态配置

[复制链接]
发表于 2020-11-11 16:13:50 | 显示全部楼层
回顾:

ASP.NET Core 链路追踪(一)安装 Skywalking 教程
https://www.itsvse.com/thread-9456-1-1.html

ASP.NET Core 链路追踪(二)使用 SkyAPM 集成
https://www.itsvse.com/thread-9458-1-1.html



项目中,可以使用 Consul 或者 Apollo 做配置中心,关于 Consul 作为 ASP.NET Core 配置中心的教程:

【架构篇】ASP.NET Core 基于 Consul 动态配置热更新
https://www.itsvse.com/thread-9421-1-1.html
需求:我们将 APM 的配置信息,存放到 Consul 中间件,不必登录到服务器取手动修改 appsettings.json 文件内的配置信息。

启动 Consul

首先使用如下命令,启动 consul 中间件:




ASP.NET Core 安装 Consul 相关插件

在我们 sky-apm-demo 项目中,使用 nuget 安装读取 Consul 中间件作为配置中心的插件,命令如下:

修改 Program 对象中的 CreateHostBuilder 方法,增加读取远程 Consul 配置信息,代码如下:

同时,在 appsettings.json 文件中,需要配置 consul_url 地址,如下:



在 consul 添加我们的配置信息,打开web版管理平台:http://127.0.0.1:8500/ui/dc1/kv/create,新建 sky-apm-demo/appsettings.Development.json key,value 如下:

QQ截图20201111152746.jpg

新建一个 test3 控制器方法,读取我们 consul 服务配置的信息,方便测试,如下:

访问 http://localhost:6360/Home/Test3 可以正常获取到我们设置的配置,如下:

QQ截图20201111153323.jpg

查看 skyapm-20201111.log 日志,会发现,SkyApm 访问 Skywalking 的地址,并不是我们配置的,而是,默认的:localhost:11800,如下图:

QQ截图20201111153634.jpg

2020-11-11 15:32:35.869 +08:00 [My_Service] [Information] SkyApm.Transport.Grpc.ConnectionManager : Shutdown connection[localhost:11800].
2020-11-11 15:32:45.875 +08:00 [My_Service] [Error] SkyApm.Transport.Grpc.ConnectionManager : Connect server timeout.
System.Threading.Tasks.TaskCanceledException: Reached deadline.
   at Grpc.Core.Channel.WaitForStateChangedAsync(ChannelState lastObservedState, Nullable`1 deadline)
   at Grpc.Core.Channel.ConnectAsync(Nullable`1 deadline)
   at SkyApm.Transport.Grpc.ConnectionManager.ConnectAsync()
我们在 GitHub 查看 SkyAPM.Agent.AspNetCore 源码,进行查看,会发现,如果,我们程序会先赋值默认设置,然后,再读取配置文件 appsettings.json skywalking.json skyapm.json 来覆盖之前的默认值,如下图:

QQ截图20201111154220.jpg

关于配置,加载流程如下:

QQ截图20201111155107.jpg

那 SkyAPM 是什么时候去和 Skywalking 建立通信的呢?



SkyAPM 源码有一个 InstrumentationHostedService 后台任务,当注册 IHostedService 时,.NET Core 会在应用程序启动和停止期间分别调用 IHostedService 类型的 StartAsync() 和 StopAsync() 方法

可以参考:

基于 .NET Core 在 Linux 下的服务
https://www.itsvse.com/thread-9447-1-1.html
现在的问题是,我们 consul 设置的配置信息,被 SkyAPM 的默认值覆盖了,要解决这个问题,需要修改源码了,我们在 GitHub 上面下载 SkyAPM 源码。

修改 ConfigurationFactory 文件如下:

修改 ConfigurationBuilderExtensions 文件,如下:

修改完的源码,可以参考我的分支:https://github.com/itsvse/SkyAPM-dotnet/tree/master/src/SkyApm.Utilities.Configuration

增加逻辑判断,当已经存在 SkyAPM 配置的时候,不使用默认值,重新生成 sky-apm-demo 和 SkyApm.Agent.AspNetCore 项目,将修改好的类库 \src\SkyApm.Agent.AspNetCore\bin\Debug\netcoreapp3.1 文件夹下面的所有文件,复制到我们的项目 \bin\Debug\netcoreapp3.1 中替换,刷新浏览器

通过查看 apm 日志,可以发现,已经成功读取 consul 里面的配置信息,并且成功和 Skywalking 建立通信,如下图:

QQ截图20201111160851.jpg


(完)




上一篇:.NET的MySQL连接器冲突DbProviderFactories(.NET MySQL连接器冲突DbP...
下一篇:.NET Core 显示显示已经注册的服务和实现及生命周期
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2020-11-27 07:27

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表