- 前言
随着微服务架构的流行,一次请求往往需要涉及到多个服务,因此服务性能监控和排查就变得更复杂,因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。
而链路追踪的出现正是为了解决这种问题,它可以在复杂的服务调用中定位问题,还可以在新人加入后台团队之后,让其清楚地知道自己所负责的服务在哪一环。
除此之外,如果某个接口突然耗时增加,也不必再逐个服务查询耗时情况,我们可以直观地分析出服务的性能瓶颈,方便在流量激增的情况下精准合理地扩容。
这就是APM(应用性能管理)系统,全称:Application Performance Management tools。
- 常用APM工具对比
- 基本信息
- Pinpoint
Pinpoint专注于链路和性能监控,韩国研发团队开源,埋点无侵入 ,UI 功能较强。
- SkyWalking
SkyWalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache 孵化器,国人开源的产品,主要开发人员来自于华为。Skywalking专注于链路和性能监控,埋点无侵入, UI 功能较强 。能够加入Apache孵化器,设计思想及代码得到一定认可,后期应该也会有更多的发展空间及研发人员投入。目前使用厂商最多。版本更新较快。
- Zipkin
Zipkin由Twitter 开源,调用链分析工具,基于spring-cloud-sleuth得到广泛使用,非常轻量 ,使用部署简单。
- Cat
CAT是一个更综合性 的平台,提供的监控功能最全面,国内几个大厂生产也都在使用。但研发进度及版本更新相对较慢。
- 埋点方式
|------------|------------------|---------|
| 名称 | 埋点方式 | 入侵性 |
| pinpoint | 探针 | 低 |
| skywalking | 探针 | 低 |
| zipkin | http拦截器 | 中 |
| cat | 代码埋点(拦截器/注解/过滤器) | 高 |
- 数据存储
|------------|----------------------------------|
| 名称 | 存储方式 |
| pinpoint | hbase |
| skywalking | es/mysql/tidb/h2/sharding sphere |
| zipkin | mysql/es/cassandra |
| cat | 本地/hdfs/mysql |
- 最终选型(SkyWalking)
综合考虑工具的使用人数、维护能力以及对项目本身的侵入性,最终决定采用Skywalking作为项目的APM工具。
- SkyWalking采用探针的方式对服务进行监控,即在代码层面对项目零侵入性。
- 使用人群多,社区活跃度高,版本更新快。
- UI功能较强,管理界面可直接观察多个指标参数。
- 简介
SkyWalking 是一个开源的分布式系统跟踪和性能监控工具,旨在帮助开发人员和运维团队监视、诊断和优化分布式系统的性能和行为。它提供了端到端的分布式跟踪、性能指标收集、报告和可视化能力。
- 架构组成
SkyWalking本身逻辑上分为四部分: 探针, 平台后端, 存储和用户界面。再加上监控的客户端应用服务,一套完整的监控体系最终可分为五个组成部分。
- 探针( agent ) 基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式。
- 平台后端 支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry , Zipkin 追踪格式化等。
- 存储 通过开放的插件化的接口存放 SkyWalking 数据。可以选择一个既有的存储系统, 如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere管理)。
- UI 一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。
- 应用服务 即被SkyWalking监控的客户端服务。
- 功能展示
- 展示微服务与其他应用及中间件交互关系,包括微服务间调用逻辑(naocs RPC调用、Http调用),各个微服务连接的中间件(MySQL、MongoDB、Redis、MQ)关系。
(某时间段内的调用网络)
- 展示被监控应用服务各项指标状态
- 展示所有请求记录,包括并不限于正常http业务请求
- 请求链路追踪,完整记录一次请求从开始到结束经过的每一步及每一步耗时时间
(服务间调用、请求外部系统、数据库交互)
- 异常请求堆栈信息打印
- 部署&使用
版本说明:
SkyWalking:
apache-skywalking-apm-9.0.0
Agent:
apache-skywalking-java-agent-8.9.0
- SkyWalking 部署
SkyWalking本身的部署可以分为两个部分:Web UI (UI界面)+ OAP Server(后端服务)。
/webapp/application.yml可以修改Web UI服务的相关配置,其中包括UI服务本身端口和连接OAP服务的配置信息。
Skywaling-apm目录下/config/application.yml可以修改OAP Server的相关配置。
数据源配置
OAP Server需要配置一个数据源,用于服务本身的数据存储,默认提供了多种数据源实现:elasticsearch、mysql、h2、tidb、postpresql等等
选择其中一种作为服务的数据源
若选择mysql作为数据源,还需在/oap-libs目录下添加mysql的连接器
- agent 配置
agent作为"探针"的功能,起到连接应用服务和SkyWalking的作用。
在启动应用服务时,启动参数加入指定值,即可将此应用服务接入SkyWalking服务端的监控。
agent 配置 SkyWalking 服务端地址
Skywalking-agent目录下/config/agent.config
- 本地调试
-javaagent:/Users/renchen/develop/skywalking/agent/skywalking-agent-8.15.0/skywalking-agent.jar (指定agent探针位置)
-Dskywalking.agent.service_name=test-name(指定注册到SkyWalking服务端后该应用的名称)
-Dskywalking.agent.namespace=test-namespace(指定命名空间)
- 测试机部署
启动脚本配置参数
- 容器化部署
- Dockerfile中指定agent路径
- 将agent打入到基础镜像中