diff --git a/nixos/modules/services/monitoring/graphite.nix b/nixos/modules/services/monitoring/graphite.nix index ff5951afb4c4..472c71845bcb 100644 --- a/nixos/modules/services/monitoring/graphite.nix +++ b/nixos/modules/services/monitoring/graphite.nix @@ -18,6 +18,12 @@ let ${cfg.api.extraConfig} ''; + seyrenConfig = { + SEYREN_URL = cfg.seyren.seyrenUrl; + MONGO_URL = cfg.seyren.mongoUrl; + GRAPHITE_URL = cfg.seyren.graphiteUrl; + } // cfg.seyren.extraConfig; + configDir = pkgs.buildEnv { name = "graphite-config"; paths = lists.filter (el: el != null) [ @@ -242,11 +248,65 @@ in { ''; }; }; + + seyren = { + enable = mkOption { + description = "Whether to enable seyren service."; + default = false; + type = types.uniq types.bool; + }; + + port = mkOption { + description = "Seyren listening port."; + default = 8081; + type = types.int; + }; + + seyrenUrl = mkOption { + default = "http://localhost:${toString cfg.seyren.port}/"; + description = "Host where seyren is accessible."; + type = types.str; + }; + + graphiteUrl = mkOption { + default = "http://${cfg.web.host}:${toString cfg.web.port}"; + description = "Host where graphite service runs."; + type = types.str; + }; + + mongoUrl = mkOption { + default = "mongodb://${config.services.mongodb.bind_ip}:27017/seyren"; + description = "Mongodb connection string."; + type = types.str; + }; + + extraConfig = mkOption { + default = {}; + description = '' + Extra seyren configuration. See + + ''; + type = types.attrsOf types.str; + example = literalExample '' + { + GRAPHITE_USERNAME = "user"; + GRAPHITE_PASSWORD = "pass"; + } + ''; + }; + }; }; ###### implementation - config = mkIf (cfg.carbon.enableAggregator || cfg.carbon.enableCache || cfg.carbon.enableRelay || cfg.web.enable || cfg.api.enable) { + config = mkIf ( + cfg.carbon.enableAggregator || + cfg.carbon.enableCache || + cfg.carbon.enableRelay || + cfg.web.enable || + cfg.api.enable || + cfg.seyren.enable + ) { systemd.services.carbonCache = { enable = cfg.carbon.enableCache; description = "Graphite Data Storage Backend"; @@ -365,6 +425,28 @@ in { ''; }; + systemd.services.seyren = { + enable = cfg.seyren.enable; + description = "Graphite Alerting Dashboard"; + wantedBy = [ "multi-user.target" ]; + after = [ "network-interfaces.target" "mongodb.service" ]; + environment = seyrenConfig; + serviceConfig = { + ExecStart = "${pkgs.seyren}/bin/seyren -httpPort ${toString cfg.seyren.port}"; + WorkingDirectory = dataDir; + User = "graphite"; + Group = "graphite"; + }; + preStart = '' + if ! test -e ${dataDir}/db-created; then + mkdir -p ${dataDir} + chown -R graphite:graphite ${dataDir} + fi + ''; + }; + + services.mongodb.enable = mkDefault cfg.seyren.enable; + environment.systemPackages = [ pkgs.pythonPackages.carbon pkgs.python27Packages.graphite_web