應用官方的說法:Apache SkyWalking是觀察性分析平臺和應用性能管理系統。提供分佈式追蹤、服務網格遙測分析、度量聚合和可視化一體化解決方案git
GitHub地址:https://github.com/apache/skywalkinggithub
Skywalking的架構分紅三大塊:web
此次主要會使用docker去部署oap
和ui
這2個模塊(查看skywalking的github庫會發現官方已經爲咱們準備好了相關的docker部署文件)。docker
咱們須要準備2樣東西便可:apache
apache-skywalking-apm-bin
,由於在skywaking爲咱們準備的Docker配置文件中使用的是這個名稱ENV DIST_NAME=apache-skywalking-apm-bin \
,COPY "$DIST_NAME.tar.gz" /
,後面沒有帶版本號。apache-skywalking-apm-bin.tar.gz
分別拷貝到docker
文件夾的oap
、ui
中。這裏咱們使用docker文件夾中的docker-compose.yml
文件進行部署。查看其中內容,會看到須要咱們先準備好2個docker鏡像,一個是skywalking/oap
,一個是skywalking/ui
。json
... oap: image: skywalking/oap ... ui: image: skywalking/ui ...
上一步中咱們已經準備好了全部的東西,那這裏其實只須要使用docker的builder命令來建立這2個鏡像便可api
Dockerfile.oap
和Dockerfile.ui
文件裏的內容... RUN set -ex; \ ... mv "$DIST_NAME" skywalking; \ # 修改時區 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone WORKDIR skywalking ...
生成oap
和ui
鏡像瀏覽器
# oap cd oap文件夾 docker build -t skywalking/oap -f Dockerfile.oap . # ui cd ui文件夾 docker build -t skywalking/ui -f Dockerfile.ui .
elasticsearch
做爲存儲,並且細心的同窗可能在查看docker-compose.yml
的時候也發現了構建的時候確實使用的是elasticsearch
。可是在Dockerfile.oap
文件中定義的確實h2
做爲存儲,生成的鏡像會不會有問題?其實不會的,在docker-compose.yml
中已經將鏡像的環境變量申明爲使用elasticsearch
了。... environment: SW_STORAGE: elasticsearch SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200 ...
執行完上面的命令以後,使用docker images
會看到已經生成了對應的鏡像。bash
REPOSITORY TAG IMAGE ID CREATED SIZE skywalking/ui latest d2a316c65e4b 18 seconds ago 787MB skywalking/oap latest 4a5995eacbe8 49 seconds ago 839MB
接下來就很簡單了,直接使用docker-compose
將全部容器啓動起來就能夠了服務器
cd `docker-compose.yml所在文件夾` docker-compose up -d # 看到下面內容 Creating elasticsearch ... done Creating oap ... done Creating ui ... done # 查看容器運行狀況 docker-compose ps Name Command State Ports ---------------------------------------------------------------------------------------------------- elasticsearch /usr/local/bin/docker-entr ... Up 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp oap bash docker-entrypoint.sh Up 0.0.0.0:11800->11800/tcp, 1234/tcp, 0.0.0.0:12800->12800/tcp ui bash docker-entrypoint.sh Up 0.0.0.0:8080->8080/tcp
使用瀏覽器打開127.0.0.1:8080
,默認帳號密碼都是admin
。
到這裏,服務端相關的已經部署完畢。接下來就是客戶端引入skywalking探針了。
這裏我用NetCore
的webapi項目做爲測試。
bash dotnet new webapi -n skywalkingdemo --no-https
bash dotnet add package SkyAPM.Agent.AspNetCore
Properties/launchSettings.json
):json { ... "skywalkingdemo": { "commandName": "Project", "launchBrowser": true, "launchUrl": "api/values", "applicationUrl": "http://localhost:10009", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", // 添加下面2個環境變量 "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore", "SKYWALKING__SERVICENAME": "hello" } } }
skywalking
的配置文件(skyapm.json
),內容以下:json { "SkyWalking": { "ServiceName": "hello", "Namespace": "", "HeaderVersions": [ "sw6" ], "Sampling": { "SamplePer3Secs": -1, "Percentage": -1.0 }, "Logging": { "Level": "Information", "FilePath": "logs/skyapm-{Date}.log" }, "Transport": { "Interval": 3000, "ProtocolVersion": "v6", "QueueSize": 30000, "BatchSize": 3000, "gRPC": { "Servers": "localhost:11800", "Timeout": 10000, "ConnectTimeout": 10000, "ReportTimeout": 600000 } } } }
.csproj
文件),添加以下配置<ItemGroup> <None Include="skyapm.json" CopyToOutputDirectory="PreserveNewest" /> </ItemGroup>
# 全局安裝工具 dotnet tool install -g SkyAPM.DotNet.CLI # 生成skyapm配置文件 dotnet skyapm config hello 172.16.102.111:11800 # 這裏的地址填的是skywalking的oap所在服務器的地址 # 執行命令以後會自動生成與上面配置文件內容同樣的文件
dotnet run
運行項目便可看到在skywalking的管理頁面裏看到多了一個service
localhost:10009/api/values
和localhost:10009/api/values/1
就會看到相關訪問的記錄以及統計信息。