手把手教你搭APM之Skywalking搭建指南(支持Java/C#/Node.js)
前言
什么是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/pinpoint 和apache/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框架链接:
dotnet core: OpenSkywalking/skywalking-netcore
node.js:OpenSkywalking/skywalking-nodejs
理论上应该遵循http://opentracing.io/ API标准的.
Java agent 主仓库就有,直接去看release即可.
今天我们肯定是用dotnet core 啦.
dotnet core当前支持的库和中间件有下面这些:
- ASP.NET Core
- .NET Core BCL types (HttpClient and SqlClient)
- EntityFrameworkCore
- Npgsql.EntityFrameworkCore.PostgreSQL
- Pomelo.EntityFrameworkCore.MySql
- CAP
嗯,该有的都有了.
先引入一下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)的更多相关文章
- 手把手教你搭饥荒专用服务器(三)—MOD及其他高级设置
友情链接: 手把手教你搭饥荒专用服务器(一)-服务器准备工作 手把手教你搭饥荒专用服务器(二)-环境配置及基本使用 手把手教你搭饥荒专用服务器(三)-MOD及其他高级设置 手把手教你搭饥荒专用服务器( ...
- 《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)
1.简介 CSS定位方式和xpath定位方式基本相同,只是CSS定位表达式有其自己的格式.CSS定位方式拥有比xpath定位速度快,且比CSS稳定的特性.下面详细介绍CSS定位方式的使用方法.xpat ...
- 用Python手把手教你搭一个Transformer!
来源商业新知网,原标题:百闻不如一码!手把手教你用Python搭一个Transformer 与基于RNN的方法相比,Transformer 不需要循环,主要是由Attention 机制组成,因而可以充 ...
- 1、手把手教React Native实战之环境搭建
React Native 的宗旨是,学习一次,高效编写跨平台原生应用. 在Windows下搭建React Native Android开发环境 1.安装jdk 2.安装sdk 在墙的环境下,为了 ...
- Java、Node.js、PHP还是.Net? 无论你选谁,我都能教你一招!
七夕如期而至,不该来的终究还是来了.再傲娇的单身贵族恐怕也难免在今天会感觉一丝丝的空虚.还好你关注了我,因为接下来我准备了三大招教你一个人…..也可以优雅地过七夕. 招式一:移形幻影,无中生有 七夕当 ...
- 手把手教你从购买vps到搭建一个node服务器
要准备什么? 1.5刀 2.最好有FQ软件(可以用蓝灯) let's Go! 一.vps购买 vps可以选择digital ocean(do) 链接 ,由于是外国网站,响应比较慢,所以最好翻个墙. g ...
- 手把手教你 通过 NuGet.Server 包 搭建nuget服务器,并使用桌面工具上传 nuget 包,免命令行
新建web项目 工具:VS2013 版本:.Net Framework 4.6,低版本也行,不过要找到对应版本的Nuget.Server 装了NuGet客户端(百度如何安装) WebForm或MVC都 ...
- 手把手教你搭饥荒专用服务器(五)—MOD自动下载安装(Windows+Linux)
想了解更详细内容,请点击原文地址:https://wuter.cn/1985.html/ 饥荒专用服务器的mod设置总共有两种方法. 方法一 在本地游戏中更新mod,然后把mod上传到服务器,但是这种 ...
- 《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程)
1.简介 前面几篇宏哥介绍了两种(java和maven)环境搭建和三大浏览器的启动方法,这篇文章宏哥将要介绍第一个自动化测试脚本.前边环境都搭建成功了,浏览器也驱动成功了,那么我们不着急学习其他内容, ...
随机推荐
- 【Python】TypeError: a bytes-like object is required, not 'str'解决
对所使用的字符串类型调用encode()方法进行转换即可
- LeetCode题解之 Increasing Order Search Tree
1.题目描述 2/问题分析 利用中序遍历,然后重新构造树. 3.代码 TreeNode* increasingBST(TreeNode* root) { if (root == NULL) retur ...
- jquery中使用datepicker限制开始日期小于结束日期
这里是使用Jquery插件实现的,这段代码来自于网络.感觉很实用,就做笔记记录下来. 原文:http://blog.csdn.net/tianyacao8025/article/details/707 ...
- 《MySQL技术内幕:InnoDB存储引擎(第2版)》书摘
MySQL技术内幕:InnoDB存储引擎(第2版) 姜承尧 第1章 MySQL体系结构和存储引擎 >> 在上述例子中使用了mysqld_safe命令来启动数据库,当然启动MySQL实例的方 ...
- 学习笔记:Rick's RoTs -- Rules of Thumb for MySQL
Table of Contents SELECTs -- do's and don'tsINDEXingENGINE DifferencesOptimizations, and notPARTITIO ...
- 转:sql语句优化
性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化. 为了获得稳定的执行性能,SQL语句越简单越好.对复杂的SQL语句,要设 ...
- Java学习---面试基础知识点总结
Java中sleep和wait的区别 ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线 ...
- <数据结构与算法分析>读书笔记--实现泛型构件pre-Java5
面向对象的一个重要目标是对代码重用的支持.支持这个目标的一个重要的机制就是泛型机制:如果除去对象的基本类型外,实现的方法是相同的,那么我们就可以用泛型实现来描述这种基本的功能. 1.使用Object表 ...
- Android7.0调用系统相机拍照、读取系统相册照片+CropImageView剪裁照片
Android手机拍照.剪裁,并非那么简单 简书地址:[我的简书–T9的第三个三角] 前言 项目中,基本都有用户自定义头像或自定义背景的功能,实现方法一般都是调用系统相机–拍照,或者系统相册–选择照片 ...
- 由于没有公钥,无法验证下列签名: NO_PUBKEY 54422A4B98AB5139
gpg --keyserver pgpkeys.mit.edu --recv-key 54422A4B98AB5139 gpg -a --export 54422A4B98AB5139 | sudo ...