Skywalking 入门与实战

news2024/11/28 12:39:41

一 什么是 Skywalking?

Skywalking 时一个开源的分布式追踪系统,用于检测、诊断和优化分布式系统的功能。它可以帮助开发者和运维人员深入了解分布式系统中各个组件之间的调用关系、性能瓶颈以及异常情况,从而提供系统级的性能优化和故障排查。

1.1 为何使用 Skywalking

  1. 监控分布式系统:在分布式系统中,各个组件之间的调用链错综复杂,难以进行全面的监控和诊断。SkyWalking 提供了完善的分布式追踪功能,可以帮助开发者全面了解分布式系统的调用关系、性能瓶颈和异常情况,提供系统级的监控和诊断能力。
  2. 异常排查:当系统发生异常或错误时,需要及时定位问题并进行配查。SkyWalking 可以捕获和记录系统中的异常情况,并在调用链中标记异常的来源和传播路径,帮助开发者快速定位问题和解决问题。

1.2 同类产品分析

  1. pinpoint:韩国团队开发,优点:UI丰富。缺点:探针收集的数据粒度非常细,但性能损耗大。
  2. CAT:大众点评开发,优点:报表功能强大。缺点:有业务侵入性、代码比较老旧。
  3. Zipkin:Twitter 公司开发,它的优点:轻松接入 Spring Cloud 官方推荐 APM(Application Performance Management,系统性能管理)系统。缺点:有一定侵入性,但比 CAT 框架强一些。
  4. Skywalking:国人开发,Apache 孵化和运营。它的优点:无侵入、性能优秀、社区活跃、支持广泛、中文文档比较齐全。

1.3 Skywalking 组成

  1. 探针(Agent):提供了系统的原始数据。
  2. OAP 服务:Observability Analysis Platform,可观性分析平台。它的功能主要有两个:
    a. 收集数据、加工处理并持久化。
    b. 给 UI 界面提供查询服务。
  3. UI界面:展示数据信息

1.4 Skywalking 本质

Skywalking 本质是一个 APM(Application Performance Management, 系统性能管理)系统

而 APM 通常是实现 Open Tracing 标准的系统,OpenTracing 是一个开放标准和规范,用于实现分布式应用程序中的追踪和调用链分析。它提供了一种统一的API 和工具,使开发者能够在不同的应用程序中实现分布式追踪功能,并将各个组件之间的调用关系和性能指标汇总起来,用于分析和监控应用程序的性能。

OpenTracing 中主要包含了 Tracing 试图,Tracing 视图有两个明显的优点:

1. 清晰的看出每个模块的执行时长。

2. 清晰的看到问题和发现问题。

普通试图:

OpenTracing 试图:

 二、Skywalking 服务安装与启动

Skywalking 支持的数据库有很多,例如 ElasticSearch、H2、MySQL、PostgreSql 等,但因为 ElasticSearch(下面简称 ES) 优秀的搜索性能,所以他几乎是 SkyWalking 的不二选择。

因此对于 Skywalking 的安装主要分为以下几步:
1. 安装并启动 ES

2. 安装并运行 Skywalking

  • 运行 Skywalking 后端服务
  • 运行 Skywalking UI 服务

2.1 ES 安装并启动

2.1.1 下载并解压 ES

ES 官方下载地址:Elasticsearch 8.9.2 | Elastic

选择对应的平台进行下载:

下载完成之后,解压下载包

解压之后的目录文件如下:

  • bin:可执行脚本文件,包括启动服务命令,插件管理,函数命令
  • config:配置文件目录,如ES配置、角色配置、JVM 配置等。
  • lib:ES 所依赖的 jar 包库。
  • data:默认的数据库存放目录,包含所有节点、分片、索引、文档的所有数据。
  • logs:默认的日志存储路径
  • modules:包含所有ES 包含的模块,如 Cluster、Discovery、Indices
  • plugins:所有安装的插件的目录

2.1.2 删除环境变量

删除环境变量中配置的,Java 类中的 dt.jar 和 tool.jar,如果未配置这两个变量,那么此步骤可以忽略。

