diff --git a/README.md b/README.md index cfae381..651df76 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,74 @@ public class Main { } ``` +### Tracing with OpenTelemetry + +To enable distributed tracing with OpenTelemetry in opengemini-client-java: + +1.Add dependencies: + +```xml + + io.opentelemetry + opentelemetry-api + ${opentelemetry.version} + + + io.opentelemetry + opentelemetry-exporter-jaeger-grpc + ${opentelemetry.version} + +``` + +2.Configure tracer and register interceptor: + +```java +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.exporter.jaeger.JaegerGrpcSpanExporter; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.SdkTracerProvider; +import io.opentelemetry.sdk.trace.export.BatchSpanProcessor; +import io.opentelemetry.semconv.ResourceAttributes; +import io.opengemini.client.api.Configuration; +import io.opengemini.client.api.Address; +import io.opengemini.client.interceptor.OtelInterceptor; +import java.util.Collections; + +public class TracingExample { + public static void main(String[] args) { + // Create OpenGemini client + Configuration configuration = Configuration.builder() + .addresses(Collections.singletonList(new Address("127.0.0.1", 8086))) + .build(); + OpenGeminiClient openGeminiClient = new OpenGeminiClient(configuration); + + // Configure OpenTelemetry tracer + JaegerGrpcSpanExporter exporter = JaegerGrpcSpanExporter.builder() + .setEndpoint("http://localhost:14250") + .build(); + + SdkTracerProvider tracerProvider = SdkTracerProvider.builder() + .addSpanProcessor(BatchSpanProcessor.builder(exporter).build()) + .setResource(Resource.create( + Attributes.of(ResourceAttributes.SERVICE_NAME, "opengemini-client-java") + )) + .build(); + + Tracer tracer = OpenTelemetrySdk.builder() + .setTracerProvider(tracerProvider) + .build() + .getTracer("opengemini-client-java"); + + // Register interceptor + OtelInterceptor otelInterceptor = new OtelInterceptor(); + otelInterceptor.setTracer(tracer); + openGeminiClient.addInterceptors(otelInterceptor); + } +} +``` ## Contribution Welcome to [join us](CONTRIBUTION.md) diff --git a/README_CN.md b/README_CN.md index 492cff4..a24992c 100644 --- a/README_CN.md +++ b/README_CN.md @@ -111,6 +111,75 @@ public class Main { } } ``` + +### 使用OpenTelemetry进行链路追踪 + +在opengemini-client-java中启用OpenTelemetry分布式追踪: + +1.添加依赖: + +```xml + + io.opentelemetry + opentelemetry-api + ${opentelemetry.version} + + + io.opentelemetry + opentelemetry-exporter-jaeger-grpc + ${opentelemetry.version} + +``` + +2.配置追踪器并注册拦截器: + +```java +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.exporter.jaeger.JaegerGrpcSpanExporter; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.SdkTracerProvider; +import io.opentelemetry.sdk.trace.export.BatchSpanProcessor; +import io.opentelemetry.semconv.ResourceAttributes; +import io.opengemini.client.api.Configuration; +import io.opengemini.client.api.Address; +import io.opengemini.client.interceptor.OtelInterceptor; +import java.util.Collections; + +public class TracingExample { + public static void main(String[] args) { + // 创建 OpenGemini 客户端 + Configuration configuration = Configuration.builder() + .addresses(Collections.singletonList(new Address("127.0.0.1", 8086))) + .build(); + OpenGeminiClient openGeminiClient = new OpenGeminiClient(configuration); + + // 配置 OpenTelemetry tracer + JaegerGrpcSpanExporter exporter = JaegerGrpcSpanExporter.builder() + .setEndpoint("http://localhost:14250") // Jaeger 收集器地址 + .build(); + + SdkTracerProvider tracerProvider = SdkTracerProvider.builder() + .addSpanProcessor(BatchSpanProcessor.builder(exporter).build()) // 批量处理 span + .setResource(Resource.create( + Attributes.of(ResourceAttributes.SERVICE_NAME, "opengemini-client-java") // 设置服务名称 + )) + .build(); + + Tracer tracer = OpenTelemetrySdk.builder() + .setTracerProvider(tracerProvider) + .build() + .getTracer("opengemini-client-java"); + + // 注册拦截器 + OtelInterceptor otelInterceptor = new OtelInterceptor(); + otelInterceptor.setTracer(tracer); + openGeminiClient.addInterceptors(otelInterceptor); + } +} +``` ## 贡献 欢迎[加入我们](CONTRIBUTION_CN.md)