vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / varnish.nix
blobe94c513ae84f10ef0768c552111ce7b1a0531735
1 { config, lib, pkgs, options, ... }:
3 let
4   cfg = config.services.prometheus.exporters.varnish;
5   inherit (lib)
6     mkOption
7     types
8     mkDefault
9     optional
10     escapeShellArg
11     concatStringsSep
12     ;
15   port = 9131;
16   extraOpts = {
17     noExit = mkOption {
18       type = types.bool;
19       default = false;
20       description = ''
21         Do not exit server on Varnish scrape errors.
22       '';
23     };
24     withGoMetrics = mkOption {
25       type = types.bool;
26       default = false;
27       description = ''
28         Export go runtime and http handler metrics.
29       '';
30     };
31     verbose = mkOption {
32       type = types.bool;
33       default = false;
34       description = ''
35         Enable verbose logging.
36       '';
37     };
38     raw = mkOption {
39       type = types.bool;
40       default = false;
41       description = ''
42         Enable raw stdout logging without timestamps.
43       '';
44     };
45     varnishStatPath = mkOption {
46       type = types.str;
47       default = "varnishstat";
48       description = ''
49         Path to varnishstat.
50       '';
51     };
52     instance = mkOption {
53       type = types.nullOr types.str;
54       default = config.services.varnish.stateDir;
55       defaultText = lib.literalExpression "config.services.varnish.stateDir";
56       description = ''
57         varnishstat -n value.
58       '';
59     };
60     healthPath = mkOption {
61       type = types.nullOr types.str;
62       default = null;
63       description = ''
64         Path under which to expose healthcheck. Disabled unless configured.
65       '';
66     };
67     telemetryPath = mkOption {
68       type = types.str;
69       default = "/metrics";
70       description = ''
71         Path under which to expose metrics.
72       '';
73     };
74   };
75   serviceOpts = {
76     path = [ config.services.varnish.package ];
77     serviceConfig = {
78       RestartSec = mkDefault 1;
79       DynamicUser = false;
80       ExecStart = ''
81         ${pkgs.prometheus-varnish-exporter}/bin/prometheus_varnish_exporter \
82           --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
83           --web.telemetry-path ${cfg.telemetryPath} \
84           --varnishstat-path ${escapeShellArg cfg.varnishStatPath} \
85           ${concatStringsSep " \\\n  " (cfg.extraFlags
86             ++ optional (cfg.healthPath != null) "--web.health-path ${cfg.healthPath}"
87             ++ optional (cfg.instance != null) "-n ${escapeShellArg cfg.instance}"
88             ++ optional cfg.noExit "--no-exit"
89             ++ optional cfg.withGoMetrics "--with-go-metrics"
90             ++ optional cfg.verbose "--verbose"
91             ++ optional cfg.raw "--raw")}
92       '';
93     };
94   };