generated from Patagia/template-nix
WIP: Add otel tracing
This commit is contained in:
parent
9cac938fb5
commit
3e859b5d8c
3 changed files with 486 additions and 10 deletions
controller/src
|
@ -7,9 +7,20 @@ use dropshot::HttpError;
|
|||
use dropshot::HttpResponseOk;
|
||||
use dropshot::RequestContext;
|
||||
use dropshot::ServerBuilder;
|
||||
use opentelemetry::{trace::TracerProvider as _, KeyValue};
|
||||
use opentelemetry_otlp::WithExportConfig;
|
||||
use opentelemetry_sdk::{
|
||||
trace::{RandomIdGenerator, Sampler},
|
||||
Resource,
|
||||
};
|
||||
use opentelemetry_semantic_conventions::{
|
||||
attribute::{SERVICE_NAME, SERVICE_VERSION},
|
||||
SCHEMA_URL,
|
||||
};
|
||||
use schemars::JsonSchema;
|
||||
use serde::Serialize;
|
||||
use slog::Drain;
|
||||
use tracing_opentelemetry::OpenTelemetryLayer;
|
||||
use tracing_slog::TracingSlogDrain;
|
||||
use tracing_subscriber::prelude::*;
|
||||
|
||||
|
@ -32,7 +43,10 @@ struct VersionInfo {
|
|||
method = GET,
|
||||
path = "/version",
|
||||
}]
|
||||
async fn api_version(rqctx: RequestContext<Arc<()>>) -> Result<HttpResponseOk<VersionInfo>, HttpError> {
|
||||
#[tracing::instrument()]
|
||||
async fn api_version(
|
||||
rqctx: RequestContext<Arc<()>>,
|
||||
) -> Result<HttpResponseOk<VersionInfo>, HttpError> {
|
||||
let ver = VersionInfo {
|
||||
name: String::from("patagia-controller"),
|
||||
};
|
||||
|
@ -55,9 +69,38 @@ async fn main() -> Result<()> {
|
|||
slog::Logger::root(async_drain, slog::o!())
|
||||
};
|
||||
|
||||
let otlp_exporter = opentelemetry_otlp::SpanExporter::builder()
|
||||
.with_tonic()
|
||||
.with_endpoint("https://localhost:4317")
|
||||
.build()
|
||||
.map_err(|e| anyhow!("Error creating OTLP exporter: {:?}", e))?;
|
||||
|
||||
let resource = Resource::from_schema_url(
|
||||
[
|
||||
KeyValue::new(SERVICE_NAME, env!("CARGO_PKG_NAME")),
|
||||
KeyValue::new(SERVICE_VERSION, env!("CARGO_PKG_VERSION")),
|
||||
],
|
||||
SCHEMA_URL,
|
||||
);
|
||||
|
||||
let tracer_provider = opentelemetry_sdk::trace::TracerProvider::builder()
|
||||
.with_config(
|
||||
opentelemetry_sdk::trace::Config::default()
|
||||
.with_sampler(Sampler::ParentBased(Box::new(Sampler::TraceIdRatioBased(
|
||||
1.0,
|
||||
))))
|
||||
.with_id_generator(RandomIdGenerator::default())
|
||||
.with_resource(resource),
|
||||
)
|
||||
.with_batch_exporter(otlp_exporter, opentelemetry_sdk::runtime::Tokio)
|
||||
.build();
|
||||
|
||||
let tracer = tracer_provider.tracer("patagia-controller");
|
||||
|
||||
tracing_subscriber::registry()
|
||||
.with(tracing_subscriber::EnvFilter::from_default_env())
|
||||
.with(fmt_layer)
|
||||
.with(OpenTelemetryLayer::new(tracer))
|
||||
.init();
|
||||
|
||||
tracing::info!("Patagia Controller");
|
||||
|
@ -65,10 +108,10 @@ async fn main() -> Result<()> {
|
|||
let mut api = ApiDescription::new();
|
||||
api.register(api_version).unwrap();
|
||||
|
||||
let server =ServerBuilder::new(api, Arc::new(()), dropshot_logger)
|
||||
ServerBuilder::new(api, Arc::new(()), dropshot_logger)
|
||||
.config(config_dropshot)
|
||||
.start()
|
||||
.map_err(|e| anyhow!("Error starting server: {:?}", e))?;
|
||||
|
||||
server.await.map_err(|e| anyhow!("Error running server: {}", e))
|
||||
.map_err(|e| anyhow!("Error starting server: {:?}", e))?
|
||||
.await
|
||||
.map_err(|e| anyhow!(e))
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue