关于链路追踪,目前比较主流是Cat,Zipkin,SkyWalking等这些工具。这篇文章主要介绍关于SkyWalking工具的。
为什么用SkyWalking,因为它基本没有代码侵入,只这一点就足够了。因为这些主流的链路追踪工具,在功能和作用上基本没啥区别。
1.介绍
Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(k8s, docker)架构而设计。
提供分布式追踪,服务网络分析和可视化一体的解决方案。
这里就不过多的介绍原理和功能性的东西,想看的朋友可以去官方看这些。
官网地址:https://skywalking.apache.org/
github地址:https://github.com/apache/skywalking
2.整体架构
架构分为上下左右四个部分:
- 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
- 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
- 右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
- 左部分 SkyWalking UI :负责提供控台,查看链路等等。
所以根据这个架构图,可以看出来,部署skywalking一共分为4步。第一步部署oap服务端,第二步部署ui界面,第三步部署存储,如果选择已有的存储可以省略这步,第四步部署agent端。
如果有朋友不想用kubernetes集群来装,可以用单机版的。单机版的安装官网上就有,大家可以自行前往:
http://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/
3.在开始之前需要安装helm
第一种安装方式:
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh
第二种安装方式:从官网下载安装包
https://github.com/helm/helm/releases
tar zxf helm-v3.5.4-linux-amd64.tar.gz
ln -s /srv/sky/linux-amd64/helm /usr/bin/
因为装的helm是3.5,在3.5中移除了Tiller,仅仅安装helm客户端就行
添加repo源:
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update
helm repo list #添加完之后,可以查看刚刚添加的repo源
4.使用helm安装SkyWalking
使用helm安装的好处是,官方已经打好了helm包,我们只需要安装skywalking,就可以将服务端 ui页面和es全部完成
我这里使用现有的es作为存储,es版本是6.x
git clone https://github.com/apache/skywalking-kubernetes.git
cd skywalking-kubernetes/
git tag
git checkout v3.0.0 #我做的时候用的是这个分支,当然也可以不换
cd chart
vi ./skywalking/values-es6.yaml
.....将文件里的IfNotPresent 改为Always
.....修改文件里的es地址,改成自己的es地址
......其余的修改资源限制和去掉健康检查
helm dep up skywalking
helm install skywalking skywalking -n default --values ./skywalking/values-es6.yaml --set elasticsearch.enabled=false --set elasticsearch.config.host=x.x.x.x --set elasticsearch.config.port.http=9200
helm list #查看包安装上没有
安装完成后,你会看到三个pod,执行到这就算完成安装了
5.如何访问ui页面
安装完成后,需要打开页面才能看到自己安装的成果,至于如何访问前端页面有多种方法。
比如你可以将skywalking-ui这个服务的svc都设置成nodePort将端口暴露出去,让后通过nginx反向代理出去。
因为我这个集群是用的阿里云的kubernetes集群,所以可以直接配置ingress,来访问ui。
配置好以后,就可以访问页面了。正常你进去是没有数据的,因为还没有装agent端,我这个有数据是因为我后截的图
6.安装agent端
在开始安装agent端之前,容我多啰嗦一句。 安装agent端也有多种方法,本着减少skywalking对环境的影响,所以选择了接入java应用中。
https://archive.apache.org/dist/skywalking/8.0.1/ 包下载地址
因为我的es是6.x的,oap是8.0.1的,所以下载apache-skywalking-apm-8.0.1.tar.gz 这个包
tar zxf apache-skywalking-apm-8.0.1.tar.gz ll apache-skywalking-apm-bin/agent/ #agent端jar包和依赖包都在这个目录下 activations bootstrap-plugins config logs optional-plugins plugins kywalking-agent.jar cd apache-skywalking-apm-bin/agent/config/ vim agent.config ....... agent.namespace=default #修改命令空间 agent.service_name=msg-test #服务名,这里写什么,前端就展示为什么 collector.backend_service=skywalking-oap:11800 #配置服务端地址,因为是在一个集群里,所以可以直接写服务端pod的名称加端口
下面就是将skywalking-agent端加入到自己的镜像中,dockerfile如下:
vim msg-test FROM registry-vpc.cn-beijing.aliyuncs.com/jushiwang/jdk:8 #自己的基础镜像 RUN mkdir -p /app/agent/ ADD jsw-msg.jar /app #自己的java应用服务 ADD agent/ /app/agent #将agent端目录加入到镜像中 目录要和dockerfile平级 docker build -t registry-vpc.cn-beijing.aliyuncs.com/jushiwang/betamsg:msg-sky -f msg-test
还有最后这一哆嗦, 就是启动服务,写一个java应用服务的yaml文件:
kind: Deployment apiVersion: extensions/v1beta1 metadata: labels: app: msg-test name: msg-test namespace: default spec: replicas: 1 selector: matchLabels: app: msg-test template: metadata: labels: app: msg-test spec: containers: - name: msg-test image: registry-vpc.cn-beijing.aliyuncs.com/jushiwang/betamsg:msg-sky command: [ '/bin/sh','-c', 'java -javaagent:/app/agent/skywalking-agent.jar -jar /app/jsw-msg.jar'] imagePullPolicy: Always ports: - name: msg-test containerPort: 8266 protocol: TCP
在启动服务的时候通过 -javaagent:/app/agent/skywalking-agent.jar 来启动agent端并监测java应用服务。
至此,就全部完成了。如果有看不懂或者有问题朋友,请评论区留言