Skip to content

Commit

Permalink
feat: add otlp tracing
Browse files Browse the repository at this point in the history
  • Loading branch information
alex-miao committed Feb 20, 2025
1 parent e96738d commit 24059c7
Show file tree
Hide file tree
Showing 3 changed files with 136 additions and 3 deletions.
104 changes: 104 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions bin/rundler/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ metrics-derive.workspace = true
metrics-exporter-prometheus = { version = "0.16.2", default-features = false, features = ["http-listener"] }
metrics-process = "2.4.0"
metrics-util = "0.19.0"
opentelemetry = "0.28.0"
opentelemetry-otlp = { version = "0.28.0", features = ["grpc-tonic"] }
opentelemetry_sdk = "0.28.0"
paste = "1.0"
reth-tasks.workspace = true
serde.workspace = true
Expand All @@ -49,7 +52,9 @@ tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal", "
tokio-metrics = "0.4.0"
tokio-rustls = "0.26.0"
tokio-util.workspace = true
tonic.workspace = true
tracing.workspace = true
tracing-appender = "0.2.3"
tracing-log = "0.2.0"
tracing-opentelemetry = "0.29.0"
tracing-subscriber = { version = "0.3.18", features = ["env-filter", "fmt", "json"] }
30 changes: 27 additions & 3 deletions bin/rundler/src/cli/tracing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,17 @@
// You should have received a copy of the GNU General Public License along with Rundler.
// If not, see https://www.gnu.org/licenses/.

use std::io;
use std::{io, time::Duration};

use opentelemetry::{global, trace::TracerProvider};
use opentelemetry_otlp::{WithExportConfig, WithTonicConfig};
use opentelemetry_sdk::Resource;
use tonic::metadata::MetadataMap;
pub use tracing::*;
use tracing::{subscriber, subscriber::Interest, Metadata, Subscriber};
use tracing_appender::non_blocking::WorkerGuard;
use tracing_log::LogTracer;
use tracing_opentelemetry::OpenTelemetryLayer;
use tracing_subscriber::{layer::SubscriberExt, EnvFilter, FmtSubscriber, Layer};

use super::LogsArgs;
Expand All @@ -28,15 +33,35 @@ pub fn configure_logging(config: &LogsArgs) -> anyhow::Result<WorkerGuard> {
tracing_appender::non_blocking(io::stdout())
};

let metadata = MetadataMap::new();

let exporter = opentelemetry_otlp::SpanExporter::builder()
.with_tonic()
.with_endpoint("http://localhost:4317")
.with_timeout(Duration::from_secs(3))
.with_metadata(metadata)
.build()?;

let tracer_provider = opentelemetry_sdk::trace::SdkTracerProvider::builder()
.with_batch_exporter(exporter)
.with_resource(Resource::builder().with_service_name("rundler").build())
.build();

global::set_tracer_provider(tracer_provider.clone());
let tracer = tracer_provider.tracer("rundler-tracer");
let otel_layer = OpenTelemetryLayer::new(tracer);

let subscriber_builder = FmtSubscriber::builder()
.with_env_filter(EnvFilter::from_default_env())
.with_writer(appender);

if config.json {
subscriber::set_global_default(
subscriber_builder
.json()
.finish()
.with(TargetBlacklistLayer),
.with(TargetBlacklistLayer)
.with(otel_layer),
)?;
} else {
subscriber::set_global_default(
Expand All @@ -47,7 +72,6 @@ pub fn configure_logging(config: &LogsArgs) -> anyhow::Result<WorkerGuard> {
)?;
}

// Redirect logs from external crates using `log` to the tracing subscriber
LogTracer::init()?;

Ok(guard)
Expand Down

0 comments on commit 24059c7

Please sign in to comment.