03.SkyWalking链路追踪选型对比及部署说明,适用于首次部署安装该系统
SkyWalking链路追踪
1.修订记录
| 日期 | 修订版本 | 修订描述 | 作者 | 审核者 |
|---|---|---|---|---|
| 2022-02-17 | v1.0.0 | 文档内容新建,编辑初稿 | 云上凯歌 |
2.使用场景
SkyWalking链路追踪选型对比及部署说明,适用于首次部署安装该系统
3.选型对比
| Sleuth+Zipkin | SkyWalking | |
|---|---|---|
| 链路追踪可视化 | 有 | 有 |
| 聚合报表 | 很少 | 丰富 |
| 服务依赖图 | 简单依赖图展示 | 形象直观 |
| 监控买点方式 | 侵入式,需要修改源码 | 无侵入,采用Java Agent字节码增强 |
| Java VM指标监控 | 不具备 | 具备 |
| 支持报警 | 不支持 | 有,可以自定义报警方式 |
| 存储机制 | 内存、Mysql、ES… | ES、Mysql、H2… |
| 文档支持 | 文档丰富,国外主流 | Apache支持,国内文档更新滞后 |
| 国内案例 | 京东、阿里定制但不开源… | 华为、小米、当地、微众银行… |
通过比较我们可以发现,在易用性和使用体验上,SkyWalking 明显好于 Zipkin,功能更丰富的同时也更符合国人习惯
4.实体机部署SkyWalking
4.1 下载安装包
官网地址:https://skywalking.apache.org/downloads/

