ApplicationInsights迁移国内躺的坑

由于之前有段时间访问国际版的Application Insights实在是慢,而且又不是每个人都有梯子,然后国内版大概在去年(2019)六七月左右已经上线,想着也有一段时日了,要么就迁了吧。


然后实际证明,我们可能是第一批成规模的去躺坑的用户。


先说说可以按照官方的套路找到迁移的法子。

首先由于众所周知的问题国际版Azure是微软自己运营的,而国内版因为相关法律法规所以是国内的合作伙伴世纪互联运行的。

原则上是微软提供技术支持给世纪互联,由世纪互联来做实施。

两者数据上并不互通,各种服务之间虽然技术底层基本一致但是却不能互通,而很多SDK默认都是针对国际版进行开发的,所以如果要用国内版一般都要重新配置。

最典型的配置就是修改SDK里默认的终结点,因为一般SDK里的终结点默认都是国际版的。


终结点配置

AppInsights的终结点修改方法可以参考官方文档 https://docs.microsoft.com/zh-cn/azure/azure-monitor/app/custom-endpoints?tabs=net 

但是新版本的SDK有个更简便的方法,现在你打开一个AppInsights的资源,可以发下它有一个连接字符串这么个东西,用国际版的可能不会在意这是什么,因为都是那个Key

image

国际版的连接字符串


但是你看国内版的时候,发现连接字符串里就已经包含了终结点信息,所以只要用连接字符串来进行SDK的初始化就无需在额外配置终结点了 

image

国内版的连接字符串,和国际版相比多了EndpointSuffix


对于我自己来说,使用国际版的时候由于常规都是使用InstrumentationKey检测密钥即可,只有用到国内版的时候才会连接字符串。

而连接字符串有个规则,就是开头永远是InstrumentationKey,于是乎我代码里这么处理,便于处理从国际版迁移到国内版

image

这样子如果我想迁移到国内版的话,从现有读取AppInsights的key的地方换成国内版连接字符串即可。

(注:连接字符串本质是个Key-Value集合,只是AppInsights那里显示的永远是InstrumentationKey作为开头,但是你把EndpointSuffix和InstrumentationKey换个位置也是能工作的)


但是这里有一个隐藏的坑。

如果你的项目是NetCore的话,恭喜你,直接用连接字符串之后all well done

但是如果你是Net Framework的话,你配置连接字符串后常规的AppInsights服务是可以的,但是实时指标流是无法工作的,如果要用实时指标流,还是老老实实参考上面贴的官方那个文档,更换实时指标流对应的终结点信息 


发布标记 Release Annotation

我们是使用TFS来进行CI/CD的,然后使用了 Release Annotation 在每次发布后会在AppInsights里打个发布标记,便于知道什么时候发布了(发布前发布后的监控对比看起来就直观了)

然后迁移到国内后就boom了,默认这个插件打标只能打国际版上,你用了国内版的ApiKey和ApplicationId它会吐你一脸的404

然后心想,TFS的插件不就是js或者powershell什么的么,哥改还不成么,从build agent里拉下它的task任务来扒,惊讶发现其实它是支持Azure China的(但是它插件说明里却并没有说)

image

然后参照这里,在TFS发布定义里添加了对应变量 

image

后面发觉,好了,能成功把标记打上去了 

image

 


Grafana监控

我感觉grafana是个神奇的东西,首先它有2个模式可以看AppInsights的信息

基于Azure Monitor Details的模式也能看AppInsights而且可以配置一次数据源看所有的AppInsights资源,但是能看的信息比较粗,适合总览性查看

基于Application Insights Details的模式一个AppInsights资源就要加一个数据源,但是能看较为明细的数据


Azure Monitor Details写着是能支持Azure China,实际上看看就好,你直接用它是对接不上Azure China的,永远验证不通过


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjpyw.html