SkyWalking安装部署

一、概念

1、什么是 APM 系统?

APM(Application Performance Management)即应用性能管理系统,是对企业系统即时监控以实现对应用程序性能管理和故障管理的系统化的解决方案。应用性能管理,主要指对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低总拥有成本。

APM 系统是可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。

目前主流的产品都是借助 Google 的 Dapper 论文实现的,以下是 Dapper 的翻译版本:《Dapper,大规模分布式系统的跟踪系统》

主流的 APM 系统:
1. 日志:ELK Stack
ELK Stack 是一个流行的工具套件,功能涵盖监控、日志和数据可视化。它由 ElasticSearch, Logstash, and Kibana 三部分组成。其中,Elasticsearch 负责搜索和分析,Logstash 是日志聚积器,而 Kibana 则提供华丽的可视化仪表盘。

2. 指标:Prometheus
Prometheus 是一套开源的系统监控报警框架。它受启发于 Google 的 Brogmon 监控系统,由工作在 SoundCloud 的前 google 员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。
2016 年,Prometheus 正式加入 Cloud Native Computing Foundation(CNCF)基金会的项目,成为受欢迎度仅次于 Kubernetes 的项目。2017 年底发布了基于全新存储层的 2.0 版本,能更好地与容器平台、云平台配合。
Prometheus 作为新一代的云原生监控系统,目前已经有超过 650+位贡献者参与到 Prometheus 的研发工作上,并且超过 120+项的第三方集成。

3. 链路追踪:Skywalking
一个开源的可观测平台,用于从服务和云原生基础设施收集,分析、聚合及可视化数据。SkyWalking 提供了一种简便的方式来清晰地观测分布式系统,甚至横跨多个云平台。SkyWalking 更是一个现代化的应用程序性能监控(Application Performance Monitoring)系统, 尤其专为云原生、基于容器的分布式系统设计。

2、为什么使用 Skywalking?

2.1、核心功能

  • 服务、服务实例、端点(URI)指标分析
  • 根本原因分析。在运行时上分析由进程内代理和ebpf分析器支持的代码。
  • 业务拓扑图分析
  • 服务实例和端点(URI)依赖关系分析
  • 服务和端点检测速度慢
  • 性能优化
  • 分布式跟踪和上下文传播
  • 数据库访问指标。检测慢速数据库访问语句(包括SQL语句)
  • 消息队列性能和消耗延迟监视
  • 浏览器性能监控
  • 基础设施(虚拟机、网络、磁盘等)监控
  • 跨指标、跟踪和日志的协作
  • 告警

2.2 特点

  • java生态,功能丰富
  • 社区活跃,迭代迅速
  • 链路追踪、拓扑分析的能力强:
  • 插件丰富,探针无侵入。
  • 采用先进的流式拓扑分析设计
  • 多语言支持
  • 微内核 + 插件的架构,存储、集群管理、使用插件集合都可以进行自由选择。
  • 为多种开源项目提供了插件,为 Tomcat、 HttpClient、Spring、RabbitMQ、MySQL 等常见基础设施和组件提供了自动探针。
  • 优秀的可视化效果。

3、关键概念

SkyWalking 为 服务(service), 服务实例(service instance), 以及 端点(endpoint) 提供了可观测能力。服务(Service), 实例(Instance) 以及 端点(Endpoint) 等概念在如今随处可见

  1. 服务
    表示对请求提供相同行为的一组工作负载。 在使用打点代理或 SDK 的时候,你可以定义服务的名字,SkyWalking 还可以使用在 Istio 等平台中定义的名称。
  2. 服务实例
    上述的一组工作负载中的每一个工作负载称为一个实例。就像 Kubernetes 中的 pods 一样,服务实例未必就是操作系统上的一个进程。但当你在使用打点代理的时候,一个服务实例实际就是操作系统上的一个真实进程。
  3. 端点
    对于特定服务所接收的请求路径, 如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名。

4、架构

组件:

  1. 探针(Agent)
    Agent 运行在各个服务实例中,负责采集服务实例的 Trace 及 Metrics 信息数据,然后通过 HTTP/gRPC 方式上报给 SkyWalking 服务端

  2. 服务端(OAP)
    OAP SkyWalking 服务端
    分析引擎(Analysis Core) 接收上报的数据,进行流式分析,最终将分析结果写入到存储中
    查询引擎(Query Core) 响应 UI 界面的查询请求,将数据查询出来,返回给界面展示

  3. 存储(Storage)
    通过开放的插件化的接口存放 SkyWalking 数据. 你可以选择一个既有的存储系统, 如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere 管理),也可以选择自己实现一个存储系统. 当然, 我们非常欢迎你贡献新的存储系统实现。

  4. 用户界面(UI)
    一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。

