nixos/kapacitor: new service
This commit is contained in:
parent
24d6c0dbde
commit
60298d1e08
|
@ -332,6 +332,7 @@
|
||||||
lirc = 305;
|
lirc = 305;
|
||||||
lidarr = 306;
|
lidarr = 306;
|
||||||
slurm = 307;
|
slurm = 307;
|
||||||
|
kapacitor = 308;
|
||||||
|
|
||||||
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
|
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
|
||||||
|
|
||||||
|
@ -624,6 +625,7 @@
|
||||||
lirc = 305;
|
lirc = 305;
|
||||||
lidarr = 306;
|
lidarr = 306;
|
||||||
slurm = 307;
|
slurm = 307;
|
||||||
|
kapacitor = 308;
|
||||||
|
|
||||||
# When adding a gid, make sure it doesn't match an existing
|
# When adding a gid, make sure it doesn't match an existing
|
||||||
# uid. Users and groups with the same name should have equal
|
# uid. Users and groups with the same name should have equal
|
||||||
|
|
|
@ -433,6 +433,7 @@
|
||||||
./services/monitoring/hdaps.nix
|
./services/monitoring/hdaps.nix
|
||||||
./services/monitoring/heapster.nix
|
./services/monitoring/heapster.nix
|
||||||
./services/monitoring/incron.nix
|
./services/monitoring/incron.nix
|
||||||
|
./services/monitoring/kapacitor.nix
|
||||||
./services/monitoring/longview.nix
|
./services/monitoring/longview.nix
|
||||||
./services/monitoring/monit.nix
|
./services/monitoring/monit.nix
|
||||||
./services/monitoring/munin.nix
|
./services/monitoring/munin.nix
|
||||||
|
|
154
nixos/modules/services/monitoring/kapacitor.nix
Normal file
154
nixos/modules/services/monitoring/kapacitor.nix
Normal file
|
@ -0,0 +1,154 @@
|
||||||
|
{ options, config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.kapacitor;
|
||||||
|
|
||||||
|
kapacitorConf = pkgs.writeTextFile {
|
||||||
|
name = "kapacitord.conf";
|
||||||
|
text = ''
|
||||||
|
hostname="${config.networking.hostName}"
|
||||||
|
data_dir="${cfg.dataDir}"
|
||||||
|
|
||||||
|
[http]
|
||||||
|
bind-address = "${cfg.bind}:${toString cfg.port}"
|
||||||
|
log-enabled = false
|
||||||
|
auth-enabled = false
|
||||||
|
|
||||||
|
[task]
|
||||||
|
dir = "${cfg.dataDir}/tasks"
|
||||||
|
snapshot-interval = "${cfg.taskSnapshotInterval}"
|
||||||
|
|
||||||
|
[replay]
|
||||||
|
dir = "${cfg.dataDir}/replay"
|
||||||
|
|
||||||
|
[storage]
|
||||||
|
boltdb = "${cfg.dataDir}/kapacitor.db"
|
||||||
|
|
||||||
|
${optionalString (cfg.loadDirectory != null) ''
|
||||||
|
[load]
|
||||||
|
enabled = true
|
||||||
|
dir = "${cfg.loadDirectory}"
|
||||||
|
''}
|
||||||
|
|
||||||
|
${optionalString (cfg.defaultDatabase.enable) ''
|
||||||
|
[[influxdb]]
|
||||||
|
name = "default"
|
||||||
|
enabled = true
|
||||||
|
default = true
|
||||||
|
urls = [ "${cfg.defaultDatabase.url}" ]
|
||||||
|
username = "${cfg.defaultDatabase.username}"
|
||||||
|
password = "${cfg.defaultDatabase.password}"
|
||||||
|
''}
|
||||||
|
|
||||||
|
${cfg.extraConfig}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.services.kapacitor = {
|
||||||
|
enable = mkEnableOption "kapacitor";
|
||||||
|
|
||||||
|
dataDir = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
example = "/var/lib/kapacitor";
|
||||||
|
default = "/var/lib/kapacitor";
|
||||||
|
description = "Location where Kapacitor stores its state";
|
||||||
|
};
|
||||||
|
|
||||||
|
port = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 9092;
|
||||||
|
description = "Port of Kapacitor";
|
||||||
|
};
|
||||||
|
|
||||||
|
bind = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "";
|
||||||
|
example = literalExample "0.0.0.0";
|
||||||
|
description = "Address to bind to. The default is to bind to all addresses";
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfig = mkOption {
|
||||||
|
description = "These lines go into kapacitord.conf verbatim.";
|
||||||
|
default = "";
|
||||||
|
type = types.lines;
|
||||||
|
};
|
||||||
|
|
||||||
|
user = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "kapacitor";
|
||||||
|
description = "User account under which Kapacitor runs";
|
||||||
|
};
|
||||||
|
|
||||||
|
group = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "kapacitor";
|
||||||
|
description = "Group under which Kapacitor runs";
|
||||||
|
};
|
||||||
|
|
||||||
|
taskSnapshotInterval = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = "Specifies how often to snapshot the task state (in InfluxDB time units)";
|
||||||
|
default = "1m0s";
|
||||||
|
example = "1m0s";
|
||||||
|
};
|
||||||
|
|
||||||
|
loadDirectory = mkOption {
|
||||||
|
type = types.nullOr types.path;
|
||||||
|
description = "Directory where to load services from, such as tasks, templates and handlers (or null to disable service loading on startup)";
|
||||||
|
default = null;
|
||||||
|
};
|
||||||
|
|
||||||
|
defaultDatabase = {
|
||||||
|
enable = mkEnableOption "kapacitor.defaultDatabase";
|
||||||
|
|
||||||
|
url = mkOption {
|
||||||
|
description = "The URL to an InfluxDB server that serves as the default database";
|
||||||
|
example = "http://localhost:8086";
|
||||||
|
type = types.string;
|
||||||
|
};
|
||||||
|
|
||||||
|
username = mkOption {
|
||||||
|
description = "The username to connect to the remote InfluxDB server";
|
||||||
|
type = types.string;
|
||||||
|
};
|
||||||
|
|
||||||
|
password = mkOption {
|
||||||
|
description = "The password to connect to the remote InfluxDB server";
|
||||||
|
type = types.string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
environment.systemPackages = [ pkgs.kapacitor ];
|
||||||
|
|
||||||
|
systemd.services.kapacitor = {
|
||||||
|
description = "Kapacitor Real-Time Stream Processing Engine";
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "networking.target" ];
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${pkgs.kapacitor}/bin/kapacitord -config ${kapacitorConf}";
|
||||||
|
User = "kapacitor";
|
||||||
|
Group = "kapacitor";
|
||||||
|
PermissionsStartOnly = true;
|
||||||
|
};
|
||||||
|
preStart = ''
|
||||||
|
mkdir -p ${cfg.dataDir}
|
||||||
|
chown ${cfg.user}:${cfg.group} ${cfg.dataDir}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
users.users.kapacitor = {
|
||||||
|
uid = config.ids.uids.kapacitor;
|
||||||
|
description = "Kapacitor user";
|
||||||
|
home = cfg.dataDir;
|
||||||
|
};
|
||||||
|
|
||||||
|
users.groups.kapacitor = {
|
||||||
|
gid = config.ids.gids.kapacitor;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue