Skywalking常用外掛
配置覆蓋
可以使用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介面能被看到。