5、设计目标

  1. 保持可观测性
    不管目标系统如何部署, SkyWalking 总要提供一种方案或集成方式来保持对目标系统的观测, 基于此, SkyWalking 提供了数种运行时探针。

  2. 拓扑结构
    拓扑结构, 性能指标和追踪一体化. 理解分布式系统的第一步是通过观察其拓扑结构图. 拓扑图可以将复杂的系统在一张简单的图里面进行可视化展现. 基于拓扑图,运维支撑系统相关人员需要更多关于服务/实例/端点/调用的性能指标. 链路追踪(trace)作为详细的日志, 对于此种性能指标来说很有意义, 如你想知道什么时候端点延时变得很长, 想了解最慢的链路并找出原因. 因此你可以看到, 这些需求都是从大局到细节的, 都缺一不可. SkyWalking 集成并提供了一系列特性来使得这些需求成为可能, 并且使之易于理解.

  3. 轻量级
    有两个方面需要保持轻量级. (1) 探针, 我们通常依赖于网络传输框架, 如 gRPC. 在这种情况下, 探针就应该尽可能小, 防止依赖库冲突以及虚拟机的负载压力(例如 JVM 永久代内存占用压力). (2) 作为一个观测平台, 在你的整个项目环境中只是次要系统, 因此我们使用自己的轻量级框架来构建后端核心服务. 所以你不需要部署并维护大数据相关的平台, SkyWalking 在技术栈方面应该足够简单。

  4. 可插拔
    SkyWalking 核心团队提供了许多默认实现, 但这肯定是不够的, 也不可能适用于每一种场景, 因此我们提供了大量的特性来支持可插拔功能。

  5. 可移植

在这里插入图片描述

二、快速入门

1、部署 OAP 服务

1.1 下载安装包

找到SkyWalking 下载页面
1)下载 Foundations 中的 SkyWalking APM,选择 Distribution 版本下载,Source 为源码版本
2))在 Agents 中下载你需要的 Agent,这里我们下载 Java Agent 同样也选择 Distribution 版本
SkyWalking APM下载地址
Java Agent下载地址
Elasticsearch下载地址

1.2 修改配置文件并启动服务

1)解压 apache-skywalking-apm-9.3.0.tar.gz 并修改 config/applications.yml 文件
找到 storage > selector 将其修改 ${SW_STORAGE:elasticsearch}
根据自己需求决定是否修改命名空间、es连接地址、用户名密码等

2)进入 bin 目录,选择启动脚本运行
startup.sh:会先后启动 OAP 服务与 UI 服务
oapService.sh:单独启动 OAP 服务,第一次启动需初始化数据,因此可能会比较慢
webappService.sh:单独启动 UI 服务
任意服务检查是否启动成功,看 /logs 下面的日志文件即可

1.3 Skywalking UI 可视化

配置文件:<skywalking_home>/webapp/application.yml 文件
可以修改启动端口与 oap 服务地址
启动命令:<skywalking_home>/bin/webappService.sh 文件
检查是否启动成功:<skywalking_home>/logs/ 查看日志是否有报错信息

1.4 基于 Agent 监控 SpringBoot 应用

三种方式:
1)通过修改 agent/config/agent.config 文件来配置探针
2)通过提前编写命令行启动脚本,可以为每一个服务指定专属的 agent 探针配置
创建startup.sh脚本:

#!/bin/bash
# SkyWalking Agent 启动脚本
export SW_AGENT_NAME=skywalking-demo # 探针名称,一般指定为监控应用的名称
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 #   Collector 地址,指向到 OAP 服务
export SW_AGENT_SPAN_LIMIT=1000 # 配置链路的最大 Span 数量,默认为 300
export JAVA_AGENT=-javaagent:<探针 jar 的位置>
java $JAVA_AGENT -jar skywalking-demo-1.0.0-SNAPSHOT.jar # 启动程序

3)IDE 开发工具
通过 idea 启动配置中添加如下 jvm 参数

