通过SkyWalking为应用埋点并上报链路数据至可观测链路 OpenTelemetry 版后,可观测链路 OpenTelemetry 版即可开始监控应用,您可以查看应用拓扑、调用链路、异常事务、慢事务和SQL分析等一系列监控数据。本文介绍如何使用SkyWalking Rust Agent埋点并上报应用数据。
前提条件
已安装protobuf。
macOS
brew install protobuf
Debian-base
sudo apt install protobuf-compiler
背景信息
SkyWalking是一款广受欢迎的国产APM(Application Performance Monitoring,应用性能监控)产品,主要针对微服务、Cloud Native和容器化(Docker、Kubernetes、Mesos)架构的应用。SkyWalking的核心是一个分布式追踪系统。
Skywalking-rust是SkyWalking的Rust Agent官方库,可以通过接入skywalking-rust实现对Rust应用的监控,skywalking-rust目前对Rust应用的自动埋点支持较差,需要使用者手动添加埋点。
示例Demo
示例Demo仓库地址:SkyWalking Demo
该Demo基于Rust的Web框架hyper实现了一个简单的HTTP Server,并使用skywalking-rust手动添加埋点,向可观测链路 OpenTelemetry 版控制台上报数据。
用SkyWalking为Rust应用手动埋点
在Rust项目引入SkyWalking依赖。
说明本文中以SkyWalking 0.8.0版本为例。
方法一:直接在cargo.toml中添加依赖
# 在[dependency]下添加 skywalking = { version = "0.8.0", features = ["vendored"] }
方法二:在终端执行命令
cargo add skywalking --features vendored
在源代码中导入SkyWalking模块。
# 在需要埋点的源代码中导入模块 use skywalking::{reporter::grpc::GrpcReporter, trace::tracer::Tracer};
手动埋点。
// 使用EntrySpan、LocalSpan、ExitSpan完成调用链手动埋点,使用这三种Span,可以完成全链路追踪。 // EntrySpan: 入口Span,服务端使用EntrySpan从Http请求中拿到链路追踪上下文。 // LocalSpan: 本地Span,同一进程内可使用该Span埋点。 // ExitSpan: 出口Span,客户端使用ExitSpan向Http请求中注入链路追踪上下文。 // 跨进程的调用链,可以参照下面: // client.rs: let mut ctx = tracer.create_trace_context(); { do something... let span = ctx.create_exit_span("operation1", "remote_peer"); } // server.rs: let mut ctx = tracer.create_trace_context(); { let span = ctx.create_entry_span("operation1"); do something... }
配置接入点和令牌。
您可以通过前提条件获取接入点地址和鉴权Token。
// <endpoint>是接入点地址,<token>是接入点鉴权Token,<service_name>是应用名称。 let endpoint = "<endpoint>"; let token = "<token>"; let service_name = "<service_name>"; let instance_name = "<instance_name>"; let reporter = GrpcReporter::connect(endpoint).await?; let reporter = reporter.with_authentication(token); let tracer = Tracer::new(service_name, instance_name, reporter.clone());
重启应用。
常见问题
构建Rust项目时报错如下:
问题原因:缺少protobuf,您可以参考前提条件安装protobuf。