分布式链路追踪---skywalking从入门到应用全系列教程_skywalking教程_码拉松的博客-程序员秘密

技术标签: 分布式应用  skywalking  

什么是skywalking?

SkyWalking是一个开源的可观察性平台,用于收集,分析,聚合和可视化来自本地或者云服务中的数据。即使在整个云环境中,SkyWalking也能提供一种简便的方法来维护您的分布式系统的清晰视图。它是一个现代的APM(Application Performance Monitor 应用性能监测软件),专门为基于云、容器的分布式系统而设计。

为什么要选择skywalking?

SkyWalking提供了用于在许多不同情况下观察和监视分布式系统的解决方案,并通过agent方式,做到高性能、低损耗、无侵入性,与类似的功能组件如:Zipkin、Pinpoint、CAT相比,skywalking无论是从性能还是社区活跃度方面考虑,都具有一定的优势。

skywalking监控维度

skywalking从三个维度提供可观察项功能,分别是:服务,服务实例,端点

  • 服务。表示一组/一组工作负载,这些工作负载为传入请求提供相同的行为。
  • 服务实例。服务组中的每个单独工作负载都称为实例。像pods在Kubernetes中一样,它不必是单个OS进程,但是,如果您使用agent代理,则实例实际上是一个真正的OS进程。
  • 端点。服务中用于传入请求的路径,例如HTTP URI路径或gRPC服务类+方法签名。

skywalking架构

从逻辑上看,skywalking分为四个部分:探针,平台后端,存储和UI。

在这里插入图片描述

  • 探针:收集数据并重新格式化以符合SkyWalking的要求(不同的探针支持不同的来源)。
  • 平台后端:支持数据聚合,分析和流处理,涵盖跟踪,指标和日志。
  • 存储:设备通过开放/可插入的界面存储SkyWalking数据。您可以选择现有的实现,例如ElasticSearch,H2,MySQL,TiDB,InfluxDB,或者实现自己的实现。
  • UI:是一个高度可定制的基于Web的界面,允许SkyWalking最终用户可视化和管理SkyWalking数据。

skywalking安装

下载

直接进入官方下载:https://skywalking.apache.org/downloads/

本次教程选择8.2.0 ES6版本
在这里插入图片描述

下载很快,完成后直接上传到服务器中

在这里插入图片描述

解压

tar -zxvf apache-skywalking-apm-8.2.0.tar.gz

在这里插入图片描述

cd apache-skywalking-apm-bin
在这里插入图片描述

  • agent目录:将来要拷贝到各服务所在机器上用作探针
  • bin目录:服务启动脚本
  • config:配置文件
  • oap-libs:oap服务运行所需要的jar包(oap服务就是skywalking的后端服务Observability Analysis Platform)
  • webapp:web服务运行所需要的jar包

启动

cd到bin目录

执行./startup.sh直接同时启动 oap和web服务
在这里插入图片描述

访问

访问你的服务器地址,8080端口,就可以进入skywalking的UI界面
在这里插入图片描述

替换存储源

默认情况下skywalking使用H2来存储数据,这肯定无法满足性能要求,所以我们使用ES来进行存储。

elasticsearch安装

下载

下载elasticsearch,本教程选择6.4.0版本
在这里插入图片描述

解压、启动

同样直接解压,并进入elasticsearch-6.4.0目录

进入bin目录,启动./elasticserach,你可能会遇到如下报错,表明不能使用root用户启动es

org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:140) ~[elasticsearch-6.4.0.jar:6.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) ~[elasticsearch-6.4.0.jar:6.4.0]
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.4.0.jar:6.4.0]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.4.0.jar:6.4.0]
        at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.4.0.jar:6.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.4.0.jar:6.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) ~[elasticsearch-6.4.0.jar:6.4.0]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
        at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:104) ~[elasticsearch-6.4.0.jar:6.4.0]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) ~[elasticsearch-6.4.0.jar:6.4.0]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:326) ~[elasticsearch-6.4.0.jar:6.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-6.4.0.jar:6.4.0]
        ... 6 more

所以我们需要重新建一个用户,并用新用户启动es

比如我重新建立了一个用户就叫es
在这里插入图片描述

启动

启动成功后,我们通过curl http://localhost:9200测试,看到如下内容就表示es启动成功。
在这里插入图片描述

