nixos/graphite: add seyren service, graphite alerting dashboard
This commit is contained in:
parent
c396ee9912
commit
75aaeca9d2
1 changed files with 83 additions and 1 deletions
|
@ -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
|
||||
<link xlink:href='https://github.com/scobal/seyren#config' />
|
||||
'';
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue