251 lines
9.8 KiB
Nix
251 lines
9.8 KiB
Nix
{ pkgs, lib, config, ...}:
|
|
with lib;
|
|
{
|
|
|
|
options.services.node-exporter = {
|
|
enable = mkEnableOption "Enable the prometheus node_exporter";
|
|
listen = mkOption {
|
|
description = "[host]:port to listen on for the node_exporter";
|
|
default = "localhost:9100";
|
|
defaultText = "localhost:9100";
|
|
};
|
|
};
|
|
|
|
options.services.heracles = {
|
|
enable = mkEnableOption "Enable the heracles server";
|
|
listen = mkOption {
|
|
description = "[host]:port to listen on for the heracles server";
|
|
default = "localhost:9001";
|
|
defaultText = "localhost:9001";
|
|
};
|
|
logsPath = mkOption rec {
|
|
description = "Path to save heracles log files to";
|
|
default = "/Users/zaphar/opt/heracles";
|
|
defaultText = default;
|
|
};
|
|
stdoutPath = mkOption {
|
|
default = "${config.services.heracles.logsPath}/heracles.out.log";
|
|
};
|
|
stderrPath = mkOption {
|
|
default = "${config.services.heracles.logsPath}/heracles.err.log";
|
|
};
|
|
pidPath = mkOption {
|
|
default = "${config.services.heracles.logsPath}/heracles.pid";
|
|
};
|
|
settings = mkOption {
|
|
description = "Settings for the heracles dashboards";
|
|
default = [];
|
|
defaultText = "[]";
|
|
};
|
|
};
|
|
|
|
options.services.durnitisp = {
|
|
enable = mkEnableOption "Enable the durnitisp server";
|
|
listen = mkOption {
|
|
description = "[host]:port to listen on for the durnitisp metrics server";
|
|
default = "localhost:9002";
|
|
defaultText = "localhost:9002";
|
|
};
|
|
stdoutPath = mkOption {
|
|
default = "/var/log/durnitisp.out.log";
|
|
};
|
|
stderrPath = mkOption {
|
|
default = "/var/log/durnitisp.err.log";
|
|
};
|
|
# TODO(zaphar): Should this be written somewhere else?
|
|
pidPath = mkOption {
|
|
default = "/var/log/durnitisp.pid";
|
|
};
|
|
};
|
|
|
|
options.services.prometheus = {
|
|
enable = lib.mkEnableOption "Enable the prometheus server";
|
|
listen = mkOption {
|
|
description = "[host]:port to listen on for the prometheus server";
|
|
default = "localhost:9000";
|
|
defaultText = "localhost:9000";
|
|
};
|
|
stdoutPath = mkOption {
|
|
default = "${config.services.prometheus.dataPath}/prometheus.out.log";
|
|
};
|
|
stderrPath = mkOption {
|
|
default = "${config.services.prometheus.dataPath}/prometheus.err.log";
|
|
};
|
|
pidPath = mkOption {
|
|
default = "${config.services.prometheus.dataPath}/prometheus.pid";
|
|
};
|
|
settings = mkOption {
|
|
description = "The yaml configuration file settings for prometheus";
|
|
default = {
|
|
scrape_configs = [
|
|
{
|
|
job_name = "node_exporter";
|
|
scrape_interval = "30s";
|
|
metrics_path = "/metrics";
|
|
static_configs = [
|
|
{
|
|
targets = [
|
|
"${config.services.node-exporter.listen}"
|
|
];
|
|
}
|
|
];
|
|
}
|
|
{
|
|
job_name = "network_quality";
|
|
scrape_interval = "30s";
|
|
metrics_path = "/";
|
|
static_configs = [
|
|
{
|
|
targets = [
|
|
"${config.services.durnitisp.listen}"
|
|
];
|
|
}
|
|
];
|
|
}
|
|
];
|
|
};
|
|
defaultText = ''{
|
|
scrape_configs = [
|
|
{
|
|
job_name = "nodestats";
|
|
scrape_interval = "30s";
|
|
metrics_path = "/metrics";
|
|
static_configs = [
|
|
{
|
|
targets = [
|
|
"${config.services.node-exporter.listen}"
|
|
];
|
|
}
|
|
];
|
|
}
|
|
];
|
|
}'';
|
|
};
|
|
dataPath = mkOption rec {
|
|
description = "Storage path for the tsdb";
|
|
default = "/Users/zaphar/opt/prometheus";
|
|
defaultText = default;
|
|
};
|
|
};
|
|
|
|
|
|
config = let
|
|
heraclesOutPath = config.services.heracles.stdoutPath;
|
|
heraclesErrPath = config.services.heracles.stderrPath;
|
|
heraclesPidPath = config.services.heracles.pidPath;
|
|
|
|
durnitispOutPath = config.services.durnitisp.stdoutPath;
|
|
durnitispErrPath = config.services.durnitisp.stderrPath;
|
|
durnitispPidPath = config.services.durnitisp.pidPath;
|
|
|
|
prometheusOutPath = config.services.prometheus.stdoutPath;
|
|
prometheusErrPath = config.services.prometheus.stderrPath;
|
|
prometheusPidPath = config.services.prometheus.pidPath;
|
|
in
|
|
{
|
|
launchd.user.agents.node-exporter = mkIf config.services.node-exporter.enable {
|
|
serviceConfig = {
|
|
ProgramArguments = [
|
|
"${pkgs.prometheus-node-exporter}/bin/node_exporter"
|
|
"--web.listen-address=${config.services.node-exporter.listen}"
|
|
];
|
|
KeepAlive = true;
|
|
RunAtLoad = true;
|
|
};
|
|
};
|
|
|
|
environment.etc."prometheus.yaml" = mkIf config.services.prometheus.enable {
|
|
text = (generators.toYAML {} config.services.prometheus.settings);
|
|
};
|
|
|
|
environment.etc."heracles.yaml" = mkIf config.services.heracles.enable {
|
|
text = (generators.toYAML {} config.services.heracles.settings);
|
|
};
|
|
|
|
launchd.user.agents.heracles = mkIf config.services.heracles.enable {
|
|
serviceConfig = {
|
|
ProgramArguments = [
|
|
"${pkgs.clio}/bin/clio"
|
|
"--out-path=${heraclesOutPath}"
|
|
"--err-path=${heraclesErrPath}"
|
|
"--pid-file=${heraclesPidPath}"
|
|
"--paranoid"
|
|
"--"
|
|
"${pkgs.heracles}/bin/heracles"
|
|
"--listen=${config.services.heracles.listen}"
|
|
"--config=/etc/${config.environment.etc."heracles.yaml".target}"
|
|
];
|
|
WatchPaths = [
|
|
"/etc/${config.environment.etc."heracles.yaml".target}"
|
|
];
|
|
KeepAlive = true;
|
|
RunAtLoad = true;
|
|
};
|
|
};
|
|
|
|
launchd.daemons.durnitisp = mkIf config.services.durnitisp.enable {
|
|
serviceConfig = {
|
|
ProgramArguments = [
|
|
"${pkgs.clio}/bin/clio"
|
|
"--out-path=${durnitispOutPath}"
|
|
"--err-path=${durnitispErrPath}"
|
|
"--pid-file=${durnitispPidPath}"
|
|
"--paranoid"
|
|
"--"
|
|
"${pkgs.durnitisp}/bin/durnitisp"
|
|
"--listenHost=${config.services.durnitisp.listen}"
|
|
];
|
|
|
|
KeepAlive = true;
|
|
RunAtLoad = true;
|
|
};
|
|
};
|
|
|
|
launchd.user.agents.prometheus = mkIf config.services.prometheus.enable {
|
|
serviceConfig = {
|
|
ProgramArguments = [
|
|
"${pkgs.clio}/bin/clio"
|
|
"--out-path=${prometheusOutPath}"
|
|
"--err-path=${prometheusErrPath}"
|
|
"--pid-file=${prometheusPidPath}"
|
|
"--paranoid"
|
|
"--"
|
|
"${pkgs.prometheus}/bin/prometheus"
|
|
"--web.listen-address=${config.services.prometheus.listen}"
|
|
"--config.file=/etc/${config.environment.etc."prometheus.yaml".target}"
|
|
"--storage.tsdb.path=${config.services.prometheus.dataPath}/data"
|
|
];
|
|
WorkingDirectory = config.services.prometheus.dataPath;
|
|
WatchPaths = [
|
|
"/etc/${config.environment.etc."prometheus.yaml".target}"
|
|
];
|
|
KeepAlive = true;
|
|
RunAtLoad = true;
|
|
};
|
|
};
|
|
|
|
environment.etc."newsyslog.d/org.nixos.prometheus.conf" = mkIf config.services.prometheus.enable {
|
|
text = ''
|
|
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
|
|
${prometheusOutPath} zaphar:staff 644 10 1000 * BJ ${prometheusPidPath} 1
|
|
${prometheusErrPath} zaphar:staff 644 10 1000 * BJ ${prometheusPidPath} 1
|
|
'';
|
|
};
|
|
#environment.etc."newsyslog.d/org.nixos.heracles.conf" = mkIf config.services.prometheus.enable {
|
|
# text = ''
|
|
# # logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
|
|
# ${heraclesOutPath} zaphar:staff 644 10 1000 * BJ ${heraclesPidPath} 1
|
|
# ${heraclesErrPath} zaphar:staff 644 10 1000 * BJ ${heraclesPidPath} 1
|
|
# '';
|
|
#};
|
|
environment.etc."newsyslog.d/org.nixos.durnitisp.conf" = mkIf config.services.durnitisp.enable {
|
|
text = ''
|
|
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
|
|
${durnitispOutPath} zaphar:staff 644 10 1000 * BJ ${prometheusPidPath} 1
|
|
${durnitispErrPath} zaphar:staff 644 10 1000 * BJ ${prometheusPidPath} 1
|
|
'';
|
|
};
|
|
};
|
|
}
|
|
|