在微服务框架Demo.MicroServer中添加SkyWalking+SkyApm-dotnet分布式链路追踪系统

1.APM工具的选取

Apm监测工具很多,这里选用网上比较火的一款Skywalking。

Skywalking是一个应用性能监控(APM)系统,Skywalking分为服务端Oap、管理界面UI、以及嵌入到程序中的探针Agent部分,大概工作流程就是在程序中添加探针采集各种数据发送给服务端保存,然后在UI界面可以看到收集过来的各种监测数据,来完成它的核心使命:性能监控和分布式调用链追踪能力。下图是skywalking官方的一个图,也可以说明这三者之间的关联关系

2.服务端(OAP)和界面(UI)的安装

这里直接在apache地址:http://skywalking.apache.org/downloads/ 下载了一个6.6.0版本的zip文件,由于之前在本地的windows上安装过,发现安装包里面有两个启动文件,分别为:startup.bat和startup.sh,分别用于window上启动和linux启动,这里我直接将之前下载好的上传到linux上来安装。

 

上传后解压缩,就会得到以下截图的几个文件

 

进入到config配置目录下面,有一个名称叫application.yml的文件

 

对这个配置文件进行编辑 vim application.yml

 

我们直接定位到数据存储部分,也就是节点storage,官方文档里面也有说明,为了方便快速入门,配置文件默认采用的是H2存储,但是推荐使用ElasticSearch存储,由于之前我安装过Exceptionless,在这台机器上已经安装过elasticsearch(如果没有安装过可以网上找下,有很多这方面的文章),所以我这里将H2部分注释掉,然后将elasticsearch部分放开,并修改红色方框里的两个配置文件:

1

2

nameSpace: ${SW_NAMESPACE:"exceptionless"}

clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9300}

需要注意的是:第一个SW_NAMESPACE需要与ElasticSearch配置的cluster_name名称一致

 

启动skywalking会占用四个端口:8080,10800,11800,12800,由于我本机安装过apollo,8080ui端口已经被占用,所以这里我必须要先修改UI界面使用的8080端口才能启动它。

开始修改UI界面使用的8080端口(如果你的8080端口并没有被占用,可以跳过,不用修改)

回到配置目录的上一级:cd ..

可以看到一个webapp的文件夹

 

进入这个目录:cd webapp/

然后对webapp.yml文件进行修改

 

这里我将原来server界面下面的port从8080改到8088,然后保存

 

配置文件修改完了,开始启动skywalking的服务端和UI界面,启动脚本放在目录:apache-skywalking-apm-bin/bin 里面

 

上面有说到startup.bat和startup.sh分别用在windows上和linux上启动,这里用./startup.sh

 

启动命令执行完成之后可以看到OAP和Web两个项目启动成功的提示,也就是我们说的服务端和UI界面。

验证一下,通过配置的ip+8088端口(如果没有修改则是默认的8080)来访问一下界面,如图:

至此,我们准备工作做完了,下面我们在程序中安装探针,来采集数据.

 

3.安装探针(Agent)采集数据

由于Skywalking本身是采用java编写的,所以SkyApm-dotnet这个项目就是专门为 .NET 开发的探针,目前支持 ASP.NET Core 以及 ASP.NET,下面我们将SkyApm-dotnet无侵入式的集成到.Net Core实现的微服务项目中

 

第一步:使用下面的命令来进行 Agent 的安装,这里据说需要以管理员身份运行

1

dotnet tool install -g SkyAPM.DotNet.CLI

 

第二步:添加环境变量,可以直接在launchSettings.json文件中添加以下代码来设置

1

2

3

4

5

"environmentVariables": {

        "ASPNETCORE_ENVIRONMENT": "Development",

        "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore",

        "SKYWALKING__SERVICENAME": "Demo.MicroServer.UserService"

      }

 

第三步:在程序中安装NuGet包:SkyAPM.Agent.AspNetCore

 

第四步:在应用程序根目录下使用以下命令生成skyapm.json的配置文件,[service name]替换为服务的名称,[server]替换为Skywalking安装的计器ip

