add a metric to try otel

This commit is contained in:
Madhukar Mishra authored and Kasisnu committed 2024-02-05 18:18:14 +05:30
1 parent 2cadfb105b
commit cfa9558a33
3 files changed
+22 -1

No files matched your search

+1 -1
View File
@@ -85,4 +85,4 @@ rand = { version = "0.8.5", features = [] }
jsonpath_lib = "0.3.0"
walkdir = "2.4.0"
reqwest = "0.11.22"
opentelemetry = "0.21.0"
opentelemetry = {version = "0.21.0", features = ["metrics"]}
@@ -9,13 +9,17 @@ use jobs_common::noop_logger::NoOpLogger;
use mysql_queries::queries::generic_inference::job::list_available_generic_inference_jobs::{AvailableInferenceJob, list_available_generic_inference_jobs, ListAvailableGenericInferenceJobArgs};
use mysql_queries::queries::generic_inference::job::mark_generic_inference_job_completely_failed::mark_generic_inference_job_completely_failed;
use mysql_queries::queries::generic_inference::job::mark_generic_inference_job_failure::mark_generic_inference_job_failure;
use opentelemetry::metrics::AsyncInstrument;
use crate::OTEL_METER_NAME;
use crate::job::job_loop::clear_full_filesystem::clear_full_filesystem;
use crate::job::job_loop::process_single_job::process_single_job;
use crate::job::job_loop::process_single_job_error::ProcessSingleJobError;
use crate::job::job_loop::process_single_job_success_case::ProcessSingleJobSuccessCase;
use crate::job_dependencies::JobDependencies;
use opentelemetry::{global as otel, KeyValue as OtelAttribute};
// Job runner timeouts (guards MySQL)
const START_TIMEOUT_MILLIS : u64 = 500;
const INCREASE_TIMEOUT_MILLIS : u64 = 1000;
@@ -118,7 +122,12 @@ pub async fn main_loop(job_dependencies: JobDependencies) {
async fn process_job_batch(job_dependencies: &JobDependencies, jobs: Vec<AvailableInferenceJob>) -> AnyhowResult<()> {
let job_count = jobs.len();
let meter = otel::meter(OTEL_METER_NAME);
// TODO: total_duration as histogram for min/max/avg/percentiles
let job_duration = meter.i64_observable_gauge("job_duration").with_unit(metrics::Unit::new("ms")).init();
for (i, job) in jobs.into_iter().enumerate() {
let start_time = Instant::now();
let result = process_single_job(job_dependencies, &job).await;
match result {
@@ -145,6 +154,15 @@ async fn process_job_batch(job_dependencies: &JobDependencies, jobs: Vec<Availab
let _r = handle_error(&job_dependencies, &job, err).await?;
}
}
let job_duration = Instant::now().duration_since(start_time);;
job_duration.observe(job_duration.as_millis(),
&[
// TODO: need job_ prefix?
OtelAttribute::new("job_id", job.id),
OtelAttribute::new("job_inference_category", job.inference_category),
OtelAttribute::new("job_inference_token", job.inference_job_token),
]
)
}
Ok(())
@@ -22,6 +22,7 @@ use std::path::PathBuf;
use std::time::Duration;
use log::{info, warn};
use opentelemetry::metrics;
use r2d2_redis::r2d2;
use r2d2_redis::RedisConnectionManager;
use sqlx::mysql::MySqlPoolOptions;
@@ -72,6 +73,8 @@ const ENV_PUBLIC_BUCKET_NAME : &str = "PUBLIC_BUCKET_NAME";
// HTTP sidecar
const ENV_TTS_INFERENCE_SIDECAR_HOSTNAME: &str = "TTS_INFERENCE_SIDECAR_HOSTNAME";
const OTEL_METER_NAME: &str = "inference-job";
//#[tokio::main]
#[actix_web::main]
async fn main() -> AnyhowResult<()> {