Skywalking 简介

2 Skywalking基础

2.1 agent的使用

2.1.1Linux下Tomcat7和8中使用

在这里插入图片描述

将资源文件下的apache-tomcat-8.5.47.tar.gz文件上传至虚拟机/usr/local/skywalking目录下,然后解压:

tar -zxvf apache-tomcat-8.5.47.tar.gz

在这里插入图片描述

1.将war包上传至

/usr/local/skywalking/apache-tomcat-8.5.47/webapps/

2.编辑

/usr/1ocal/skywa1king/apache-tomcat-8.5.47/bin/catalina.sh

3.文件,在文件顶部添加:

CATALNA_OPTS="$CATALINA_OPTS -javaagent:/usr/1ocal/skywalking/apache-
skywalking-apm-bin/agent/skywalking-agent.jar";
export CATALINA_OPTS

在这里插入图片描述

4.修改tomcat启动端口

在这里插入图片描述

5.bin目录下q启动

./startup.sh & tail -f …/logs/catalina.out

6.api访问

ip:port/application_name/{prefix}/{api_name}

7.SkyWalking UI 查看UI

2.1.2 Windows下 Tomcat7和8中使用( 了解)

Windows下只需要修改ftomcat目录/bin/catalina.bat文件的第一行为:

set “CATALINA_OPTS=-javaagent:/path/to/skywalking-agent/skywalking-agent.jar”

2.1.3 Spring Boot中使用

1 修改agent.config

在这里插入图片描述

1、首先我们复制一份agent,防止与tomcat使用的冲突。

cd /usr/1ocal/skywalking/apache-skywalking-apm-bin/ cp -r agent agent_boot
vi agent boot/config/agent.config

修改配置中的应用名为:

//The service name in Ul
agent.service_name=${SW_AGENT_NAME:skywalking_boot}

2 上传jar包

2、将资源文件夹中skywalking_springboot.jar文件上传到/usr/1ocal/skywalking目录下。 Cotroller层代码如下,提供了一个正常访问的接口和一个异常访问接口:
package com.itcast.skywalking_springboot.controller;

3.使用命令启动spring boot项目:

在这里插入图片描述

java -javaagent:/usr/1ocal/skywalking/apache-skywalking-apm- bin/agent_boot/skywalking-agent.jar -Dserver.port=8082 -jar skywalking_springboot.jar &

使用jar包启动的项目如果需要集成skywalking,需要添加-javaagent参数,参数值为agent的jar包梭子啊位置。

-Dserver.port参数用于指定端口号,防止与tomcat冲突。
末尾添加&后台运行模式启动Spring Boot项目。
此时我们可以访问ttp://虚拟机P:8082/sayBoo地址来进行访问,访问之后稍等片刻访问Skywalking的U页面。

4 api调用
5 webUI访问

在这里插入图片描述

2.2 SkyWalking常用插件

2.2.1配置覆盖

在之前的案例中,我们每次部署应用都需要复制一份agent,修改其中的服务名称,这样显得非常麻烦。可以使用Skywalking提供的配置覆盖功能通过启动命令动态指定服务名,这样agent只需要部署一份即可。Skywalking支持的几种配置方式:

1)系统配置(System properties)

使用skywalking.+配置文件中的配置名作为系统配置项来进行覆盖.
为什么需要添加前缀?

agent的系统配置和环境与目标应用共享,所以加上前缀可以有效的避免冲突。

案例:
通过如下进行agent.service_name的覆盖

-Dskywalking.agent.service_name=skywalking_mysql

2)探针配置(Agent options)

Add the properties after the agent path inJVM arguments.

-javaagent:/path/to/skywalking-agent.jar=[option1]=[value1].[option2]=[va1ue2]

·案例
通过如下进行agent.service_name的覆盖

-javaagent:/path/to/skywalking-agent.jar=agent.service_name=skywalking_mysql

·特殊字符
如果配置中包含分隔符(,或者=),就必须使用引号包裹起来

-javaagent:/path/to/skywalking-agent.jar=agent.ignore_suffix=’.jpg…jpeg’

3)系统环境变量(System environment variables),

案例
由于agent.service_name配置项如下所示:

// The service name in UI
agent.service_name=${Sw_AGENT_NAME:Your_ApplicationName}

可以在环境变量中设置SW_AGENT_NAME的值来指定服务名。

5)覆盖优先级

探针配置》系统配置》系统环境变量》配置文件中的值

所以我们的启动命令可以修改为:

java -javaagent:/usr/1ocal/skywa1king/apache-skywalking-apm-
bin/agent_mysql/skywalking-agent.jar
-Dskywalking.agent.service_name=skywalking_mysql -jar skywalking_mysql.jar &

或者

java -javaagent:/usr/1ocal/skywa1king/apache-skywalking-apm-
bin/agent_mysql/skywalking-agent.jar=agent.service_name=skywalking_mysql -jar skywalking_mysql.jar&

2.4 agent原理

上文中我们知道,要使用Skywalking去监控服务,需要在其VM参数中添加“-
javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent/skywalking-agentjar"。这里就使用到了java agent技术。
Java agent是什么?
Java agent是java命令的一个参数。参数javaagent可以用于指定一个jar包。

