homelab/machines/modules/journal-log.nix
plasmagoat 032072374b
Some checks failed
Test / tests (push) Has been cancelled
moved mail
2025-07-17 00:35:44 +02:00

95 lines
2.1 KiB
Nix

{
lib,
config,
# nodes,
# name,
# meta,
...
}:
with lib; let
cfg = config.journalLog;
in {
options.journalLog = {
enable = mkOption {
type = types.bool;
default = false;
};
port = mkOption {
type = types.number;
default = 9080;
};
clientUrl = mkOption {
type = types.str;
default = "http://monitor.lab:3100/loki/api/v1/push";
};
extraConfig = mkOption {
type = types.attrs;
default = {};
};
};
config = mkIf cfg.enable {
networking.firewall.allowedTCPPorts = [cfg.port];
systemd.tmpfiles.rules = [
"d /var/lib/promtail 0755 promtail promtail -"
];
services.promtail = {
enable = true;
configuration = {
server = {
http_listen_port = cfg.port;
grpc_listen_port = 0;
};
positions = {
filename = "/var/lib/promtail/positions.yaml";
};
clients = [
{
url = cfg.clientUrl;
}
];
scrape_configs = [
{
job_name = "journal";
journal = {
path = "/var/log/journal";
labels = {
job = "promtail";
host = config.networking.hostName;
env = "proxmox";
instance = "${config.networking.hostName}.lab";
};
};
relabel_configs = [
{
source_labels = ["__journal__systemd_unit"];
target_label = "unit";
}
{
source_labels = ["__journal__hostname"];
target_label = "host";
}
{
source_labels = ["__journal__systemd_user_unit"];
target_label = "user_unit";
}
{
source_labels = ["__journal__transport"];
target_label = "transport";
}
{
source_labels = ["__journal_priority_keyword"];
target_label = "severity";
}
];
}
];
};
};
};
}