253 lines
6.3 KiB
Nix
253 lines
6.3 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with builtins;
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.lass.kapacitor;
|
|
|
|
out = {
|
|
options.lass.kapacitor = api;
|
|
config = mkIf cfg.enable imp;
|
|
};
|
|
|
|
api = {
|
|
enable = mkEnableOption "kapacitor";
|
|
dataDir = mkOption {
|
|
type = types.str;
|
|
default = "/var/lib/kapacitor";
|
|
};
|
|
user = mkOption {
|
|
type = types.str;
|
|
default = "kapacitor";
|
|
};
|
|
alarms = mkOption {
|
|
type = with types; attrsOf str;
|
|
default = {};
|
|
};
|
|
check_db = mkOption {
|
|
type = types.str;
|
|
default = "kapacitor_example";
|
|
};
|
|
config = mkOption {
|
|
type = types.str;
|
|
#TODO: find a good default
|
|
default = ''
|
|
hostname = "localhost"
|
|
data_dir = "${cfg.dataDir}"
|
|
|
|
[http]
|
|
bind-address = ":9092"
|
|
auth-enabled = false
|
|
log-enabled = true
|
|
write-tracing = false
|
|
pprof-enabled = false
|
|
https-enabled = false
|
|
https-certificate = "/etc/ssl/kapacitor.pem"
|
|
shutdown-timeout = "10s"
|
|
shared-secret = ""
|
|
|
|
[replay]
|
|
dir = "${cfg.dataDir}/replay"
|
|
|
|
[storage]
|
|
boltdb = "${cfg.dataDir}/kapacitor.db"
|
|
|
|
[task]
|
|
dir = "${cfg.dataDir}/tasks"
|
|
snapshot-interval = "1m0s"
|
|
|
|
[[influxdb]]
|
|
enabled = true
|
|
name = "default"
|
|
default = false
|
|
urls = ["http://localhost:8086"]
|
|
username = ""
|
|
password = ""
|
|
ssl-ca = ""
|
|
ssl-cert = ""
|
|
ssl-key = ""
|
|
insecure-skip-verify = false
|
|
timeout = "0s"
|
|
disable-subscriptions = false
|
|
subscription-protocol = "http"
|
|
udp-bind = ""
|
|
udp-buffer = 1000
|
|
udp-read-buffer = 0
|
|
startup-timeout = "5m0s"
|
|
subscriptions-sync-interval = "1m0s"
|
|
[influxdb.subscriptions]
|
|
[influxdb.excluded-subscriptions]
|
|
_kapacitor = ["autogen"]
|
|
|
|
[logging]
|
|
file = "STDERR"
|
|
level = "INFO"
|
|
|
|
[collectd]
|
|
enabled = false
|
|
bind-address = ":25826"
|
|
database = "collectd"
|
|
retention-policy = ""
|
|
batch-size = 5000
|
|
batch-pending = 10
|
|
batch-timeout = "10s"
|
|
read-buffer = 0
|
|
typesdb = "/usr/share/collectd/types.db"
|
|
|
|
[opentsdb]
|
|
enabled = false
|
|
bind-address = ":4242"
|
|
database = "opentsdb"
|
|
retention-policy = ""
|
|
consistency-level = "one"
|
|
tls-enabled = false
|
|
certificate = "/etc/ssl/influxdb.pem"
|
|
batch-size = 1000
|
|
batch-pending = 5
|
|
batch-timeout = "1s"
|
|
log-point-errors = true
|
|
|
|
[smtp]
|
|
enabled = false
|
|
host = "localhost"
|
|
port = 25
|
|
username = ""
|
|
password = ""
|
|
no-verify = false
|
|
global = false
|
|
state-changes-only = false
|
|
from = ""
|
|
idle-timeout = "30s"
|
|
|
|
[opsgenie]
|
|
enabled = false
|
|
api-key = ""
|
|
url = "https://api.opsgenie.com/v1/json/alert"
|
|
recovery_url = "https://api.opsgenie.com/v1/json/alert/note"
|
|
global = false
|
|
|
|
[victorops]
|
|
enabled = false
|
|
api-key = ""
|
|
routing-key = ""
|
|
url = "https://alert.victorops.com/integrations/generic/20131114/alert"
|
|
global = false
|
|
|
|
[pagerduty]
|
|
enabled = false
|
|
url = "https://events.pagerduty.com/generic/2010-04-15/create_event.json"
|
|
service-key = ""
|
|
global = false
|
|
|
|
[sensu]
|
|
enabled = false
|
|
addr = ""
|
|
source = "Kapacitor"
|
|
|
|
[slack]
|
|
enabled = false
|
|
url = ""
|
|
channel = ""
|
|
global = false
|
|
state-changes-only = false
|
|
|
|
[telegram]
|
|
enabled = false
|
|
url = "https://api.telegram.org/bot"
|
|
token = ""
|
|
chat-id = ""
|
|
parse-mode = ""
|
|
disable-web-page-preview = false
|
|
disable-notification = false
|
|
global = false
|
|
state-changes-only = false
|
|
|
|
[hipchat]
|
|
enabled = false
|
|
url = ""
|
|
token = ""
|
|
room = ""
|
|
global = false
|
|
state-changes-only = false
|
|
|
|
[alerta]
|
|
enabled = false
|
|
url = ""
|
|
token = ""
|
|
environment = ""
|
|
origin = ""
|
|
|
|
[reporting]
|
|
enabled = true
|
|
url = "https://usage.influxdata.com"
|
|
|
|
[stats]
|
|
enabled = true
|
|
stats-interval = "10s"
|
|
database = "_kapacitor"
|
|
retention-policy = "autogen"
|
|
timing-sample-rate = 0.1
|
|
timing-movavg-size = 1000
|
|
|
|
[udf]
|
|
|
|
[deadman]
|
|
interval = "10s"
|
|
threshold = 0.0
|
|
id = "{{ .Group }}:NODE_NAME for task '{{ .TaskName }}'"
|
|
message = "{{ .ID }} is {{ if eq .Level \"OK\" }}alive{{ else }}dead{{ end }}: {{ index .Fields \"emitted\" | printf \"%0.3f\" }} points/INTERVAL."
|
|
global = false
|
|
|
|
[talk]
|
|
enabled = false
|
|
url = ""
|
|
author_name = ""
|
|
'';
|
|
description = "configuration kapacitor is started with";
|
|
};
|
|
};
|
|
|
|
configFile = pkgs.writeText "kapacitor.conf" cfg.config;
|
|
|
|
imp = {
|
|
|
|
systemd.services.kapacitor = {
|
|
description = "kapacitor";
|
|
after = [ "network.target" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
restartIfChanged = true;
|
|
|
|
serviceConfig = {
|
|
Restart = "always";
|
|
ExecStart = "${pkgs.kapacitor}/bin/kapacitord -config ${configFile}";
|
|
};
|
|
};
|
|
|
|
systemd.services.kapacitor-alarms = {
|
|
description = "kapacitor-alarms";
|
|
after = [ "kapacitor.service" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
restartIfChanged = true;
|
|
|
|
serviceConfig = {
|
|
Type = "oneshot";
|
|
ExecStart = pkgs.writeDash "add_alarms" ''
|
|
${pkgs.kapacitor}/bin/kapacitor delete tasks \*
|
|
${concatStrings (mapAttrsToList (name: alarm: ''
|
|
${pkgs.kapacitor}/bin/kapacitor define ${name} \
|
|
-type batch \
|
|
-tick ${pkgs.writeText "${name}.tick" alarm} \
|
|
-dbrp ${cfg.check_db}.default
|
|
${pkgs.kapacitor}/bin/kapacitor enable ${name}
|
|
'') cfg.alarms)}
|
|
'';
|
|
};
|
|
};
|
|
|
|
};
|
|
|
|
in out
|