Replace telegraf with node exporter

Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
2025-04-19 17:57:34 +03:00
parent 3f1531fbd1
commit 1a445ab6fd
37 changed files with 3099 additions and 421 deletions

View File

@@ -16,6 +16,16 @@
docker-ntfy = import ./docker/ntfy { inherit pkgs; };
docker-postgresql = import ./docker/postgresql { inherit pkgs; };
docker-prometheus = import ./docker/prometheus { inherit pkgs; };
docker-prometheus-fail2ban-exporter = import ./docker/prometheus-fail2ban-exporter {
inherit pkgs inputs system;
};
docker-prometheus-node-exporter = import ./docker/prometheus-node-exporter { inherit pkgs; };
docker-prometheus-podman-exporter = import ./docker/prometheus-podman-exporter {
inherit pkgs inputs system;
};
docker-prometheus-smartctl-exporter = import ./docker/prometheus-smartctl-exporter {
inherit pkgs;
};
docker-redis = import ./docker/redis { inherit pkgs; };
docker-traefik = import ./docker/traefik { inherit pkgs; };
docker-whoami = import ./docker/whoami { inherit pkgs; };
@@ -38,6 +48,9 @@
obsidian-theme-minimal = import ./obsidian/themes/minimal { inherit pkgs; };
prometheus-fail2ban-exporter = import ./prometheus-fail2ban-exporter { inherit pkgs; };
prometheus-podman-exporter = import ./prometheus-podman-exporter { inherit pkgs; };
ssh-known-hosts-github = import ./ssh/known-hosts/github { inherit pkgs inputs system; };
# SAS

View File

@@ -14,7 +14,7 @@ mkfifo "$LOG_PIPE"
(
while IFS= read -r line; do
if echo "$line" | grep -qE "ERROR|FATAL|PANIC"; then
if echo "$line" | grep -qEi "ERROR|FATAL|PANIC"; then
echo "$line" >&2
else
echo "$line"

View File

@@ -0,0 +1,36 @@
{
pkgs,
inputs,
system,
...
}:
let
selfPkgs = inputs.self.packages.${system};
entrypoint = pkgs.writeTextFile {
name = "entrypoint";
executable = true;
destination = "/bin/entrypoint";
text = builtins.readFile ./entrypoint.sh;
};
in
pkgs.dockerTools.buildImage {
name = "prometheus-fail2ban-exporter";
fromImage = import ../base { inherit pkgs; };
copyToRoot = pkgs.buildEnv {
name = "root";
paths = [
entrypoint
selfPkgs.prometheus-fail2ban-exporter
];
pathsToLink = [ "/bin" ];
};
config = {
Entrypoint = [ "/bin/entrypoint" ];
ExposedPorts = {
"9191/tcp" = { };
};
};
}

View File

@@ -0,0 +1,23 @@
#!/bin/sh
set -o errexit
set -o nounset
mkdir -p /tmp
LOG_PIPE="$(mktemp -u)"
mkfifo "$LOG_PIPE"
(
while IFS= read -r line; do
if echo "$line" | grep -qEi "WARN|ERROR|FATAL"; then
echo "$line" >&2
else
echo "$line"
fi
done < "$LOG_PIPE"
) &
LOG_PID=$!
trap 'kill $LOG_PID' EXIT
exec /bin/prometheus-fail2ban-exporter "$@" > "$LOG_PIPE" 2>&1

View File

@@ -0,0 +1,19 @@
{ pkgs, ... }:
pkgs.dockerTools.buildImage {
name = "prometheus-node-exporter";
fromImage = import ../base { inherit pkgs; };
copyToRoot = pkgs.buildEnv {
name = "root";
paths = with pkgs; [ prometheus-node-exporter ];
pathsToLink = [ "/bin" ];
};
config = {
Entrypoint = [ "/bin/node_exporter" ];
Cmd = [ "--log.level=warn" ];
ExposedPorts = {
"9100/tcp" = { };
};
};
}

View File

@@ -0,0 +1,40 @@
{
pkgs,
inputs,
system,
...
}:
let
selfPkgs = inputs.self.packages.${system};
entrypoint = pkgs.writeTextFile {
name = "entrypoint";
executable = true;
destination = "/bin/entrypoint";
text = builtins.readFile ./entrypoint.sh;
};
in
pkgs.dockerTools.buildImage {
name = "prometheus-podman-exporter";
fromImage = import ../base { inherit pkgs; };
copyToRoot = pkgs.buildEnv {
name = "root";
paths = [
entrypoint
selfPkgs.prometheus-podman-exporter
];
pathsToLink = [ "/bin" ];
};
runAsRoot = ''
${pkgs.dockerTools.shadowSetup}
'';
config = {
Entrypoint = [ "/bin/entrypoint" ];
ExposedPorts = {
"9882/tcp" = { };
};
};
}

View File

@@ -0,0 +1,23 @@
#!/bin/sh
set -o errexit
set -o nounset
mkdir -p /tmp
LOG_PIPE="$(mktemp -u)"
mkfifo "$LOG_PIPE"
(
while IFS= read -r line; do
if echo "$line" | grep -qEi "WARN|ERROR|FATAL"; then
echo "$line" >&2
else
echo "$line"
fi
done < "$LOG_PIPE"
) &
LOG_PID=$!
trap 'kill $LOG_PID' EXIT
exec /bin/prometheus-podman-exporter "$@" > "$LOG_PIPE" 2>&1

View File

@@ -0,0 +1,19 @@
{ pkgs, ... }:
pkgs.dockerTools.buildImage {
name = "prometheus-smartctl-exporter";
fromImage = import ../base { inherit pkgs; };
copyToRoot = pkgs.buildEnv {
name = "root";
paths = with pkgs; [ prometheus-smartctl-exporter ];
pathsToLink = [ "/bin" ];
};
config = {
Entrypoint = [ "/bin/smartctl_exporter" ];
Cmd = [ "--log.level=warn" ];
ExposedPorts = {
"9633/tcp" = { };
};
};
}

View File

@@ -14,5 +14,8 @@ pkgs.dockerTools.buildImage {
ExposedPorts = {
"9090/tcp" = { };
};
Volumes = {
"/var/lib/prometheus" = { };
};
};
}

