feature/otel-telemetry #31
61
src/otel.rs
Normal file
61
src/otel.rs
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
use opentelemetry::global::BoxedTracer;
|
||||||
|
use opentelemetry::{global, KeyValue};
|
||||||
|
use opentelemetry_appender_log::OpenTelemetryLogBridge;
|
||||||
|
use opentelemetry_otlp::WithExportConfig;
|
||||||
|
use opentelemetry_sdk::logs::{BatchLogProcessor, SdkLoggerProvider};
|
||||||
|
use opentelemetry_sdk::Resource;
|
||||||
|
|
||||||
|
pub fn global_tracer() -> BoxedTracer {
|
||||||
|
global::tracer("image-server")
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn init_tracing() {
|
||||||
|
let resources = Resource::builder()
|
||||||
|
.with_attributes([
|
||||||
|
KeyValue::new("service.name", "image-server"),
|
||||||
|
//TODO: Get this from somewhere
|
||||||
|
KeyValue::new("service.version", "1.0"),
|
||||||
|
])
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let span_exporter = opentelemetry_otlp::SpanExporter::builder()
|
||||||
|
.with_tonic()
|
||||||
|
.with_endpoint(std::env::var("OTLP_OTLS_ENDPOINT").unwrap())
|
||||||
|
.build()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let tracer_provider = opentelemetry_sdk::trace::SdkTracerProvider::builder()
|
||||||
|
.with_batch_exporter(span_exporter)
|
||||||
|
.with_resource(resources)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
global::set_tracer_provider(tracer_provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn init_logs() {
|
||||||
|
let otlp_exporter = opentelemetry_otlp::LogExporter::builder()
|
||||||
|
.with_tonic()
|
||||||
|
.with_endpoint(std::env::var("OTLP_OTLS_ENDPOINT").unwrap())
|
||||||
|
.build()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let exporter = opentelemetry_stdout::LogExporter::default();
|
||||||
|
|
||||||
|
let resources = Resource::builder()
|
||||||
|
.with_attributes([
|
||||||
|
KeyValue::new("service.name", "image-server"),
|
||||||
|
KeyValue::new("service.version", "1.0"),
|
||||||
|
])
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let log_provider = SdkLoggerProvider::builder()
|
||||||
|
.with_log_processor(BatchLogProcessor::builder(exporter).build())
|
||||||
|
.with_log_processor(BatchLogProcessor::builder(otlp_exporter).build())
|
||||||
|
.with_resource(resources)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let otel_log_appender = OpenTelemetryLogBridge::new(&log_provider);
|
||||||
|
log::set_boxed_logger(Box::new(otel_log_appender)).expect("Unable to set boxed logger");
|
||||||
|
//TODO: Still set this with the env? Ideally we still have a clean/simple local logger for local dev
|
||||||
|
log::set_max_level(log::LevelFilter::Info);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user