1.链路追踪介绍
2.skywalking是什么
3. skywalking搭建
4. skywalking 服务启动
5. skywalking 接入微服务
6. skywalking持久化跟踪数据
1.链路追踪介绍
对于一个大型的几十个,几百个微服务构成的微服务架构系统,通常会遇到下面的一些问题:
1.如何串联整个调用链路,快速定位问题!
2.如何滤清各个微服务之间的依赖关系!
3.如何跟踪整个业务流程的调用处理顺序!
4.如何进行各个微服务接口的性能分析!
2.skywalking是什么
Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等,跟Pinpoint一样采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持,目前增长势头强劲,社区活跃。
Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计,它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪,性能指标分析和服务依赖分析等。
官网:https://skywalking.apache.org/
下载:https://skywalking.apache.org/downloads/
中文文档:https://skyapm.github.io/document-cn-translation-of-skywalking/
2.1 链路追踪框架对比
目前市面上开源的APM系统主要有CAT、Zipkin、Pinpoint、SkyWalking,大都是参考Google的Dapper实现的
功能和技术方案对比:
Zipkin是Twitter开源的调用链路分析工具,目前基于Spingcloud sleuth得到了广泛的应用,特点是轻量,部署简单。
Pinpoint是一个韩国团队开源的产品,运用了字节码增强技术,只需要在启动时添加启动参数即可,对代码无侵入,目前支持Java和PHP语言,底层采用HBase来存储数据,探针收集的数据粒度非常细,但性能损耗大,因其出现的时间较长,完成度也很高,应用的公司较多
Skywalking是本土开源的基于字节码注入的调用链路分析以及应用监控分析工具,特点是支持多种插件,UI功能较强,接入端无代码侵入。
CAT是由国内美团点评开源的,基于Java语言开发,目前提供Java、C/C++、Node.js、Python、Go等语言的客户端,监控数据会全量统计,国内很多公司在用,例如美团点评、携程、拼多多等,CAT跟下边要介绍的Zipkin都需要在应用程序中埋点,对代码侵入性强。
2.2 性能对比
模拟了三种并发用户: 500 750 1000. 使用jmeter测试,每个线程发送30个请求,设置思考实践为10ms。使用的采样率为1,即100%,这边与生产可能有差别。pinpoint默认的采样率为20,即50%,通过设置agent的配置文件改为100%。zipkin默认也是1.组合起来一共有12种。线面汇总表:
从上表可以看出,在三种链路监控组件中,skywalking探针对吞吐量影响最小,zipkin对吞吐量影响适中,pinpoint的探针对吞吐量影响最大,在500并发用户时,测试服务的吞吐量从1385降低到774,影响很大。对于内存和cpu的使用,都差不多,相差在10%之内。
2.3 skywalking主要功能特性
1.多种监控手段,可以通过语言谭政和service mesh获得监控数据;
2.支持多种语言自动探针,包括java,.net core和node.js;
3.轻量高效,无需大数据平台和大量的服务器资源;
4.模块化,UI、存储,集群管理都有多种机制可选;
5.支持告警;
6.优秀的可视化解决方案;
3.skywalking搭建
Skywalking agent和业务端绑定在一起,负责收集各种监控数据
Skywalking oapservice是负责处理监控数据,接受agent的数据并存储在数据库中,接受来自UI的请求,查询监控数据。
Skywalking UI提供给用户,展现各种监控数据和告警。
3.1 安装elasticsearch7.13.1
3.1.1 下载
wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/7.13.1/elasticsearch-7.13.1-x86_64.rpm
3.1.2 安装
yum localinstall -y elasticsearch-7.13.1-x86_64.rpm
3.1.3 配置elasticsearch
[root@local-skywalking apache-skywalking-apm-bin]# cat /etc/elasticsearch/elasticsearch.yml|grep -v '^#'
cluster.name: skywalkinges
node.name: node-1
path.data: /data/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
discovery.seed_hosts: ["192.168.1.231"]
cluster.initial_master_nodes: ["node-1"]
cluster.name: skywalkinges # 这个名字随便取,但是后面要和skywalking中的名字一致
node.name: node-1 # 节点名称也可以随便取
network.host: 0.0.0.0
discovery.seed_hosts: ["127.0.0.1"] # 一定要配置,不然找不到主节点
cluster.initial_master_nodes: ["node-1"] # 一定要配置,不然找不到主节点,这个名字与上面的node.name一致
3.1.4 目录授权
chown elasticsearch.elasticsearch /data/elasticsearch
3.1.5 启动
systemctl start elasticsearch
systemctl enable elasticsearch
3.2 skywalking下载
3.3 skywalking目录结构
webapp: Ui前端(web监控页面)的jar包和配置文件;
oap-lib: 后台应用的jar包,以及它的依赖jar包,里边有一个server-starter-*.jar就是启动程序;
config: 启动后台应用的配置文件;
bin: 各种启动脚本,一般使用脚本startup.* 来启动web页面和对应的后台应用;
-
- oapService.*: 默认使用的后台程序的启动脚本;(使用的是默认模式启动,还支持其他模式,各模式区别见启动模式)
-
- oapServiceInit.*: 使用no init模式启动;在此模式下,OAP服务器不进行初始化
-
- oapServiceNoInit.*: 使用no init模式启动;在此模式下,OAP服务器不进行初始化
-
- webappService.*: UI前端的启动脚本
-
- startup.: 组合脚本,同时启动oapService. webappService.*脚本
3.4 skywalking-agnet 目录详解
skywalking-agent.jar: 代理服务jar包
config: 代理服务启动使用的配置文件
plugins: 包含多个插件,代理服务启动时会加载目录下的所有插件(各种jar包)
optional-plugins: 可选插件,当需要支持某种功能时,比如springcloud gateway,则需要把对应的jar包拷贝到plugins目录下
4. skywalking 服务启动
4.1 skywalking oap服务启动
启动脚本bin/startup.sh
日志信息存储在logs目录
启动成功后会启动两个服务,一个是skywalking-oap-server,一个是skywalking-web-ui
skywalking-oap-server服务启动后会暴露11800 和 12800 两个端口,分别为收集监控数据的端口11800和接受前端请求的端口12800,修改端口可以修改config/applicaiton.yml
systemd服务
[root@local-skywalking apache-skywalking-apm-bin]# systemctl cat skywalking
# /usr/lib/systemd/system/skywalking.service
[Unit]
Description=skywalking-oap
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/apps/apache-skywalking-apm-bin/bin/startup.sh
Restart=always
PrivateTmp=true
LimitNOFILE=65536
WorkingDirectory=/apps/apache-skywalking-apm-bin/bin/
[Install]
WantedBy=multi-user.target
4.2 skywalking-ui
启动 bin/webappService.sh
skywalking-web-ui服务会占用 8080 端口, 修改端口可以修改webapp/webapp.yml
server.port:SkyWalking UI服务端口,默认是8080;
collector.ribbon.listOfServers:SkyWalking OAP服务地址数组,SkyWalking UI界面的数据是通过请求SkyWalking OAP服务来获得;
访问
systemd服务
[root@local-skywalking apache-skywalking-apm-bin]# systemctl cat skywalking-ui.service
# /usr/lib/systemd/system/skywalking-ui.service
[Unit]
Description=skywalking-webapp
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/apps/apache-skywalking-apm-bin/bin/webappService.sh
Restart=always
PrivateTmp=true
LimitNOFILE=65536
WorkingDirectory=/apps/apache-skywalking-apm-bin/bin
[Install]
WantedBy=multi-user.target
4.3 skywalking三个概念
服务(Service) :表示对请求提供相同行为的一系列或一组工作负载,在使用Agent时,可以定义服务的名字;
服务实例(Service Instance) :上述的一组工作负载中的每一个工作负载称为一个实例, 一个服务实例实际就是操作系统上的一个真实进程;
端点(Endpoint) :对于特定服务所接收的请求路径, 如HTTP的URI路径和gRPC服务的类名 + 方法签名;
5. skywalking 接入微服务
5.1 linux环境通过jar包方式接入
准备一个springboot程序,打成可执行jar包,写一个shell脚本,在启动项目的Shell脚本上,通过 -javaagent 参数进行
配置SkyWalking Agent来跟踪微服务;
startup.sh脚本:
#!/bin/sh
# SkyWalking Agent配置
export SW_AGENT_NAME=springboot‐skywalking‐demo #Agent名字,一般使用`spring.application.name`
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 #配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT=2000 #配置链路的最大Span数量,默认为 300。
export JAVA_AGENT=‐javaagent:/usr/local/soft/apache‐skywalking‐apm‐bin‐es7/agent/skywalking‐agent.jar
java $JAVA_AGENT ‐jar springboot‐skywalking‐demo‐0.0.1‐SNAPSHOT.jar #jar启动
启动日志
等同于
java ‐javaagent:/usr/local/soft/apache‐skywalking‐apm‐bin‐es7/agent/skywalking‐agent.jar ‐DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 ‐DSW_AGENT_NAME=springboot‐skywalking‐demo ‐jar springboot‐skywalking‐demo‐0.0.1‐SNAPSHOT.jar
参数名对应agent/config/agent.config配置文件中的属性。
属性对应的源码:org.apache.skywalking.apm.agent.core.conf.Config.java
# The service name in UI
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
# Backend service addresses.
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
我们也可以使用skywalking.+配置文件中的配置名作为系统配置项来进行覆盖。 javaagent参数配置方式优先级更高
5.2 docker容器接入agent
下载agent解压 并打成tar包
[root@yzfs-jenkins skywalking_agent-jdk8]# ls
Dockerfile skywalking-agent skywalking-agent.tar
agent打入容器
[root@yzfs-jenkins skywalking_agent-jdk8]# cat Dockerfile
FROM jdk8:212
WORKDIR /usr/local
ADD skywalking-agent.tar /usr/local/
[root@yzfs-jenkins skywalking_agent-jdk8]# docker build -t skywaling_agent:jdk8 .
制作镜像
cat Dockerfile
FROM skywaling_agent:jdk8
WORKDIR /usr/local
ENV SW_AGENT_NAME=app-name
ENV SW_AGENT_COLLECTOR_BACKEND_SERVICES=skywalking.faone.cn:11800
ENV SW_AGENT_SPAN_LIMIT=2000
ADD jar_package.jar /usr/local/
CMD ["java","-javaagent:/usr/local/skywalking-agent/skywalking-agent.jar","-jar","-Xms512m","-Xmx512m","-Xmn512m","jar_package.jar"]
6. 持久化跟踪数据
编辑config下面的application.yml文件
将默认的H2数据源注释掉,将elasticsearch7配置放开,配置如下
storage:
selector: ${SW_STORAGE:elasticsearch}
elasticsearch:
namespace: ${SW_NAMESPACE:"skywalkinges"}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.1.221:9200}
标签:bin,启动,jar,agent,elasticsearch,skywalking
From: https://www.cnblogs.com/yangtao416/p/17091447.html