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天时间,环境变量害死人

  • 相关阅读:
    LOJ#2245 魔法森林
    洛谷P1173 [NOI2016]网格
    [NOI2018]归程
    宇宙旅行
    hdu 4027 Can you answer these queries?(线段树)
    poj 1661 Help Jimmy(记忆化搜索)
    hdu 1078 FatMouse and Cheese(简单记忆化搜索)
    poj 3616 Milking Time (基础dp)
    hdu 1074 Doing Homework(状压dp)
    codeforces 735C. Tennis Championship(贪心)
  • 原文地址:https://www.cnblogs.com/jianghaidong/p/14250715.html
Copyright © 2011-2022 走看看