add otel http url config

This commit is contained in:
mii443
2025-04-10 14:17:30 +09:00
parent 8a1fa22074
commit 24de817d6f
3 changed files with 40 additions and 20 deletions

View File

@ -7,4 +7,5 @@ pub struct Config {
pub application_id: u64, pub application_id: u64,
pub redis_url: String, pub redis_url: String,
pub voicevox_key: String, pub voicevox_key: String,
pub otel_http_url: Option<String>,
} }

View File

@ -49,7 +49,6 @@ async fn create_client(prefix: &str, token: &str, id: u64) -> Result<Client, ser
#[tokio::main] #[tokio::main]
async fn main() { async fn main() {
let _guard = init_tracing_subscriber();
// Load config // Load config
let config = { let config = {
let config = std::fs::read_to_string("./config.toml"); let config = std::fs::read_to_string("./config.toml");
@ -61,6 +60,10 @@ async fn main() {
let prefix = env::var("NCB_PREFIX").unwrap(); let prefix = env::var("NCB_PREFIX").unwrap();
let redis_url = env::var("NCB_REDIS_URL").unwrap(); let redis_url = env::var("NCB_REDIS_URL").unwrap();
let voicevox_key = env::var("NCB_VOICEVOX_KEY").unwrap(); let voicevox_key = env::var("NCB_VOICEVOX_KEY").unwrap();
let otel_http_url = match env::var("NCB_OTEL_HTTP_URL") {
Ok(url) => Some(url),
Err(_) => None,
};
Config { Config {
token, token,
@ -68,10 +71,13 @@ async fn main() {
prefix, prefix,
redis_url, redis_url,
voicevox_key, voicevox_key,
otel_http_url,
} }
} }
}; };
let _guard = init_tracing_subscriber(&config.otel_http_url);
// Create discord client // Create discord client
let mut client = create_client(&config.prefix, &config.token, config.application_id) let mut client = create_client(&config.prefix, &config.token, config.application_id)
.await .await

View File

@ -3,6 +3,7 @@ use opentelemetry::{
trace::{SamplingDecision, SamplingResult, TraceContextExt, TraceState, TracerProvider as _}, trace::{SamplingDecision, SamplingResult, TraceContextExt, TraceState, TracerProvider as _},
KeyValue, KeyValue,
}; };
use opentelemetry_otlp::{WithExportConfig, WithHttpConfig};
use opentelemetry_sdk::{ use opentelemetry_sdk::{
metrics::{MeterProviderBuilder, PeriodicReader, SdkMeterProvider}, metrics::{MeterProviderBuilder, PeriodicReader, SdkMeterProvider},
trace::{RandomIdGenerator, SdkTracerProvider, ShouldSample}, trace::{RandomIdGenerator, SdkTracerProvider, ShouldSample},
@ -50,9 +51,10 @@ fn resource() -> Resource {
Resource::builder().with_service_name("ncb-tts-r2").build() Resource::builder().with_service_name("ncb-tts-r2").build()
} }
fn init_meter_provider() -> SdkMeterProvider { fn init_meter_provider(url: &str) -> SdkMeterProvider {
let exporter = opentelemetry_otlp::MetricExporter::builder() let exporter = opentelemetry_otlp::MetricExporter::builder()
.with_http() .with_http()
.with_endpoint(url)
.with_temporality(opentelemetry_sdk::metrics::Temporality::default()) .with_temporality(opentelemetry_sdk::metrics::Temporality::default())
.build() .build()
.unwrap(); .unwrap();
@ -75,9 +77,10 @@ fn init_meter_provider() -> SdkMeterProvider {
meter_provider meter_provider
} }
fn init_tracer_provider() -> SdkTracerProvider { fn init_tracer_provider(url: &str) -> SdkTracerProvider {
let exporter = opentelemetry_otlp::SpanExporter::builder() let exporter = opentelemetry_otlp::SpanExporter::builder()
.with_http() .with_http()
.with_endpoint(url)
.build() .build()
.unwrap(); .unwrap();
@ -89,28 +92,38 @@ fn init_tracer_provider() -> SdkTracerProvider {
.build() .build()
} }
pub fn init_tracing_subscriber() -> OtelGuard { pub fn init_tracing_subscriber(otel_http_url: &Option<String>) -> OtelGuard {
let tracer_provider = init_tracer_provider(); let mut registry = tracing_subscriber::registry().with(
let meter_provider = init_meter_provider(); tracing_subscriber::filter::LevelFilter::from_level(Level::INFO),
);
let tracer = tracer_provider.tracer("ncb-tts-r2"); if let Some(url) = otel_http_url {
let tracer_provider = init_tracer_provider(url);
let meter_provider = init_meter_provider(url);
tracing_subscriber::registry() let tracer = tracer_provider.tracer("ncb-tts-r2");
.with(tracing_subscriber::filter::LevelFilter::from_level(
Level::INFO,
))
.with(tracing_subscriber::fmt::layer())
.with(MetricsLayer::new(meter_provider.clone()))
.with(OpenTelemetryLayer::new(tracer))
.init();
OtelGuard { registry
_tracer_provider: tracer_provider, .with(tracing_subscriber::fmt::layer())
_meter_provider: meter_provider, .with(MetricsLayer::new(meter_provider.clone()))
.with(OpenTelemetryLayer::new(tracer))
.init();
OtelGuard {
_tracer_provider: Some(tracer_provider),
_meter_provider: Some(meter_provider),
}
} else {
registry.with(tracing_subscriber::fmt::layer()).init();
OtelGuard {
_tracer_provider: None,
_meter_provider: None,
}
} }
} }
pub struct OtelGuard { pub struct OtelGuard {
_tracer_provider: SdkTracerProvider, _tracer_provider: Option<SdkTracerProvider>,
_meter_provider: SdkMeterProvider, _meter_provider: Option<SdkMeterProvider>,
} }