分布式链路追踪_skywalking_学习(1)
一、APM 系统概述
1、什么是 APM 系统?
APM :全称 Application Performance Management 即应用性能管理系统。是对企业系统即时监控以实现对应用程序性能管理和故障管理的系统化的解决方案。
应用性能管理,主要指对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总拥有成本。
APM 系统是可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。
2、分布式链路追踪
1)随着分布式系统和微服务架构的出现,一次用户的请求会经过多个系统,不同服务之间的调用关系十分复杂,任何一个系统出错都可能影响整个请求的处理结果。以往的监控系统往往只能知道单个系统的健康状况、一次请求的成功失败,无法快速定位失败的根本原因。
2)除此之外,复杂的分布式系统也面临这下面这些问题:
-
性能分析:
一个服务依赖很多服务,被依赖的服务也依赖了其他服务。如果某个接口耗时突然变长了,那未必是直接调用的下游服务慢了,也可能是下游的下游慢了造成的,如何快速定位耗时变长的根本原因呢?
-
链路梳理:
需求迭代很快,系统之间调用关系变化频繁,靠人工很难梳理清楚系统链路拓扑 (系统之间的调用关系)。
3)为了解决这些问题,Google 推出了一个分布式链路跟踪系统 Dapper ,之后各个互联网公司都参照Dapper 的思想推出了自己的分布式链路跟踪系统,而这些系统就是分布式系统下的 APM 系统。
3、什么是 OpenTracing ?
分布式链路跟踪最先由 Google 在 Dapper 论文中提出,而 OpenTracing 通过提供平台无关、厂商无关的 API,使得开发人员能够方便的添加(或更换)追踪系统的实现。
4、主流的开源 APM 产品:
1)PinPoint
Pinpoint 是由一个韩国团队实现并开源,针对 Java 编写的大规模分布式系统设计,通过 JavaAgent 的机制做字节代码植入,实现加入 traceid 和获取性能数据的目的,对应用代码零侵入。
官方网站:
https://github.com/naver/pinpoint
2)SkyWalking
SkyWalking 是 apache 基金会下面的一个开源 APM 项目,为微服务架构和云原生架构系统设计。它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,Skywalking APM 会感知应用间关系和服务间关系,并进行相应的指标统计。Skywalking 支持链路追踪和监控应用组件基本涵盖主流框架和容器,如国产 RPC Dubbo 和 motan 等,国际化的 spring boot,spring cloud。
官方网站:
http://skywalking.apache.org/
3)Zipkin
Zipkin 是由 Twitter 开源,是分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监控跟踪。Zipkin 基 于Google 的 Dapper 论文实现,主要完成数据的收集、存储、搜索与界面展示。
官方网站:
https://zipkin.io/
4)CAT
CAT 是由大众点评开源的项目,基于 Java 开发的实时应用监控平台,包括实时应用监控,业务监控,可以提供十几张报表展示。
官方网站:
https://github.com/dianping/cat
二、Skywalking 介绍
1、什么是 Skywalking?
根据官方的解释,Skywalking 是一个可观测性分析平台(Observability Analysis Platform 简称 OAP )和应用性能管理系统(Application Performance Management简称 APM )。
提供分布式链路追踪、服务网格(Service Mesh)遥测分析、度量(Metric)聚合和可视化一体化解决方案。
2、Skywalking 的几大特点:
- 多语言自动探针, Java,.NET Core 和 Node.JS。
- 多种监控手段,语言探针和 service mesh。
- 轻量高效。不需要额外搭建大数据平台。
- 模块化架构。 UI、存储、集群管理多种机制可选。
- 支持告警。
- 优秀的可视化效果。
3、Skywalking 整体架构包含如下三个组成部分:
1)探针(agent)负责进行数据的收集,包含了 Tracing 和 Metrics 的数据,agent 会被安装到服务所在的服务器上,以方便数据的获取。
2)可观测性分析平台 OAP(Observability Analysis Platform),接收探针发送的数据,并在内存中使用分析引擎(Analysis Core)进行数据的整合运算,然后将数据存储到对应的存储介质上,比如Elasticsearch、MySQL 数据库、H2 数据库等。同时 OAP 还使用查询引擎(Query Core)提供HTTP查询接口。
3)Skywalking 提供单独的 UI 进行数据的查看,此时 UI 会调用 OAP 提供的接口,获取对应的数据然后进行展示。
4、Skywalking 优势
Skywalking 相比较其他的分布式链路监控工具,具有以下特点:
-
社区相当活跃。 Skywalking 已经进入 apache 孵化,目前的 start 数已经超过 11K,版本更新快 6.5.0 已经发布。开发者是国人,可以直接和项目发起人交流进行问题的解决。
-
Skywalking 支持 Java,.NET Core 和 Node.JS 语言。相对于其他平台:比如 Pinpoint 支持 Java 和 PHP,具有较大的优势。
-
探针无倾入性。对比 CAT具有倾入性的探针,优势较大。不修改原有项目一行代码就可以进行集成。
-
探针性能优秀。有网友对 Pinpoint和Skywalking进行过测试,由于Pinpoint收集的数据过多,所以对性能损耗较大,而Skywalking探针性能十分出色。
-
支持组件较多。特别是对 Rpc框架的支持,这是其他框架所不具备的。Skywalking对Dubbo、gRpc等有原生的支持,甚至连小众的motan和sofarpc都支持。
5、Skywalking主要概念介绍
使用如下案例来进行Skywalking主要概念的介绍,Skywalking主要概念包含:
- 服务 (Service)
- 端点 (Endpoint)
- 实例 (Instance)
三、环境搭建-ElasticSearch 环境搭建
1、在虚拟机中搭建 Skywalking 的可观测性分析平台 OAP 环境。Skywalking 默认使用 H2
内存中进行数据的存储,可以替换存储源为 ElasticSearch 保证其查询的高效及可用性。
具体的安装步骤可以在 Skywalking 的官方 github 上找到:
https://github.com/apache/skywalking/blob/master/docs/en/setup/README.md
2、在虚拟机上创建新目录(建议将虚拟机内存设置为 3G 并且将 CPU 设置成 2 核,防止资源不足。)
sudo mkdir /usr/local/skywalking
3、将 elasticsearch 和 skywalking 安装包上传到虚拟机 /usr/local/skywalking 目录下。
1)Skywalking 对 es 版本号有一定要求,最好使用 6.3.2 以上版本,如果是 7.x 版本需要额外进行配置。
2)这里使用的版本分别是:
apache-skywalking-apm-6.5.0.tar.gz
elasticsearch-6.4.0.tar.gz
4、安装 elasticsearch,将压缩包解压。
sudo tar -zxvf ./elasticsearch-6.4.0.tar.gz
5、修改 Linux 系统的限制配置,将文件创建数修改为 65536 个。
1)修改系统中允许应用最多创建多少文件等的限制权限。Linux 默认来说,一般限制应用最多
创建的文件是 65535 个。但是 ES 至少需要 65536 的文件创建数的权限。
2)修改系统中允许用户启动的进程开启多少个线程。默认的 Linux 限制 root 用户开启的进程可
以开启任意数量的线程,其他用户开启的进程可以开启 1024 个线程。必须修改限制数为
4096+。因为 ES 至少需要 4096 的线程池预备。
sudo vi /etc/security/limits.conf
#新增如下内容在 limits.conf 文件中
es soft nofile 65536
es hard nofile 65536
es soft nproc 4096
es hard nproc 4096
6、修改系统控制权限, ElasticSearch 需要开辟一个 65536 字节以上空间的虚拟内存。Linux 默认不允许任何用户和应用程序直接开辟这么大的虚拟内存。
sudo vi /etc/sysctl.conf
#新增如下内容在sysctl.conf文件中,当前用户拥有的内存权限大小
vm.max_map_count=262144
#让系统控制权限配置生效
sudo sysctl -p
7、新建一个用户 es, 用于 ElasticSearch 启动。
ES 在 5.x 版本之后,强制要求在 linux 中不能使用 root 用户启动 ES 进程。所以必须使用其他用户启动 ES 进程才可以。
启动 ElasticSearch 注意事项:
1)虚拟内存调大一些:
windows 系统调整虚拟内存:
设置 ---》系统 ---》关于或系统信息 ---》高级系统设置
---》高级 ---》性能 ---》设置
---》高级 ---》虚拟内存 ---》更改
---》选 D:盘 ---》自定义大小(1024--16384)
---》选 C:盘 ---》选定 无分页文件。
---》确定。
2)不能用 root 用户启动 ElasticSearch,需用其他用户启动(如:新创建 es 用户 启动 ElasticSea