Skywalking

一·OpenTracing(分布式调用链标准)

1.1OpenTracing

OpenTracing通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现。OpenTracing提供了用于运营支撑系统的和针对特定平台的辅助程序库。程序库的具体信息请参考详细的规范。

1.2 Trace

在广义上,一个trace代表了一个事务或者流程在(分布式)系统中的执行过程。在OpenTracing标准中,trace是多个span组成的一个有向无环(DAG),每一个span代表trace中被命名并计时的连续性的执行片段。

分布式追踪中的每个组件都包含自己的一个或者多个span。例如,在一个常规的RPC调用过程中,OpenTracing推荐在RPC的客户端和服务端,至少各有一个span,用于记录RPC调用的客户端和服务端信息。

Skywalking_docker


例如途中,一个请求通过负载均衡组件访问到授权中心,再从授权中心回到负载均衡,最后返回至请求端的过程,我们可以叫做一个span,而这所有的span都是组成了一个trace

一个父级的span会显示的并行或者串行启动多个子span。在OpenTracing标准中,甚至允许一个子span有个多父span(例如:并行写入的缓存,可能通过一次刷新操作写入动作)。

1.3常用的分布式链路追踪组件

  1. 阿里巴巴鹰眼(EagleEye)
  2. 美团CAT
  3. 京东Hydra
  4. Twittrer Zipkin
  5. Apache SkyWalking

二使用docker部署Skywalking

我们需要拉取三个容器,Elasticesearch,Skywalking-UI,Skywalking-Oap。

Elasticesearch是一种数据库,将Skywalking-Oap的记录日志可以进行一个持久化的仓储。目前主流使用的是Elasticesarch,我们还可以使用Mysql数据库,但是需要注意的是,拉取镜像时,需要注意拉取的版本要和数据库类型一直,本次采用的是Elasticesearch。

我们使用的Elasticesearch的docker命令是:

Skywalking_docker_02



(注意冒号后面的当前拉取的镜像版本号)

当拉取完成后,我们需要生成对应的容器:

Skywalking_分布式链路追踪_03


命令解释

  1. -p:指定当前的端口,9200端口是用于我们正常使用的端口,9300用于内部节点之间的通信
  2. -name:指定容器的名称
  3. -e ES_JAVA_OPTS:是分配具体的初始内存大小和最大内存分配,如果不配置这个信息,会出现内存分配不足或者过度分配内存的情况,会造成数据库的使用性能
  4. elasticsearch:7.16.3:指定的版本号

Skywalking_docker_04


在docker中点击这个链接,如果能正常出现下面页面,就代表你的数据库安装正常


Skywalking_分布式链路追踪_05


配置后数据库后,我们需要拉取以及生成skywalking-oap容器,skywalking-oap是skywalking的后台程序。

docker拉取指令:

Skywalking_分布式链路追踪_06


docker镜像指令:

Skywalking_分布式链路追踪_07


注意IP地址需要填写自己的ip地址

Skywalking_分布式链路追踪_08


当你在docker容器找到类似这一行信息提示后,就代表你的oap安装成功

skywalking-Ui的安装

skywalking-Ui是skywalking的前端界面,需要先拉取版本号为8.9.1的skywalking-Ui

docker命令:

Skywalking_分布式链路追踪_09


docker容器生成命令:

Skywalking_docker_10


安装结束后,打开localhost:8080,出现已下界面为安装正确

Skywalking_docker_11


以上就是skywalking的安装过程

3.1实现与skywalking通讯与简单测试

我们需要在项目中安装nuget包--SkyAPM.Agent.AspNetCore,选择最新的安装包即可

Skywalking_docker_12


两种配置文件注入方式

  • Properties文件夹下的LaunchSettings.json文件中进行相关配置修改

Skywalking_docker_13


在profiles中找到envirnmentVariables属性,加入以下两个参数配置

Skywalking_docker_14


  • 在program中进行环境参数配置

与LaunchSetting.json配置参数一致,一个放入安装的skywalking的nuget包,和当前程序集在skywalking的名称

Skywalking_分布式链路追踪_15


Skywalking_docker_16


我们需要安装一个插件来自动进行skywalking参数配置,在项目文件夹中输入cmd,打开命令提示符。输入

Skywalking_分布式链路追踪_17


Skywalking_分布式链路追踪_18


由于我们的环境变量未能加入默认的tool,需要我们手动添加,点击此电脑右键点击属性,进入后点击高级系统设置

Skywalking_分布式链路追踪_19


Skywalking_docker_20


进入后,点击上方的path(路径),进入编辑界面,点击新建加入C:\Users\caosh\.dotnet\tools,再点击确定,这时候我们的环境变量配置结束,我们就可以返回项目文件夹,继续使用命令提示符,输入cmd命令