-javaagent:/Users/wzc/devtools/skyWalking/skywalking-agent/skywalking-agent.jar # Agent本地jar包路径
-DSW_AGENT_NAME=skywalking-demo # 自定义Agent探针名称
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=8.140.50.3:11800 # OAP服务端地址

1.5 搭建并使用案例

OAP服务端

# 解压skywalking-apm
tar -zxvf apache-skywalking-apm-9.3.0.tar.gz# 启动
bin/startup.sh
# 查看日志
tail -f -n200 logs/oap.log 
tail -f -n200 logs/skywalking-oap-server.log # 修改默认访问页面端口为18080
vi  webapp/application.yml
serverPort: ${SW_SERVER_PORT:-18080}# 重启webappService
bin/webappService.sh 
tail -f -n200 logs/skywalking-webapp.log # 访问可视化UI页面
http://ip:18686

Agent端:基于idea配置探针,在vm中添加下面配置参数

-javaagent:/Users/wzc/devtools/skyWalking/skywalking-agent/skywalking-agent.jar # Agent本地jar包路径
-DSW_AGENT_NAME=skywalking-demo # 自定义Agent探针名称
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.100.101:11800 # OAP服务端地址

二、实战进阶

1、安装ElasticSearch

ElasticSearch安装

#解压
tar -zxvf elasticsearch-7.17.0-linux-aarch64.tar.gz /usr/local/elasticsearch-7.17.0# 创建所属组和所属用户
[root@k8s-node1 local]# groupadd elasticsearch
[root@k8s-node1 local]# useradd elasticsearch -g elasticsearch
[root@k8s-node1 local]# passwd elasticsearch
[root@k8s-node1 local]# chown -R elasticsearch:elasticsearch elasticsearch-7.17.0/
[root@k8s-node1 local]# su elasticsearch# 虚拟机改小一点内存大小。生产环境下官方建议:小于机器内存的一半
vi config/jvm.options
-Xms1g
-Xmx1g# 启动
bin/elasticsearch -d# 测试
curl http://localhost:9200

2、SkyWalking持久化存储

方式一:Elasticsearch
启动一个 ES 服务,sw9 以后的版本配置 es 无需区分 elasticsearch 和 elasticsearch7,统一支持 6,7,8 三个版本

# 修改数据源
vi config/application.yml
storage:selector: ${SW_STORAGE:elasticsearch}

方式二:MySQL

修改 application.yml 中 storage 部分的内容
storage:selector: ${SW_STORAGE:mysql}mysql:properties:jdbcUrl: ${SW_JDBC_URL: "jdbc:mysql://localhost:3306/skywalking"}dataSource.user: ${SW_DATA_SOURCE_USER: root}dataSource.password ${SW_DATA_SOURCE_PASSWORD: admin}# 默认是不直接支持 mysql 的,需要将 mysql 数据库驱动包拷贝到  oap-libs 目录下才可以

3、微服务项目链路追踪

Spring Cloud:

为每一个微服务启动时设置探针参数即可

PS:SkyWalking 默认针对 Spring Cloud 应用不追踪网关服务,若要追踪网关,需要将 agent/optional-plugins 下的 gateway 插件和 webflux 插件拷贝到 agent/plugins 目录下

4、日志采集

打印日志时引入链路追踪 id,将日志上报到 OAP 服务端进行存储

1、引入依赖

<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version>8.14.0</version>
</dependency>

2、Logback 配置

    <configuration scan="true" scanPeriod=" 5 seconds"><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern></layout></encoder></appender><appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><discardingThreshold>0</discardingThreshold><queueSize>1024</queueSize><neverBlock>true</neverBlock><appender-ref ref="STDOUT"/></appender><root level="INFO"><appender-ref ref="ASYNC"/></root></configuration>

3、gRPC 导出日志

通过 gRPC reporter 可以将日志数据导出到 OAP 服务,可以直接在 SkyWalking UI 界面看到服务的日志信息

# 只需要在 Logback 配置文件中加入如下配置即可
<appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern></layout></encoder></appender>

5、告警通知

通过 alarm-setting.yml 文件配置规则

1、告警规则

metrics-name:指标名称,也是 OAL 脚本中的指标名。可以配置告警的指标有:服务、实例、端点、服务关系、实例关系、端点关系。只支持 long, double, int 类型。
op:操作符
threshold:阈值
period:告警规则多久被检查一次,是一个时间窗口
count:在一个时间窗口内,满足 op 超过阈值的次数达到 count 值,就会触发告警
slience-period:在时间 N 中触发报警后,在 N + silence-period 这段时间内不告警
message:告警时通知的消息

