年轻人的第一个APM之Skywalking
前言
什么是APM?全称:Application Performance Management
可以参考这里:
|
|
最早使用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
|
|
启动好了访问一下 http://localhost:9200 看看,看到一下的内容说明ES已经正常启动了.
|
|
接着使用 docker inspect elasticsearch |grep IPAddress 查看一下 elasticsearch 当前IP.
|
|
启动 Skywalking UI + Skywalking collector
dalao wutang的wutang/skywalking-docker已经把UI和collector打包到一个镜像里面了,完全可以独立安装.
所以我这里采用的也是这个方案.
|
|
启动好了之后打开 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.
|
|
酌情新增 SkyWalking.Diagnostics.EntityFrameworkCore, SkyWalking.Diagnostics.HttpClient, SkyWalking.Diagnostics.EntityFrameworkCore.Npgsql,SkyWalking.Diagnostics.EntityFrameworkCore.Pomelo.MySql 等等…
或者直接在xxx.csproj 新增下面这些包.
|
|
然后在 Startup.cs的ConfigureServices 方法中添加引用
|
|
接着启动应用.
看到有类似的日志输入,说明已经应用已经正常连接到SkyWalking了.
|
|
这时候我们打开http://localhost:8080/#/monitor/dashboard
可以看到APP已经有数量了.
接着我们访问一下已有的API/Web页面,就能看到对应的信息了.
点一下对应的URL.
http client请求(其实是查询ES):
Topology Map
其他的一些功能就看自己玩了.
本期结束…