mirror of
https://github.com/edera-dev/krata.git
synced 2025-08-03 05:10:55 +00:00
Initial fluentd support (#205)
* fix(hack): use sudo -E when running Rust binaries This makes it possible to pass envvars to the Krata runtime * 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.
This commit is contained in:
parent
93aae83b3f
commit
88a62441b1
@ -1,15 +1,41 @@
|
|||||||
|
use std::{
|
||||||
|
net::{SocketAddr, TcpStream},
|
||||||
|
str::FromStr,
|
||||||
|
sync::{atomic::AtomicBool, Arc},
|
||||||
|
};
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use env_logger::Env;
|
use env_logger::fmt::Target;
|
||||||
use kratad::command::DaemonCommand;
|
|
||||||
use log::LevelFilter;
|
use log::LevelFilter;
|
||||||
use std::sync::{atomic::AtomicBool, Arc};
|
|
||||||
|
use kratad::command::DaemonCommand;
|
||||||
|
|
||||||
#[tokio::main(flavor = "multi_thread", worker_threads = 10)]
|
#[tokio::main(flavor = "multi_thread", worker_threads = 10)]
|
||||||
async fn main() -> Result<()> {
|
async fn main() -> Result<()> {
|
||||||
env_logger::Builder::from_env(Env::default().default_filter_or("info"))
|
let mut builder = env_logger::Builder::new();
|
||||||
.filter(Some("backhand::filesystem::writer"), LevelFilter::Warn)
|
builder
|
||||||
.init();
|
.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()?;
|
mask_sighup()?;
|
||||||
|
|
||||||
let command = DaemonCommand::parse();
|
let command = DaemonCommand::parse();
|
||||||
|
@ -9,7 +9,7 @@ use krata::{
|
|||||||
idm::{internal::event::Event as EventType, internal::Event},
|
idm::{internal::event::Event as EventType, internal::Event},
|
||||||
v1::common::{GuestExitInfo, GuestState, GuestStatus},
|
v1::common::{GuestExitInfo, GuestState, GuestStatus},
|
||||||
};
|
};
|
||||||
use log::{error, warn};
|
use log::{error, info, warn};
|
||||||
use tokio::{
|
use tokio::{
|
||||||
select,
|
select,
|
||||||
sync::{
|
sync::{
|
||||||
@ -90,6 +90,7 @@ impl DaemonEventGenerator {
|
|||||||
let status = state.status();
|
let status = state.status();
|
||||||
let id = Uuid::from_str(&guest.id)?;
|
let id = Uuid::from_str(&guest.id)?;
|
||||||
let domid = state.domid;
|
let domid = state.domid;
|
||||||
|
info!("Guest {} on Zone {} changed - {:?}", id, domid, status);
|
||||||
match status {
|
match status {
|
||||||
GuestStatus::Started => {
|
GuestStatus::Started => {
|
||||||
if let Entry::Vacant(e) = self.idms.entry(domid) {
|
if let Entry::Vacant(e) = self.idms.entry(domid) {
|
||||||
|
@ -28,5 +28,5 @@ build_and_run() {
|
|||||||
fi
|
fi
|
||||||
RUST_TARGET="$(./hack/build/target.sh)"
|
RUST_TARGET="$(./hack/build/target.sh)"
|
||||||
./hack/build/cargo.sh build ${CARGO_BUILD_FLAGS} --bin "${EXE_TARGET}"
|
./hack/build/cargo.sh build ${CARGO_BUILD_FLAGS} --bin "${EXE_TARGET}"
|
||||||
exec sudo sh -c "RUST_LOG='${RUST_LOG}' 'target/${RUST_TARGET}/debug/${EXE_TARGET}' $*"
|
exec sudo -E sh -c "RUST_LOG='${RUST_LOG}' 'target/${RUST_TARGET}/debug/${EXE_TARGET}' $*"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user