高版本的 Java lib 中未包含这两个 jar 包,如果不删除,那么 ES 会判断和使用这两个jar 包,然后启动就会出错。

2.1.3 预启动 ES 

进入 bin 路径,Windows 系统双击 elasticsearch.bat 进行启动:

预启动是为了在配置文件中生成相关配置信息

等ES 启动之后,关闭控制,关闭ES服务。 

2.1.4 关闭 HTTPS 认证

在配置文件 config/elasticsearch.yml 中将 xpack.security.htttp.ssl 中的 enabled 改为 "false" :

2.1.5 关闭授权登录

在 config/elasticsearch.yml 配置文件中将 xpack.security.enabled 改为 "false":

2.1.6 再次启动 ES

2.1.7 验证 ES

在网页中输入 :http://localhost:9200/ 可以看到如下信息就说明 ES启动成功

2.2 Skywalking 安装并启动

2.2.1 下载并解压 Skywalking

下载并解压 Skywalking,官方下载地址:Index of /dist/skywalking (apache.org)

解压后的目录:

  • bin:包含了启动和运行 SkyWalking 的可执行程序和脚本文件。
  • config:包含了 SkyWalking 的配置文件,用于配置 SkyWalking 的各种参数和选项。
  • oap-libs:包含了 SkyWalking OAP(Open Analysis Platform)相关的库文件
  • webapp:包含了 SkyWalking Web 模块的文件,用于运行和展示 SkyWalking 的监控数和分析结果。
  • tools:包含了一些辅助工具和脚本,用于帮助安装、配置和运行 SkyWalking.
  • liscenses:包含了 Apache SkyWalking APM 的开源许可证

 2.2.2 修改配置文件

config/application.yml

2.2.3 启动 Skywalking

双击安装目录下的 bin/startup.bat 就可以启动,之后再浏览器访问:打开 Skywalking 的 UI 控制台:

注: 解压后的路径中不要带中文,否则肯能会报错: No files in meter-analyzer-config

三、上传数据值 Skywalking

3.1 下载 Agent 代理

官方下载地址:Downloads | Apache SkyWalking

下载解压 agent 得到以下文件

3.2 项目添加 Agent 代理

添加如下内容 

-javaagent:D:\SCComponent\Skywalkings\skywalking-agent\skywalking-agent.jar
-Dskywalking.agent.service_name=provider 
-Dskywalking.collector.backentd_service=127.0.0.1:11800
  • -javaagent:填写你本地 skywalking-agent.jar 的路径
  • -Dskywalking.agent.service_name:服务名称,在 Skywalking 端展示时使用。
  • -Dsky walking。collector。backend_service:Skywalking 日志收集地址,固定端口号 11800,不需要修改。

为每个项目配置好上述内容后,再次访问 Skywalking 控制台就可以看到调用信息了,如图:

四、Skywalking 控制台说明

服务说明 UI 如下:

服务详情指标:

五、告警功能

告警功能开启和实现,需要以下两步: 

5.1 设置告警规则

告警规则的设置需要在 config/alarm-settings.yml 下配置,总共配置两块内容。第一块 rules 下的规则:

另外,还需要开启告警提醒的 URL 地址,如图:

5.2 编写告警提醒代码

@Slf4j
@RestController
public class AlarmController {
    @RequestMapping("/timeout")
    public void timeout() throws InterruptedException {
        Thread.sleep(1500);
    }

    @RequestMapping("/webhook")
    public void webHolk(@RequestBody List<AlarmMessage> msg) {
        log.error("===============================================");
        log.error("告警信息" + msg);
    }
}

class AlarmMessage implements Serializable {
    private String scopeId;
    private String name;
    private String id0;
    private String id1;
    private String ruleName;
    private String alarmMessage;
    private long StartTime;
}

其中实体类 AlarmMessage 字段说明如下:

