infra/modules/shared/telegraf.nix

70 lines
1.9 KiB
Nix

{
config,
inputs,
lib,
pkgs,
...
}:
let
deps = [
config.nix.package
pkgs.gnused
pkgs.jq
];
hostInfo = pkgs.writeShellScript "host-info" ''
export PATH=${lib.makeBinPath deps}:$PATH
flake=$(nix flake metadata self --json | jq -r '.path' | sed -e 's|/nix/store/||' -e 's|-source||')
nix_version="$(nix store ping --store daemon --json | jq -r '.version')"
case "$(uname -s)" in
Darwin)
os_version="$(/usr/bin/sw_vers --productVersion)_$(/usr/bin/sw_vers --buildVersion)"
;;
Linux)
os_version="$(uname -r)"
;;
esac
system="$(nix eval --impure --raw --expr 'builtins.currentSystem')"
echo "host,flake=$flake,nix_version=$nix_version,os_version=$os_version,system=$system info=1"
'';
in
{
environment.etc =
let
inputsWithDate = lib.filterAttrs (_: input: input ? lastModified) inputs.self.inputs;
flakeAttrs =
input:
(lib.mapAttrsToList (n: v: ''${n}="${v}"'') (
lib.filterAttrs (_: v: (builtins.typeOf v) == "string") input
));
lastModified =
name: input:
''flake_input_last_modified{input="${name}",${lib.concatStringsSep "," (flakeAttrs input)}} ${toString input.lastModified}'';
in
{
"flake-inputs.prom" = {
text = builtins.unsafeDiscardStringContext ''
# HELP flake_registry_last_modified Last modification date of flake input in unixtime
# TYPE flake_input_last_modified gauge
${lib.concatStringsSep "\n" (lib.mapAttrsToList lastModified inputsWithDate)}
'';
};
};
services.telegraf.extraConfig.inputs = {
exec = [
{
commands = [ hostInfo ];
data_format = "influx";
}
];
file = [
{
data_format = "prometheus";
files = [ "/etc/flake-inputs.prom" ];
}
];
prometheus = {
metric_version = 2;
};
};
}