95 lines
2.1 KiB
Nix
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";
|
|
}
|
|
];
|
|
}
|
|
];
|
|
};
|
|
};
|
|
};
|
|
}
|