一、APM系统
APM(Application Performance Monitoring)即应用程序性能监控系统,是对企业系统即时监控以实现对应用程序性能管理和故障管理的系统化的解决方案。应用性能管理,主要指对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT成本;
二、分布式链路追踪
分布式链路追踪通过跟踪和记录请求在分布式系统中的传播路径和性能数据,帮助开发人员和运维团队分析服务之间的调用关系、排查性能瓶颈和故障;
三、SkyWalking概述
是一个可观测分析平台(OAP)和应用程序性能监控系统(APM),提供分布式链路追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案;
- 多语言自动探针,Java、.Net Core和Node.js;
- 多种监控手段,语言探针和service mesh;
- 轻量高效,不需要额外搭建大数据平台;
- 模块化架构,UI、存储、集群管理多种机制可选;
- 支持告警;
- 优秀的可视化效果;
总之,SkyWalking为服务(Service),服务实例(Service Instance)以及端点(Endpoint)提供了可观测能力:
- 服务(Service):表示对请求提供相同行为的一组工作负载,在使用代理点或者SDK的时候,可以定义服务的,名字;
- 服务实例(Service Instance):上述的一组工作负载中的每一个工作负载称为一个实列;
- 端点(Endpoint):对于特定服务所接收的请求路径;
整体架构组成:
- 探针:基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式;
- 平台后端:支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry , Zipkin 追踪格式化等。 你甚至可以使用 Observability Analysis Language 对原生度量指标 和 用于扩展度量的计量系统 自定义聚合分析;
- 存储:通过开放的插件化的接口存放 SkyWalking 数据. 你可以选择一个既有的存储系统, 如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere 管理),也可以选择自己实现一个存储系统. 当然, 我们非常欢迎你贡献新的存储系统实现;
- UI:一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据;
1. 探针:
在SkyWalking中,探针表示集成到目标系统中的代理或者SDK库,它负责收集遥测数据,包括链路追踪和性能指标。根据目标系统的技术栈,探针可能有差异巨大的方式来达到以上功能,但从根本上来说都是一样的,即收集并格式化数据,并发送到后端。从高层次上来讲,SkyWalking探针可分为以下三组:
基于语言的原生代理:这种类型的代理运行在目标服务的用户空间中,就像用户代码的一部分一样,如SkyWalking Java代理,使用-javaagent命令行参数在运行期间对代码进行操作(自动打点代理利用了虚拟机提供的用于修改代码的接口来动态加入打点的代码,如javaagent premain),另一种代理是使用目标库提供的钩子函数或拦截机制;
服务网格探针:服务网格探针从服务网格的sidecar和控制面板收集数据,在以前,代理只用作整个集群的入口,但是有了服务网格和sidecar之后,就可以基于此进行观测;
服务网格通常用于描述组成此类应用程序的微服务网络以及它们之间的交互,随着服务网格的大小和复杂性的增长,它会变的更难理解和管理,它需要包括发现、负载平衡、故障恢复、度量和监视以及更复杂的操作需求、金丝雀发布(灰度发布)、限流、访问控制和端到端身份验证;
第三方打点类库:SkyWalking 也能够接收其他流行的打点库产生的数据格式,SkyWalking通过分析数据格式化成自身的链路和度量数据格式,该功能最初只能接收Zipkin的span数据;
四、SkyWalking10.1.0安装(使用ElasticSearch作为存储)
修改apache-skywalking-apm-bin\config\application.yml
storage:selector: ${SW_STORAGE:elasticsearch}elasticsearch:# 索引名namespace: ${SW_NAMESPACE:"es_2024"}# es地址clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:172.xx.xx.xx:9200}protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}connectTimeout: ${SW_STORAGE_ES_CONNECT_TIMEOUT:3000}socketTimeout: ${SW_STORAGE_ES_SOCKET_TIMEOUT:30000}responseTimeout: ${SW_STORAGE_ES_RESPONSE_TIMEOUT:15000}numHttpClientThread: ${SW_STORAGE_ES_NUM_HTTP_CLIENT_THREAD:0}# 账号密码user: ${SW_ES_USER:"elastic"}password: ${SW_ES_PASSWORD:"******"}
Core:做所有数据分析和流调度的基本和主要框架;
Cluster:管理集群中的多个后端实例,提高吞吐量的处理能力;
Storage:持久化分析结果;
Query:提供查询接口给UI;
apache-skywalking-apm-bin\webapp\application.yml
# ui端口
serverPort: ${SW_SERVER_PORT:-8081}# Comma seperated list of OAP addresses.
oapServices: ${SW_OAP_ADDRESS:-http://localhost:12800}zipkinServices: ${SW_ZIPKIN_ADDRESS:-http://localhost:9412}
oapService.bat和webappService.bat修改jdk地址,10.1.0对应的jdk得17及以上(可分别启动也可直接启动start.bat)
set _EXECJAVA="C:\Program Files\Java\jdk-17.0.9\bin\java"
若是监控Spring Cloud Gateway数据,则需将agent\optional-plugins 下的gateway的jar包移动到agent\plugins下
本地JVM参数配置
-javaagent:D:\skywalking\apache-skywalking-apm-bin\agent\skywalking-agent.jar -Dskywalking.agent.service_name=gateway