SkyWalking介绍和Docker环境下部署

news2024/11/14 13:25:04

一、Skywalking概述

1、Skywalking介绍

Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计,它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪,性能指标分析和服务依赖分析等。

Skywalking是一个国产的开源框架,2015年由吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等,跟Pinpoint一样采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持,目前增长势头强劲,社区活跃。

2、Skywalking架构图

整个架构,分成上、下、左、右四部分

1)上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。Agent 收集 SkyWalking Tracing 数据,传递给服务器。

2)下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。

3)右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。

4)左部分 SkyWalking UI :负责提供控台,查看链路等等。

SkyWalking 三个核⼼部分

Agent(探针):Agent 运⾏在各个服务实例中,负责采集服务实例的 Trace 、Metrics 等数据,然后通过 gRPC ⽅式上报给 SkyWalking 后端。

OAP:SkyWalking 的后端服务,⼀个是负责接收 Agent 上报上来的 Trace、Metrics 等数据,进⾏流式分析,最终将分析得到的结果写⼊持久化存储中,另⼀个是负责响应 SkyWalking UI 界⾯发送来的查询请求。

UI 界⾯:展示查询结果。

SkyWalking Agent实现原理

SkyWalking Agent是通过Java Agent的方式随着应用程序一起启动,然后通过Byte Buddy库动态插入埋点信息收集Trace信息。Java Agent本质上就是⼀个Jar包,它会调⽤ Instrumentation API,来修改已经加载到JVM中的字节码。Instrumentation API由JVM提供⽤来修改已加载类的⼯具,可以提供Java语⾔编写的插桩功能,动态修改运⾏时代码的能⼒。

Java Agent具有两种加载⽅式

静态加载

这种⽅式下,在应⽤程序的任何代码被执⾏之前,就加载Agent以修改字节码。静态加载需要使⽤JVM 的-javaagent参数:

java -javaagent:agent.jar -jar application.jar
# 可以同时加载多个Agents
java -javaagent:agentA.jar -javaagent:agentB.jar application.jar

动态加载

这种⽅式下,Agent可以在运⾏时动态按需的加载。动态加载需要调⽤Java Attach API。

// 根据PID查找⽬标JVM,并连接到JVM 
VirtualMachine jvm = VirtualMachine.attach(jvmPid); 
// 加载Agent 
jvm.loadAgent(agentFile.getAbsolutePath()); 
// 取消到JVM的连接 
jvm.detach();

Instrumentation

      Instrumentation是java提供的修改已经加载到JVM中字节码的API。使⽤ Instrumentation,开发者可以构建⼀个独⽴于应⽤程序的代理程序(Agent),⽤来监测和协助运⾏在 JVM 上的程序,甚⾄能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为灵活的运⾏时虚拟机监控和Java 类操作了,这样的特性实际上提供了⼀种虚拟机级别⽀持的 AOP 实现⽅式,使得开发者⽆需对 JDK 做任何升级和改动,就可以实现某些 AOP 的功能了。JVM级别AOP。

        在JDK 1.6以前,instrument只能在JVM刚启动开始加载类时生效,而在JDK 1.6之后,instrument支持了在运行时对类定义的修改。在 Java SE 6 ⾥⾯,instrumentation 包被赋予了更强⼤的功能:启动后的instrument、本地代码 (native code)instrument,以及动态改变 classpath 等等。这些改变,意味着 Java 具有更强的动态控制、解释能⼒,它使得 Java 语⾔变得更加灵活多变。

二、Docker环境下使用docker-compose部署Skywalking

1、相关组件及版本

序号

组件

版本

备注

1

skywalking-oap-server

8.9.1

2

elasticsearch

7.17.6

3

skywalking-ui

8.9.1

4

apache-skywalking-java-agent

8.15.0

2、创建目录赋予权限

mkdir elasticsearch
cd elasticsearch
mkdir logs
mkdir data
chmod 775 logs
chmod 775 data

3、准备docker-compose.yml文件