2、Webhook

配置 webhooks 在触发告警时,会自动调用该接口

接口

@PostMapping("/notify")
public void alertingNotify(@RequestBody List<AlarmMessage> messages) {log.info("[告警通知] 告警消息:{}", JSON.toJSONString(messages));
}模型对象
@ToString
@Getter
@Setter
public class AlarmMessage {private int scopeId;private String name;private String id0;private String id1;private String alarmMessage;private long startTime;private String ruleName;
}

3、告警通知到钉钉

# 增加如下规则以及配置,可以实现将告警消息通知到钉钉机器人
dingtalkHooks:textTemplate: |-{"msgtype": "text","text": {"content": "Apache SkyWalking Alarm: \n %s."}}    webhooks:- url: https://oapi.dingtalk.com/robot/send?access_token=dummy_tokensecret: dummysecret

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bean拷贝组件(注解驱动)方案设计与落地

一、背景 数据流转在各层之间的过程&#xff0c;应当是改头换面的&#xff0c;字段属性数量&#xff0c;属性名称&#xff08;一般不变&#xff0c;但也有重构时出现变化的情况&#xff09;&#xff0c;类型名称&#xff08;普遍变化例如BO、VO、DTO&#xff09;。对于转换的业…

华为OD机试 - 字符串加密(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

一文弄懂基于图搜索的路径规划算法JPS(有python代码)

基于图搜索路径规划-JPS 关注晓理紫并回复jps获取代码 [晓理紫] 1、 Jump Point Search&#xff08;跳点搜索&#xff09; 核心&#xff1a;寻找到规划中的对称性 Path 并打破他们&#xff0c;从而避免扩展大量无用节点。 A*搜索的节点JPS 搜索的节点 1.1 概念 强迫邻居 节点…

沙丁鱼优化算法(Sardine optimization algorithm,SOA)求解23个函数MATLAB

一、沙丁鱼优化算法 沙丁鱼优化算法(Sardine optimization algorithm,SOA)由Zhang HongGuang等人于2023年提出&#xff0c;该算法模拟沙丁鱼的生存策略&#xff0c;具有搜索能力强&#xff0c;求解精度高等特点。 沙丁鱼主要以浮游生物为食&#xff0c;这些生物包括细菌、腔肠…

【脑机接口论文与代码】 基于自适应FBCCA的脑机接口控制机械臂

Brain-Controlled Robotic Arm Based on Adaptive FBCCA 基于自适应FBCCA的脑机接口控制机械臂论文下载&#xff1a;算法程序下载&#xff1a;摘要1 项目介绍2 方法2.1CCA算法2.2FBCCA 算法2.3自适应FBCCA算法 3数据获取4结果4.1脑地形图4.2频谱图4.3准确率 5结论 基于自适应FB…

SpingMyc项目如何搭建

目录 一、创建项目 二、环境搭建 &#xff08;1&#xff09;引入相关依赖 &#xff08;2&#xff09;在web.xml中配置前端控制器DispatcherServlet &#xff08;3&#xff09;编写SpringMVC核心配置文件springmvc.xml 三、测试是否成功 &#xff08;1&#xff09;编写控…

C++项目实战——基于多设计模式下的同步异步日志系统-⑤-实用工具类设计

文章目录 专栏导读获取系统时间time介绍 getTime函数设计判断文件是否存在stat介绍exists函数设计 获取文件所在路径find_last_of介绍path函数设计 创建文件所在目录mkdir介绍find_first_of介绍函数createDirectory设计 实用工具类整理 专栏导读 &#x1f338;作者简介&#xf…

Linux 修改SSH的显示样式,修改终端shell显示的样式,美观更改

要修改SSH的显示样式&#xff0c;您可以使用自定义的PS1&#xff08;提示字符串1&#xff09;变量来更改命令行提示符的外观。在您的情况下&#xff0c;您想要的格式似乎包括日期和时间&#xff0c;以及当前目录。以下是一个示例PS1设置&#xff0c;可以实现您所描述的样式&…

使用 Webpack 从 0 到 1 构建 Vue3 项目 + ts

使用 Webpack 从 0 到 1 构建 Vue3 项目 1.初始化项目结构2.安装 webpack&#xff0c;补充智能提示3.初步编写 webpack.config.js3.1设置入口文件及出口文件3.2 指定 html 模板位置 4.配置 运行/打包 命令&#xff0c;首次打包项目5.添加 Vue 及相关配置5.1安装并引入 vue5.2 补…

Vue3+移动端适配屏幕+默认横屏展示

效果图展示区: 1. 想要把px自动转换单位为vw需要项目根目录.postcssrc.js中进行配置以下代码 module.exports {plugins: {autoprefixer: {}, // 用来给不同的浏览器自动添加相应前缀&#xff0c;如-webkit-&#xff0c;-moz-等等"postcss-px-to-viewport": {unitTo…

【面试题】前端开发中如何高效渲染大数据量?

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 【国庆头像】- 国庆爱国 程序员头像&#xff01;总有一款适合你&#xff01; 在日常工作中&#xff0c;较少的能遇到一次性往页面中插入大量数据的场景…

易点易动固定资产管理系统:助力事业单位实现固定资产智能化管理

在日常运营中&#xff0c;事业单位面临着大量固定资产的管理挑战。为了提高资产利用率、降低运营成本&#xff0c;并确保资产安全与准确的账务管理&#xff0c;事业单位亟需一款强大而智能的固定资产管理系统。易点易动固定资产管理系统应运而生&#xff0c;为事业单位提供了一…

vue网页缓存页面与不缓存页面处理

在主路由页面 <template><div style"height: 100%"><!-- 缓存 --><keep-alive><router-view v-if"$route.meta.keepAlive"></router-view></keep-alive><!-- 不缓存 --><router-view v-if"!$rou…

ChatGPT 和 Elasticsearch:APM 工具、性能和成本分析

作者&#xff1a;LUCA WINTERGERST 在本博客中&#xff0c;我们将测试一个使用 OpenAI 的 Python 应用程序并分析其性能以及运行该应用程序的成本。 使用从应用程序收集的数据&#xff0c;我们还将展示如何将 LLMs 成到你的应用程序中。 在之前的博客文章中&#xff0c;我们构建…

Can‘t load the model for ‘stabilityai/sd-vae-ft-mse‘

Can’t load the model for ‘stabilityai/sd-vae-ft-mse’. If you were trying to load it from ‘https://huggingface.co/models’, make sure you don’t have a local directory with the same name. Otherwise, make sure ‘stabilityai/sd-vae-ft-mse’ is the correct…

iOS pod repo push 报错 ld: file not found: libarclite_iphoneos.a 问题解决方案

背景 Xcode 升级 14.3 之后&#xff0c;在Xcode 运行项目会收到以下错误 File not found: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a 项目中可以通过以下方法解决编译错误&#xff0c;就是在 …

铝及铝合金产品标识知识学习记录

声明 本文是学习GB-T 42916-2023 铝及铝合金产品标识. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1— 圆铸锭表面&#xff1b; 2——切完头尾的圆铸锭尾端(引锭头端)。 图 9 圆铸锭刻痕标识示意图(一) 示 例 2 : 5A06 牌号、铸态、尺寸规格为…

uniapp微信小程序《隐私保护协议》弹窗处理流程

背景 《关于小程序隐私保护指引设置的公告》 《小程序隐私协议开发指南》 流程 1.第一步 必须设置且审核通过&#xff01;&#xff01;&#xff01; 2.第二步 uniapp在manifest.json中添加&#xff01;&#xff01;&#xff01; /* 在 2023年9月15号之前&#xff0c;在 ap…

景联文科技可为多模态语音翻译模型提供数据采集支持

8月22日Facebook的母公司Meta Platforms发布了一种能够翻译和转录数十种语言的人工智能模型——SeamlessM4T&#xff0c;可以在日常生活中或者商务交流中为用户提供更便捷的翻译和转录服务。 相较于传统的文本翻译&#xff0c;这项技术的最大区别在于它可以实现端到端的语音翻译…

4.4-Spring源码循环依赖终极讲解

回顾上期内容 new 容器 new AnnotateBeanDefinitionReader 的时候创建很多创世纪的类&#xff0c;其中有一个ConfigurationPostProcessor是用来解析配置类的&#xff0c;将其注册起来存到Bean定义的Map中【这个类是基于Bean工厂后置处理器的】 这一步是将配置类注册到Bean定…