年轻人的第一个APM-Skywalking

## 前言

什么是APM?全称:Application Performance Management

可以参考这里:

现代APM体系,基本都是参考Google的Dapper(大规模分布式系统的跟踪系统)的体系来做的。通过跟踪请求的处理过程,来对应用系统在前后端处理、服务端调用的性能消耗进行跟踪,关于Dapper的介绍可以看这个链接:Dapper,大规模分布式系统的跟踪系统 by bigbully

作者:刀把五

链接:https://www.zhihu.com/question/27994350/answer/118821214

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最早使用APM还是在携程里面搬砖的时候,当时使用的是大宗点评网开源的dianping/cat框架.

后来到了新公司,因为历史包袱有点多,追踪性能问题太麻烦,用过收费的New Relic | Real-time insights for modern software ,newrelic按照CPU核数和内存来收费,实在太贵了我们就放弃了.

再后来我们调研一下市面的其他方案,看到了这个知乎讨论给了不少的东西.

有什么知名的开源apm(Application Performance Management)工具吗?

当时看到naver/pinpointapache/incubator-skywalking 都很不错.

一个是韩国搜索团队开源的,一个是国内个人用户开源,已经到了apache孵化器了.

于是两个都试用了一下, 最后由于那时候马上考虑上分表分库组件 sharding-jdbc-dangdang, skywalking也要对应的支持,所以决定用skywalking试试.

再后来又跑路了,不好意思给那边留下坑就没继续搭建看. 到了新公司PHP/Python/Java什么都写,开始两三个月也没管这个.

最近不是太忙了,新公司这边服务端API暂时被我带成了dotnet core技术栈,233...

同时发现当前用的EF框架偶尔会因为不小心就写出了性能很差的SQL,测试环境基本看不出来,到了生产可能就炸.

前阵子看到dalao 倾竹 把dotnet core agent写出来了, 于是爽歪歪就开始gang了.

## 开始搭建skywalking

github:incubator-skywalking

当前release版本为5.0RC2,最新版本6.X正在开发中.

所以当前我这里是基于5.0 RC2来搭建的.

官方向导方案在这里:incubator-skywalking/blob/5.x/docs/README.md

中文文档在这里:incubator-skywalking/blob/5.x/docs/README_ZH.md

我这里今天还是全程docker部署.

以下操作来自JaredTan95/skywalking-docker dalao准备的docker部署.

预备条件:

  • docker
  • elasticsearch

### 启动Elasticsearch

# Elasticsearch版本要求5.x

docker run -p 9200:9200 -p 9300:9300 -e cluster.name=elasticsearch -e xpack.security.enabled=false --name=elasticsearch --restart=always -d wutang/elasticsearch-shanghai-zone

启动好了访问一下 http://localhost:9200 看看,看到一下的内容说明ES已经正常启动了.

{

 "name": "\_PNUyiW",

 "cluster\_name": "elasticsearch",

 "cluster\_uuid": "",

 "version": {

 "number": "5.6.10",

 "build\_hash": "b727a60",

 "build\_date": "2018-06-06T15:48:34.860Z",

 "build\_snapshot": false,

 "lucene\_version": "6.6.1"

    },

 "tagline": "You Know, for Search"

}

接着使用 docker inspect elasticsearch |grep IPAddress 查看一下 elasticsearch 当前IP.

➜  ✗ docker inspect elasticsearch |grep IPAddress

            "SecondaryIPAddresses": null,

            "IPAddress": "",

                    "IPAddress": "172.27.0.2",

## 启动 Skywalking UI + Skywalking collector

dalao wutang的wutang/skywalking-docker已经把UI和collector打包到一个镜像里面了,完全可以独立安装.

所以我这里采用的也是这个方案.

docker run -p 8080:8080 -p 10800:10800 -p 11800:11800 -p 12800:12800 -e ES\_CLUSTER\_NAME=elasticsearch -e ES\_ADDRESSES=上一步拿到的elasticsearchIP:9300 -d wutang/skywalking-docker:5.x

启动好了之后打开 localhost:8080,如果UI页面没有500/404错误,说明整个系统已经正常启动了.

PS:默认账号密码是:admin admin,可以在docker run指定 UI_ADMIN_PASSWORD环境变量自定义密码.

UI

如果有错误的话,大概率是ES没有连上,检查一下ES是不是还活着,再不行就进到容器里面看日志.日志默认路径:/apache-skywalking-apm-incubating/logs

### Agent接入

当前已经有Java/C#(dotnet core)/Node.js的Agent了.

对应的话Java支持是最多的,其他两个我看下来基本就是主流比较多的一些框架都基本有了.

对应agent框架链接:

理论上应该遵循http://opentracing.io/ API标准的.

Java agent 主仓库就有,直接去看release即可.

今天我们肯定是用dotnet core 啦.

dotnet core当前支持的库和中间件有下面这些:

嗯,该有的都有了.

先引入一下SkyWalking.AspNetCore的Package.

