zoukankan      html  css  js  c++  java
  • 记一次.net core3.1 接入 Skywalking的踩坑过程

    前言

    Skywalking是一款APM(Application Performance Management)的工具

    .net core 使用 SkyAPM.Agent.AspNetCore 接入Skywalking,Agent(探针)使用SkyAPM.DotNet.CLI

    开发环境:win10+vs2019+.net core3.1+(MVC项目+WebApi项目)

    测试环境:Centos+.net core3.1

    正文

    第一版

    1、先安装SkyAPM探针,dotnet tool install -g SkyAPM.DotNet.CLI

    2、配置环境变量,在项目中的launchSettings.json的environmentVariables节点下面添加如下

    "ASPNETCORE_ENVIRONMENT": "SkyAPM.Agent.AspNetCore",
    "SKYWALKING__SERVICENAME": "Your Service Name"

    3、根据Skywalking的版本添加SkyAPM.Agent.AspNetCore对应版本的包

    4、生成配置文件,dotnet skyapm config sample_app 192.168.0.1:11800,sample_app替换为你的项目名称,192.168.0.1:11800替换为你的skywalking地址

    注意:生成的配置文件应该在解决方案目录下,应该将只移动到对应的项目目录下,并设置其属性为 内容

    5、启动项目,查看skywalking ui,是否接收到,很遗憾我这边很顺利的接收到了

    6、发布项目到测试环境,启动成功,但是skyapm并没有生效,因为没有生成对应的日志

    到此第一版最终倒在了测试环境的怀里

    -------------------------------------分割线----------------------------------------

    问题:开发环境能正常运行,测试环境不能正常运行

    分析:①可能是Agent不兼容linux

       ②可能是发布导致的问题

       ③可能是环境变量的问题

       ④可能是Skywalking的版本和SkyAPM.Agent.AspNetCore的版本不匹配

    验证:①看了一下github项目简介,这个问题未能确定

       ②由于发布是通过svn+jinkens来实现的,所以直接上传发布的文件夹,然而还是不行,所以暂时排除该可能

       ③百度之后,发现环境变量的问题很大,因为launchSettings.json配置的环境变量ASPNETCORE_ENVIRONMENT的值为Development,只能开发环境生效,所以我通过两种                方案来进行验证,一是发布一个windows环境的,直接发布后再启动,发现也没有生成skyapm文件,说明环境变量可能有问题;二是给linux环境添加环境变量,经过一系列                  尝试后,发现添加环境变量后,竟然能行了,到此就实锤了,是环境变量的问题,为了再次验证,又在发布的windows版本中添加环境变量,也能行,真实锤了

       ④把SkyAPM.Agent.AspNetCore所有的包都一个一个试了一遍,然并卵,都不行

    -------------------------------------分割线----------------------------------------

    第二版

    确定为环境变量的问题了,现在是解决问题的时候了

    尝试百度给项目设置环境变量,https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments?view=aspnetcore-5.0,感觉继续往这方面研究可能会有结果

    本来测试环境可以直接使用export设置环境变量,简单粗暴,但是由于本项目是前后端分离的,有多个项目需要设置SKYWALKING__SERVICENAME,所以这个方案暂时搁置

    但是,后来无意间发现可以不用设置SKYWALKING__SERVICENAME环境变量,skywalking上收到的服务名称是根据skyapm.json中的配置来的

    哈哈,那问题基本就解决了,直接给环境变量配置 export ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCore就行了

    你以为这就完了?然而踩坑并没有结束

    在linux上直接通过dotnet命令执行是可以的,但是通过svn+jenkins的发布就不行,这是什么情况?

    遇到linux环境的问题,所以就只能去找运维谈谈心

    配置各个账户的环境变量,再各种尝试

    最终在我们的长时间尝试下,发现是sudo命令的问题,因为jenkins触发的脚步用了sudo,为什么sudo会导致这个问题

    结果一系列百度,发现sudo会默认重置安全的环境变量,那么就 Defaults    !env_reset,配置为不重置,虽然这样可能会有安全隐患

    到此sudo+dotnet命令能成功了

    我们再次测试发现,直接使用sh中的命令能行,但是svn+jenkins仍然不行,what?

    这次只能交给运维了,jenkins我不懂啊

    测试几次后,发现了问题,jenkins是通过远程命令执行的,远程命令那里还有一套环境变量,和root还不一样,再给远程命令那边设置环境变量,到此svn+jenkins成功

    总共花了3天时间,环境变量害死人

  • 相关阅读:
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 390 消除游戏
    Java实现 LeetCode 390 消除游戏
  • 原文地址:https://www.cnblogs.com/jianghaidong/p/14250715.html
Copyright © 2011-2022 走看看