IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 应用性能监控-- SkyWalking -> 正文阅读

[大数据]应用性能监控-- SkyWalking

应用性能监控-- 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 比较

SkyWalkingSleuth + 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==========
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:57:41  更:2022-03-21 21:01:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:40:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码