你也可以使用如下命令,用后台方式启动。

./elasticsearch -d

启动时遇到的问题

如果遇到如下报错

[2] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

执行如下命令

vi /etc/security/limits.conf

在文件中新增

es soft nofile 65536
es hard nofile 65536
es soft nproc 4096
es hard nproc 4096

在这里插入图片描述

再次重启,可能还会遇到如下错误


ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

同样执行如下命令

vi /etc/sysctl.conf

新增

vm.max_map_count=262144

在这里插入图片描述
保存退出后执行,让配置生效

sysctl -p

在这里插入图片描述

此时再启动就正常了,但是你现在可能无法通过外部访问

配置外部访问

cd到elasticsearch的config目录中

修改elasticsearch.yml文件,找到network.host配置项,默认是注释着的,打开注释,并修改为0.0.0.0,保存退出,重启es服务即可。

vi elasticsearch.yml

在这里插入图片描述

那么现在就可以通过外部访问了

在这里插入图片描述

替换skywalking存储方式为es

现在es服务已经配置完成了,我们cd到skywalking的 config目录下

修改application.yml文件
在这里插入图片描述

找到存储源的配置,直接把h2改成es即可

默认配置:
在这里插入图片描述
替换成:elasticsearch

在这里插入图片描述

保存并启动skywalking

看到日志中有创建一些es索引的过程,表示已经成功使用es作为存储源了。
在这里插入图片描述

配置agent

现在skywalking还无法监控服务,需要我们配置agent,skywalking提供的agent本身就是一个jar包,所以启动时直接新增javaagent配置项,指定好skywalking-agent.jar的所在的路径即可。

idea集成

为了演示方便,直接使用idea配置启动。

首先配置javaagent:指定agent目录下的skywalking-agent.jar所在的路径
service_name名称根据自己的情况定义
然后注意backend_service,端口为11800 grpc访问的端口

-javaagent:D:/learn/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar
-Dskywalking.agent.service_name=order
-Dskywalking.collector.backend_service=10.0.0.189:11800

在这里插入图片描述

配置完启动服务,此时再访问就可以看到你的服务了
在这里插入图片描述

搞了接口测试一下
在这里插入图片描述

我们可以看到,本身Rocketbot UI,也为我们从4个角度进行了监控,全局的,服务、实例、端点,一开始也提到过后面3个本身也是skywalking的监控维度
在这里插入图片描述

那我们再启动一个微服务,并且通过feign的方式,进行微服务之间的调用,那我们可以看到结果如下,skywalking可以为我们监控到每一次请求所执行的路径,已经每个路径上的耗时时间。

在这里插入图片描述

在这里插入图片描述

总结

skywalking拥有完整的APM和调用链路功能,扩展性强、二次开发简单,使用agent采集数据,并经过collector简单处理数据、aggregator聚合数据统计分析并持久化、alarm监控告警,最终提供query查询,和UI呈现。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/CSDN_WYL2016/article/details/115689947

智能推荐

实现题2-3 半数集问题_半数集问题的时间复杂度_江潭落月复西斜的博客-程序员秘密

