diff options
author | Jaka Hudoklin <jakahudoklin@gmail.com> | 2013-08-19 04:14:53 +0200 |
---|---|---|
committer | Jaka Hudoklin <jakahudoklin@gmail.com> | 2013-08-19 04:22:46 +0200 |
commit | 4628fd8434582592c3b5929bb8244b07c4007f3f (patch) | |
tree | ed5a6b43fa0e1b08edafef79bd58524fd6007490 /modules/services/monitoring | |
parent | b244a4718598aa28a5bf6807410354fb2bdb9f08 (diff) | |
download | nixlib-4628fd8434582592c3b5929bb8244b07c4007f3f.tar nixlib-4628fd8434582592c3b5929bb8244b07c4007f3f.tar.gz nixlib-4628fd8434582592c3b5929bb8244b07c4007f3f.tar.bz2 nixlib-4628fd8434582592c3b5929bb8244b07c4007f3f.tar.lz nixlib-4628fd8434582592c3b5929bb8244b07c4007f3f.tar.xz nixlib-4628fd8434582592c3b5929bb8244b07c4007f3f.tar.zst nixlib-4628fd8434582592c3b5929bb8244b07c4007f3f.zip |
graphite: Refactor options, serve with waitress
Diffstat (limited to 'modules/services/monitoring')
-rw-r--r-- | modules/services/monitoring/graphite.nix | 243 |
1 files changed, 135 insertions, 108 deletions
diff --git a/modules/services/monitoring/graphite.nix b/modules/services/monitoring/graphite.nix index 43fc7be00634..8ed045e5eb5e 100644 --- a/modules/services/monitoring/graphite.nix +++ b/modules/services/monitoring/graphite.nix @@ -13,130 +13,145 @@ in { ###### interface options.services.graphite = { - carbon = mkOption { - description = "Content of carbon configuration file"; - default = ""; - type = types.uniq types.string; - }; + web = { + enable = mkOption { + description = "Whether to enable graphite web frontend"; + default = false; + type = types.uniq types.bool; + }; - enableCarbonCache = mkOption { - description = "Whether to enable carbon cache, the graphite storage daemon"; - default = false; - type = types.uniq types.bool; - }; + host = mkOption { + description = "Graphite web frontend listen address"; + default = "127.0.0.1"; + types = type.uniq types.string; + }; - storageAggregation = mkOption { - description = "Defines how to aggregate data to lower-precision retentions"; - default = null; - type = types.uniq (types.nullOr types.string); - example = '' - [all_min] - pattern = \.min$ - xFilesFactor = 0.1 - aggregationMethod = min - ''; + port = mkOption { + description = "Graphite web frontend port"; + default = "8080"; + types = type.uniq types.string; + }; }; - storageSchemas = mkOption { - description = "Defines retention rates for storing metrics"; - default = ""; - type = types.uniq (types.nullOr types.string); - example = '' - [apache_busyWorkers] - pattern = ^servers\.www.*\.workers\.busyWorkers$ - retentions = 15s:7d,1m:21d,15m:5y - ''; - }; + carbon = { + config = mkOption { + description = "Content of carbon configuration file"; + default = ""; + type = types.uniq types.string; + }; - blacklist = mkOption { - description = "Any metrics received which match one of the experssions will be dropped"; - default = null; - type = types.uniq (types.nullOr types.string); - example = "^some\.noisy\.metric\.prefix\..*"; - }; + enableCache = mkOption { + description = "Whether to enable carbon cache, the graphite storage daemon"; + default = false; + type = types.uniq types.bool; + }; - whitelist = mkOption { - description = "Only metrics received which match one of the experssions will be persisted"; - default = null; - type = types.uniq (types.nullOr types.string); - example = ".*"; - }; + storageAggregation = mkOption { + description = "Defines how to aggregate data to lower-precision retentions"; + default = null; + type = types.uniq (types.nullOr types.string); + example = '' + [all_min] + pattern = \.min$ + xFilesFactor = 0.1 + aggregationMethod = min + ''; + }; - rewriteRules = mkOption { - description = "Regular expression patterns that can be used to rewrite metric names in a search and replace fashion"; - default = null; - type = types.uniq (types.nullOr types.string); - example = '' - [post] - _sum$ = - _avg$ = - ''; - }; + storageSchemas = mkOption { + description = "Defines retention rates for storing metrics"; + default = ""; + type = types.uniq (types.nullOr types.string); + example = '' + [apache_busyWorkers] + pattern = ^servers\.www.*\.workers\.busyWorkers$ + retentions = 15s:7d,1m:21d,15m:5y + ''; + }; - enableCarbonRelay = mkOption { - description = "Whether to enable carbon relay, the carbon replication and sharding service"; - default = false; - type = types.uniq types.bool; - }; + blacklist = mkOption { + description = "Any metrics received which match one of the experssions will be dropped"; + default = null; + type = types.uniq (types.nullOr types.string); + example = "^some\.noisy\.metric\.prefix\..*"; + }; - relayRules = mkOption { - description = "Relay rules are used to send certain metrics to a certain backend."; - default = null; - type = types.uniq (types.nullOr types.string); - example = '' - [example] - pattern = ^mydata\.foo\..+ - servers = 10.1.2.3, 10.1.2.4:2004, myserver.mydomain.com - ''; - }; + whitelist = mkOption { + description = "Only metrics received which match one of the experssions will be persisted"; + default = null; + type = types.uniq (types.nullOr types.string); + example = ".*"; + }; - enableCarbonAggregator = mkOption { - description = "Whether to enable carbon agregator, the carbon buffering service"; - default = false; - type = types.uniq types.bool; - }; + rewriteRules = mkOption { + description = "Regular expression patterns that can be used to rewrite metric names in a search and replace fashion"; + default = null; + type = types.uniq (types.nullOr types.string); + example = '' + [post] + _sum$ = + _avg$ = + ''; + }; - aggregationRules = mkOption { - description = "Defines if and how received metrics will be agregated"; - default = null; - type = types.uniq (types.nullOr types.string); - example = '' - <env>.applications.<app>.all.requests (60) = sum <env>.applications.<app>.*.requests - <env>.applications.<app>.all.latency (60) = avg <env>.applications.<app>.*.latency - ''; - }; + enableRelay = mkOption { + description = "Whether to enable carbon relay, the carbon replication and sharding service"; + default = false; + type = types.uniq types.bool; + }; - enableGraphiteWeb = mkOption { - description = "Whether to enable graphite web frontend"; - default = false; - type = types.uniq types.bool; - }; + relayRules = mkOption { + description = "Relay rules are used to send certain metrics to a certain backend."; + default = null; + type = types.uniq (types.nullOr types.string); + example = '' + [example] + pattern = ^mydata\.foo\..+ + servers = 10.1.2.3, 10.1.2.4:2004, myserver.mydomain.com + ''; + }; + enableAggregator = mkOption { + description = "Whether to enable carbon agregator, the carbon buffering service"; + default = false; + type = types.uniq types.bool; + }; + + aggregationRules = mkOption { + description = "Defines if and how received metrics will be agregated"; + default = null; + type = types.uniq (types.nullOr types.string); + example = '' + <env>.applications.<app>.all.requests (60) = sum <env>.applications.<app>.*.requests + <env>.applications.<app>.all.latency (60) = avg <env>.applications.<app>.*.latency + ''; + }; + }; }; ###### implementation - config = mkIf (cfg.enableCarbonAggregator || cfg.enableCarbonCache || cfg.enableCarbonRelay || cfg.enableGraphiteWeb) { + config = mkIf (cfg.carbon.enableAggregator || cfg.carbon.enableCache || cfg.cabon.enableRelay || cfg.web.enable) { environment.etc = lists.filter (el: el.source != null) [ - { source = writeTextOrNull "carbon.conf" cfg.carbon; + { source = writeTextOrNull "carbon.conf" cfg.carbon.config; target = "graphite/carbon.conf"; } - { source = writeTextOrNull "storage-agregation.conf" cfg.storageAggregation; + { source = writeTextOrNull "storage-agregation.conf" cfg.carbon.storageAggregation; target = "graphite/storage-agregation.conf"; } - { source = writeTextOrNull "storage-schemas.conf" cfg.storageSchemas; + { source = writeTextOrNull "storage-schemas.conf" cfg.carbon.storageSchemas; target = "graphite/storage-schemas.conf"; } - { source = writeTextOrNull "blacklist.conf" cfg.blacklist; + { source = writeTextOrNull "blacklist.conf" cfg.carbon.blacklist; target = "graphite/blacklist.conf"; } - { source = writeTextOrNull "whitelist.conf" cfg.whitelist; + { source = writeTextOrNull "whitelist.conf" cfg.carbon.whitelist; target = "graphite/whitelist.conf"; } - { source = writeTextOrNull "rewrite-rules.conf" cfg.rewriteRules; + { source = writeTextOrNull "rewrite-rules.conf" cfg.carbon.rewriteRules; target = "graphite/rewrite-rules.conf"; } - { source = writeTextOrNull "relay-rules.conf" cfg.relayRules; + { source = writeTextOrNull "relay-rules.conf" cfg.carbon.relayRules; target = "graphite/relay-rules.conf"; } - { source = writeTextOrNull "aggregation-rules.conf" cfg.aggregationRules; + { source = writeTextOrNull "aggregation-rules.conf" cfg.carbon.aggregationRules; target = "graphite/aggregation-rules.conf"; } ]; - systemd.services.carbonCache = mkIf cfg.enableCarbonCache { + systemd.services.carbonCache = mkIf cfg.carbon.enableCache { description = "Graphite data storage backend"; wantedBy = [ "multi-user.target" ]; after = [ "network-interfaces.target" ]; @@ -150,15 +165,15 @@ in { Group = "graphite"; }; restartTriggers = [ - pkgs.pythonPackages.carbon cfg.carbon - cfg.storageAggregation cfg.storageSchemas cfg.rewriteRules + pkgs.pythonPackages.carbon cfg.carbon.config cfg.carbon.storageAggregation + cfg.carbon.storageSchemas cfg.carbon.rewriteRules ]; preStart = '' mkdir -p ${dataDir}/whisper ''; }; - systemd.services.carbonAggregator = mkIf cfg.enableCarbonAggregator { + systemd.services.carbonAggregator = mkIf cfg.carbon.enableAggregator { description = "Carbon data aggregator"; wantedBy = [ "multi-user.target" ]; after = [ "network-interfaces.target" ]; @@ -171,10 +186,12 @@ in { User = "graphite"; Group = "graphite"; }; - restartTriggers = [ pkgs.pythonPackages.carbon cfg.carbon cfg.aggregationRules ]; + restartTriggers = [ + pkgs.pythonPackages.carbon cfg.carbon.config cfg.carbon.aggregationRules + ]; }; - systemd.services.carbonRelay = mkIf cfg.enableCarbonRelay { + systemd.services.carbonRelay = mkIf cfg.carbon.enableRelay { description = "Carbon data relay"; wantedBy = [ "multi-user.target" ]; after = [ "network-interfaces.target" ]; @@ -187,19 +204,26 @@ in { User = "graphite"; Group = "graphite"; }; - restartTriggers = [ pkgs.pythonPackages.carbon cfg.carbon cfg.relayRules ]; + restartTriggers = [ + pkgs.pythonPackages.carbon cfg.carbon.config cfg.carbon.relayRules + ]; }; - systemd.services.graphiteWeb = mkIf cfg.enableGraphiteWeb { + systemd.services.graphiteWeb = mkIf cfg.web.enable { description = "Graphite web interface"; wantedBy = [ "multi-user.target" ]; after = [ "network-interfaces.target" ]; environment = { + PYTHONPATH = "${pkgs.python27Packages.graphite_web}/lib/python2.7/site-packages"; + DJANGO_SETTINGS_MODULE = "graphite.settings"; GRAPHITE_CONF_DIR = "/etc/graphite/"; GRAPHITE_STORAGE_DIR = "${dataDir}"; }; serviceConfig = { - ExecStart = "${pkgs.pythonPackages.graphite_web}/bin/run-graphite-devel-server.py ${pkgs.pythonPackages.graphite_web}"; + ExecStart = '' + ${pkgs.python27Packages.waitress}/bin/waitress-serve \ + --host=${cfg.web.host} --port=${cfg.web.port} \ + --call django.core.handlers.wsgi:WSGIHandler''; User = "graphite"; Group = "graphite"; }; @@ -208,19 +232,22 @@ in { mkdir -p ${dataDir}/{whisper/,log/webapp/} # populate database - ${pkgs.pythonPackages.graphite_web}/bin/manage-graphite.py syncdb --noinput + ${pkgs.python27Packages.graphite_web}/bin/manage-graphite.py syncdb --noinput # create index - ${pkgs.pythonPackages.graphite_web}/bin/build-index.sh + ${pkgs.python27Packages.graphite_web}/bin/build-index.sh touch ${dataDir}/db-created fi ''; - restartTriggers = [ pkgs.pythonPackages.graphite_web ]; + restartTriggers = [ + pkgs.python27Packages.graphite_web pkgs.python27Packages.waitress + ]; }; environment.systemPackages = [ - pkgs.pythonPackages.carbon pkgs.pythonPackages.graphite_web pkgs.pythonPackages.django_1_3 + pkgs.pythonPackages.carbon pkgs.python27Packages.graphite_web + pkgs.python27Packages.waitress ]; users.extraUsers = singleton { |