add promtail log shipping

This commit is contained in:
Ingolf Wagner 2024-05-15 14:39:21 +02:00
parent 4903ab6fd9
commit e69fdc44d9
No known key found for this signature in database
GPG key ID: 76BF5F1928B9618B
7 changed files with 101 additions and 16 deletions

View file

@ -14,6 +14,7 @@ with types;
./netdata.nix ./netdata.nix
./opentelemetry.nix ./opentelemetry.nix
./prometheus.nix ./prometheus.nix
./promtail.nix
./telegraf.nix ./telegraf.nix
]; ];

View file

@ -62,9 +62,9 @@ in
pipelines.metrics = { pipelines.metrics = {
exporters = [ "otlp" ]; exporters = [ "otlp" ];
}; };
#pipelines.logs = { pipelines.logs = {
# exporters = [ "otlp" ]; exporters = [ "otlp" ];
#}; };
}; };
}; };
}) })
@ -77,9 +77,9 @@ in
pipelines.metrics = { pipelines.metrics = {
receivers = [ "otlp" ]; receivers = [ "otlp" ];
}; };
#pipelines.logs = { pipelines.logs = {
# exporters = [ "otlp" ]; receivers = [ "otlp" ];
#}; };
}; };
}; };
}) })

View file

@ -0,0 +1,67 @@
{ config, lib, ... }:
with lib;
with types;
let
cfg = config.components.monitor.promtail;
in
{
options.components.monitor.promtail = {
enable = mkOption {
type = lib.types.bool;
default = config.components.monitor.enable;
};
port = mkOption {
type = int;
default = 3500;
description = "port to provide promtail export";
};
};
config = mkMerge [
(mkIf config.components.monitor.promtail.enable {
services.opentelemetry-collector.settings = {
receivers.loki = {
protocols.http.endpoint = "127.0.0.1:${toString cfg.port}";
use_incoming_timestamp = true;
};
service.pipelines.logs.receivers = [ "loki" ];
};
services.promtail = {
enable = true;
configuration = {
server = {
http_listen_port = 28183;
grpc_listen_port = 0;
};
positions.filename = "/tmp/positions.yaml";
clients = [
{ url = "http://127.0.0.1:${toString cfg.port}/loki/api/v1/push"; }
];
scrape_configs = [
{
job_name = "journal";
journal = {
max_age = "12h";
};
relabel_configs = [
{
source_labels = [ "__journal__systemd_unit" ];
target_label = "unit";
}
{
source_labels = [ "__journal__transport" ];
target_label = "transport";
}
];
}
];
};
};
})
];
}

View file

@ -1,7 +1,8 @@
{ ... }: { ... }:
{ {
# port 5000 already in use.
services.nix-serve = { services.nix-serve = {
enable = true; enable = false;
# needed if i want to trust my own build packages and dirivations # needed if i want to trust my own build packages and dirivations
# nix-store --generate-binary-cache-key key-name secret-key-file public-key-file # nix-store --generate-binary-cache-key key-name secret-key-file public-key-file

View file

@ -35,14 +35,14 @@
./media-syncthing.nix ./media-syncthing.nix
# logging # logging
./loki.nix
./loki-promtail.nix
./grafana.nix ./grafana.nix
./telemetry/telegraf-smart.nix ./telemetry/telegraf-smart.nix
./telemetry/telegraf.nix ./telemetry/telegraf.nix
#./telemetry/opentelemetry-hass.nix #./telemetry/opentelemetry-hass.nix
./telemetry/prometheus.nix ./telemetry/prometheus.nix
./telemetry/loki.nix
#./telemetry/promtail.nix
#./home-display.nix #./home-display.nix

View file

@ -1,6 +1,14 @@
{ config, pkgs, ... }: { config, pkgs, ... }:
{ {
services.opentelemetry-collector.settings = {
exporters.loki = {
endpoint = "http://127.0.0.1:3100/loki/api/v1/push";
};
service.pipelines.logs.exporters = [ "loki" ];
};
services.loki = { services.loki = {
enable = true; enable = true;
configuration = { configuration = {

View file

@ -1,5 +1,14 @@
{ config, ... }: { config, ... }:
{ {
services.opentelemetry-collector.settings = {
receivers.loki = {
protocols.http.endpoint = "127.0.0.1:3500";
use_incoming_timestamp = true;
};
service.pipelines.logs.receivers = [ "loki" ];
};
services.promtail = { services.promtail = {
enable = true; enable = true;
configuration = { configuration = {
@ -7,9 +16,10 @@
http_listen_port = 28183; http_listen_port = 28183;
grpc_listen_port = 0; grpc_listen_port = 0;
}; };
positions.filename = "/tmp/positions.yaml"; positions.filename = "/tmp/positions.yaml";
clients = [ clients = [
{ url = "http://127.0.0.1:3100/loki/api/v1/push"; } { url = "http://127.0.0.1:3500/loki/api/v1/push"; }
]; ];
scrape_configs = [ scrape_configs = [
@ -17,10 +27,10 @@
job_name = "journal"; job_name = "journal";
journal = { journal = {
max_age = "12h"; max_age = "12h";
labels = { #labels = {
job = "systemd-journal"; # job = "systemd-journal";
host = config.networking.hostName; # host = config.networking.hostName;
}; #};
}; };
relabel_configs = [ relabel_configs = [
{ {
@ -34,8 +44,6 @@
]; ];
} }
]; ];
}; };
}; };
} }