当前位置: 首页 > 后端技术 > Node.js

教你用APM搭建Skywalking(支持Java-C#-Node.js)

时间:2023-04-03 13:58:49 Node.js

教你用APM搭建Skywalking前言什么是APM?全称:ApplicationPerformanceManagement可以参考这里:ModernAPMsystem,基本上是指Google的Dapper(一个大型分布式系统的跟踪系统)的系统。通过跟踪请求的处理过程,应用系统可以跟踪前后端处理和服务器端调用的性能消耗。关于Dapper的介绍可以看这个链接:dapper,bigbully的大型分布式系统跟踪系统作者:刀五链接:https://www.zhihu.com/question/27994350/answer/118821214来源:知道版权属于作者。商业转载请联系作者授权,非商业转载请注明出处。最早使用APM是我在携程搬砖的时候。当时用的是大众点评开源的dianping/cat框架。后来又来了一家新公司,因为历史包袱有点大,跟踪性能问题太麻烦。我用了NewRelic|现代软件的实时洞察,newrelic是按照CPU核心数和内存数收费的,太贵了,我们放弃了。后来我们调查了市场上其他的解决方案,看到这个知乎上的讨论给了很多东西。有没有什么知名的开源apm(ApplicationPerformanceManagement)工具?当时看到naver/pinpoint和apache/incubator-skywalking都很好。一个是韩国搜索团队开源的,一个是国内个人用户开源的。考虑到表分库组件sharding-jdbc-dangdang,skywalking也需要相应的支持,所以决定使用skywalking来试试。然后我又跑了。不好意思在那里留了一个坑,没有继续建。到了新公司什么都用PHP/Python/Java写,刚开始的两三个月也没在意。最近没太忙,新公司的服务器API被我临时拉进了dotnet核心技术栈,233...同时发现现在的EF框架偶尔会写SQL,性能很差由于粗心大意,在测试环境中基本看不到,在生产中可能会爆炸。前段时间看到dalao青竹写了dotnetcoreagent,爽歪歪开始拉帮结派了。开始搭建skywalkinggithub:incubator-skywalking当前release版本为5.0RC2,最新版本6.X正在开发中。所以我目前正在基于5.0RC2构建它。官方精灵解决方案在这里:incubator-skywalking/blob/5.x/docs/README.md的中文文档在这里:incubator-skywalking/blob/5.x/docs/README_ZH.md我还是整个部署码头工人今天在这里。以下操作是从JaredTan95/skywalking-dockerdalao准备的docker部署。前提条件:dockerelasticsearch启动Elasticsearch#Elasticsearch版本需要5.xdockerrun-p9200:9200-p9300:9300-ecluster.name=elasticsearch-expack.security.enabled=false--name=elasticsearch--restart=always-dwutang/elasticsearch-上海专区启动。访问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":"YouKnow,forSearch"}然后使用dockerinspectelasticsearch|grepIPAddress查看当前elasticsearch的IP。??dockerinspectelasticsearch|grepIPAddress"SecondaryIPAddresses":null,"IPAddress":"","IPAddress":"172.27.0.2",启动SkywalkingUI+Skywalkingcollectordalaowutang的wutang/skywalking-docker已经将UI和collector打包成一面镜子,可以独立安装。所以我这里也是用这个方案dockerrun-p8080:8080-p10800:10800-p11800:11800-p12800:12800-eES_CLUSTER_NAME=elasticsearch-eES_ADDRESSES=elasticsearchIP上一步得到:9300-dwutang/skywalking-docker:5.x启动后打开localhost:8080,如果UI页面没有500/404错误,说明整个系统已经正常启动了。PS:默认账号密码为:adminadmin,可以在dockerrun中指定UI_ADMIN_PASSWORD环境变量自定义密码。如果有错误,大概率是ES没有连接上。On,查看ES是否还活着,如果没有,进入容器查看日志。日志的默认路径:/apache-skywalking-apm-incubating/logsAgent访问目前有Java/C#(dotnetcore)/Node.js对应的,Java支持最多,其他两个基本都是一些框架更主流。对应代理框架链接:dotnetcore:OpenSkywalking/skywalking-netcorenode.js:OpenSkywalking/skywalking-nodejs理论上应该遵循http://opentracing.io/API标准。Java代理主仓库都有,去发布就行了。今天我们必须使用dotnetcore。目前dotnetcore支持的库和中间件有以下几种:ASP.NETCore.NETCoreBCL类型(HttpClient和SqlClient)EntityFrameworkCoreNpgsql.EntityFrameworkCore.PostgreSQLPomelo.EntityFrameworkCore.MySqlCAP嗯,该有的都有。先介绍SkyWalking.AspNetCore的Package.dotnet添加包SkyWalking。AspNetCore--version0.3.0酌情添加SkyWalking.Diagnostics.EntityFrameworkCore,SkyWalking.Diagnostics.HttpClient,SkyWalking.Diagnostics.EntityFrameworkCore.Npgsql,SkyWalking.Diagnostics.EntityFrameworkCore.Pomelo.MySql等...或者直接在xxx.csproj新增下面这些包。然后在Startup.cs的ConfigureServices方法中添加引用//usingSkyWalking.AspNetCore;//usingSkyWalking.Diagnostics.EntityFrameworkCore;//usingSkyWalking.Diagnostics.HttpClient;//usingSkyWalking.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.]=31SkyWalking.Remote.GrpcApplicationService:Information:Registerapplicationinstancesuccess.[applicationInstanceId]=31info:SkyWalking.Remote.GrpcApplicationService[0]Registerapplicationinstancesuccess.[applicationInstanceId]=31现在我们打开http://localhost:8080/#/monitor/dashboard可以看到已经有一些APP了,然后我们访问已有的API/Web页面,可以看到相应的信息,点击相应的URLhttp客户端请求(其实是查询ES):Other拓扑图的功能由你来发挥。本期结束...