View File

@@ -0,0 +1,31 @@
{ pkgs, ... }:
# AUTO-UPDATE: nix-update --flake prometheus-fail2ban-exporter
pkgs.buildGoModule rec {
pname = "prometheus-fail2ban-exporter";
version = "0.10.3";
src = pkgs.fetchFromGitLab {
owner = "hctrdev";
repo = "fail2ban-prometheus-exporter";
rev = "v${version}";
hash = "sha256-CyYGY6SovnvgExB22G+LEKRDRzbDZWhWUjctJMkprYs=";
};
vendorHash = "sha256-ogdRXbS1EG402qlnj5SfuI/1P/Pi0+xwJrJsc6vwdds=";
env.CGO_ENABLED = 0;
ldflags = [
"-s"
"-w"
"-X main.version=${version}"
"-X main.commit=${version}"
"-X main.date=1970-01-01T00:00:00Z"
"-X main.builtBy=NixOS"
];
installPhase = ''
mkdir -p $out/bin
cp -r "$GOPATH/bin/fail2ban-prometheus-exporter" $out/bin/prometheus-fail2ban-exporter
'';
}

View File

@@ -0,0 +1,51 @@
{ pkgs, ... }:
# AUTO-UPDATE: nix-update --flake prometheus-podman-exporter
pkgs.buildGoModule rec {
pname = "prometheus-podman-exporter";
version = "1.15.0";
src = pkgs.fetchFromGitHub {
owner = "containers";
repo = "prometheus-podman-exporter";
rev = "v${version}";
hash = "sha256-eXuLiJx0WsPlPAN5ZwQIp89thXiNS6AGE9p3aqjD+K8=";
};
vendorHash = null;
nativeBuildInputs = with pkgs; [
makeWrapper
pkg-config
];
buildInputs = with pkgs; [
btrfs-progs
gpgme
];
tags = [
"containers_image_openpgp"
"remote"
];
ldflags = [
"-s"
"-w"
"-X github.com/containers/prometheus-podman-exporter/cmd.buildVersion=${version}"
"-X github.com/containers/prometheus-podman-exporter/cmd.buildRevision=${builtins.head (pkgs.lib.strings.splitString "." version)}"
"-X github.com/containers/prometheus-podman-exporter/cmd.buildBranch=HEAD"
];
# Don't run tests because they require a running podman daemon
doCheck = false;
postInstall = ''
wrapProgram $out/bin/prometheus-podman-exporter \
--run '
: "''${CONTAINER_HOST:=}"
if [ -z "$CONTAINER_HOST" ]; then
export CONTAINER_HOST=$([ "$UID" -eq 0 ] && echo "unix:///run/podman/podman.sock" || echo "unix://''${XDG_RUNTIME_DIR:-/run/user/$UID}/podman/podman.sock")
fi
'
'';
}