SkyWalking 介绍及部署

  • 1、SkyWalking简介
  • 2、SkyWalking的搭建
    • 2.1 部署Elasticsearch
    • 2.2 部署SkyWalking-Server
    • 2.3 部署SkyWalking-UI
  • 3、应用接入
    • 3.1 jar包部署方式
    • 3.2 dockerfile方式
    • 3.3 DockerFile示例
  • 4、SkyWalking UI 界面说明
    • 4.1 仪表盘
      • 4.1.1 APM
        • (1)全局维度
        • (2)服务维度
        • (3)实例维度
        • (4)端点维度
      • 4.1.2 数据库
      • 4.1.3 Istio、SelfObservability 、WebBrowser
    • 4.2 拓扑图
    • 4.3 追踪
    • 4.4 性能剖析
    • 4.5 日志
    • 4.6 告警
  • 5、其他相关的配置
    • 5.1 数据清理机制
    • 5.2 数据存储和写入优化(针对ES)
    • 5.3 链路过长问题
  • 6、参考文档:

随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响。

面对以上情况, 我们就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这时候 APM(Application Performance Management应用性能管理)工具就该闪亮登场了。

1、SkyWalking简介

  • 官方网站
  • SkyWalking 文档中文版(社区提供)
  • 官方demo网站 (账号:skywalking 密码:skywalking

SkyWalking 它是一款优秀的国产 APM 工具,包括了分布式追踪、性能指标分析、应用和服务依赖分析等。

SkyWalking架构分为三部分:

   - skyWalking-collector:链路数据归集器,相当于Skywalking的服务端

   - skyWalking-ui:SkyWalking的web可视化平台

   - skyWalking-agent:探针,与应用容器绑定在一起,启动时通过javaagent进行JVM级别的AOP,收集和发送数据到归集器

SkyWalking 的核心是数据分析和度量结果的存储平台,通过 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量数据,SkyWalking Collecter 对数据进行分析和聚合,存储到 Elasticsearch、H2、MySQL、TiDB 等。

说明: SkyWalking 的核心是数据分析和度量结果的存储平台,通过 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量数据,SkyWalking Collecter 对数据进行分析和聚合,

存储到 Elasticsearch、H2、MySQL、TiDB 等其一即可,最后我们可以通过 SkyWalking UI 的可视化界面对最终的结果进行查看。Skywalking 支持从多个来源和多种格式收集数据:多种语言的 Skywalking Agent 、Zipkin v1/v2 、Istio 勘测、Envoy 度量等数据格式。

整体架构看似模块有点多,但在实际上还是比较清晰的,主要就是通过收集各种格式的数据进行存储,然后展示。

所以搭建 Skywalking 服务我们需要关注的是 SkyWalking Collecter、SkyWalking UI 和 存储设备,SkyWalking Collecter、SkyWalking UI 官方下载安装包内已包含,最终我们只需考虑存储设备即可。

2、SkyWalking的搭建

2.1 部署Elasticsearch

注意:版本与SkyWalking版本对应

 展开源码

docker run --name elasticsearch -p 9200:9200  -p 9300:9300 \-e "discovery.type=single-node" \-e ES_JAVA_OPTS="-Xms1g -Xmx1g" \--restart always \-v /home/docker/elastic/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \-v /home/docker/elastic/elasticsearch/data:/usr/share/elasticsearch/data \-v /home/docker/elastic/elasticsearch/plugins:/usr/share/elasticsearch/plugins \--net network_network \-d elasticsearch:7.17.0

2.2 部署SkyWalking-Server

apache-skywalking-apm-es7-8.3.0.tar.gz 下载地址

  • 拉取镜像

 展开源码

docker pull apache/skywalking-oap-server:8.3.0-es7

  • 运行 skywalking-oap-server 容器     SW_STORAGE:数据存储配置,支持H2,MySQL、ES等,这里改为 elasticsearch7

          配置文件路径:apache-skywalking-apm-bin-es7/config/application.yml

SkyWalking 默认使用12800作为Rest API通信端口,11800为gRPC API端口

 展开源码

docker run -d --name skywalking-oap \
-e TZ=Asia/Shanghai \
-p 12800:12800 -p 11800:11800 \
--link elasticsearch:elasticsearch \
--net network_network \
-e SW_STORAGE=elasticsearch7 \
-e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 \
apache/skywalking-oap-server:8.3.0-es7
 

2.3 部署SkyWalking-UI

配置文件路径:apache-skywalking-apm-bin-es7/webapp/webapp.yml

  • 拉取镜像

 展开源码

docker pull apache/skywalking-ui:8.3.0
  • 运行 skywalking-ui 容器

 展开源码

docker run -d --name skywalking-ui \
-e TZ=Asia/Shanghai \
-p 8088:8080 \
--link skywalking-oap:skywalking-oap \
--net network_network \
-e SW_OAP_ADDRESS=skywalking-oap:12800 \
apache/skywalking-ui:8.3.0

3、应用接入

注意:agent 中指定服务名(SW_AGENT_NAME),不同的服务用不同的服务名区分。如果服务名相同,相当于是多个实例。

3.1 jar包部署方式

  • 将skywalking安装包下的agent整个目录(apache-skywalking-apm-bin-es7/agent),拷贝到应用机器所在的目录,如:/home/docker/

  • 在启动的脚本上添加 skywalking-agent配置:

配置参数

描述

-javaagent

配置skywalking-agent.jar位置,确保这个参数在-jar参数之前

-DSW_AGENT_NAME

配置应用名称,用于区分不用的服务

-DSW_AGENT_COLLECTOR_BACKEND_SERVICES

配置server的服务地址

 展开源码

java -javaagent:/home/docker/agent/skywalking-agent.jar
-DSW_AGENT_NAME=gateway
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
-Dserver.port=9999 -Xmx128m -Xms128m -XX:MaxMetaspaceSize=128m
-jar gateway.jar 

3.2 dockerfile方式

  • 将skywalking安装包下的agent整个目录(apache-skywalking-apm-bin-es7/agent),拷贝到应用机器所在的目录,如:/home/docker/

  • docker-compose.yml

docker-compose.yml 展开源码

  # skywalking-aopskywalking-oap:image: apache/skywalking-oap-server:8.3.0-es7container_name: skywalking-oaplinks:- elasticsearch:elasticsearchrestart: alwaysports:- 11800:11800- 12800:12800environment:TZ: Asia/ShanghaiSW_STORAGE: elasticsearch7SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200JAVA_OPTS: "-Xms512m -Xmx512m"networks:- network# skywalking-uiskywalking-ui:image: apache/skywalking-ui:8.3.0container_name: skywalking-uilinks:- skywalking-oap:skywalking-oaprestart: alwaysports:- 8088:8080environment:TZ: Asia/ShanghaiSW_OAP_ADDRESS: skywalking-oap:12800networks:- network
 

4、SkyWalking UI 界面说明

4.1 仪表盘

4.1.1 APM

APM 应用性能管理,分为全局维度、服务维度、实例维度、端点维度

(1)全局维度
  • Service Load:服务每分钟请求数
  • Slow Services:慢响应服务,服务耗时最长的一次耗时时间
  • Un-Health Services(Apdex):服务性能健康指数,0~1
  • Slow EndPoints:慢响应的端点
  • Global Response Latency:不同百分比的响应延时时间
  • Global Heatmap:热力图

(2)服务维度
  • Service Apdex:服务性能指数
  • Service Apdex(折线图):
  • Service Avg Response Time:平均响应时间
  • Global Response Time Percentile:百分比的响应时间
  • Successful Rate:请求成功率
  • Successful Rate(折线图):不同时间的请求的成功率
  • Service Load:每分钟请求数
  • Service Load(折线图):不同时间的每分钟请求数
  • Service Instances Load:每个服务实例的每分钟请求数
  • Slow Service Instances:服务实例的最大延时
  • Service Instances Successful Rate:服务实例的请求成功率

(3)实例维度
  • Service Instances Load:服务实例的每分钟请求数
  • Service Instances Successful Rate:服务实例的请求成功率
  • Service Instances Latency:服务实例的响应延时
  • JVM CPU:占用CPU的百分比
  • JVM Memory:内存占用大小
  • JVM GC Time:垃圾回收时间,包括Young GC 和 Old GC
  • JVM GC Count:垃圾回收次数
  • JVM Thread Count:JVM 创建线程数量
  • CLR xxx:

(4)端点维度
  • EndPoint Load in Current Service:每个端点的每分钟请求数
  • Slow Endpoints in Current Service:每个端点的最慢请求时间
  • Successful Rate in Current Service:每个端点的请求成功率
  • Endpoint Load:当前端点每个时间段的请求数据
  • Endpoint Avg Response Time:端点请求的平均响应时间
  • Endpoint Response Time Percentile:当前端点每个时间段的响应时间占比
  • Endpoint Successful Rate:当前端点每个时间段的请求成功率

4.1.2 数据库

展示数据库的响应时间、响应时间分布、吞吐量、SLA、慢SQL等详细信息,便于直观展示数据库状态

  • Database Avg Response Time:数据库平均响应时间
  • Database Access Successful Rate:数据库的访问成功率
  • Database Traffic:数据库每分钟请求数
  • Database Access Latency Percentile:数据库不同比例的响应时间
  • Slow Statements:前N个慢查询
  • All Database Loads:所有数据库中的每分钟请求数排名
  • Un-Health Databas:所有数据库的请求成功率排名

4.1.3 Istio、SelfObservability 、WebBrowser

这几个比较次用,用得不多,不详细介绍

  • Istio:结合Istio,适配容器、采集容器信息
  • SelfObservability:监控SkyWalking自身信息
  • WebBrowser:8.2.0 版本新增的浏览器,提供PV、UV等数据。需结合 Skywalking-Client-js 使用

SkyWalking自监控(SelfObservability)的配置:

修改配置文件apache-skywalking-apm-bin-es7/config/application.yml

修改内容:

Prometheus-fetcher 的selector修改为:default

telemetry的selector修改为:prometheus

SelfObservability:

4.2 拓扑图

服务之间的调用关系。每条连线的颜色反应了服务之间的调用延迟情况,可以非常直观的看到服务与服务之间的调用状态,连线中间的点能点击,可显示两个服务之间链路的平均响应时间、吞吐率以及SLA等信息

4.3 追踪

显示请求的代码内部执行情况,一个完整的请求都经过了哪些服务、执行了哪些代码方法、每个方法的执行时间、执行状态等详细信息,快速定位代码问题

  • 左侧:端点信息列表(API接口列表),红色——异常请求;蓝色——正常请求
  • 右侧:请求追踪列表,请求中连接各端点的先后顺序和时间

4.4 性能剖析

  • 服务:需要分析的服务
  • 端点:链路监控中的端点名称(可以在链路追踪中查看端点信息)
  • 监控时间:采集数据的开始时间
  • 监控持续时间:采集数据的时间长度
  • 起始监控时间:多少毫秒后开始进行采集
  • 监控间隔:多少毫秒采集一次
  • 最大采样数:最大采集多少样本

4.5 日志

参考:微服务链路追踪 Skywalking 生成 Trace ID 以及 logback 日志归集-CSDN博客

在应用代码中添加依赖

 展开源码

<!--skywalking trace工具包-->
<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId><version>${skywalking.version}</version>
</dependency>

4.6 告警

参考:Skywalking-告警功能实践_from(endpoint.*).filter(responsecode in [404,500,5-CSDN博客

5、其他相关的配置

5.1 数据清理机制

配置文件路径:apache-skywalking-apm-bin-es7/config/application.yml

 展开源码

core:selector: ${SW_CORE:default}default:# 数据清理机制的开关,默认开启enableDataKeeperExecutor: ${SW_CORE_ENABLE_DATA_KEEPER_EXECUTOR:true}# 数据清理定时器周期,默认5,单位分钟dataKeeperExecutePeriod: ${SW_CORE_DATA_KEEPER_EXECUTE_PERIOD:5}# 明细记录数据的有效期,默认3天recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:3} # Unit is day# 指标数据的有效期,默认7天metricsDataTTL: ${SW_CORE_METRICS_DATA_TTL:7} # Unit is day

5.2 数据存储和写入优化(针对ES)

主要是进行bulk 批量写入调整,buffer 优化等,具体参见《elasticsearch写入速度优化》

5.3 链路过长问题

往往就是循环中调用其他服务 或 循环操作数据库;或者 定时任务重跑批处理

方案:

1、不加入链路追踪,直接ignore url 配置忽略

2、业务代码处理,数据库批量更新操作

6、参考文档:

【1】Skywalking分布式追踪与监控(Skywalking分布式追踪与监控)

【2】破解 Java Agent 探针黑科技 (破解 Java Agent 探针黑科技)

【3】elasticsearch 写入速度优化 (elasticsearch 写入速度优化)

【4】SkyWalking 数据清理机制 (SkyWalking 数据清理机制)

【5】开启Apache SkyWalking的自监控 (开启Apache SkyWalking的自监控)

【6】Skywalking-告警功能实践 (Skywalking-告警功能实践

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

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

相关文章

UBUNTU22.04无法安装nvidia-driver-550 依赖于 nvidia-dkms-550 (<= 550.54.15-1)

类似的报错信息&#xff0c;就是卡在了nvidia-dkms-550无法安装 Loading new nvidia-550.40.07 DKMS files… Building for 6.5.0-15-generic Building for architecture x86_64 Building initial module for 6.5.0-15-generic ERROR: Cannot create report: [Errno 17] File e…

前端canvas项目实战——在线图文编辑器(十):小地图MiniMap(上)

目录 前言一、 效果展示二、 实现步骤0. 行动前的思考1. 为小地图更新「背景图」2. 为小地图更新「滑动窗口」2.1 获取新的滑动窗口「宽高」2.2 获取新的滑动窗口「位置」3. 为小地图更新「遮罩」后记前言 上一篇博文中,我们引入了「逻辑画布」的概念,让整个工具的页面看起来…

JPA 3万字面试宝典

目录 什么是JPA? JPA和Hibernate有什么区别? 什么是ORM(对象关系映射)? 什么是Entity?

【机器学习】在电子商务(淘*拼*京*—>抖)的应用分析

机器学习与大模型&#xff1a;电子商务的新引擎 一、电子商务的变革与挑战二、机器学习与大模型的崛起三、机器学习与大模型在电子商务中的应用实践个性化推荐精准营销智能客服库存管理与商品定价 四、总结与展望 随着互联网的飞速发展&#xff0c;电子商务已经成为我们生活中不…

NDIS小端口驱动(四)

NDIS中断相关 1. 注册和取消注册中断&#xff1a; 微型端口驱动程序调用 NdisMRegisterInterruptEx 来注册中断。 驱动程序分配并初始化 NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS 结构&#xff0c;以指定中断特征和函数入口点&#xff0c;驱动程序将结构传递给 NdisMRegister…

【三剑客和正则表达式】

文章目录 学习目标一、什么是三剑客1.三剑客grep2.三剑客sed3.三剑客awk4.正则过滤例子15.正则过滤例子2 总结 学习目标 1.学会使用 grep 2.学会使用 sed 3.学会使用 awk 4.学会使用正则表达式一、什么是三剑客 正则三剑客&#xff1a;grep sed awk 1.三剑客grep # 擅长过滤…

【MySQL精通之路】查询优化器的使用(8)

MySQL通过影响查询计划评估方式的系统变量、可切换优化、优化器和索引提示以及优化器成本模型提供优化器控制。 服务器在column_statistics数据字典表中维护有关列值的直方图统计信息&#xff08;请参阅第10.9.6节“Optimizer统计信息”&#xff09;。与其他数据字典表一样&am…

#Ethereum 现货ETF 问题汇总 转

专题&#xff1a; #Ethereum 现货ETF 问题汇总&#xff0c;包括了多数小伙伴们的疑问&#xff0c;有任何忽略请留言给我&#xff0c;我会补充。 1. #ETH 现货ETF何时公布&#xff1f; 一般来说会在北京时间的5月24日凌晨2点至4点之间&#xff0c;不排除稍微延后到凌晨6点的可能…

基于大语言模型的应用

在AI领域&#xff0c;大语言模型已成为备受瞩目的焦点&#xff0c;尤其在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;其应用愈发广泛。BLM作为一种多任务语言建模方法&#xff0c;旨在构建一个具备多功能的强大模型。在给定文本和查询条件下&#xff0c;该模型能…

【深度学习】YOLOv8训练,交通灯目标检测

文章目录 一、数据处理二、环境三、训练 一、数据处理 import traceback import xml.etree.ElementTree as ET import os import shutil import random import cv2 import numpy as np from tqdm import tqdmdef convert_annotation_to_list(xml_filepath, size_width, size_he…

海山数据库(He3DB)代理ProxySQL使用详解:(二)功能实测

读写分离实测 ProxySQL官方demo演示了三种读写分离的方式&#xff1a;使用不同的端口进行读写分离、使用正则表达式进行通用的读写分离、使用正则和digest进行更智能的读写分离。最后一种是针对特定业务进行的优化调整&#xff0c;也可将其归结为第二种方式&#xff0c;下边分…

MySQL备份与日志练习

1、创建对mysql数据库test1的定时备份任务&#xff0c;频率是每周一的2点 create database test1;crond -e0 2 * * 1 mysqldump -u root -pAdmin123 --databases test1 > /opt/test1.sql2、test1中有t1、t2、t3三张表&#xff0c;要求只备份t2这张表 mysqldump -u root -pA…

Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明

Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明 目录 Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明 一、简单介绍 二、单变量非线性变换 三、自…

知识图谱数据预处理笔记

知识图谱数据预处理笔记 0. 引言1. 笔记1-1. \的转义1-2. 特殊符号的清理1-3. 检查结尾是否正常1-4. 检查<>是否存在1-5. 两端空格的清理1-6. 检查object内容长时是否以<开始 0. 引言 最近学习知识图谱&#xff0c;发现数据有很多问题&#xff0c;这篇笔记记录遇到的…

软件设计师备考笔记(九):数据库技术基础

文章目录 一、基本概念二、数据模型&#xff08;一&#xff09;基本概念&#xff08;二&#xff09;E-R模型&#xff08;三&#xff09;数据模型 三、关系代数&#xff08;一&#xff09;关系数据库的基本概念&#xff08;二&#xff09;五种基本的关系代数运算&#xff08;三&…

React hooks - forwardRef+useImperativeHandle

forwardRefuseImperativeHandle React.forwardRef用法useImperativeHandle用法第三个参数的用法 React.forwardRef与useImperativeHandle配合使用注意事项 React.forwardRef用法 1.创建一个 能够接受到ref属性的React 组件。 ref 用来获取实例&#xff0c;但函数组件不存在实例…

bugku 网络安全事件应急响应

开启靶场&#xff1a; 开始实验&#xff1a; 使用Xshell登录服务器&#xff0c;账号及密码如上图。 1、提交攻击者的IP地址 WP: 找到服务器日志路径&#xff0c;通常是在/var/log/&#xff0c;使用cd /var/log/&#xff0c;ls查看此路径下的文件. 找到nginx文件夹。 进入ng…

hyperopt、optuna、gridsearch、randomsearch自动调参

开始使⽤hyperopt进⾏⾃动调参 algo partial(tpe.suggest, n_startup_jobs1) best fmin(lightgbm_factory, space, algoalgo, max_evals20, pass_expr_memo_ctrlNone) RMSE lightgbm_factory(best) print(‘best :’, best) print(‘best param after transform :’) argsD…

【Jenkins】Centos7安装Jenkins(环境:JDK11,tomcat9,maven3.8)

目录 Jenkins部署环境Maven安装1.上传安装包2.解压3.配置Maven环境变量4.使配置文件立即生效5.校验Maven安装6.Maven配置阿里云仓库7.Maven配置依赖下载位置 Git安装安装监测安装 JDK17安装1.查看旧版本JDK2.卸载旧版本JDK3.查看是否卸载干净4.创建java目录5.下载JDK11安装包6.…

“开源与闭源大模型:数据隐私、商业应用与社区参与的多维比较“

开源大模型和闭源大模型各有其优势和局限&#xff0c;它们在数据隐私、商业应用和社区参与方面的表现也各有不同。以下是对这三个方面进行的分析&#xff1a; 方向一&#xff1a;数据隐私 开源大模型&#xff1a; 优点&#xff1a;开源模型通常允许用户和开发者查看和修改代…