1. ScopeId:告警范围,取值有以下几个:

  • 0:Unknown/位置级别,表示未指定或未能确定的范围
  • 1:All/全部级别,表示所有范围或整个系统层级。
  • 2:Instance/实例级别,表示具体的服务实例。
  • 3:Service/服务级别,表示整个服务。
  • 4:Service instance/服务实例级别,表示特定服务的实例集合。
  • 5:Endpoint Name/端点名称级别,依据端点的名称进行划分。
  • 6:Endpoint/端点级别,表示特定服务的实例集合
  • 7:Database/数据库级别,表示数据库的操作或查询。
  • 8:Cache/缓存级别,表示缓存调用
  • 9:MQ/消息队列,表示消息队列的操作。

2. name:告警项目名

3. id0:Skywalking 主键标识,与 name 一一匹配

4. id1:预留字段,暂未使用

5. ruleName:告警名称,如 service_resp_time_rule

6. alarmMessage:告警内容

7. startTime:告警开始时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1961563.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

笑谈“八股文”,人生不成文

一、“八股文”在实际工作中是助力、阻力还是空谈&#xff1f; 作为现在各类大中小企业面试程序员时的必问内容&#xff0c;“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢&#xff1f;有IT人士不禁发出疑问&#xff1a;程序员面试…

AcWing3302. 表达式求值

代码解释 while(j<str.size()&&isdigit(str[j])){xx*10str[j]-0;}把字符串中里面连续的数字转化为int类型变量&#xff0c;比如输入996/3328,正常的挨个字符扫描只能扫到’9’,‘9’,‘6’,但是按照上面代码的算法是重新开了一个循环&#xff0c;直接把’9’,‘9’,…

【网络请求调试神器,curl -vvv 返回都有什么】

curl -vvv 是一个用于在命令行中执行 HTTP 请求的命令&#xff0c;其中 -vvv 是一个选项&#xff0c;用于启用详细的调试输出。 vvv: 这是一个选项&#xff0c;表示启用详细的调试输出。每个 v 增加调试信息的详细程度&#xff0c;vvv 是最高级别的详细输出。 详细输出包括&a…

【shell脚本快速一键部署项目】

目录 一、环境拓扑图二、主机环境描述三、注意四、需求描述五、shell代码的编写六、总结 一、环境拓扑图 二、主机环境描述 主机名主机地址需要提供的服务content.exam.com172.25.250.101提供基于 httpd/nginx 的 YUM仓库服务ntp.exam.com172.25.250.102提供基于Chronyd 的 NT…

GPU池化:点燃Jupyter Notebook中的AI算力之火

数据科学的火花在Jupyter Notebook中点燃&#xff0c;而GPU的加入&#xff0c;让这火焰更加炽热&#xff01;随着人工智能领域的飞速发展&#xff0c;利用GPU加速已成为数据科学和机器学习领域的新常态。 今天&#xff0c;我们要探索的&#xff0c;是Jupyter Notebook与GPU池化…

PHP学习:PHP基础

以.php作为后缀结尾的文件&#xff0c;由服务器解析和运行的语言。 一、语法 PHP 脚本可以放在文档中的任何位置。 PHP 脚本以 <?php 开始&#xff0c;以 ?> 结束。 <!DOCTYPE html> <html> <body><h1>My first PHP page</h1><?php …

spaCy语言模型下载

spaCy 是一个基于 Python 编写的开源自然语言处理&#xff08;NLP&#xff09;库&#xff0c;它提供了一系列的工具和功能&#xff0c;用于文本预处理、文本解析、命名实体识别、词性标注、句法分析和文本分类等任务。 spaCy支持多种语言模型对文本进行处理&#xff0c;包括中文…

自己在Vmware中搭建mqtt服务器

前言 在学习某个HMI的使用的时候&#xff0c;这个HMI带有MQTT功能&#xff0c;就想着自己是不是能够搭建一个自己的MQTT的服务器呢&#xff1f; 一、mqtt 自己搭建之一&#xff1a;Mosquitto 自己搭建MQTT服务器需要安装和运行MQTT服务软件&#xff0c;比如常用的是Mosquitto…

Tkinter简介与实战(1)

