Add statsd, simple daemon for easy stats aggregation

This commit is contained in:
Jaka Hudoklin 2013-08-21 11:43:37 +02:00 committed by Rob Vermaas
parent d848daad94
commit 5894f26c81
3 changed files with 96 additions and 0 deletions

View file

@ -81,6 +81,7 @@ in
supybot = 65;
iodined = 66;
graphite = 68;
statsd = 69;
# When adding a uid, make sure it doesn't match an existing gid.

View file

@ -125,6 +125,7 @@
./services/monitoring/monit.nix
./services/monitoring/nagios/default.nix
./services/monitoring/smartd.nix
./services/monitoring/statsd.nix
./services/monitoring/systemhealth.nix
./services/monitoring/ups.nix
./services/monitoring/uptime.nix

View file

@ -0,0 +1,94 @@
{ config, pkgs, ... }:
with pkgs.lib;
let
cfg = config.services.statsd;
configFile = pkgs.writeText "statsd.conf" ''
{
host: "${cfg.host}",
port: "${toString cfg.port}",
backends: [${concatMapStrings (el: ''"./backends/${el}",'') cfg.backends}],
graphiteHost: "${cfg.graphiteHost}",
graphitePort: "${toString cfg.graphitePort}",
${cfg.extraConfig}
}
'';
in
{
###### interface
options.services.statsd = {
enable = mkOption {
description = "Whether to enable statsd stats aggregation service";
default = false;
type = types.uniq types.bool;
};
host = mkOption {
description = "Address that statsd listens on over UDP";
default = "127.0.0.1";
type = types.uniq types.string;
};
port = mkOption {
description = "Port that stats listens for messages on over UDP";
default = 8125;
type = types.uniq types.int;
};
backends = mkOption {
description = "List of backends statsd will use for data persistance";
default = ["graphite"];
};
graphiteHost = mkOption {
description = "Hostname or IP of Graphite server";
default = "127.0.0.1";
type = types.uniq types.string;
};
graphitePort = mkOption {
description = "Port of Graphite server";
default = 2003;
type = types.uniq types.int;
};
extraConfig = mkOption {
default = "";
description = "Extra configuration options for statsd";
type = types.uniq types.string;
};
};
###### implementation
config = mkIf cfg.enable {
users.extraUsers = singleton {
name = "statsd";
uid = config.ids.uids.statsd;
description = "Statsd daemon user";
};
systemd.services.statsd = {
description = "Statsd Server";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${pkgs.nodePackages.statsd}/bin/statsd ${configFile}";
User = "statsd";
};
};
environment.systemPackages = [pkgs.nodePackages.statsd];
};
}