1

dotnet skyapm config [service name] [server]:11800

执行完成之后可以看到目录下面已经生成了一个skyapm.json的文件,将其属性复制到输出目录设置为如果较新则复制,我这里是用之前发布在github上的微服务框架中的一个实例来测试的,所有代码均已上传,需要的可以通过页面又上角Github地址获取代码

 

4.采集数据并查看

在Swagger中随便调用几个接口来测试数据的采集情况,然后到UI界面查看数据,流程顺利的话,可以看到数据已经都有采集到

 

基本工作都已经完成,这个里面还有很多玩法,快动手试试吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机组成原理期末复习题

地址总线A15~Ao(低),存储空间(按字节编址)分配如下 2000H~3FFFH为ROM区, 5000H~6FFFH为RAM区。用 ROM芯片(4Kx4)和RAM芯片(4Kx4)组成该存储器。请回答 :(1)分别需要ROM和RAM多少片? (2)用二进制形式写出每组芯片的地址范围,并说明可以通过哪些地址位来形成片选信号…

干货分享:如何使用Kubernetes的Ingress API

导语以Kubernetes的Kong为例,聊聊当前流行的开源且与云无关的Ingress控制器。正文您可以通过使用诸如Kong for Kubernetes的Ingress控制器(使用自定义资源定义并提供许多插件)来极大地扩展Ingress资源的功能。Kubernetes正在整个技术行业中得…

计算机组成原理期末复习往年卷子

1. I/O设备的编址方式通常有___统一编址__和_独立编址__两种方式。P145 2.Cache是一种高速缓冲存储器,是为了解决____CPU____和___主存____之间速度不匹配而采用的一项重要技术。P124 3.在计算机系统中,I/O设备与主机传递消息的…

.NET Core接入ElasticSearch 7.5

写在前面最近一段时间,团队在升级ElasticSearch(以下简称ES),从ES 2.2升级到ES 7.5。也是这段时间,我从零开始,逐步的了解了ES,中间也踩了不少坑,所以特地梳理和总结一下相关的技术点…

[C++11]字符串原始字面量

代码如下: #include <iostream> #include <string> using namespace std;int main() {string str1 R"(D:\hello\world\test.txt)";cout << str1 << endl;string str2 R"(dsdasasdasasda asdagdfhadagd)";cout << str2 &l…

ASP.NET Core on K8s学习之旅(13)Ocelot API网关接入

【云原生】| 作者/Edison Zhou这是恰童鞋骚年的第232篇原创文章上一篇介绍了Ingress的基本概念和Nginx Ingress的基本配置和使用&#xff0c;考虑到很多团队都在使用Ocelot作为API网关&#xff08;包括我司&#xff09;做了很多限流和鉴权的工作&#xff0c;因此本篇介绍一下如…

数据结构期末复习

1.完全二叉树的第5层有9个节点&#xff0c;该完全二叉树总计有多少个节点( B ). A.41 B.24 C.40 D.25 2.具有21个顶点的无向图至少有多少条边才能形成连通图 ( B ). A.21 B.20 C.22 D.21…

C++实现拓扑排序(vector模拟邻接表存储,优先队列实现)

代码如下: #include <iostream> #include <queue> #include <vector> using namespace std; const int N 10010; int in[N]; vector<int>v[N]; vector<int>print;//存放拓扑序列 int main() {int n, m;//n为点的个数&#xff0c;m为边的条数,点…

ASP.NET Core分布式项目实战(运行Consent Page)--学习笔记

任务21&#xff1a;运行Consent Page修改 Config.cs 中的 RequireConsent 为 true&#xff0c;这样登录的时候就会跳转到 Consent 页面修改 ConsentController 的 Index 为异步[HttpGet] public async Task<IActionResult> Index(string returnUrl) {var model await Bu…

[C++11]指针空值类型nullptr

代码如下: #include <iostream> using namespace std;void func(char *p) {cout << "void func(char *p)" << endl; }void func(int p) {cout << "void func(int p)" << endl; }int main() {func(10);func(NULL);return 0;…

[C++11]常量表达式函数

