-
Notifications
You must be signed in to change notification settings - Fork 498
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[proxy] Enable OpenTelemetry tracing.
This commit sets up OpenTelemetry tracing and exporter, so that they can be exported as OpenTelemetry traces as well. All outgoing HTTP requests will be traced. A separate (child) span is created for each outgoing HTTP request, and the tracing context is also propagated to the server in the HTTP headers. If tracing is enabled in the control plane and compute node too, you can now get an end-to-end distributed trace of what happens when a new connection is established, starting from the handshake with the client, creating the 'start_compute' operation in the control plane, starting the compute node, all the way to down to fetching the base backup and the availability checks in compute_ctl. Co-authored-by: Dmitry Ivanov <[email protected]>
- Loading branch information
1 parent
0d3aefb
commit f0c9e35
Showing
10 changed files
with
176 additions
and
50 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
use tracing_opentelemetry::OpenTelemetryLayer; | ||
use tracing_subscriber::{ | ||
filter::{EnvFilter, LevelFilter}, | ||
prelude::*, | ||
}; | ||
|
||
/// Initialize logging and OpenTelemetry tracing and exporter. | ||
/// | ||
/// Logging can be configured using `RUST_LOG` environment variable. | ||
/// | ||
/// OpenTelemetry is configured with OTLP/HTTP exporter. It picks up | ||
/// configuration from environment variables. For example, to change the | ||
/// destination, set `OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318`. | ||
/// See <https://opentelemetry.io/docs/reference/specification/sdk-environment-variables> | ||
pub async fn init() -> anyhow::Result<LoggingGuard> { | ||
let env_filter = EnvFilter::builder() | ||
.with_default_directive(LevelFilter::INFO.into()) | ||
.from_env_lossy(); | ||
|
||
let fmt_layer = tracing_subscriber::fmt::layer() | ||
.with_ansi(atty::is(atty::Stream::Stderr)) | ||
.with_writer(std::io::stderr) | ||
.with_target(false); | ||
|
||
let otlp_layer = tracing_utils::init_tracing("proxy") | ||
.await | ||
.map(OpenTelemetryLayer::new); | ||
|
||
tracing_subscriber::registry() | ||
.with(env_filter) | ||
.with(otlp_layer) | ||
.with(fmt_layer) | ||
.try_init()?; | ||
|
||
Ok(LoggingGuard) | ||
} | ||
|
||
pub struct LoggingGuard; | ||
|
||
impl Drop for LoggingGuard { | ||
fn drop(&mut self) { | ||
// Shutdown trace pipeline gracefully, so that it has a chance to send any | ||
// pending traces before we exit. | ||
tracing_utils::shutdown_tracing(); | ||
} | ||
} |
Oops, something went wrong.