1.这个jar包的MANIFEST.MF文件必须指定Premain-Class项。
2. Premain-Class指定的那个类必须实现premain()方法。

当Java虚拟机启动时,在执行main函数之前,JVM会先运行-javaagent所指定jar包内Premain-Class这个类的premain方法。

如何使用java agent?
使用java agent需要几个步骤:

1.定义一个MANIFEST.MF文件,必须包含Premain-Class选项,通常也会加入Can-Redefine- Classes和Can-Retransform-Classes选项。
2.创建一个Premain-Class指定的类,类中包含premain方法,方法逻辑由用户自己确定。
3.将premain的类和MANIFEST.MF文件打成jar包。
4.使用参数-javaagent:jar包路径启动要代理的方法。

demo 工程

1.创建agent工程

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import java.lang.instrument.Instrumentation;
pblic class PreMainAgent {
public static void premain(string agentparam, Instrumentation inst){ 
       	System.out.println("premain执行");
       	System.out.println(agentparam); }
]

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.创建application工程

在这里插入图片描述
在这里插入图片描述

public class Main {
public static void main(string[] args){
System.out.println("main方法执行"); }
]

在这里插入图片描述

在这里插入图片描述

//当两个参数的premain方法存在时,调用两个参数的方法
//当两个参数的premain方法不存在时,调用一个参数的方法

2.5 统计方法调用时间

Skywalking中对每个调用的时长都进行了统计,这一小节中我们会使用ByteBuddy和Java agent技术来统计方法的调用时长。
Byte Buddy是开源的、基于Apache2.0许可证的库,它致力于解决字节码操作和instrumentation APl的复杂性。 Byte Buddy所声称的目标是将显式的字节码操作隐藏在一个类型安全的领域特定语言背后。通过使用Byte
Buddy,任何熟悉Java编程语言的人都有望非常容易地进行字节码操作。Byte Buddy提供了额外的API来生成Java agent,可以轻松的增强我们已有的代码。
添加依赖:

<dependencies>
	<dependency>
		<groupId>net.bytebuddy</groupId>
		<artifactId>byte-buddy</artifactId>
		<version>1.9.2</version>
	</dependency>
	<dependency>
		<groupId>net.bytebuddy</groupId>
		<artifactId>byte-buddy-agent</artifactId> 
		<version>1.9.2</version>
	</dependency>
</dependencies>

在这里插入图片描述

//type指定Jagent拦截的包名,以lcom.agent作为前级
//指定了transformer
//将配置安装到Instrumentation

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.6 Open Tracing 介绍

之前的课程中已经简单介绍过Open Tracing一些基础概念,OpenTracing通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现。OpenTracing中最核心的概念就是Trace。

1.Trace的概念

在广义上,一个trace代表了一个事务或者流程在(分布式)系统中的执行过程。在OpenTracing标准中,trace是多个span组成的一个有向无环图(DAG),每一个span代表trace中被命名并计时的连续性的执行片段。

在这里插入图片描述例如客户端发起的一次请求,就可以认为是一个Trace。将上面的图通过Open Tracing的语义修改完之后做可视化,得到下面的图:

在这里插入图片描述
图中每一个色块其实就是一个span。

2.Span的概念

一个Span代表系统中具有开始时间和执行时长的逻辑运行单元,span之间通过嵌套或者顺序排列建立逻辑因果关系。
Span里面的信息包括:操作的名字,开始时间和结束时间,可以附带多个key:value构成的Tags(key必须是String,value可以是String,bool或者数字),还可以附带Logs信息(不一定所有的实现都支持)也是key:value形式。
下面例子是一个Trace,里面有8个Span:
在这里插入图片描述一个span可以和一个或者多个span间存在因果关系。OpenTracing定义了两种关系:Childof和
FollowsFrom。这两种引用类型代表了子节点和父节点间的直接因果关系。未来,OpenTracing将支持非因果关系的span引用关系。(例如:多个span被批最处理,span在同一个队列中,等等)
ChildOf很好理解,就是父亲Span依赖另一个孩子Span。比如函数调用,被调者是调用者的孩子,比如说RPC调用,服务端那边的Span,就是ChildOf客户端的。很多并发的调用,然后将结果聚合起来的操作,就构成了ChildOf关系。
如果父亲Span并不依赖于孩子Span的返回结果,这时可以说它他构成FollowsFrom关系。
在这里插入图片描述

如图所示,左边的每一条追踪代表一个Trace,而右边时序图中每一个节点就是一个Span。

3.Log的概念

每个span可以进行多次Logs操作,每一次Logs操作,都需要一个带时间戳的时间名称,以及可选的任意大小的存储结构。
如下图是一个异常的Log:
在这里插入图片描述
如下图是两个正常信息的Log,它们都带有时间戳和对应的事件名称、消息内容。
在这里插入图片描述

4.Tags的概念

每个span可以有多个键值对(key:value)形式的Tags,Tags是没有时间戳的,支持简单的对span进行注解和补充。
如下图就是一个Tags的详细信息,其中记录了数据库访问的SQL语句等内容。
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值