nixos: add collectd module

This commit is contained in:
Jaka Hudoklin 2014-09-13 02:03:15 +02:00
parent a2865eb8e0
commit c396ee9912
3 changed files with 106 additions and 0 deletions

View file

@ -151,6 +151,7 @@
dnsmasq = 141;
uhub = 142;
yandexdisk=143;
collectd=144;
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!

View file

@ -179,6 +179,7 @@
./services/misc/uhub.nix
./services/misc/zookeeper.nix
./services/monitoring/apcupsd.nix
./services/monitoring/collectd.nix
./services/monitoring/dd-agent.nix
./services/monitoring/graphite.nix
./services/monitoring/monit.nix

View file

@ -0,0 +1,104 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.services.collectd;
conf = pkgs.writeText "collectd.conf" ''
BaseDir "${cfg.dataDir}"
PIDFile "${cfg.dataDir}/collectd.pid"
AutoLoadPlugin ${if cfg.autoLoadPlugin then "true" else "false"}
Hostname ${config.networking.hostName}
LoadPlugin syslog
<Plugin "syslog">
LogLevel "info"
NotifyLevel "OKAY"
</Plugin>
${concatMapStrings (f: ''
Include "${f}"
'') cfg.include}
${cfg.extraConfig}
'';
in {
options.services.collectd = with types; {
enable = mkOption {
default = false;
description = ''
Whether to enable collectd agent.
'';
type = bool;
};
user = mkOption {
default = "collectd";
description = ''
User under which to run collectd.
'';
type = nullOr str;
};
dataDir = mkOption {
default = "/var/lib/collectd";
description = ''
Data directory for collectd agent.
'';
type = path;
};
autoLoadPlugin = mkOption {
default = false;
description = ''
Enable plugin autoloading.
'';
type = bool;
};
include = mkOption {
default = [];
description = ''
Additional paths to load config from.
'';
type = listOf str;
};
extraConfig = mkOption {
default = "";
description = ''
Extra configuration for collectd.
'';
type = lines;
};
};
config = mkIf cfg.enable {
systemd.services.collectd = {
description = "Collectd Monitoring Agent";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${pkgs.collectd}/sbin/collectd -C ${conf} -P ${cfg.dataDir}/collectd.pid";
Type = "forking";
PIDFile = "${cfg.dataDir}/collectd.pid";
User = optional (cfg.user!="root") cfg.user;
PermissionsStartOnly = true;
};
preStart = ''
mkdir -m 0700 -p ${cfg.dataDir}
if [ "$(id -u)" = 0 ]; then chown -R ${cfg.user} ${cfg.dataDir}; fi
'';
};
users.extraUsers = optional (cfg.user == "collectd") {
name = "collectd";
uid = config.ids.uids.collectd;
};
};
}