monitoring: add radarr, sonarr and transmission

This commit is contained in:
xinyangli 2025-02-11 16:47:35 +08:00
parent bc55ae7b8b
commit fe404baad0
Signed by: xin
SSH key fingerprint: SHA256:UU5pRTl7NiLFJbWJZa+snLylZSXIz5rgHmwjzv8v4oE
7 changed files with 115 additions and 3 deletions

View file

@ -13,6 +13,7 @@ let
grafanaUrl grafanaUrl
ntfyUrl ntfyUrl
internalDomain internalDomain
transmissionExporterUrl
; ;
removeHttps = s: lib.removePrefix "https://" s; removeHttps = s: lib.removePrefix "https://" s;
in in
@ -154,6 +155,24 @@ in
address = "thorite.coho-tet.ts.net"; address = "thorite.coho-tet.ts.net";
port = 3100; port = 3100;
} }
{
name = "transmission";
scheme = "http";
address = transmissionExporterUrl;
port = 19091;
}
{
name = "sonarr";
scheme = "http";
address = "weilite.${internalDomain}";
port = 21560;
}
{
name = "radarr";
scheme = "http";
address = "weilite.${internalDomain}";
port = 21561;
}
]) ])
++ (mkCaddyScrapes [ ++ (mkCaddyScrapes [
{ address = "thorite.coho-tet.ts.net"; } { address = "thorite.coho-tet.ts.net"; }

View file

@ -7,6 +7,10 @@ restic:
localpass: ENC[AES256_GCM,data:GIQAmkpDmGu4+sSG5/b5yQ==,iv:dcu6F8NnVjeQzEG2vM3fOV5owI0PWc86ts20UP3vN18=,tag:vsG8x062FG1pH5YNcAajeg==,type:str] localpass: ENC[AES256_GCM,data:GIQAmkpDmGu4+sSG5/b5yQ==,iv:dcu6F8NnVjeQzEG2vM3fOV5owI0PWc86ts20UP3vN18=,tag:vsG8x062FG1pH5YNcAajeg==,type:str]
transmission: transmission:
rpc-password: ENC[AES256_GCM,data:4dumy0hygGOuwU3ANky3xEKRDRBAJWE=,iv:HVV2J+F8HndHZNsMD2YmkWrJOzk5JIapGd0SuQP8VqU=,tag:xqp5pxh5cYYogA4alrmIfg==,type:str] rpc-password: ENC[AES256_GCM,data:4dumy0hygGOuwU3ANky3xEKRDRBAJWE=,iv:HVV2J+F8HndHZNsMD2YmkWrJOzk5JIapGd0SuQP8VqU=,tag:xqp5pxh5cYYogA4alrmIfg==,type:str]
sonarr:
api-key: ENC[AES256_GCM,data:/CkApTCLQy8TLHGKSM1saacNi9uQDswAjshRSLJk1hg=,iv:PNX4BZLx7krs12lxgORMSarnt0c/ga8yPtoLSzbQ+sY=,tag:V1pp9OCtX5/5fbwLBMGlOQ==,type:str]
radarr:
api-key: ENC[AES256_GCM,data:AeJArngvgmqnxk2g13QjMa6XS893B+3ZdX2K8OqXRQg=,iv:NrQf3yyqRpHMeWQ3bpPH4fUDdo/x2uB6pQCq0ZrFP5c=,tag:Yj2PSy6zRfe8anW0RGuZAQ==,type:str]
sops: sops:
kms: [] kms: []
gcp_kms: [] gcp_kms: []
@ -31,8 +35,8 @@ sops:
V0thRjU4WGpQRGFpcnoxSjZTZHhTTkUKzNMHh9p7GUY3hL5XZ9S4x20CwaItsXFV V0thRjU4WGpQRGFpcnoxSjZTZHhTTkUKzNMHh9p7GUY3hL5XZ9S4x20CwaItsXFV
RKujsFVVBd8Kuq/jyOCBTRCscuHI4LW/wYeZYHFEZFSTK2liAqspgw== RKujsFVVBd8Kuq/jyOCBTRCscuHI4LW/wYeZYHFEZFSTK2liAqspgw==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2025-02-01T15:54:35Z" lastmodified: "2025-02-11T08:45:49Z"
mac: ENC[AES256_GCM,data:hDX2lQ5GbBGTqioEqNc/k4NvBW7/3ISOVUk8/6CkuW6ZQHUeMnfziWV7faw+DiMvYmwFUJ4mhY77Je5+gid0Ae5JyNxznBW2uzpXvLcTBsYz8iSZL6Jw5FciPIgkGDN5U5wMkusS6Ok2W/idIgmwlmxf3ACNaf7e0QpypwYwxZw=,iv:mkIQ2rvTpQXRuRarlcl/aIKDY3JmJKVsr1oS4+3vmnk=,tag:of2CSCqZAJaaZ5DvC6+Amg==,type:str] mac: ENC[AES256_GCM,data:iObzkfSxKET1kE8yQbSxffG1qDO95SWfIRSdwbYcwP4mHOrl5sOtlGEjexVaLl7uKa0SMCK6BghbMr4EdLatiOmngsAzr8bxe/GsPZiCze04nr0VbKBgHxKr74gT8d14dwV+Y+np/5fgRZea7zxzJ4YaVfeUOG9PBsa7L6RWbx0=,iv:LMM096xLa5cOiLVTiFO20jBUaK1Uw4aOqsz7eH9u9vc=,tag:C1fPHN9KFbydcy1lRAhGvQ==,type:str]
pgp: [] pgp: []
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.9.2 version: 3.9.2

View file

@ -1,5 +1,14 @@
{ config, pkgs, ... }: { config, pkgs, ... }:
let
inherit (config.my-lib.settings)
internalDomain
;
in
{ {
sops.secrets = {
"sonarr/api-key" = { };
"radarr/api-key" = { };
};
services.jackett = { services.jackett = {
enable = true; enable = true;
openFirewall = false; openFirewall = false;
@ -20,6 +29,22 @@
enable = true; enable = true;
}; };
services.prometheus.exporters.exportarr-sonarr = {
enable = true;
url = "http://127.0.0.1:8989";
apiKeyFile = config.sops.secrets."sonarr/api-key".path;
listenAddress = "weilite.${internalDomain}";
port = 21560;
};
services.prometheus.exporters.exportarr-radarr = {
enable = true;
url = "http://127.0.0.1:7878";
apiKeyFile = config.sops.secrets."radarr/api-key".path;
listenAddress = "weilite.${internalDomain}";
port = 21561;
};
users.groups.media.members = [ users.groups.media.members = [
config.services.sonarr.user config.services.sonarr.user
config.services.radarr.user config.services.radarr.user

View file

@ -1,6 +1,12 @@
{ config, pkgs, ... }: {
config,
pkgs,
lib,
...
}:
let let
cfg = config.services.transmission; cfg = config.services.transmission;
inherit (config.my-lib.settings) transmissionExporterUrl;
in in
{ {
sops.secrets = { sops.secrets = {
@ -13,6 +19,12 @@ in
}; };
}; };
sops.templates."transmission-cred.env" = {
content = ''
TRANSMISSION_PASSWORD=${config.sops.placeholder."transmission/rpc-password"}
'';
};
services.transmission = { services.transmission = {
enable = true; enable = true;
package = pkgs.transmission_4; package = pkgs.transmission_4;
@ -64,6 +76,22 @@ in
services.caddy.virtualHosts."https://weilite.coho-tet.ts.net:9091".extraConfig = '' services.caddy.virtualHosts."https://weilite.coho-tet.ts.net:9091".extraConfig = ''
reverse_proxy 127.0.0.1:${toString cfg.settings.rpc-port} reverse_proxy 127.0.0.1:${toString cfg.settings.rpc-port}
''; '';
systemd.services.prometheus-transmission-exporter = {
enable = true;
wantedBy = [ "transmission.service" ];
environment = {
WEB_ADDR = transmissionExporterUrl;
TRANSMISSION_ADDR = "http://127.0.0.1:${toString cfg.settings.rpc-port}";
TRANSMISSION_USERNAME = "xin";
};
after = [ "tailscaled.service" ];
serviceConfig = {
ExecStart = "${lib.getExe pkgs.transmission-exporter}";
EnvironmentFile = config.sops.templates."transmission-cred.env".path;
};
};
networking.firewall.allowedTCPPorts = [ 9091 ]; # allow on lan networking.firewall.allowedTCPPorts = [ 9091 ]; # allow on lan
users.groups.media.members = [ cfg.user ]; users.groups.media.members = [ cfg.user ];
} }

View file

@ -9,4 +9,6 @@
"idbloader.img" "idbloader.img"
]; ];
}; };
transmission-exporter = prev.callPackage ./pkgs/transmission-exporter.nix { };
}) })