Tkinter简介与实战---实现一个计算器 Tkinter简介安装环境和安装命令WindowsmacOSLinux 注意事项使用正确的包管理器&#xff1a;检查安装完整性&#xff1a;更新 Python&#xff1a;使用虚拟环境&#xff1a; 一个实战例子-----计算器1.创建窗口&#xff1a;2.创建 GUI 组件&a…

学习大数据DAY27 Linux最终阶段测试

满分&#xff1a;100 得分&#xff1a;72 目录 一选择题&#xff08;每题 3 分&#xff0c;共计 30 分&#xff09; 二、编程题&#xff08;共 70…

ANSYS仿真DDR4的眼图

1 眼图的基本知识 对于数字信号&#xff0c;高低电平转换可以组合在多个序列中。以3位为例&#xff0c;总共有000-111和8种组合。在时域中&#xff0c;根据某个参考点对足够多的序列进行对齐&#xff0c;然后将波形叠加形成眼图&#xff0c;如下图所示。 图&#xff1a;眼图中…

JavaScript object find 示例

https://andi.cn/page/621631.html

从信息论的角度看微博推荐算法

引言 在数字时代&#xff0c;推荐系统已成为社交媒体和其他在线服务平台的核心组成部分。它们通过分析用户行为和偏好&#xff0c;为用户提供个性化的内容&#xff0c;从而提高用户满意度和平台的参与度。推荐系统不仅能够增强用户体验&#xff0c;还能显著提升广告投放的效率…

angular入门基础教程(一)环境配置与新建项目

ng已经更新到v18了&#xff0c;我对他的印象还停留在v1,v2的版本&#xff0c;最近研究了下&#xff0c;与react和vue是越来越像了&#xff0c;所以准备正式上手了。 新官网地址:https://angular.cn/ 准备条件 nodejs > 18.0vscodeng版本18.x(最新的版本) {"name&qu…

C# Unity 面向对象补全计划 之 继承(字段与属性)

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列旨在通过补全学习之后&#xff0c;给出任意类图都能实现并做到逻辑上严丝合缝 Q&#xff1a;为什么要单讲继承字段与属性&#xff0c;不讲继承方法了吗&#x…

【SuperMap GIS 信创部署系列】-- 金蝶V10中间件

⼀、安装包获取 本⽂以10.2.1版本安装为例&#xff0c;官⽹下载iserver war包即可。 下载地址&#xff1a;http://support.supermap.com.cn/DownloadCenter/DownloadPage.aspx?id1852 ⼆、部署 iServer.war 1.解压安装包 将下载的supermap-iserver-10.2.1-war.zip包进⾏解…

基于单片机的步进电机系统设计方法探究

摘 要&#xff1a; 单片机是步进电机系统的重要组成部分&#xff0c;对于步进电机系统的驱动控制具有重要的影响。通过分析步进电机系统的工作原理&#xff0c;对步进电机系统进行规划设置。达到降低步进电机的使用成本&#xff0c;提高步进电机的效率与性能的效果。文章主要探…

WIFI 接收机和发射机同步问题+CFO/SFO频率偏移问题

Synchronization Between Sender and Receiver & CFO Correction 解决同步问题和频率偏移问题是下面论文的关键&#xff0c;接下来结合论文进行详细解读 解读论文&#xff1a;Verification and Redesign of OFDM Backscatter 论文pdf&#xff1a;https://www.usenix.org/s…

当自动驾驶遇上扩散模型(Panacea): 生成自动驾驶BEV数据集

Abstract 在自动驾驶领域&#xff0c;对高质量的标注训练数据的需求日益增加。在本文中&#xff0c;我们提出了Panacea&#xff0c;这是一种创新的方法&#xff0c;用于生成驾驶场景中的全景和可控视频&#xff0c;能够生成无限数量的多样化、标注的样本&#xff0c;对于自动驾…

Mojo函数

正如在语言基础中提到的&#xff0c;Mojo支持两种类型的函数&#xff1a;def和fn函数。您可以在任何函数中使用这两种声明方式&#xff0c;包括main()函数&#xff0c;但它们具有不同的默认行为&#xff0c;如本页面所述。 我们认为def和fn都有很好的用例&#xff0c;并且不认…