应用官方的说法: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
就会看到相关访问的记录以及统计信息。