vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / nginx.nix
blob091ad2291d2a6fa11efa49aede90ce9204eeb573
1 { config, lib, pkgs, options, ... }:
3 let
4   cfg = config.services.prometheus.exporters.nginx;
5   inherit (lib)
6     mkOption
7     types
8     mkMerge
9     mkRemovedOptionModule
10     mkRenamedOptionModule
11     mkIf
12     concatStringsSep
13     ;
16   port = 9113;
17   extraOpts = {
18     scrapeUri = mkOption {
19       type = types.str;
20       default = "http://localhost/nginx_status";
21       description = ''
22         Address to access the nginx status page.
23         Can be enabled with services.nginx.statusPage = true.
24       '';
25     };
26     telemetryPath = mkOption {
27       type = types.str;
28       default = "/metrics";
29       description = ''
30         Path under which to expose metrics.
31       '';
32     };
33     sslVerify = mkOption {
34       type = types.bool;
35       default = true;
36       description = ''
37         Whether to perform certificate verification for https.
38       '';
39     };
40     constLabels = mkOption {
41       type = types.listOf types.str;
42       default = [];
43       example = [
44         "label1=value1"
45         "label2=value2"
46       ];
47       description = ''
48         A list of constant labels that will be used in every metric.
49       '';
50     };
51   };
52   serviceOpts = mkMerge ([{
53     environment.CONST_LABELS = concatStringsSep "," cfg.constLabels;
54     serviceConfig = {
55       ExecStart = ''
56         ${pkgs.prometheus-nginx-exporter}/bin/nginx-prometheus-exporter \
57           --nginx.scrape-uri='${cfg.scrapeUri}' \
58           --${lib.optionalString (!cfg.sslVerify) "no-"}nginx.ssl-verify \
59           --web.listen-address=${cfg.listenAddress}:${toString cfg.port} \
60           --web.telemetry-path=${cfg.telemetryPath} \
61           ${concatStringsSep " \\\n  " cfg.extraFlags}
62       '';
63     };
64   }] ++ [(mkIf config.services.nginx.enable {
65     after = [ "nginx.service" ];
66     requires = [ "nginx.service" ];
67   })]);
68   imports = [
69     (mkRenamedOptionModule [ "telemetryEndpoint" ] [ "telemetryPath" ])
70     (mkRemovedOptionModule [ "insecure" ] ''
71       This option was replaced by 'prometheus.exporters.nginx.sslVerify'.
72     '')
73     ({ options.warnings = options.warnings; options.assertions = options.assertions; })
74   ];