跳到主要内容

SkyWalking 插件开发环境搭建

概述

SkyWalking插件开发允许你扩展SkyWalking的功能,以满足特定监控需求。在开始开发之前,正确配置开发环境是至关重要的。本指南将详细介绍如何搭建SkyWalking插件开发环境,包括必要的工具、依赖项配置以及验证步骤。

准备工作

在开始之前,确保你的系统满足以下要求:

  • Java Development Kit (JDK) 8+:SkyWalking插件开发需要Java环境。
  • Apache Maven 3.6+:用于构建和管理项目依赖。
  • Git:用于克隆SkyWalking源代码。
  • IDE(推荐IntelliJ IDEA或Eclipse):提供代码编辑和调试支持。
提示

如果你尚未安装这些工具,请参考官方文档完成安装和配置。

步骤1:克隆SkyWalking源代码

首先,克隆SkyWalking的官方仓库到本地:

bash
git clone https://github.com/apache/skywalking.git
cd skywalking

切换到最新的稳定版本分支(例如v9.4.0):

bash
git checkout v9.4.0

步骤2:配置Maven依赖

SkyWalking插件开发依赖于SkyWalking的核心库。在项目的pom.xml中添加以下依赖:

xml
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-agent-core</artifactId>
<version>9.4.0</version>
<scope>provided</scope>
</dependency>
警告

确保<version>与你的SkyWalking版本一致。

步骤3:创建插件项目

使用Maven创建一个新的插件项目:

bash
mvn archetype:generate \
-DgroupId=com.yourcompany.skywalking \
-DartifactId=skywalking-yourplugin \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false

进入项目目录并删除默认生成的App.javaAppTest.java文件:

bash
cd skywalking-yourplugin
rm src/main/java/com/yourcompany/skywalking/App.java
rm src/test/java/com/yourcompany/skywalking/AppTest.java

步骤4:编写插件代码

创建一个新的Java类,例如YourPlugin.java,并实现SkyWalking的插件接口:

java
package com.yourcompany.skywalking;

import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;

import java.lang.reflect.Method;

public class YourPluginInterceptor implements InstanceMethodsAroundInterceptor {
@Override
public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, MethodInterceptResult result) throws Throwable {
System.out.println("Before method execution: " + method.getName());
}

@Override
public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, Object ret) throws Throwable {
System.out.println("After method execution: " + method.getName());
return ret;
}

@Override
public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, Throwable t) {
System.err.println("Exception in method: " + method.getName());
}
}

步骤5:配置插件定义

src/main/resources目录下创建skywalking-plugin.def文件,定义插件的行为:

plaintext
yourplugin=com.yourcompany.skywalking.YourPluginInterceptor

步骤6:构建插件

使用Maven构建插件:

bash
mvn clean package

构建成功后,你会在target目录下找到生成的插件JAR文件(例如skywalking-yourplugin-1.0-SNAPSHOT.jar)。

步骤7:测试插件

将生成的插件JAR文件复制到SkyWalking Agent的plugins目录中,并启动SkyWalking Agent:

bash
cp target/skywalking-yourplugin-1.0-SNAPSHOT.jar ${SKYWALKING_AGENT_HOME}/plugins/
${SKYWALKING_AGENT_HOME}/bin/startup.sh
备注

${SKYWALKING_AGENT_HOME}是你的SkyWalking Agent安装目录。

实际案例

假设你需要监控一个自定义的Java方法调用,插件可以在方法执行前后打印日志。以下是一个简单的示例:

java
public class DemoService {
public void doSomething() {
System.out.println("Doing something...");
}
}

doSomething方法被调用时,插件会输出:

plaintext
Before method execution: doSomething
Doing something...
After method execution: doSomething

总结

通过以上步骤,你已经成功搭建了SkyWalking插件开发环境,并创建了一个简单的插件。接下来,你可以探索更多高级功能,例如自定义上下文传播或集成其他监控工具。

附加资源

  1. SkyWalking官方文档
  2. SkyWalking GitHub仓库
  3. Maven官方指南

练习

  1. 尝试修改插件代码,使其在方法执行前后记录时间戳。
  2. 创建一个新的插件,监控数据库连接池的使用情况。
  3. 将插件部署到本地SkyWalking Agent,并验证其功能。