在之前的案例中,我们每次部署应用都需要复制一份agent,修改其中的服务名称,这样显得非常麻 烦。可以使用Skywalking提供的配置覆盖功能通过启动命令动态指定服务名,这样agent只需要部署一 份即可。Skywalking支持的几种配置方式:
系统配置(System properties)
使用 skywalking. + 配置文件中的配置名作为系统配置项来进行覆盖.
-Dskywalking.agent.service_name=skywalking_mysql
探针配置(Agent options)
Add the properties after the agent path in JVM arguments.
-javaagent:/path/to/skywalking-agent.jar=[option1]=[value1],[option2]=[value2]
案例
通过 如下进行 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'
系统环境变量(System environment variables)
案例
由于agent.service_name配置项如下所示:
# The service name in UI
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
可以在环境变量中设置SW_AGENT_NAME的值来指定服务名。
覆盖优先级
探针配置 > 系统配置 >系统环境变量 > 配置文件中的值
所以我们的启动命令可以修改为
java -javaagent:/usr/local/skywalking/apache-skywalking-apm-
bin/agent_mysql/skywalking-agent.jar -
Dskywalking.agent.service_name=skywalking_mysql -jar skywalking_mysql.jar &
或者
java -javaagent:/usr/local/skywalking/apache-skywalking-apm-
bin/agent_mysql/skywalking-agent.jar=agent.service_name=skywalking_mysql -jar skywalking_mysql.jar &
Skywalking提供我们Trace工具包,用于在追踪链路时进行信息的打印或者获取对应的追踪ID。我们使 用Spring Boot编写一个案例进行测试。
pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.1.10.RELEASEversion>
<relativePath/>
parent>
<groupId>com.sf.saasgroupId>
<artifactId>skywalking_pluginsartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>skywalking_pluginsname>
<description>Demo project for Spring Bootdescription>
<properties>
<java.version>1.8java.version>
<skywalking.version>6.5.0skywalking.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.apache.skywalkinggroupId>
<artifactId>apm-toolkit-traceartifactId>
<version>${skywalking.version}version>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
添加了skywalking trace的工具包, 该工具包版本需要与skywalking版本相同, 这里采用6.5.0
<dependency>
<groupId>org.apache.skywalkinggroupId>
<artifactId>apm-toolkit-traceartifactId>
<version>${skywalking.version}version>
dependency>
PluginController
import org.apache.skywalking.apm.toolkit.trace.ActiveSpan;
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PluginController {
//获取trace id,可以在RocketBot追踪中进行查询
@GetMapping("/getTraceId")
public String getTraceId(){
//使当前链路报错,并且提示报错信息
ActiveSpan.error(new RuntimeException("Test-Error-Throwable"));
//打印info信息
ActiveSpan.info("Test-Info-Msg");
//打印debug信息
ActiveSpan.debug("Test-debug-Msg");
return TraceContext.traceId();
}
}
使用TraceContext.traceId()可以打印出当前追踪的ID,方便在RocketBot中进行搜索。
ActiveSpan提供了三个方法进行信息的打印
部署方式
java -javaagent:/usr/local/skywalking/apache-skywalking-apm-
bin/agent/skywalking-agent.jar -
Dskywalking.agent.service_name=skywalking_plugins -jar skywalking_plugins.jar &
可以看到追踪ID已经打印出来,然后我们在RocketBot上进行搜索
可以搜索到对应的追踪记录,但是显示调用是失败的,这是因为使用了ActiveSpan.error方法。点开追 踪的详细信息:
异常的信息包含了以下几个部分:
除了异常信息之外,还有info信息和debug信息也都会被打印
在开发过程中,有一些端点(接口)并不需要去进行监控,
比如Swagger相关的端点。这个时候我们就
可以使用Skywalking提供的过滤插件来进行过滤。
在skywalking_plugins中编写两个接口进行测试:
FilterController
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class FilterController {
//此接口可以被追踪
@GetMapping("/include")
public String include(){
return "include";
}
//此接口不可被追踪
@GetMapping("/exclude")
public String exclude(){
return "exclude";
}
}
部署方式
cd /usr/local/skywalking/apache-skywalking-apm-bin
cp optional-plugins/apm-trace-ignore-plugin-6.4.0.jar plugins/apm-trace-ignore- plugin-6.4.0.jar
3.启动skywalking_plugins应用,等待启动成功
java -javaagent:/usr/local/skywalking/apache-skywalking-apm-
bin/agent/skywalking-agent.jar -
Dskywalking.agent.service_name=skywalking_plugins -
Dskywalking.trace.ignore_path=/exclude jar skywalking_plugins.jar &
这里添加-Dskywalking.trace.ignore_path=/exclude参数来标识需要过滤哪些请求,支持 Ant Path表达式:
4、调用接口,接口地址为:
http://虚拟机IP地址:8088/exclude
http://虚拟机IP地址:8088/include
5、在追踪中进行查看:
exclude接口已经被过滤,只有include接口能被看到