version: '3.3'
services:
  elasticsearch:
    image: elasticsearch:7.17.6
    container_name: elasticsearch
    restart: always
    ports:
      - 9200:9200
    environment:
      - "TAKE_FILE_OWNERSHIP=true" #volumes 挂载权限 如果不想要挂载es文件改配置可以删除
      - "discovery.type=single-node" #单机模式启动
      - "TZ=Asia/Shanghai" # 设置时区
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置jvm内存大小
    volumes:
      - ./elasticsearch/logs:/usr/share/elasticsearch/logs
      - ./elasticsearch/data:/usr/share/elasticsearch/data
     #- ./elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    ulimits:
      memlock:
        soft: -1
        hard: -1
  skywalking-oap-server:
    image: apache/skywalking-oap-server:8.9.1
    container_name: skywalking-oap-server
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
    restart: always
    ports:
      - 11800:11800
      - 12800:12800
    environment:
      SW_STORAGE: elasticsearch  # 指定ES版本
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
      TZ: Asia/Shanghai
    #volumes:
     #- ./oap/conf/alarm-settings.yml:/skywalking/config/alarm-settings.yml
  skywalking-ui:
    image: apache/skywalking-ui:8.9.1
    container_name: skywalking-ui
    depends_on:
      - skywalking-oap-server
    links:
      - skywalking-oap-server
    restart: always
    ports:
      - 8080:8080
    environment:
      SW_OAP_ADDRESS: http://skywalking-oap-server:12800
      TZ: Asia/Shanghai

3、执行启动服务命令

docker-compose up -d

4、访问UI地址http:${IP}:8080

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

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

相关文章

CentOS 7 安装私有平台OpenNebula

目录 一、配置yum源 二、配置数据库MySQL 2.1 安装MySQL 2.2 修改MySQL密码 2.3 创建项目用户和库 三、安装配置前端包 四、设置oneadmin账号密码 五、验证安装 5.1 命令行验证安装 5.2 数据存放位置 5.3 端口介绍 5.4 命令介绍 六、访问 6.1 设置语言 6.2 创建主…

【Python学习】Python学习8-Number

目录 【Python学习】Python学习8-Number 前言在变量赋值时被创建Python支持四种不同的数据类型整型(Int)长整型(long integers)浮点型(loating point real values)复数(complex numbers) Python Number 类型转换Python math 模块、cmath 模块Python数学函数Python随…

每日一题——LeetCode1021删除最外层括号1047消除字符串相邻重复字符串

这两道题基本上来说是差不多的,一个匹配并删除字符串中的( ) 一个匹配并删除字符串中相邻重复的元素,其实都是用到栈这种数据结构,通过匹配不同的条件使用入栈出栈操作保存或删除目标元素来实现。 1021.删除最外层括号 var removeOuterParent…

零售EDI:Petco EDI对接指南

Petco 始于1965年,是一家美国宠物零售商,提供各种宠物产品和服务以及某些类型的活体小动物。起初Petco只是一家邮购兽医用品公司,后发展为一家成熟的宠物食品和供应链的公司。Petco与其供应商之间是如何传输业务数据的呢? 通过EDI…

Qt QLineEdit文本框控件

文章目录 1 属性和方法1.1 占位字符串1.2 对齐方式1.3 回显模式1.4 读写控制1.5 格式控制1.6 信号和槽 2 实例2. 布局2.2 代码实现 QLineEdit 是Qt 中的文本框,准确地说是单行文本框,通常用于接受用户的输入。 比如用户输入用户名、密码等,都…

Windows安装Docker运行中间件(详细)

1、Docker Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接…

人类的失误、错误与机器的失误、错误

人类的失误和错误是指人类在认知、判断、决策和行动过程中出现的错误或差错。这些错误可能是由于认知偏差、信息不完全、判断错误、行为失控等原因造成的。人类的失误和错误是不可避免的,而且在很多领域都有广泛的存在,包括工作、学习、社交、交通等方面…

深入理解Java源码:提升技术功底,深度掌握技术框架,快速定位线上问题

为什么要看源码: 1、提升技术功底: 学习源码里的优秀设计思想,比如一些疑难问题的解决思路,还有一些优秀的设计模式,整体提升自己的技术功底 2、深度掌握技术框架: 源码看多了,对于一个新技术…

线性代数 --- 为什么LU分解中的下三角矩阵L的主对角线上都是1?

为什么LU分解中的下三角矩阵L的主对角线上都是1? 笔者的一些话: 为什么LU分解中L矩阵的主对角线上都是1?因为最近一段时间在研究LU分解的编程实现,这个问题也就时不时的从我脑子里面冒出来。但大多时候都是一闪而过,没有太在意。…

IIC Master 设计实现

写个IIC的主机来玩一玩。 仅100M时钟输入SCL波形工整,任意两个上升沿之间均为整数倍周期,占空比50%发送数据时SDA严格对其到SCL低电平正中间尽可能少的状态机不浪费资源数据逻辑和时序逻辑分离 接口设计中,我的思路是将数据与时序分离开&am…

数据结构-测试5

一、判断题 1.二叉树只能用二叉链表表示(F) 二叉树的存储结构有两种,顺序存储结构和链式存储结构 2. 装填因子是散列表的一个重要参数,它反映散列表的装满程度。(T) 装填因子越小,发生冲突的可能性越小 3. 在任何情况…

损失函数 - Focal Loss

b站账号 : Enzo_Mi 知识星球 : Enzo AI学习小组 | 小白分会 欢迎加入我的知识星球,一起来学习吧 ~ Focal Loss 1、Focal Loss 提出的背景2、正负样本数量不均衡问题 的解决 : baseline3、难分类样本/易分类样本 数量不均衡问题 的解决 : Focal Loss3、类别加权 Focal L…

1.7数算PPT选择汇总,PTA选择汇总,计算后缀表达式,中缀转后缀、前缀、快速排序

PTA选择汇总 在第一个位置后插入,注意是在后面插入,而不是前面;要移动49,为50-I,第25个的话,移25个 如果是插在前面,就移动50,N-I1,注意是插在前面还是后面 删第一个&a…

今日实践 — 附加数据库/重定向失败如何解决?

WMS数据库与重定向 前言正文如何建立数据库连接?第一步:打开SSMS,右击数据库,点击附加第二步:点击添加第三步:找到自己的数据库文件,点击确定按钮第四步:若有多个数据库,…

Hyperledger Fabric 管理链码 peer lifecycle chaincode 指令使用

链上代码(Chaincode)简称链码,包括系统链码和用户链码。系统链码(System Chaincode)指的是 Fabric Peer 中负责系统配置、查询、背书、验证等平台功能的代码逻辑,运行在 Peer 进程内,将在第 14 …

如何查找native服务的接口实现

以Netd为例: 首先adb看一下服务的接口: 接口文件是INetd,去源码找一下INetd.aidl 已经确定了接口API,对于native服务端的实现,一般的继承顺序为: 根据继承关系,对于BnXxx/XxxService 对象&…

IO类day02

JAVA IO java io可以让我们用标准的读写操作来完成对不同设备的读写数据工作. java将IO按照方向划分为输入与输出,参照点是我们写的程序. 输入:用来读取数据的,是从外界到程序的方向,用于获取数据. 输出:用来写出数据的,是从程序到外界的方向,用于发送数据. java将IO比喻为…

15个等轴视图设计的电动车汽车无人机等PR剪辑素材视频制作元素

包含15个等轴视图、等距视角电动车、汽车、无人机、沙漏、飞机等PR剪辑素材视频制作元素mogrt动画模板。 特征: 等距设计; 可以更改颜色; 分辨率:全高清(19201080); 持续时间:15秒&a…

第四站:C/C++基础-指针

目录 为什么使用指针 函数的值传递,无法通过调用函数,来修改函数的实参 被调用函数需要提供更多的“返回值”给调用函数 减少值传递时带来的额外开销,提高代码执行效率 使用指针前: 使用指针后: 指针的定义: 指针的含义(进阶): 空指针…

【C++进阶04】STL中map、set、multimap、multiset的介绍及使用

一、关联式容器 vector/list/deque… 这些容器统称为序列式容器 因为其底层为线性序列的数据结构 里面存储的是元素本身 map/set… 这些容器统称为关联式容器 关联式容器也是用来存储数据的 与序列式容器不同的是 其里面存储的是<key, value>结构的键值对 在数据检索时…