Skywalking_docker_21


其中service name是你的定义在skywalking的名称,server则是你的ip地址,不要使用localhost,回车后会在你的文件夹根目录生成一个skywalking.json文件

Skywalking_分布式链路追踪_22

点击进去,可以检查和修改你的连接服务地址,注意有些人会在安装skywalking-oap时候修改端口号地址,这个服务是skywalking-oap的连接地址,需要一致,如果你修改过端口号,需要将12800改为你修改后的端口号

Skywalking_分布式链路追踪_23


Skywalking_分布式链路追踪_24


以上是基础的参数配置

接下来进行项目中实践操作,首先我们可以进行一个简单的访问,建立一个控制器,在里面写一个进行get请求的访问

Skywalking_docker_25


这时候打开 http://10.31.60.9:8080/地址,注意更换为自己的Ip地址

Skywalking_docker_26


点击进入追踪界面,等待刷新数据的出现,当点击服务中,出现除了All以外自己的项目设置名称时,说明与skywalking通讯成功且配置没有问题

Skywalking_docker_27


3.2 实现在skywalking保存日志的操作

在控制器中构造注入IEntrySegmentContextAccessor

Skywalking_docker_28


在program注入配置Skywalking的配置,builder.Services.AddSkyApmExtensions()

Skywalking_分布式链路追踪_29


在控制器写入一个获取链路追踪日志的方法

Skywalking_分布式链路追踪_30

当然这里面的信息可以根据自己的需求进行配置,大家有兴趣可以自己多去研究一下

Skywalking_分布式链路追踪_31


四· .net6实现多服务链路追踪

其实多服务追踪与单服务实现的方式一样,只是会需要使用httpclient请求不同服务之间的服务,接下来是一个httpclient服务调用的实例代码

Skywalking_分布式链路追踪_32


这里建议大家把服务用IIs发布,再使用kong网关进行调用,以下是一个实例代码

服务A

Skywalking_docker_33


服务B

Skywalking_docker_34


刚才因为我没有开kong的服务,就出现如下报错

Skywalking_分布式链路追踪_35


在skywalking就出现相关日志,当然,我们可以配置相关的告警API以及出现程序异常时,通过各类通讯方式通知


Skywalking_docker_36


当打开kong网关后,我们再次检查skywalking的状态

Skywalking_分布式链路追踪_37


就实现了skywalking进行多链路追踪

五·配置告警信息

当我们程序中出现异常时,skywalking也可以随时追踪,并且会发送各类告警信息通知,我这次是使用邮件进行一个告警信息的发送

5.1 后台程序修改

在程序中,创建一个Alarmsg的类,有以下字段

Skywalking_分布式链路追踪_38


在控制器中创建一个告警信息的方法,注意要将参数设置为一个集合,如果有多个错误信息时,可以同时处理

Skywalking_docker_39


注意查看一下program中要注入skywalking的相关配置

Skywalking_分布式链路追踪_40


接下来我们需要对skywalking-oap容器内文件进行修改,让我们的告警api,使用win键+R键,输入cmd,进入命令指示符(提示:docker中对应容器需要处于运行模式)。

在小黑框输入,查询当前运行的容器指令,并且找到我们对应的docker容器的id

Skywalking_分布式链路追踪_41


Skywalking_docker_42


我们需要对容器中配置文件进行修改,这时候推荐使用Vim编辑器,便于我们修改容器的具体配置文件,但缺点是需要重启容器,以及容器删除后,我们仍需要进行重新配置。接下来我们先进入容器配置文件的指令,先进入对应的文件夹中

进入编辑容器配置文件命令

Skywalking_分布式链路追踪_43



进入文件夹后,我们需要安装vim编辑器,便于我们之后的操作,在#号后面输入 apt-get update

Skywalking_分布式链路追踪_44


等待vim组件安装,当安装完成后,再输入 apt-get install vim,等待完成后,我们就可以正常使用vim编辑器进行文件编辑

在#后面输入ls -l 进行查看具体文件夹内容

Skywalking_分布式链路追踪_45


进入总文件夹后,选择我们需要修改的文件夹,报错配置文件在config中,在#后面 输入cd config,进入文件夹,输入ls -l 进行查看具体文件

Skywalking_分布式链路追踪_46


我们可以看到它的配置文件

Skywalking_分布式链路追踪_47


接下来使用vim命令进入编辑模式,点击键盘中insert健,有些同学的insert健与0重合,需要点击Num Lk。这时候我们需要提前将接入网关的api方法中的告警机制方法输入其中,回车进入下一行,输入自己配置的网关地址和相应方法名,再次点击insert健,退出编辑模式,输入:wp

保存并退出修改,再输入 exitt 重启指令

Skywalking_docker_48


这样我们就将告警Api接入到skywalking-oap