关于链路追踪,目前比较主流是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/

下面步入正题,在kubernetes集群中安装SkyWalking

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应用服务。

至此,就全部完成了。如果有看不懂或者有问题朋友,请评论区留言

链路追踪_SkyWalking的部署及使用的更多相关文章

  1. SpringCloud(七)之SpringCloud的链路追踪组件Sleuth实战,以及 zipkin 的部署和使用

    一.前言 Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案 ,并且兼容了zipkin,提供了REST API接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序 . ...

  2. 分布式链路追踪系统Sleuth和ZipKin

    1.微服务下的链路追踪讲解和重要性 简介:讲解什么是分布式链路追踪系统,及使用好处 进行日志埋点,各微服务追踪. 2.SpringCloud的链路追踪组件Sleuth 1.官方文档 http://cl ...

  3. 微服务从代码到k8s部署应有尽有系列(十二、链路追踪)

    我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...

  4. 基于zipkin分布式链路追踪系统预研第一篇

    本文为博主原创文章,未经博主允许不得转载. 分布式服务追踪系统起源于Google的论文“Dapper, a Large-Scale Distributed Systems Tracing Infras ...

  5. zipkin分布式链路追踪系统

    基于zipkin分布式链路追踪系统预研第一篇   分布式服务追踪系统起源于Google的论文“Dapper, a Large-Scale Distributed Systems Tracing Inf ...

  6. istio-opentracing链路追踪方案

    目录 istio-opentracing链路追踪方案 envoy链路追踪 初始化追踪 跟踪上下文信息 istio链路追踪 链路追踪参数 采样率 jaeger istio中jaeger现状 jaeger ...

  7. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十二):链路追踪(Sleuth、Zipkin)

    在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 技术背景 在微服务架构中,随着业务发展,系统拆分导致系统调用链路愈发复杂,一个 ...

  8. Spring Boot + Spring Cloud 构建微服务系统(八):分布式链路追踪(Sleuth、Zipkin)

    技术背景 在微服务架构中,随着业务发展,系统拆分导致系统调用链路愈发复杂,一个看似简单的前端请求可能最终需要调用很多次后端服务才能完成,那么当整个请求出现问题时,我们很难得知到底是哪个服务出了问题导致 ...

  9. 分布式链路追踪(Sleuth、Zipkin)

    技术背景 在微服务架构中,随着业务发展,系统拆分导致系统调用链路愈发复杂,一个看似简单的前端请求可能最终需要调用很多次后端服务才能完成,那么当整个请求出现问题时,我们很难得知到底是哪个服务出了问题导致 ...

随机推荐

  1. nginx下强制跳转到www域名

    跳转www #先监听 exp.com域名,然后转发到www下面 server { listen 80; server_name exp.com; rewrite ^(.*) $scheme://www ...

  2. PAT 乙级 -- 1012 -- 数字分类

    题目简介 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4 ...

  3. CVE-2014-3153分析和利用

    本文是结合参考资料对CVE-2014-3153的分析,当然各位看官可以看最后的资料,他们写的比我好. 在看CVE-2014-3153之前我们用参考资料4中例子来熟悉下这类漏洞是如何产生的: /** * ...

  4. 神经网络与机器学习 笔记—卷积神经网络(CNN)

    卷积神经网络 之前的一些都是考虑多层感知器算法设计相关的问题,这次是说一个多层感知器结构布局相关的问题.来总结卷积神经网络.对于模式分类非常合适.网络的提出所隐含的思想收到了神经生物学的启发. 第一个 ...

  5. spring泛型注入

    泛型依赖注入 Spring 4.0版本中更新了很多新功能,其中比较重要的一个就是对带泛型的Bean进行依赖注入的支持. 泛型依赖注入允许我们在使用spring进行依赖注入的同时,利用泛型的优点对代码进 ...

  6. springboot项目部署(war包)

    将springboot项目打包成war,并且部署到tomcat.比较麻烦,自己踩的坑也比较多.算了一下,找bug的时间,有两天熬到凌晨2点. 修改pom.xml使得打包成war <groupId ...

  7. IntelliJ IDEA中项目的包和目录结构显示设置

    在新建的目录下再创建一个新目录时,出现了目录没有分层显示,这样使用起来十分不方便. 解决方案:点击右上方的设置按钮,将"compact middle packages"取消勾选,实 ...

  8. 第一章 FreeBSD之系统安装

    一.默认选择 >>[Boot Multi User],按回车键 二.默认选择 >> [Install] 三.选择默认的键盘设置 >>[Select] 四.配置主机名 ...

  9. 关于ollydbg的堆栈视图的使用(结合crackme2分析)

    在crackme2中我们通过在弹出的窗口处下段然后逐层往用户区回溯,我们利用不断下断点和反复运行程序回溯,其实可以利用Ollydbg的堆栈视图来完成, ollydbg的堆栈视图反映了程序在运行期间函数 ...

  10. MySQL DDL详情揭露

    前言: MySQL中DDL语句,即数据定义语言,用于创建.删除.修改.库或表结构,对数据库或表的结构操作.常见的有create,alter,drop等.这类语句通常会耗费很大代价,特别是对于大表做表结 ...