前言

什么是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环境变量自定义密码.

如果有错误的话,大概率是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

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

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

点一下对应的URL.

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

Topology Map

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

本期结束...

手把手教你搭APM之Skywalking搭建指南(支持Java/C#/Node.js)的更多相关文章

  1. 手把手教你搭饥荒专用服务器(三)—MOD及其他高级设置

    友情链接: 手把手教你搭饥荒专用服务器(一)-服务器准备工作 手把手教你搭饥荒专用服务器(二)-环境配置及基本使用 手把手教你搭饥荒专用服务器(三)-MOD及其他高级设置 手把手教你搭饥荒专用服务器( ...

  2. 《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)

    1.简介 CSS定位方式和xpath定位方式基本相同,只是CSS定位表达式有其自己的格式.CSS定位方式拥有比xpath定位速度快,且比CSS稳定的特性.下面详细介绍CSS定位方式的使用方法.xpat ...

  3. 用Python手把手教你搭一个Transformer!

    来源商业新知网,原标题:百闻不如一码!手把手教你用Python搭一个Transformer 与基于RNN的方法相比,Transformer 不需要循环,主要是由Attention 机制组成,因而可以充 ...

  4. 1、手把手教React Native实战之环境搭建

    React Native 的宗旨是,学习一次,高效编写跨平台原生应用. 在Windows下搭建React Native Android开发环境 1.安装jdk 2.安装sdk    在墙的环境下,为了 ...

  5. Java、Node.js、PHP还是.Net? 无论你选谁,我都能教你一招!

    七夕如期而至,不该来的终究还是来了.再傲娇的单身贵族恐怕也难免在今天会感觉一丝丝的空虚.还好你关注了我,因为接下来我准备了三大招教你一个人…..也可以优雅地过七夕. 招式一:移形幻影,无中生有 七夕当 ...

  6. 手把手教你从购买vps到搭建一个node服务器

    要准备什么? 1.5刀 2.最好有FQ软件(可以用蓝灯) let's Go! 一.vps购买 vps可以选择digital ocean(do) 链接 ,由于是外国网站,响应比较慢,所以最好翻个墙. g ...

  7. 手把手教你 通过 NuGet.Server 包 搭建nuget服务器,并使用桌面工具上传 nuget 包,免命令行

    新建web项目 工具:VS2013 版本:.Net Framework 4.6,低版本也行,不过要找到对应版本的Nuget.Server 装了NuGet客户端(百度如何安装) WebForm或MVC都 ...

  8. 手把手教你搭饥荒专用服务器(五)—MOD自动下载安装(Windows+Linux)

    想了解更详细内容,请点击原文地址:https://wuter.cn/1985.html/ 饥荒专用服务器的mod设置总共有两种方法. 方法一 在本地游戏中更新mod,然后把mod上传到服务器,但是这种 ...

  9. 《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程)

    1.简介 前面几篇宏哥介绍了两种(java和maven)环境搭建和三大浏览器的启动方法,这篇文章宏哥将要介绍第一个自动化测试脚本.前边环境都搭建成功了,浏览器也驱动成功了,那么我们不着急学习其他内容, ...

随机推荐

  1. 从零自学Java-5.使用条件测试进行判断

    1.使用if语句进行最基本的条件测试:2.测试一个值大于还是小于另一个值:3.测试两个值是否相等:4.使用与if语句对应的else语句:5.组合多个条件测试:6.使用switch语句进行复杂的条件测试 ...

  2. Leetcode题解之Valid Palindrome II

    1.题目描述 2.问题分析 使用两个下标,检测下标对应的字符是否相等,若不相等,则考察子串. 3.代码 bool validPalindrome(string s) { , j = s.size()- ...

  3. (转)在.net中检索HTTP请求

    原文转载:https://www.west-wind.com/presentations/dotnetWebRequest/dotnetWebRequest.htm HTTP内容检索是应用程序的重要组 ...

  4. 转:C# 深入理解堆栈、堆在内存中的实现

    尽管在.NET framework下我们并不需要担心内存管理和垃圾回收(GarbageCollection),但是我们还是应该了解它们,以优化我们的应用程序.同时,还需要具备一些基础的内存管理工作机制 ...

  5. IP地址的分类——a,b,c 类是如何划分的【转】

    ip分类已经是耳熟能详了.但是说的都比较繁琐,这里简述一下,便于以后复习. IP地址,一共分成了5类,范围分别如下: A类IP:从0.0.0.0 – 127.255.255.255,共有1677721 ...

  6. Linux学习---linux下的彩蛋和各种有趣的命令

    [原文]https://www.toutiao.com/i6596596897392099844/ screenfetch 一个显示系统信息和主题信息的命令 使用方法 输入screenfetch 效果 ...

  7. windows安装Anaconda3

    目录 windows安装Anaconda3 环境 安装 windows安装Anaconda3 by 铁乐与猫 环境 windows7 64位 Anaconda3 5.2.0版本 windows64位 ...

  8. CGJ02、BD09、西安80、北京54、CGCS2000常用坐标系详解

    一.万能地图下载器中的常用坐标系 水经注万能地图下载器中的常用的坐标系主要包括WGS84经纬度投影.WGS84 Web 墨卡托投影.WGS84 UTM 投影.北京54高斯投影.西安80高斯投影.CGC ...

  9. Win8下IIS的安装和站点的公布

    版权声明:本文为博主原创文章,不经博主同意注明链接就可以转载. https://blog.csdn.net/Senior_lee/article/details/32939411         之前 ...

  10. Spring IOC 之 SmartInitializingSingleton

    使用 实现该接口后,当所有单例 bean 都初始化完成以后, 容器会回调该接口的方法 afterSingletonsInstantiated. 主要应用场合就是在所有单例 bean 创建完成之后,可以 ...