View file

@ -13,6 +13,8 @@
synapseUrl = "https://xiny.li"; synapseUrl = "https://xiny.li";
synapseDelegateUrl = "https://synapse.xiny.li"; synapseDelegateUrl = "https://synapse.xiny.li";
transmissionExporterUrl = "weilite.coho-tet.ts.net:19091";
prometheusCollectors = [ prometheusCollectors = [
"thorite.coho-tet.ts.net" "thorite.coho-tet.ts.net"
]; ];

View file

@ -0,0 +1,32 @@
{
lib,
fetchFromGitHub,
buildGoModule,
}:
buildGoModule rec {
pname = "transmission-exporter";
version = "0-unstable-2024-10-09";
rev = "v${version}";
src = fetchFromGitHub {
rev = "a7872aa2975c7a95af680c51198f4a363e226c8f";
owner = "metalmatze";
repo = "transmission-exporter";
sha256 = "sha256-Ky7eCvC1AqHheqGGOGBNKbtVgg4Y8hDG67gCVlpUwZo=";
};
vendorHash = "sha256-YhmfrM5iAK0zWcUM7LmbgFnH+k2M/tE+f/QQIQmQlZs=";
ldflags = [
"-X github.com/prometheus/common/version.Version=${version}"
"-X github.com/prometheus/common/version.Revision=${rev}"
];
meta = {
description = "Prometheus exporter for Transmission torrent client.";
homepage = "https://github.com/pborzenkov/transmission-exporter";
mainProgram = "transmission-exporter";
license = [ lib.licenses.mit ];
maintainers = [ lib.maintainers.xinyangli ];
};
}