应用性能监控– SkyWalking

  • Post author:
  • Post category:其他




应用性能监控– SkyWalking

SkyWalking 是中国人吴晟开源的应用性能管理系统(APM)工具,使用 Java 语言开发,现在已属于 Apache 旗下开源项目,官网 https://skywalking.apache.org/

SkyWalking 的核心是数据分析和度量结果的存储平台,通过 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量数据,SkyWalking Collecter 对数据进行分析和聚合,存储到 Elasticsearch、H2、MySQL、TiDB 等其一即可,最后我们可以通过 SkyWalking UI 的可视化界面对最终的结果进行查看。



APM 与 SkyWalking

APM(Application Performance Management),即应用性能管理系统。对应用程序单点性能与整个分布式应用进行监控,记录每一个环节程序执行状况,通过图表与报表的西施让运维人员随时掌握系统的运行状况。

特点:

  • 实现强大的链路跟踪
  • 相比 Zipkin,拥有更友好、更详细的监控项
  • 能自动生成可视化图表



SkyWalking 与 Sleuth + Zipkin 比较

SkyWalking Sleuth + Zipkin
链路跟踪可视化
聚合报表 丰富 很少
服务依赖图 形象直观 简单依赖图
监控埋点方式 无侵入,采用 Java Agent 字节码增强 侵入式
Java VM 指标监控 具备 不具有
支持报警 有,可自定义 不具有
存储机制 ES、Mysql等 ES、Mysql等
文档支持 Apache 支持,国内文档滞后 文档丰富



SkyWalking 服务端与 Java Agent



环境要求

  • JDK 8



SkyWalking 部署

SkyWalking 服务端用于接收来自 Java Agent 客户端发过来的链路跟踪与指标数据,汇总统计后由 SkyWalking UI 负责展示。

端口占用:

  • 11800 端口:gPRC 默认监听的服务端口
  • 12800 端口:HTTP 默认监听的端口
  • 8080 端口:SkyWalking UI 应用默认监听的端口



安装步骤

第一步,安装 ElasticSearch 全文搜索引擎(存储推荐使用 ElasticSearch)。这里推荐查阅

这里

第二步,下载 SkyWalking 服务端


下载路径

,点击 Distribution,下载 for Elasticsearch 7。下载完成后解压在不带中文字样的路径下。

image-20220319164817148

第三步,配置 SkyWalking 数据源。在 application.yml 配置中,搜索 elasticsearch 的配置。

修改后的配置是

storage:
#  selector: ${SW_STORAGE:h2}
  selector: ${SW_STORAGE:elasticsearch7}

可能会遇到的问题

在bin目录下执行 startup.bat 时,startup.bat 闪退,不会启动 Skywalking-Collector 和 Skywalking-Webapp。

解决方案:将 skywalkinge 解压之后的文件夹放到 JDK 安装目录的上一级。例如 D:\Program Files\Java 是 java 环境地址,放在 D:\apache-skywalking-apm-bin-es7 上。

也有可能是 8080 端口被占用,这个得排查一下。

端口占用:

  • 11800:gRPC 端口,数据收集服务。
  • 12800:HTTP 端口,数据收集服务。
  • 8080:SkyWalking UI,用于展示数据。



安装 SkyWalking Java Agent

通过 java agent 探针技术,允许应用开发的时候再通过启动增加 javaagent 参数来外挂一些额外的程序。从而完成无侵入的监控埋点。

首先我们这里先说明白服务间的调用关系,假设有三个微服务,分别是:a-service、b-service 和 c-service,他们之间的调用关系是 a->b->c。

其次,我们可以在

\apache-skywalking-apm-bin-es7\agent

路径下找到 skywalking-agent.jar 文件,如果是在生产环境下,启动命令为

java -javaagent:./skywalking-agent.jar -Dskywalking.agent.service_name=a-service -Dskywalking.collector.backend_service=localhost:11800 -Dskywalking.logging.file_name=a-service-api.log -jar a-service.jar

如果是开发环境运行,需要在 Run/Debug Configurations 中的 Configuration->Environment->VM options 添加配置参数

// a-service
-javaagent:D:\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar -Dskywalking.agent.service_name=a-service -Dskywalking.collector.backend_service=localhost:11800 -Dskywalking.logging.file_name=a-service-api.log
// b-service
-javaagent:D:\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar -Dskywalking.agent.service_name=b-service -Dskywalking.collector.backend_service=localhost:11800 -Dskywalking.logging.file_name=b-service-api.log
// c-service
-javaagent:D:\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar -Dskywalking.agent.service_name=c-service -Dskywalking.collector.backend_service=localhost:11800 -Dskywalking.logging.file_name=c-service-api.log
  • Dskywalking.agent.service_name:指定在 SkyWalking 上报数据时的服务名

  • Dskywalking.collector.backend_service:指定 SkyWalking 服务端的通信 IP 与端口

  • Dskywalking.logging.file_name:指定 agent 生成的上报日志文件名,日志文件保存 agent 的 logs 目录中,例如:\apache-skywalking-apm-bin-es7\agent\logs



SkyWalking 常用视图

使用 Apifox 进行压力测试。

image-20220319213204303

打开 SkyWalking UI,默认显示全局监控,自动刷新设置 1 秒。

image-20220319213121539

分别显示的是,各服务每分钟访问次数,高延迟服务列表,服务状态指数,高延迟端点列表,全局响应延迟比检测图,全局响应热力图。

  • 服务状态指数:越接近 1 状态越好。
  • 高延迟端点列表:是高延迟服务的列出,第一个是我们主要排查的服务对象。

压力测试结果。

image-20220319213147774



拓扑图

点击拓扑图可以看到服务间的依赖关系。

image-20220319213520455



链路追踪图

image-20220319213718901



附页



java agent

Java agent 提供了一种在加载字节码时,对字节码进行修改的方式。他共有两种方式执行,一种是在 main 方法执行之前,通过 premain 来实现,另一种是在程序运行中,通过 attach api 来实现。

定义一个简单的 Jave Agent 扩展类。

public class SimpleAgent {
    public static void premain(String agentArgs, Instrumentation inst) {
        System.out.println("==========开始执行premain==========");
    }
}

之后,在 META-INF 目录下找到 MANIFEST.MF 文件,添加内容。

Manifest-Version:1.0
Premain-Class:info.mufeng.agent.SimpleAgent

然后,在启动服务的时候加上-javaagent:agent.jar 额外的附加参数。启动的时候会输出如下日志:

==========开始执行premain==========



版权声明:本文为qq_34178764原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。