summary refs log tree commit diff
path: root/nixos/modules/services/monitoring/prometheus/exporters/rspamd.nix
diff options
context:
space:
mode:
authorWilliButz <wbutz@cyberfnord.de>2018-08-21 01:43:47 +0200
committerWilliButz <wbutz@cyberfnord.de>2019-09-11 14:21:36 +0200
commitbcce960d7d042503ec8cad1b5544dd9d55a8ec63 (patch)
tree2de4caa7f2da00d7ced3e667089bc29a703582ea /nixos/modules/services/monitoring/prometheus/exporters/rspamd.nix
parent0d71e6910131e5bf331c2c43967c87ab5ffccf0a (diff)
downloadnixpkgs-bcce960d7d042503ec8cad1b5544dd9d55a8ec63.tar
nixpkgs-bcce960d7d042503ec8cad1b5544dd9d55a8ec63.tar.gz
nixpkgs-bcce960d7d042503ec8cad1b5544dd9d55a8ec63.tar.bz2
nixpkgs-bcce960d7d042503ec8cad1b5544dd9d55a8ec63.tar.lz
nixpkgs-bcce960d7d042503ec8cad1b5544dd9d55a8ec63.tar.xz
nixpkgs-bcce960d7d042503ec8cad1b5544dd9d55a8ec63.tar.zst
nixpkgs-bcce960d7d042503ec8cad1b5544dd9d55a8ec63.zip
nixos/prometheus-exporters: add rspamd-exporter
This adds a module that configures the json exporter,
which then acts as an exporter for rspamd.
Diffstat (limited to 'nixos/modules/services/monitoring/prometheus/exporters/rspamd.nix')
-rw-r--r--nixos/modules/services/monitoring/prometheus/exporters/rspamd.nix92
1 files changed, 92 insertions, 0 deletions
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/rspamd.nix b/nixos/modules/services/monitoring/prometheus/exporters/rspamd.nix
new file mode 100644
index 00000000000..1f02ae20724
--- /dev/null
+++ b/nixos/modules/services/monitoring/prometheus/exporters/rspamd.nix
@@ -0,0 +1,92 @@
+{ config, lib, pkgs, options }:
+
+with lib;
+
+let
+  cfg = config.services.prometheus.exporters.rspamd;
+
+  prettyJSON = conf:
+    pkgs.runCommand "rspamd-exporter-config.yml" { } ''
+      echo '${builtins.toJSON conf}' | ${pkgs.buildPackages.jq}/bin/jq '.' > $out
+    '';
+
+  generateConfig = extraLabels: (map (path: {
+    name = "rspamd_${replaceStrings [ "." " " ] [ "_" "_" ] path}";
+    path = "$.${path}";
+    labels = extraLabels;
+  }) [
+    "actions.'add header'"
+    "actions.'no action'"
+    "actions.'rewrite subject'"
+    "actions.'soft reject'"
+    "actions.greylist"
+    "actions.reject"
+    "bytes_allocated"
+    "chunks_allocated"
+    "chunks_freed"
+    "chunks_oversized"
+    "connections"
+    "control_connections"
+    "ham_count"
+    "learned"
+    "pools_allocated"
+    "pools_freed"
+    "read_only"
+    "scanned"
+    "shared_chunks_allocated"
+    "spam_count"
+    "total_learns"
+  ]) ++ [{
+    name = "rspamd_statfiles";
+    type = "object";
+    path = "$.statfiles[*]";
+    labels = recursiveUpdate {
+      symbol = "$.symbol";
+      type = "$.type";
+    } extraLabels;
+    values = {
+      revision = "$.revision";
+      size = "$.size";
+      total = "$.total";
+      used = "$.used";
+      languages = "$.languages";
+      users = "$.users";
+    };
+  }];
+in
+{
+  port = 7980;
+  extraOpts = {
+    listenAddress = {}; # not used
+
+    url = mkOption {
+      type = types.str;
+      description = ''
+        URL to the rspamd metrics endpoint.
+        Defaults to http://localhost:11334/stat when
+        <option>services.rspamd.enable</option> is true.
+      '';
+    };
+
+    extraLabels = mkOption {
+      type = types.attrsOf types.str;
+      default = {
+        host = config.networking.hostName;
+      };
+      defaultText = "{ host = config.networking.hostName; }";
+      example = literalExample ''
+        {
+          host = config.networking.hostName;
+          custom_label = "some_value";
+        }
+      '';
+      description = "Set of labels added to each metric.";
+    };
+  };
+  serviceOpts.serviceConfig.ExecStart = ''
+    ${pkgs.prometheus-json-exporter}/bin/prometheus-json-exporter \
+      --port ${toString cfg.port} \
+      ${cfg.url} ${prettyJSON (generateConfig cfg.extraLabels)} \
+      ${concatStringsSep " \\\n  " cfg.extraFlags}
+  '';
+}