dotnet add package SkyWalking.AspNetCore --version 0.3.0

酌情新增 SkyWalking.Diagnostics.EntityFrameworkCore, SkyWalking.Diagnostics.HttpClient, SkyWalking.Diagnostics.EntityFrameworkCore.Npgsql,SkyWalking.Diagnostics.EntityFrameworkCore.Pomelo.MySql 等等...

或者直接在xxx.csproj 新增下面这些包.

 <PackageReference Include="SkyWalking.AspNetCore" Version="0.3.0"/>

 <PackageReference Include="SkyWalking.Diagnostics.EntityFrameworkCore" Version="0.3.0"/>

 <PackageReference Include="SkyWalking.Diagnostics.HttpClient" Version="0.3.0"/>

 <PackageReference Include="SkyWalking.Diagnostics.EntityFrameworkCore.Npgsql" Version="0.3.0"/>

 <PackageReference Include="SkyWalking.Diagnostics.EntityFrameworkCore.Pomelo.MySql" Version="0.3.0"/>

然后在 Startup.cs的ConfigureServices 方法中添加引用

// using SkyWalking.AspNetCore;

// using SkyWalking.Diagnostics.EntityFrameworkCore;

// using SkyWalking.Diagnostics.HttpClient;

// using SkyWalking.Diagnostics.SqlClient;

 services.AddSkyWalking(option =>

            {

 option.ApplicationCode = "my-first-api";

 option.DirectServers = "127.0.0.1:11800";

 // 每三秒采样的Trace数量,-1 为全部采集

 option.SamplePer3Secs = -1;

            }).AddEntityFrameworkCore(c => { c.AddPomeloMysql(); })

            .AddHttpClient();

接着启动应用.

看到有类似的日志输入,说明已经应用已经正常连接到SkyWalking了.

info: SkyWalking.Remote.GrpcApplicationService[0]

      Register application instance success. [applicationInstanceId] = 31

SkyWalking.Remote.GrpcApplicationService:Information: Register application instance success. [applicationInstanceId] = 31

info: SkyWalking.Remote.GrpcApplicationService[0]

      Register application instance success. [applicationInstanceId] = 31

这时候我们打开http://localhost:8080/#/monitor/dashboard

2

可以看到APP已经有数量了.

接着我们访问一下已有的API/Web页面,就能看到对应的信息了.

3

点一下对应的URL.

4

http client请求(其实是查询ES):

5

Topology Map

234

其他的一些功能就看自己玩了.

本期结束...

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java进阶干货

Tomcat中用JNDI方式加载JDBC DataSource以连接数据库

下载与所要连接的数据库版本对应的JDBC驱动程序,加入到应用的CLASSPATH。如果用tomcat部署,tomcat中最好也加上(笔者觉得好像没必要加,可是不...

18120
来自专栏数据和云

122Architecture 全面解读 - 第一篇 全局解析+ADG+IM模块

Oracle自发布12.1之后,就一直声称要全面转云,在之后的三四年里,一直杳无音信,大家都在猜测,Oracle又在憋什么大招,果然,2017阳春三月,大招来了...

38990
来自专栏hotqin888的专栏

电子规范管理系统(2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

17710
来自专栏Hadoop实操

如何在CDH中安装和使用StreamSets

StreamSets由Informatica前首席产品官Girish Pancha和Cloudera前开发团队负责人Arvind Prabhakar于2014年...

8.1K110
来自专栏腾讯Bugly的专栏

Android 开发者必知必会的权限管理知识

导语 本文主要讲解了Android 权限管理方面几个点: Android 权限背景知识; 权限检查及权限兼容; 跳转到app管理权限页面 一、Android 权...

46260
来自专栏数据和云

DBA生存警示:防范频发的数据误删除操作

编辑手记:对于资深的老DBA们,他们在漫长的职业生涯中养成了很多稀奇古怪的守则,以在复杂多变的环境中“幸存”,这源于无数血泪的教训,我曾经在《数据安全警示录》...

391140
来自专栏ml

本本如何快速设置无线路由....,让其他人使用...

1、使用管理员身份运行CMD 2、使用命令netsh wlan set hostednetwork mode=allow ssid=建立的无线网名称最好是英文 ...

27050
来自专栏黑白安全

45种撸进后台的方法

2、到Google,搜索一些关键字,edit.asp? 韩国肉鸡为多,多数为MSSQL数据库! 

1.9K70
来自专栏FreeBuf

跨平台版中国菜刀Cknife发布

Burp已经成了绿帽子门必不可少的工具,相信大家都装有Java环境,本软件支持1.7+以及所有安装了环境的系统。1.6后续会考虑兼容。 一直都有想写一款真正...

73670
来自专栏FreeBuf

Python渗透测试工具都有哪些?

如果你热爱漏洞研究、逆向工程或者渗透测试,我强烈推荐你使用 Python 作为编程语言。它包含大量实用的库和工具,本文会列举其中部分精华。 网络 Scapy, ...

53580

扫码关注云+社区

领取腾讯云代金券