手把手教你搭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.xdocker 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环境变量自定义密码.

640?wx_fmt=jpeg

如果有错误的话,大概率是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] = 31SkyWalking.Remote.GrpcApplicationService:Information: Register application instance success. [applicationInstanceId] = 31info: SkyWalking.Remote.GrpcApplicationService[0]Register application instance success. [applicationInstanceId] = 31

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

640?wx_fmt=jpeg

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

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

640?wx_fmt=jpeg

点一下对应的URL.

640?wx_fmt=jpeg

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

640?wx_fmt=jpeg

Topology Map

640?wx_fmt=jpeg

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

相关文章:

  • .NetCore SkyWalking APM实现服务器监控环境安装及基础使用

  • Apache SkyWalking的架构设计【译文】

  • Apache SkyWalking 为.NET Core带来开箱即用的分布式追踪和应用性能监控

  • 利用Skywalking-netcore监控你的应用性能

原文地址: https://www.cnblogs.com/liguobao/p/9686310.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客练习赛 64——错排

A.怪盗-1412 111…1⏟⌊n2⌋444…4⏟m111…1⏟⌈n2⌉222…2⏟k\begin{matrix} \underbrace{ 111\dots\ 1} \\ \lfloor \frac{n}{2} \rfloor \end {matrix}\begin{matrix} \underbrace{ 444\dots\ 4} \\ m \end{matrix}\begin{matrix} \underbrace{ 111\dots\ 1} \\ \lceil \fra…

牛客网状压dp

状压dp 视频链接 &#xff08;如果想购买网课&#xff0c;可以用我的邀请码&#xff09; 用我的链接购买&#xff0c;我再反你10&#xff0c;一共花54多值 购买链接 不放心可以先加我好友2830872914 总试题链接 文章目录状压dp预备知识——位运算例题&#xff1a;引入&#x…

【线段树】海报(loj 3264)

正题 loj 3264 题目大意 有一个环&#xff0c;环上n个点&#xff0c;权值为a&#xff0c;有m次修改&#xff0c;每次修改一个aia_iai​&#xff0c;然后让你选取一些数&#xff0c;使环上不存在连续四个以上的数被选取&#xff0c;让你求所选数的最大权值和 解题思路 不难想…

P4338-[ZJOI2018]历史【LCT】

正题 题目链接:https://www.luogu.com.cn/problem/P4338 题目大意 给出nnn个点的一棵树&#xff0c;和每个点进行accessaccessaccess的次数aia_iai​&#xff0c;要求安排一个顺序使得虚实边转换最多。 mmm次修改一个点让aia_iai​加上www后求答案 n,m∈[1,4∗105],ai,w∈[1,…

小G有一个大树

来源&#xff1a;牛客网 &#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 小G想要把自己家院子里的橘子树搬到家门口&#xff08;QAQ。。就当小G是大力水手吧&…

.Net Core功能开关实战

为了快速发布开发完成的功能&#xff0c;企业通常会以比较快的迭代周期持续发布。但是由于某些 原因或场景&#xff0c;需要在发布的时候将某些功能隐藏起来或者小规模的开放&#xff08;例如只有某些特定用户可以使用、或者特定日期开放&#xff09;&#xff0c;通过使用功能开…

AtCoder Beginner Contest 179 总结

A - Plural Form 模拟签到题1 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<string> #include<iostream> #include<algorithm> using namespace std; const int N100010; int main() {IO;int T1;//cin…

纪中A组模拟赛总结(2021.7.19)

成绩 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3101010lyflyflyf175175175000757575100100100 前言&#xff1a;进前10啦&#xff01;&#xff01; 总结 T1看着推了一下&#xff0c;发现可以改变答案的解决顺序&#xff0c;然后在O(n)内求解&#xff0c;打完…

AT4505-[AGC029F]Construction of a tree【构造题,hall定理,网络流】

正题 题目链接:https://www.luogu.com.cn/problem/AT4505 题目大意 给出nnn个点和n−1n-1n−1个点集UiU_iUi​&#xff0c;每个点集中选择两个点连边使得该图是一棵树。求方案。 n∈[1,105],∑i1n−1∣Ui∣∈[1,2∗105]n\in[1,10^5],\sum_{i1}^{n-1} |U_i|\in[1,2*10^5]n∈[1…

学习究竟是为了什么?

