1. 程式人生 > 實用技巧 >Skywalking常用外掛

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介面能被看到。