asp.net core拥抱Skywalking APM

前言

小伙伴们大家好,日常系统开发和维护中,大家都用什么观测自己的系统呢?起初项目不太复杂,zabbix日常监控足够使用,随着业务模块越来越多,zabbix这种仅仅针对服务器和服务级别的监控,就有点力不从心了,有些问题只能通过一堆堆的日志中去排查,后来上了ELK,日志搜集,排查变得容易了起来。但随着微服务架构越来越流行,系统的不断拆分,服务和服务之间的调用关系,性能如何,哪里出了问题等等诸如此类的问题,单纯的从日志分析,就又变得十分困难。这个时候,APM就该登场了。

那么啥是APM?

APM 全称是 (Application Performance Monitor)应用性能监测软件,主要是用来处理以及追踪分布式系统中的应用程序的性能问题,可以帮助开发人员快速找出问题的根源,从而提升应用程序性能。

那么啥又是Skywalking呢?

Skywalking 是一个APM系统,即应用性能监控系统,为微服务架构和云原生架构系统设计。它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,Skywalking APM会感知应用间关系和服务间关系,并进行相应的指标统计。

介绍完APM和Skywalking并且了解了他们之间的关系,下一步我们就要开始动手在linux上搭建Skywalking了。

搭建Skywalking

我们来看一下搭建它需要哪些环境要求:

  1. JDK 8+
  2. Elasticsearch 6.x
  3. 8080, 10800,11800,12800端口可用

安装JDK

网上安装JDK方法很多,这里我图省事,直接使用openjdk

yum install java-1.8.0-openjdk.x86_64

安装好后,使用java -version命令,就可以看一些信息了

下面我们还需要安装Elasticsearch,需要注意的是,新版本的Skywalking6.x已经可以支持ES7了,但是最低还是得使用6.x版本。

这里处于演示的目的,我直接在Docker上安装ES。

docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.8.7

这个过程可能会比较慢,安装好后,执行docker ps看看运行状态。

一切正常后,我们进入容器内部修改一下参数,我们需要修改config文件夹下的elasticsearch.yml文件。(注:ced4是我的container id号,需要替换成您自己的)

docker exec -it ced4 /bin/bash

vi elasticsearch.yml

进行如下的配置,主要是设置了一下集群名字和跨域的一些设置,这里集群名字需要记录一下,一会还要用。

配置完成后,我们退出容器(exit 或者ctrl+d),重启一下容器

docker restart ced4

然后我们访问一下

curl http://localhost:9200

至此,ES环境算是准备好了,下一步我们开始安装配置Skywalking

安装和配置Skywalking

我们访问http://skywalking.apache.org/downloads/,看到下面这些列表,因为我们使用的ES6.x版本,所以我们安装框框所示的版本

点进去是这样的

我们复制框框中的链接,进入linux系统中,执行wget命令

wget https://mirror.bit.edu.cn/apache/skywalking/6.6.0/apache-skywalking-apm-6.6.0.tar.gzwget

下载完成后,我们解压。

tar -zxvf apache-skywalking-apm-6.6.0.tar.gz

我解压后,把文件拷到opt文件夹中了,这不是必须的也可以根据您的喜好操作。

我们看一下整体目录

我们进入config目录,修改application.yml这个配置文件,为了方便展示,我把配置拷出来了。

这只是配置的一部分这里需要你把所有host,从0.0.0.0变成您本机的ip地址,如果您不配置,或者配置诸如127.0.0.1,localhost后,外面是无法访问的。

ES这快namespace就是我们刚才设置的cluster name,别忘了配置。

到这,application.yml就配置完了。

然后我们进入webapp文件夹,修改webapp.yml配置

修改框框中的ip为本机的ip地址即可。这里千万别忘了配置,不然您打开skywalking会报500错误。

万事俱备,我们进入bin文件夹,执行startup.sh,它会分别启动 oapService 和 webappService。

如果不出意外,安装就已经完成了,我们访问页面看看(ip+8080端口)

如果没报什么500错误,那么恭喜你,skywalking安装完成了,如果控制台有各种500错误,您可能需要看看

  1. es是否正常启动
  2. es配置节是不是有错配漏配的情况
  3. host是否设置成本机的地址
  4. webapp是否配置上

下一步,我们就要开始让skywalking监控我们的http://asp.net core了。

http://asp.net core集成skywalking

我们新建一个http://asp.net core mvc/api项目,然后我们安装skywalking netcore的探针。

您可以把探针简单理解为负责监控您的应用程序,并把探测到的信息上报到APM服务端。

skywalking-netcore是专门为.NET开发的探针,目前支持asp.net core和asp.net,感兴趣的小伙伴可以GitHub上看看。

使用nuget先安装一下SkyAPM.Agent.AspNetCore

然后我们配置一下环境变量

ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCore
SKYWALKING__SERVICENAME=sample_app

您可以使用set命令,他的作用域是当前cmd窗口,这里我直接写到environmentVariables中了。(launchSettings.json)。如果仅仅出于演示和排查问题使用,我更推荐您使用set的方式,这样在问题或演示结束后,可以很容易关掉它,具体的请参考文档。

      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore",
        "SKYWALKING__SERVICENAME": "mvc_apm_test"
      }
啰嗦一句,SKYWALKING__SERVICENAME使用的是双下划线,它是一个层级键(Hierarchical keys)的作用,它和配置中的冒号是一个作用,因为在环境变量中,冒号分隔符可能无法在所有平台上都起作用。

环境配好了,我们下一步安装CLI(SkyAPM.DotNet.CLI),这个命令可能需要管理员权限。

dotnet tool install -g SkyAPM.DotNet.CLI

然后我们执行

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

server name指的就是您刚才配置的SKYWALKING__SERVICENAME,server指的是您Skywalking的ip地址。

执行命令后,会生成一个skywalking.json

因为该Agent采用的是无侵入的集成方式,我们没有除了配置environment外没有修改任何代码(如果使用set都不需要修改代码)所以,至此,所有的准备工作就已经完成。

执行一下

会生成log信息

没有出现异常,则证明一切ok,如果有异常,那么多半是grpc那出了问题,可能需要您telnet一下11800端口是否畅通,如果不畅通,是不是配置出现问题,或者您装了其他grpc的包导致了冲突,总之,慢慢排查,不要慌

这时候我们去Skywalking上看看,应该已经有数据了。如果服务端点有数据,其他都没有数据也没有图,多半是您日期和服务端不同步导致的,您可以看看您es和Skywalking的时区,您也可以尝试切换到utc时间或者,筛查一下时间范围是否正确,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值