今天无意中看到一句话&#xff0c;人如果停止了学习&#xff0c;就开始走向失败。这句话其实应该送给每一个面临30岁焦虑期的开发者&#xff0c;同时也应该成为每一个开发者内心的真实写照。 想问一下大家一个问题&#xff0c;多久没有学习新的知识呢&#xff1f;尤其…

Codeforces Round #671 (Div. 2)

当天晚上&#xff0c;本来想参加一下比赛&#xff0c;结果感觉静不下心来做题&#xff0c;而且最难受的是读个题都不明白&#xff0c;一直在理解题意。 A - Digit Game 分析不难发现&#xff1a; 如果nnn是奇数&#xff0c;那么最后留下的数字一定是奇数位上的数字&#xff0…

【网络流】人员雇佣(luogu 1791)

正题 luogu 1791 题目大意 有n个人&#xff0c;选择第i个人的代价是aia_iai​&#xff0c;如果i,j同时被选那么有贡献wi,jw_{i,j}wi,j​&#xff0c;如果i选了j没选那么有贡献−wi,j-w_{i,j}−wi,j​&#xff0c;问你最大贡献&#xff08;减去代价&#xff09; 解题思路 最大…

AT4144-[ARC098D]Donation【Kruskal重构树,dp】

正题 题目链接:https://www.luogu.com.cn/problem/AT4144 题目大意 nnn个点mmm条边的一张无向联通图&#xff0c;每个点有两个值ai,bia_i,b_iai​,bi​。表示经过该点时需要拥有aia_iai​元&#xff0c;该点需要捐献bib_ibi​元。 任意起点&#xff0c;询问开始时至少多少钱才…

Strategic game

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 10000K&#xff0c;其他语言20000K 64bit IO Format: %lld题目描述 Bob enjoys playing computer games, especially strategic games, but sometimes he c…

ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)

上个月15日&#xff0c;上海MVP做了一次线下的技术分享活动&#xff0c;我分享的主题是《快速构建容器化的ASP.NET Core应用程序》&#xff0c;有关这次活动的简报&#xff0c;可以参考这里。另外&#xff0c;我的主题分享的PPT也可以点击这里下载。由于线下活动时间紧迫&#…

牛客练习赛 63 F-牛牛的树行棋

F-牛牛的树行棋 大佬题解 对于每一个棋子来说&#xff0c;都是独立的&#xff0c;因此当前局面的 SG 值就是每一枚棋子的 SG 值的异或和。若一枚棋子的往子树内最多可以走 kkk 步&#xff0c;它的 SG 值为 kkk。然后就可以dfs求出整个局面的SG值。 仔细再思考一步&#xff1a…

【DP】小学生语文题(jzoj 5102)

正题 jzoj 5102 题目大意 给你两个串A,B&#xff0c;字母个数相等&#xff0c;可以把B的一个字符移到前面某个位置&#xff0c;问你最少移多少次可以使A,B相等 解题思路 设fi,jf_{i,j}fi,j​为A匹配了i-n&#xff0c;B用了j-n 1.当i,j匹配时fi,jfi1,j1f_{i,j}f_{i1,j1}fi,j…

AT3949-[AGC022D]Shopping【贪心】

正题 题目链接:https://www.luogu.com.cn/problem/AT3949 题目大意 长度为LLL的坐标轴上&#xff0c;给出nnn个点&#xff0c;每个点xix_ixi​需要购物tit_iti​的时间&#xff0c;一辆车在0∼L0\sim L0∼L折返跑&#xff0c;求从000出发购物完回到000的最短时间。 n∈[1,310…

现代软件工程的《构建之法》

要想了解世界&#xff0c;就必须亲自来打造它。—— 帕韦泽&#xff08;Cesare Pavese&#xff09;国庆假日期间&#xff0c;我重读了邹欣老师的《构建之法》一书。我从事软件行业相关工作超过15年&#xff0c;每每在被问到给在校计算机专业大学生的学习建议时&#xff0c;我都…

牛客练习赛 62

A.牛妹的游戏 Ramsey定理&#xff1a;人话解释任意六个人中要么至少三个人认识&#xff0c;要么至少三个不认识。 结论简要证明: 假设 666 个据点分别为 A,B,C,D,E,FA,B,C,D,E,FA,B,C,D,E,F那么在 A 连向其它据点的控制链中&#xff0c;必然至少有 333条链被同一方控制&#x…