实验名称 实现题2-3 半数集问题。实验目的 通过上机实验,实现题2-3 半数集问题。实验原理 设set(n)中的元素个数为f(n),6的前面可以加上1、2、3,2、3的前面又都可以加上1,也就是f(6)=1+f(3)+f(2)+f(1)。则显然有递归表达式:f(n)=1+∑f(i),i=1,2……n/2。实验步骤 ① 设set(n)中的元素个数为f(n),6的前面可以加上1、2、3,2、3的前面又都可以加上1,也就是f(6)=1+f(3)+f(2)+f(1)。则显然有递归表达式:f(n

关于git remote: HTTP Basic: Access denied 的解决办法_git http basic access denied_zqian1994的博客-程序员秘密

从GitLab中克隆项目时,报“git remote: HTTP Basic: Access denied ”错误; 错误原因: 远程服务端的用户名和密码与当前系统中git保存的用户名和密码有冲突解决方法: 1.以管理员身份打开cmd命令行工具 2.输入”git config –system –unset credential.helper”命令(重置远程端的用户名和...

@Validated 讲解_xiao潇的博客-程序员秘密

SpringBoot 中使用@Validated 来检验数据,如果数据异常则抛出异常,统一处理。例如,在Controller层中,对传入的一个参数进行检验@Validated TestDto testDto对应的entity,[email protected] class TestDto { @NotEmpty(message = "图片不能为空") private ...

jenkins集成sonar_jenkinsfile sonar_@进行中的博客-程序员秘密

1、安装插件2、配置jenkins访问sonar的秘钥3、配置sonar4、安装sonar客户端5、配置sonar6、在项目中增加sonar.properties# must be unique in a given SonarQube instancesonar.projectKey=demo# this is the name and version displayed in the SonarQube UI. Was mandatoryp

OpenAI Gym--智能体_openai gym 智能体 协同 驱动_Hiking_Yu的博客-程序员秘密

Agents 智能体“智能体”描述了针对健身房中的环境运行RL算法的方法。智能体可以包含算法本身,也可以简单地提供算法与健身房环境之间的集成。RandomAgent 随机智能体位于此仓库中的样本智能体gym/examples/agents/random_agent.py。这个简单的智能体利用环境的能力来产生随机的有效动作,并且针对每个步骤都这样做。cem.py位于此存储库中的通用交叉熵智...

结构体对齐的重要性_结构体为什么要字节对齐_dreamtale90的博客-程序员秘密

  最近在工作中被结构体对齐问题坑了一天的时间,郁闷的不行不行,特别记录下来,以供大家参考。   事情是这样的,因业务需要增加了一个结构体,里面用到了信号量,当时写完联调的时候只测试了windows平台,因为win32/linux代码几乎一样,就没测试linux平台,可后来linux平台居然出现了莫名其妙的问题。好了,我先将简化后的代码整理如下:#include <stdio.h&gt...

随便推点

安卓广播机制讲解(标准广播和有序广播)_CodeJiao的博客-程序员秘密

安卓广播机制讲解广播分为标准广播和有序广播标准广播(Normal broadcasts)是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。标准广播的工作流程如图所示。有序广播(Ordered broadcasts )则是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。所以此时

单播、广播、多播(组播)的概念和区别_huige永生的博客-程序员秘密

单播、广播、多播(组播)的概念和区别简单理解如下:1.一台机器和一台机器通信这是单播。2.一台机器发出的数据包能被多台机器收到这就叫组播。一个机器发送,多台机器接收,但是又不同于广播,发送端的IP设置在一个范围内都算组播,这个范围是224.0.0.0~239.255.255.2553.一台机器发出的数据包能被一个网段的机器收到这叫广播单播(unicast)单播是说...

faceswap的数据模型_faceswap模型_aphero的博客-程序员秘密

1.originalModel: "original"__________________________________________________________________________________________________ Layer (type) Output Shape Param # Connected to==================================================

半数集问题_飞翔的哈士奇的博客-程序员秘密

问题描述给定一个自然数n,由n 开始可以依次产生半数集set(n)中的数如下。(1) n∈set(n);(2) 在n 的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;(3) 按此规则进行处理,直到不能再添加自然数为止。例如,set(6)={6,16,26,126,36,136}。半数集set(6)中有6 个元素。注意半数集是多重集。算法设计对于给定的自然数n,计算半数集...

技术挑战_xiaohuanglv的博客-程序员秘密

软件工程师和科学家擅长应对技术挑战。无论有多么困难,他们都将尝试去解决这些问题。欠发达地区生态基础设施作为起点,每一个区块链都需要自身的技术基础设施以及一个充满活力的生态系统,这需要许多的参与者来提供支持。在技术方面,协议本身是一个最低要求,并且它需要通过软件工具和服务来放大其功能。以技术为核心的生态系统,直接影响着区块链市场的进程。就像整个网络作为一个生态系统一样,区块链生态系统将遵循同样的...

SpringBoot2.0使用Spring Data-JPA实现增删改查_长流仙山拟画人的博客-程序员秘密

本文主要讲解使用springboot2.0使用jpa实现增删改查,外加自己拓展方法,spring的jpa是一个非常不错的持久层框架,可以理解为就是对Hibrenate进行了封装,比起Mybatis优点在于不用关注sql语句的编写。我这案例中使用ResultFul风格来编写的。好了讲了这么多废话直接上代码和步骤吧。使用的是maven管理项目,如果不会maven的同学可以先去学会使用maven吧。...

推荐文章

热门文章

相关标签