4.2 解压
4.3 修改配置
Elasticsearch的安装此处忽略
配置使用elasticsearch7,注意nameSpace要与elasticsearch的配置名字一致
# vim /usr/local/apache-skywalking-apm-bin/config/application.yml
storage:
selector: elasticsearch
elasticsearch:
nameSpace: ${SW_NAMESPACE:"与elasticsearch的配置名字一致"}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
当前不使用Elasticsearch也行,SkyWalking默认使用H2
4.4 修改端口号
# vim /usr/local/apache-skywalking-apm-bin/webapp/webapp.yml
server:
port: 8080
4.5 启动
如果配置了Elasticsearch,请保证已成功启动Elasticsearch
/usr/local/apache-skywalking-apm-bin/bin/startup.sh
启动后会产生两个 Java 进程:
Skywalking-Collector 是数据收集服务,默认监听 11800(gRPC)与 12800(HTTP) 端口。
Skywalking-Webapp 是 SkyWalking UI,用于展示数据,默认监听 8080 端口。
访问:http://服务器IP:8080/ 如果看到SkyWalking UI 首页,则说明服务端配置成功。
5.容器化部署SkyWalking
5.1 启动Skywalking Server
- 默认使用H2存储,直接启动skywalking即可
sudo docker run --name oap -d -p 1234:1234 -p 11800:11800 -p 12800:12800 --restart always apache/skywalking-oap-server
-
如果使用elasticsearch存储
说明:使用最新版本的elasticsearch和skywalking-oap-server镜像,启动会有问题。
因此,必须指定一下版本才可以。
-
则需要先安装elasticsearch
docker run -d --name=es7 \ -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" elasticsearch:7.5.1 -
安装 ElasticSearch管理界面elasticsearch-hq
sudo docker run -d --name elastic-hq -p 5000:5000 --restart always elastichq/elasticsearch-hq -
启动skywalking
docker run --name oap --restart always -d \ --restart=always \ -e TZ=Asia/Shanghai \ -p 12800:12800 \ -p 11800:11800 \ --link es7:es7 \ -e SW_STORAGE=elasticsearch \ -e SW_STORAGE_ES_CLUSTER_NODES=es7:9200 \ apache/skywalking-oap-server:6.6.0-es7
-
-
2 Skywalking管理系统
-
启动管理系统:
docker run -d --name skywalking-ui \ --restart=always \ -e TZ=Asia/Shanghai \ -p 8080:8080 \ --link oap:oap \ -e SW_OAP_ADDRESS=oap:12800 \ apache/skywalking-ui:6.6.0 -
访问:http://服务器IP:8080/ 如果看到SkyWalking UI 首页,则说明服务端配置成功。
-
6.监控java程序
6.1 实体机监控
下载源码包:
https://archive.apache.org/dist/skywalking/6.6.0/apache-skywalking-apm-6.6.0.tar.gz
启动服务脚本:
java -javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=xxxtest -Dskywalking.collector.backend_service=127.0.0.1:11800 -jar /opt/spring-boot-demo-0.0.1-SNAPSHOT.jar
说明:
-javaagent 指定agent包位置。这里我将apache-skywalking-apm-6.6.0.tar.gz解压到/opt目录了,因此路径为:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar
-Dskywalking.agent.service_name 指定服务名
-Dskywalking.collector.backend_service 指定skywalking oap地址,由于在本机,地址为:127.0.0.1:11800
-jar 指定jar包的路径,这里我直接放到/opt/目录了。
6.2 容器化监控
在agent镜像基础上构建服务镜像:
FROM apache/skywalking-java-agent:6.6.0-jdk8
# ... build your java application
7.监控Python程序
7.1 通过pip安装
# Install the latest version, using the default gRPC protocol to report data to OAP
pip install "apache-skywalking"
# Install the latest version, using the http protocol to report data to OAP
pip install "apache-skywalking[http]"
# Install the latest version, using the kafka protocol to report data to OAP
pip install "apache-skywalking[kafka]"
# Install a specific version x.y.z
# pip install apache-skywalking==x.y.z
pip install apache-skywalking==0.1.0 # For example, install version 0.1.0 no matter what the latest version is
7.2 设置Python代理
需要 SkyWalking 8.0+ 和 Python 3.5+
- 非侵入式(CLI)
运行脚本 sw-python:
sw-python run python abc.py
或者
sw-python run program arg0 arg1
-
通过gRPC协议(默认)
配置
collector_address(或环境变量SW_AGENT_COLLECTOR_BACKEND_SERVICES)到<oap-ip-or-host>:11800,如127.0.0.1:11800:
from skywalking import agent, config
config.init(collector_address='127.0.0.1:11800', service_name='yourService')
agent.start()
-
通过HTTP协议报告数据
配置
collector_address(或环境变量SW_AGENT_COLLECTOR_BACKEND_SERVICES)到<oap-ip-or-host>:12800,例如127.0.0.1:12800:
注意:需安装 pip install “apache-skywalking[http]”
from skywalking import agent, config
config.init(collector_address='127.0.0.1:12800', service_name='yourService')
agent.start()
8.监控Go程序
8.1 所需环境
| 名称 | 链接 | 描述 |
|---|---|---|
| go2sky | https://github.com/SkyAPM/go2sky | go agent |
| go2sky-plugins | https://github.com/SkyAPM/go2sky-plugins | trace接入插件 |
go框架:gin
安装命令:
go get -u github.com/SkyAPM/go2sky
go get -u github.com/SkyAPM/go2sky-plugins/gin/v3
8.2 代码集成
包引入:
import (
"github.com/SkyAPM/go2sky"
"github.com/SkyAPM/go2sky/reporter"
"github.com/gin-gonic/gin"
v3 "github.com/SkyAPM/go2sky-plugins/gin/v3"
)
gin中使用:
r := gin.New()
//skywalking
rp, err := reporter.NewGRPCReporter("192.168.99.12:11800", reporter.WithCheckInterval(time.Second))
if err != nil{
logging.Info("create gosky reporter failed!")
}
tracer, err := go2sky.NewTracer("test-demo", go2sky.WithReporter(rp))
#使用go2sky-plugins的middleware,就不用我们自己写span了,插件帮我们完成
r.Use(v3.Middleware(r, tracer))
gin.SetMode(setting.ServerSetting.RunMode)
插件span的处理:
func Middleware(engine *gin.Engine, tracer *go2sky.Tracer) gin.HandlerFunc {
# 需要使用上层创建的tracer
if engine == nil || tracer == nil {
return func(c *gin.Context) {
c.Next()
}
}
return func(c *gin.Context) {
# 创建span,这里使用的是EntrySpan
span, ctx, err := tracer.CreateEntrySpan(c.Request.Context(), getOperationName(c), func(key string) (string, error) {
return c.Request.Header.Get(key), nil
})
if err != nil {
c.Next()
return
}
span.SetComponent(componentIDGINHttpServer)
span.Tag(go2sky.TagHTTPMethod, c.Request.Method)
span.Tag(go2sky.TagURL, c.Request.Host+c.Request.URL.Path)
span.SetSpanLayer(agentv3.SpanLayer_Http)
c.Request = c.Request.WithContext(ctx)
#gin中请求继续执行
c.Next()
if len(c.Errors) > 0 {
span.Error(time.Now(), c.Errors.String())
}
#结束span
span.Tag(go2sky.TagStatusCode, strconv.Itoa(c.Writer.Status()))
span.End()
}
}
9. 监控PHP程序
9.1 编译扩展
// install php extension
git clone --recurse-submodules https://github.com/SkywalkingContrib/skywalking-php-sdk.git
cd skywalking-php-sdk
phpize && ./configure && make && make install
// install report_client
cd src/report
make
cp report_client /usr/bin
9.2 配置扩展
; 添加扩展
extension=skywalking.so
; 开启收集器
skywalking.enable = 1
; 设置skyWalking服务版本 默认为5
skywalking.version = 5
; 设置应用名称
skywalking.app_code = MyProjectName
; 设置skyWalking服务地址
skywalking.grpc = 127.0.0.1:11800
; 设置日志路径,默认 tmp
skywalking.log_path = /tmp
9.3 启动上报程序
// report_client [SkyWalking服务grpc地址] [日志文件路径]
// 例如
report_client 120.0.0.1:11800 /tmp
更多推荐
所有评论(0)