配置覆蓋
可以使用Skywalking提供的配置覆蓋功能通過啟動命令動態指定服務名,這樣agent只需要部署一份即可。Skywalking支持的幾種配置方式:
系統配置(System properties)
使用 skywalking. + 配置文件中的配置名作為系統配置項來進行覆蓋.為什么需要添加前綴 ?agent的系統配置和環境與目標應用共享,所以加上前綴可以有效的避免沖突。
通過 如下進行 agent.service_name 的覆蓋
-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 -jarskywalking_mysql.jar &
獲取追蹤ID
Skywalking提供我們Trace工具包,用於在追蹤鏈路時進行信息的打印或者獲取對應的追蹤ID。我們使用Spring Boot編寫一個案例,也可以直接使用資源下的 skywalking_plugins.jar 進行測試。
pom:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--skywalking trace工具包-->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>${skywalking.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
PluginController:
@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提供了三個方法進行信息的打印:
error方法會將本次調用變為失敗狀態,同時可以打印對應的堆棧信息和錯誤提示。
info方法打印info級別的信息。
debug方法打印debug級別的信息。
部署方式
1、將 skywalking_plugins.jar 上傳至 /usr/local/skywalking 目錄下。
2、啟動skywalking_plugins應用,等待啟動成功。
[root@middleware skywalking-jar]# java -javaagent:/root/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=skywalking_plugins -Dskywalking.trace.ignore_path=/exclude -Dserver.port=8087 -jar skywalking_plugins.jar &
[5] 82425
[4] 已殺死 java -javaagent:/root/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=skywalking_plugins -Dskywalking.trace.ignore_path=/exclude -Dserver.port=8087 -jar skywalking_plugins.jar
[root@middleware skywalking-jar]# DEBUG 2020-11-25 10:32:10:952 main AgentPackagePath : The beacon class location is jar:file:/root/apache-skywalking-apm-bin/agent/skywalking-agent.jar!/org/apache/skywalking/apm/agent/core/boot/AgentPackagePath.class.
INFO 2020-11-25 10:32:10:956 main SnifferConfigInitializer : Config file found in /root/apache-skywalking-apm-bin/agent/config/agent.config.
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.10.RELEASE)
4 、調用接口,接口地址為: http://192.168.1.108:8088/getTraceId
5、此時如果頁面顯示
可以搜索到對應的追蹤記錄,但是顯示調用是失敗的,這是因為使用了 ActiveSpan.error方法。點開追
蹤的詳細信息:
異常的信息包含了以下幾個部分:
1.事件類型為error
2.調用方法時傳遞的異常類型RuntimeException
3.調用方法時傳遞的異常信息Test-Error-Throwable
4.異常堆棧
通過上述內容,我們可以根據業務來定制調用異常時的詳細信息。
除了異常信息之外,還有 info信息和debug信息也都會被打印。
過濾指定的端點
在開發過程中,有一些端點(接口)並不需要去進行監控,比如Swagger相關的端點。這個時候我們就可以使用Skywalking提供的過濾插件來進行過濾。在skywalking_plugins中編寫兩個接口進行測試:
@RestController
public class FilterController {
//此接口可以被追蹤
@GetMapping("/include")
public String include(){
return "include";
}
//此接口不可被追蹤
@GetMapping("/exclude")
public String exclude(){
return "exclude";
}
}
部署方式
1、將 skywalking_plugins.jar 上傳至 /usr/local/skywalking 目錄下。
2、將agent中的 /agent/optional -plugins/apm-trace-ignore-plugin-6.4.0.jar 插件拷貝到plugins目錄中。
3、啟動skywalking_plugins應用,等待啟動成功。
[root@middleware skywalking-jar]# java -javaagent:/root/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=skywalking_plugins -Dskywalking.trace.ignore_path=/exclude -Dserver.port=8087 -jar skywalking_plugins.jar &
exclude 接口已經被過濾,只有include接口能被看到。