SkyWalking是一个面向分布式服务架构的应用性能管理工具,可以通过SkyWalking的Agent来收集服务的信息并进行分析。SkyWalking默认使用Elasticsearch作为数据存储和查询引擎,可以将采集到的数据发送到Elasticsearch进行存储。
1.使用Spring Initializr创建一个新的Spring Boot项目,并添加SkyWalking依赖:
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>${skywalking.version}</version>
</dependency>
2.配置SkyWalking
skywalking:
agent:
service_name: my-service # 应用名称
collector:
grpc:
address: 127.0.0.1:11800 # SkyWalking收集器的地址
trace:
ignore_enhance_classes: org.apache.skywalking.apm.toolkit.opentracing.SkywalkingTracer
3.启用Elasticsearch传输插件
在application.yml或application.properties中添加如下Elasticsearch的配置:
spring.data.elasticsearch.cluster-nodes=http://localhost:9200
4.编写SkyWalking数据查询API
定义一个SkyWalking数据查询API,查询采集到的SkyWalking数据:
java
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
import org.apache.skywalking.apm.toolkit.trace.TraceSegment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SkyWalkingDataController {
@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;
@GetMapping("/skywalking")
public ResponseEntity<String> skywalking() {
TraceContext.getCurrent().createLocalSpan("skywalking");
TraceSegment traceSegment = TraceContext.getTraceSegment();
elasticsearchRestTemplate.index(new TraceSegmentEntity(traceSegment));
return ResponseEntity.ok("TraceSegment saved.");
}
}
在以上代码中,我们将采集到的SkyWalking数据写入到了Elasticsearch中。