mirror of
https://github.com/mii443/ncb-tts-r2.git
synced 2025-08-22 16:15:29 +00:00
add otel http url config
This commit is contained in:
@ -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>,
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
39
src/trace.rs
39
src/trace.rs
@ -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),
|
||||||
|
);
|
||||||
|
|
||||||
|
if let Some(url) = otel_http_url {
|
||||||
|
let tracer_provider = init_tracer_provider(url);
|
||||||
|
let meter_provider = init_meter_provider(url);
|
||||||
|
|
||||||
let tracer = tracer_provider.tracer("ncb-tts-r2");
|
let tracer = tracer_provider.tracer("ncb-tts-r2");
|
||||||
|
|
||||||
tracing_subscriber::registry()
|
registry
|
||||||
.with(tracing_subscriber::filter::LevelFilter::from_level(
|
|
||||||
Level::INFO,
|
|
||||||
))
|
|
||||||
.with(tracing_subscriber::fmt::layer())
|
.with(tracing_subscriber::fmt::layer())
|
||||||
.with(MetricsLayer::new(meter_provider.clone()))
|
.with(MetricsLayer::new(meter_provider.clone()))
|
||||||
.with(OpenTelemetryLayer::new(tracer))
|
.with(OpenTelemetryLayer::new(tracer))
|
||||||
.init();
|
.init();
|
||||||
|
|
||||||
OtelGuard {
|
OtelGuard {
|
||||||
_tracer_provider: tracer_provider,
|
_tracer_provider: Some(tracer_provider),
|
||||||
_meter_provider: meter_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>,
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user