手把手教你搭APM之Skywalking搭建指南(支持Java/C#/Node.js)

手把手教你搭APM之Skywalking

前言

什麼是APM?全稱:Application Performance Managementnode

能夠參考這裏:git

現代APM體系,基本都是參考Google的Dapper(大規模分佈式系統的跟蹤系統)的體系來作的。經過跟蹤請求的處理過程,來對應用系統在先後端處理、服務端調用的性能消耗進行跟蹤,關於Dapper的介紹能夠看這個連接:Dapper,大規模分佈式系統的跟蹤系統 by bigbully

做者:刀把五
連接:https://www.zhihu.com/question/27994350/answer/118821214
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

最先使用APM仍是在攜程裏面搬磚的時候,當時使用的是大宗點評網開源的dianping/cat框架.github

後來到了新公司,由於歷史包袱有點多,追蹤性能問題太麻煩,用過收費的New Relic | Real-time insights for modern software ,newrelic按照CPU核數和內存來收費,實在太貴了咱們就放棄了.sql

再後來咱們調研一下市面的其餘方案,看到了這個知乎討論給了很多的東西.docker

有什麼知名的開源apm(Application Performance Management)工具嗎?apache

當時看到naver/pinpointapache/incubator-skywalking 都很不錯.json

一個是韓國搜索團隊開源的,一個是國內我的用戶開源,已經到了apache孵化器了.後端

因而兩個都試用了一下, 最後因爲那時候立刻考慮上分表分庫組件 sharding-jdbc-dangdang, skywalking也要對應的支持,因此決定用skywalking試試.api

再後來又跑路了,很差意思給那邊留下坑就沒繼續搭建看. 到了新公司PHP/Python/Java什麼都寫,開始兩三個月也沒管這個.app

最近不是太忙了,新公司這邊服務端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環境變量自定義密碼.

UI

若是有錯誤的話,大機率是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

2

能夠看到APP已經有數量了.

接着咱們訪問一下已有的API/Web頁面,就能看到對應的信息了.

3

點一下對應的URL.

4

http client請求(實際上是查詢ES):

5

Topology Map

234

其餘的一些功能就看本身玩了.

本期結束...

相關文章
相關標籤/搜索