From 98946ea6f82d740bf02ea6d8693e5809d36d77d6 Mon Sep 17 00:00:00 2001 From: Khionu Sybiern Date: Mon, 24 Jun 2024 20:38:17 -0700 Subject: [PATCH] feat(o11y): add fluent sink to logs This change adds fluent logging as an opt-in feature. Setting `KRATA_LOG_FLUENT` with an address:port will start a TCP connection, sending logs. A later changes will respect a URI scheme and use structured logging. --- crates/daemon/bin/daemon.rs | 38 +++++++++++++++++++++++++++++++------ crates/daemon/src/event.rs | 3 ++- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/crates/daemon/bin/daemon.rs b/crates/daemon/bin/daemon.rs index 16fcba2..c9b9ebd 100644 --- a/crates/daemon/bin/daemon.rs +++ b/crates/daemon/bin/daemon.rs @@ -1,15 +1,41 @@ +use std::{ + net::{SocketAddr, TcpStream}, + str::FromStr, + sync::{atomic::AtomicBool, Arc}, +}; + use anyhow::Result; use clap::Parser; -use env_logger::Env; -use kratad::command::DaemonCommand; +use env_logger::fmt::Target; use log::LevelFilter; -use std::sync::{atomic::AtomicBool, Arc}; + +use kratad::command::DaemonCommand; #[tokio::main(flavor = "multi_thread", worker_threads = 10)] async fn main() -> Result<()> { - env_logger::Builder::from_env(Env::default().default_filter_or("info")) - .filter(Some("backhand::filesystem::writer"), LevelFilter::Warn) - .init(); + let mut builder = env_logger::Builder::new(); + builder + .filter_level(LevelFilter::Trace) + .parse_default_env() + .filter(Some("backhand::filesystem::writer"), LevelFilter::Warn); + + if let Ok(f_addr) = std::env::var("KRATA_FLUENT_ADDR") { + println!("KRATA_FLUENT_ADDR set to {f_addr}"); + let target = SocketAddr::from_str(f_addr.as_str())?; + builder.target(Target::Pipe(Box::new(TcpStream::connect(target)?))); + } + + let ev = std::env::vars() + .into_iter() + .fold(String::new(), |mut acc, (k, v)| { + acc.push_str(&format!("{k}={v}\n")); + acc + }); + + std::fs::write("/var/log/krata/ev", ev)?; + + builder.init(); + mask_sighup()?; let command = DaemonCommand::parse(); diff --git a/crates/daemon/src/event.rs b/crates/daemon/src/event.rs index f637314..431d47c 100644 --- a/crates/daemon/src/event.rs +++ b/crates/daemon/src/event.rs @@ -9,7 +9,7 @@ use krata::{ idm::{internal::event::Event as EventType, internal::Event}, v1::common::{GuestExitInfo, GuestState, GuestStatus}, }; -use log::{error, warn}; +use log::{error, info, warn}; use tokio::{ select, sync::{ @@ -90,6 +90,7 @@ impl DaemonEventGenerator { let status = state.status(); let id = Uuid::from_str(&guest.id)?; let domid = state.domid; + info!("Guest {} on Zone {} changed - {:?}", id, domid, status); match status { GuestStatus::Started => { if let Entry::Vacant(e) = self.idms.entry(domid) {