constexpr修饰函数。 普通函数/类成员函数。 1.函数必须要有返回值&#xff0c;并且return返回的表达式必须是常量表达式。 代码如下: #include <iostream> using namespace std;//error 不是常量表达式函数 constexpr void func1() {int a 200;cout << a &l…

Magicodes.IE Csv导入导出

说明本章主要说明如何使用Magicodes.IE.Csv进行Csv导入导出.主要步骤1.安装包Magicodes.IE.CsvInstall-Package Magicodes.IE.Csv2.使用Magicodes.IE.Csv导出Csv通过如下代码片段我们将导出的内容通过相应的特性做出相应的处理.ExporterHeaderAttributeDisplayName&#xff1a;…

微软 Build 2020开发者大会发来一张英雄帖,邀您速来赴约!

&#xff08;本文阅读时间&#xff1a;2 分钟&#xff09;微软 Build 2020开发者大会将于北京时间5 月 19 日晚上 23:00正式开启。大会将以Teams Live Event的形式面向全球开发者免费注册&#xff0c;并增设中文专家面对面&技术专场&#xff0c;方便开发者从48小时的连续技…

[最全操作指南] 在线六个项目全部迁移Linux

&#xff08;书山有路勤为径&#xff0c;学海无涯苦作舟&#xff09;开源也两年了&#xff0c;没想到自己在宣传.NetCore全栈的时候&#xff0c;也慢慢的做出了几个产品&#xff0c;毕竟也是一行一行的敲出来的&#xff0c;也是一天一夜的改出来的&#xff0c;希望每个人都能在…

[C++11]推荐使用auto的场景

推荐使用auto的场景&#xff1a; 1.用于STL的容器遍历。 代码如下: #include <string>#include <iostream> #include <map> using namespace std;int main() {map<int, string>mp;mp.insert(make_pair(1, "Tom"));mp.insert(make_pair(2,…

【壹刊】Azure AD 保护的 ASP.NET Core Web API (下)

一&#xff0c;引言上一节讲到如何在我们的项目中集成Azure AD 保护我们的API资源&#xff0c;以及在项目中集成Swagger&#xff0c;并且如何把Swagger作为一个客户端进行认证和授权去访问我们的WebApi资源的&#xff1f;本节就接着讲如何在我们的项目中集成 Azure AD 保护我们…

linux aspnet服务器,在Linux中安装ASPNET.Core3.0运行时的示例代码

摘要&#xff1a;# 以下示例适用于x64位runtime v3.0.0mkdir /runtimescd /runtimeswget https://... # 以下示例适用于x64位runtime v3.0.0mkdir /runtimescd /runtimeswget https://download.visualstudio.microsoft.com/download/pr/b0c44e05-b7a1-4221-94ec-a0c0d3a11eed/a…

And Then There Was One POJ - 3517(变形约瑟夫环+规律)

题意&#xff1a; 约瑟夫问题的变式。先指定第m个人必须死&#xff0c;然后每隔k个人死一个。求最后那个死的人的编号是什么。 题目 Let’s play a stone removing game. Initially, n stones are arranged on a circle and numbered 1, …, n clockwise (Figure 1). You a…

明明可以靠技术吃饭,现在却非要出来当编剧!

这是头哥侃码的第199篇原创前不久&#xff0c;有位读者深夜时在后台留言说&#xff1a;“我在某技术大会现场听过你的分享。”“说实话&#xff0c;第一次见你&#xff0c;真的很难想象一幅猛男外表的人竟然会有这样的经历和谈吐&#xff0c;这两点让我很钦佩。”这还不算完&am…

linux不能更改密码,Linux服务器无法更改密码的解决办法--passwd: User not known

上面仅是告知我&#xff0c;这些帐号并没有家目录&#xff0c;由于那些帐号绝大部分都是系统帐号&#xff0c; 确实也不需要家目录的&#xff0c;所以&#xff0c;那是‘正常的错误&#xff01;’,相对应的群组检查可以使用 grpck 这个指令。pwck 确保系统鉴认信息的完整性,pwc…