From 9b0817cf743b8207f4c92fc0d3e24689e34b0873 Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Mon, 9 Oct 2023 22:56:02 +0200 Subject: [PATCH 01/11] thanos: 0.31.0 -> 0.32.5 https://github.com/thanos-io/thanos/releases/tag/v0.32.0 https://github.com/thanos-io/thanos/releases/tag/v0.32.1 https://github.com/thanos-io/thanos/releases/tag/v0.32.2 https://github.com/thanos-io/thanos/releases/tag/v0.32.3 https://github.com/thanos-io/thanos/releases/tag/v0.32.4 Co-authored-by: Jonathan Davies --- pkgs/servers/monitoring/thanos/default.nix | 25 +++++++++++----------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/pkgs/servers/monitoring/thanos/default.nix b/pkgs/servers/monitoring/thanos/default.nix index 37814a417491..644fe6109590 100644 --- a/pkgs/servers/monitoring/thanos/default.nix +++ b/pkgs/servers/monitoring/thanos/default.nix @@ -1,24 +1,21 @@ -{ lib, buildGoModule, fetchFromGitHub, fetchpatch }: +{ lib +, buildGoModule +, fetchFromGitHub +, go +}: + buildGoModule rec { pname = "thanos"; - version = "0.31.0"; + version = "0.32.5"; src = fetchFromGitHub { - rev = "v${version}"; owner = "thanos-io"; repo = "thanos"; - sha256 = "sha256-EJZGc4thu0WhVSSRolIRYg39S81Cgm+JHwpW5eE7mDc="; + rev = "refs/tags/v${version}"; + hash = "sha256-A4bDCyvctHmDBYzvWpeEO4u6KhoICN7BbRQK4aZCbIA="; }; - patches = [ - # https://github.com/thanos-io/thanos/pull/6126 - (fetchpatch { - url = "https://github.com/thanos-io/thanos/commit/a4c218bd690259fc0c78fe67e0739bd33d38541e.patch"; - hash = "sha256-Hxc1s5IXAyw01/o4JvOXuyYuOFy0+cBUv3OkRv4DCXs="; - }) - ]; - - vendorHash = "sha256-8+MUMux6v/O2syVyTx758yUBfJkertzibz6yFB05nWk="; + vendorHash = "sha256-ZjkMvbWq96Rte9WoxAWzeouVA/6mBqanvY9yHr9F5MM="; doCheck = true; @@ -30,11 +27,13 @@ buildGoModule rec { "-X ${t}.Branch=unknown" "-X ${t}.BuildUser=nix@nixpkgs" "-X ${t}.BuildDate=unknown" + "-X ${t}.GoVersion=${lib.getVersion go}" ]; meta = with lib; { description = "Highly available Prometheus setup with long term storage capabilities"; homepage = "https://github.com/thanos-io/thanos"; + changelog = "https://github.com/thanos-io/thanos/releases/tag/v${version}"; license = licenses.asl20; maintainers = with maintainers; [ basvandijk ]; }; From b2c956e071b25a4a4bbd9cf84978a2fdb9525794 Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Mon, 9 Oct 2023 22:56:28 +0200 Subject: [PATCH 02/11] thanos: add passthru.tests and passthru.updateScript --- pkgs/servers/monitoring/thanos/default.nix | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/pkgs/servers/monitoring/thanos/default.nix b/pkgs/servers/monitoring/thanos/default.nix index 644fe6109590..46524efa4e36 100644 --- a/pkgs/servers/monitoring/thanos/default.nix +++ b/pkgs/servers/monitoring/thanos/default.nix @@ -2,6 +2,10 @@ , buildGoModule , fetchFromGitHub , go +, nix-update-script +, nixosTests +, testers +, thanos }: buildGoModule rec { @@ -30,6 +34,17 @@ buildGoModule rec { "-X ${t}.GoVersion=${lib.getVersion go}" ]; + passthru = { + updateScript = nix-update-script { }; + tests = { + inherit (nixosTests) prometheus; + version = testers.testVersion { + command = "thanos --version"; + package = thanos; + }; + }; + }; + meta = with lib; { description = "Highly available Prometheus setup with long term storage capabilities"; homepage = "https://github.com/thanos-io/thanos"; From 2074409c8652cd176202965a7d38649c8f3f79f4 Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Tue, 10 Oct 2023 00:42:05 +0200 Subject: [PATCH 03/11] nixos/thanos: add query-frontend SystemD service --- nixos/modules/services/monitoring/thanos.nix | 25 ++++++++++++++++++++ nixos/tests/prometheus.nix | 10 ++++++++ 2 files changed, 35 insertions(+) diff --git a/nixos/modules/services/monitoring/thanos.nix b/nixos/modules/services/monitoring/thanos.nix index e6d8afc66624..872916931f94 100644 --- a/nixos/modules/services/monitoring/thanos.nix +++ b/nixos/modules/services/monitoring/thanos.nix @@ -430,6 +430,12 @@ let ''; }; + query-frontend = params.common cfg.query-frontend // { + query-frontend.downstream-url = mkParamDef types.str "http://localhost:9090" '' + URL of downstream Prometheus Query compatible API. + ''; + }; + rule = params.common cfg.rule // params.objstore cfg.rule // { labels = mkAttrsParam "label" '' @@ -684,6 +690,13 @@ in { arguments = mkArgumentsOption "query"; }; + query-frontend = paramsToOptions params.query-frontend // { + enable = mkEnableOption + (lib.mdDoc ("the Thanos query frontend implements a service deployed in front of queriers to + improve query parallelization and caching.")); + arguments = mkArgumentsOption "query-frontend"; + }; + rule = paramsToOptions params.rule // { enable = mkEnableOption (lib.mdDoc ("the Thanos ruler service which evaluates Prometheus rules against" + @@ -768,6 +781,18 @@ in { }; }) + (mkIf cfg.query-frontend.enable { + systemd.services.thanos-query-frontend = { + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + serviceConfig = { + DynamicUser = true; + Restart = "always"; + ExecStart = thanos "query-frontend"; + }; + }; + }) + (mkIf cfg.rule.enable (mkMerge [ (assertRelativeStateDir "rule") { diff --git a/nixos/tests/prometheus.nix b/nixos/tests/prometheus.nix index a075cfc1f1b7..ac987dffd7ce 100644 --- a/nixos/tests/prometheus.nix +++ b/nixos/tests/prometheus.nix @@ -3,6 +3,7 @@ let queryPort = 9090; minioPort = 9000; pushgwPort = 9091; + frontPort = 9092; s3 = { accessKey = "BKIKJAA5BMMU2RHO6IBB"; @@ -156,6 +157,11 @@ in import ./make-test-python.nix { "prometheus:${toString grpcPort}" ]; }; + services.thanos.query-frontend = { + enable = true; + http-address = "0.0.0.0:${toString frontPort}"; + query-frontend.downstream-url = "http://127.0.0.1:${toString queryPort}"; + }; }; store = { pkgs, ... }: { @@ -262,6 +268,10 @@ in import ./make-test-python.nix { query.wait_for_unit("thanos-query.service") wait_for_metric(query) + # Test Thanos query frontend service + query.wait_for_unit("thanos-query-frontend.service") + query.succeed("curl -sS http://localhost:${toString frontPort}/-/healthy") + # Test if the Thanos sidecar has correctly uploaded its TSDB to S3, if the # Thanos storage service has correctly downloaded it from S3 and if the Thanos # query service running on $store can correctly retrieve the metric: From 0d9bef343be739e4976501f98858337a4304ad18 Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Tue, 10 Oct 2023 00:45:37 +0200 Subject: [PATCH 04/11] nixos/thanos: fix services.thanos.receive.labels config --- nixos/modules/services/monitoring/thanos.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/modules/services/monitoring/thanos.nix b/nixos/modules/services/monitoring/thanos.nix index 872916931f94..dec2d0a513bc 100644 --- a/nixos/modules/services/monitoring/thanos.nix +++ b/nixos/modules/services/monitoring/thanos.nix @@ -631,7 +631,7 @@ let Data directory relative to `/var/lib` of TSDB. ''; - labels = mkAttrsParam "labels" '' + labels = mkAttrsParam "label" '' External labels to announce. This flag will be removed in the future when handling multiple tsdb From 312e7f8ae0195f122bffcb51803f754d0a2f16e4 Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Tue, 10 Oct 2023 06:30:33 +0200 Subject: [PATCH 05/11] nixos/thanos: add ExecReload command to SystemD services --- nixos/modules/services/monitoring/thanos.nix | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/nixos/modules/services/monitoring/thanos.nix b/nixos/modules/services/monitoring/thanos.nix index dec2d0a513bc..3a60cc01660e 100644 --- a/nixos/modules/services/monitoring/thanos.nix +++ b/nixos/modules/services/monitoring/thanos.nix @@ -749,6 +749,7 @@ in { User = "prometheus"; Restart = "always"; ExecStart = thanos "sidecar"; + ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; }; }; }) @@ -764,6 +765,7 @@ in { StateDirectory = cfg.store.stateDir; Restart = "always"; ExecStart = thanos "store"; + ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; }; }; } @@ -777,6 +779,7 @@ in { DynamicUser = true; Restart = "always"; ExecStart = thanos "query"; + ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; }; }; }) @@ -789,6 +792,7 @@ in { DynamicUser = true; Restart = "always"; ExecStart = thanos "query-frontend"; + ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; }; }; }) @@ -804,6 +808,7 @@ in { StateDirectory = cfg.rule.stateDir; Restart = "always"; ExecStart = thanos "rule"; + ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; }; }; } @@ -822,6 +827,7 @@ in { DynamicUser = true; StateDirectory = cfg.compact.stateDir; ExecStart = thanos "compact"; + ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; }; } // optionalAttrs (!wait) { inherit (cfg.compact) startAt; }; } @@ -838,6 +844,7 @@ in { StateDirectory = cfg.downsample.stateDir; Restart = "always"; ExecStart = thanos "downsample"; + ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; }; }; } @@ -854,6 +861,7 @@ in { StateDirectory = cfg.receive.stateDir; Restart = "always"; ExecStart = thanos "receive"; + ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; }; }; } From abed24c0d69dae85128a34db36269ee1073cb24c Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Tue, 10 Oct 2023 06:49:57 +0200 Subject: [PATCH 06/11] nixos/thanos: fix documentation --- nixos/modules/services/monitoring/thanos.nix | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/nixos/modules/services/monitoring/thanos.nix b/nixos/modules/services/monitoring/thanos.nix index 3a60cc01660e..4a3c6b24a77e 100644 --- a/nixos/modules/services/monitoring/thanos.nix +++ b/nixos/modules/services/monitoring/thanos.nix @@ -130,7 +130,7 @@ let description = lib.mdDoc '' Path to YAML file that contains tracing configuration. - See format details: + See format details: ''; }; }; @@ -147,7 +147,7 @@ let If {option}`tracing.config-file` is set this option has no effect. - See format details: + See format details: ''; }; }; @@ -195,7 +195,7 @@ let description = lib.mdDoc '' Path to YAML file that contains object store configuration. - See format details: + See format details: ''; }; }; @@ -212,7 +212,7 @@ let If {option}`objstore.config-file` is set this option has no effect. - See format details: + See format details: ''; }; }; @@ -718,8 +718,7 @@ in { receive = paramsToOptions params.receive // { enable = mkEnableOption - (lib.mdDoc ("the Thanos receiver which accept Prometheus remote write API requests " + - "and write to local tsdb (EXPERIMENTAL, this may change drastically without notice)")); + (lib.mdDoc ("the Thanos receiver which accept Prometheus remote write API requests and write to local tsdb")); arguments = mkArgumentsOption "receive"; }; }; From 9abb2a211672132f9f8f591f9f44cab81998a88c Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Tue, 10 Oct 2023 20:34:50 +0200 Subject: [PATCH 07/11] nixos/thanos: remove deprecations * replaced store.grpc.series-sample-limit by store.limits.request-samples * replaced query.replica-label by query.replica-labels * replaced store.addresses by endpoints * removed block-sync-concurrency (removed upstream) --- nixos/modules/services/monitoring/thanos.nix | 33 +++++++++----------- nixos/tests/prometheus.nix | 4 +-- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/nixos/modules/services/monitoring/thanos.nix b/nixos/modules/services/monitoring/thanos.nix index 4a3c6b24a77e..3c92db6dfaf7 100644 --- a/nixos/modules/services/monitoring/thanos.nix +++ b/nixos/modules/services/monitoring/thanos.nix @@ -266,14 +266,14 @@ let Maximum size of concurrently allocatable bytes for chunks. ''; - store.grpc.series-sample-limit = mkParamDef types.int 0 '' - Maximum amount of samples returned via a single Series call. + store.limits.request-samples = mkParamDef types.int 0 '' + The maximum samples allowed for a single Series request. + The Series call fails if this limit is exceeded. `0` means no limit. - NOTE: for efficiency we take 120 as the number of samples in chunk (it - cannot be bigger than that), so the actual number of samples might be - lower, even though the maximum could be hit. + NOTE: For efficiency the limit is internally implemented as 'chunks limit' + considering each chunk contains a maximum of 120 samples. ''; store.grpc.series-max-concurrency = mkParamDef types.int 20 '' @@ -371,24 +371,25 @@ let Maximum number of queries processed concurrently by query node. ''; - query.replica-label = mkParam types.str '' - Label to treat as a replica indicator along which data is + query.replica-labels = mkAttrsParam "query.replica-label" '' + Labels to treat as a replica indicator along which data is + deduplicated. Still you will be able to query without deduplication using - `dedup=false` parameter. + 'dedup=false' parameter. Data includes time series, recording + rules, and alerting rules. ''; selector-labels = mkAttrsParam "selector-label" '' Query selector labels that will be exposed in info endpoint. ''; - store.addresses = mkListParam "store" '' - Addresses of statically configured store API servers. + endpoints = mkListParam "endpoint" '' + Addresses of statically configured Thanos API servers (repeatable). - The scheme may be prefixed with `dns+` or - `dnssrv+` to detect store API servers through - respective DNS lookups. + The scheme may be prefixed with 'dns+' or 'dnssrv+' to detect + Thanos API servers through respective DNS lookups. ''; store.sd-files = mkListParam "store.sd-files" '' @@ -453,7 +454,7 @@ let Rule files that should be used by rule manager. Can be in glob format. ''; - eval-interval = mkParamDef types.str "30s" '' + eval-interval = mkParamDef types.str "1m" '' The default evaluation interval to use. ''; @@ -603,10 +604,6 @@ let to render all samples for a human eye anyway ''; - block-sync-concurrency = mkParamDef types.int 20 '' - Number of goroutines to use when syncing block metadata from object storage. - ''; - compact.concurrency = mkParamDef types.int 1 '' Number of goroutines to use when compacting groups. ''; diff --git a/nixos/tests/prometheus.nix b/nixos/tests/prometheus.nix index ac987dffd7ce..011127389377 100644 --- a/nixos/tests/prometheus.nix +++ b/nixos/tests/prometheus.nix @@ -153,7 +153,7 @@ in import ./make-test-python.nix { services.thanos.query = { enable = true; http-address = "0.0.0.0:${toString queryPort}"; - store.addresses = [ + endpoints = [ "prometheus:${toString grpcPort}" ]; }; @@ -184,7 +184,7 @@ in import ./make-test-python.nix { services.thanos.query = { enable = true; http-address = "0.0.0.0:${toString queryPort}"; - store.addresses = [ + endpoints = [ "localhost:${toString grpcPort}" ]; }; From 65be712043d309591207095024014f589a164b2a Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Thu, 26 Oct 2023 06:25:53 +0200 Subject: [PATCH 08/11] nixos/thanos: use mkPackageOptionMD --- nixos/modules/services/monitoring/thanos.nix | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/nixos/modules/services/monitoring/thanos.nix b/nixos/modules/services/monitoring/thanos.nix index 3c92db6dfaf7..a69de072fb3c 100644 --- a/nixos/modules/services/monitoring/thanos.nix +++ b/nixos/modules/services/monitoring/thanos.nix @@ -659,14 +659,7 @@ in { options.services.thanos = { - package = mkOption { - type = types.package; - default = pkgs.thanos; - defaultText = literalExpression "pkgs.thanos"; - description = lib.mdDoc '' - The thanos package that should be used. - ''; - }; + package = lib.mkPackageOptionMD pkgs "thanos" {}; sidecar = paramsToOptions params.sidecar // { enable = mkEnableOption From f5b47791bcf8d2ee97cca060c3195994cedb2888 Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Tue, 7 Nov 2023 11:43:52 +0100 Subject: [PATCH 09/11] thanos: add anthonyroussel to maintainers --- pkgs/servers/monitoring/thanos/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/servers/monitoring/thanos/default.nix b/pkgs/servers/monitoring/thanos/default.nix index 46524efa4e36..b6493c7a7dff 100644 --- a/pkgs/servers/monitoring/thanos/default.nix +++ b/pkgs/servers/monitoring/thanos/default.nix @@ -50,6 +50,6 @@ buildGoModule rec { homepage = "https://github.com/thanos-io/thanos"; changelog = "https://github.com/thanos-io/thanos/releases/tag/v${version}"; license = licenses.asl20; - maintainers = with maintainers; [ basvandijk ]; + maintainers = with maintainers; [ basvandijk anthonyroussel ]; }; } From 3bbf0779d5606cf53bba2aa590bb88032222b74a Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Sun, 12 Nov 2023 11:05:08 +0100 Subject: [PATCH 10/11] thanos: add meta.mainProgram --- pkgs/servers/monitoring/thanos/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/servers/monitoring/thanos/default.nix b/pkgs/servers/monitoring/thanos/default.nix index b6493c7a7dff..156bd4a6ec23 100644 --- a/pkgs/servers/monitoring/thanos/default.nix +++ b/pkgs/servers/monitoring/thanos/default.nix @@ -50,6 +50,7 @@ buildGoModule rec { homepage = "https://github.com/thanos-io/thanos"; changelog = "https://github.com/thanos-io/thanos/releases/tag/v${version}"; license = licenses.asl20; + mainProgram = "thanos"; maintainers = with maintainers; [ basvandijk anthonyroussel ]; }; } From d4d6602ce35a78e573de5a1281e206b362a38949 Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Sun, 12 Nov 2023 11:16:09 +0100 Subject: [PATCH 11/11] nixos/thanos: remove `with lib;` notation https://nix.dev/guides/best-practices#with-scopes --- nixos/modules/services/monitoring/thanos.nix | 63 +++++++++++++------- 1 file changed, 43 insertions(+), 20 deletions(-) diff --git a/nixos/modules/services/monitoring/thanos.nix b/nixos/modules/services/monitoring/thanos.nix index a69de072fb3c..db8641aa6146 100644 --- a/nixos/modules/services/monitoring/thanos.nix +++ b/nixos/modules/services/monitoring/thanos.nix @@ -1,14 +1,37 @@ { config, lib, pkgs, ... }: -with lib; - let + inherit (lib) + collect + concatLists + concatStringsSep + flip + getAttrFromPath + hasPrefix + isList + length + literalExpression + literalMD + mapAttrsRecursiveCond + mapAttrsToList + mdDoc + mkEnableOption + mkIf + mkMerge + mkOption + mkPackageOptionMD + optional + optionalAttrs + optionalString + types + ; + cfg = config.services.thanos; nullOpt = type: description: mkOption { type = types.nullOr type; default = null; - description = lib.mdDoc description; + description = mdDoc description; }; optionToArgs = opt: v : optional (v != null) ''--${opt}="${toString v}"''; @@ -32,7 +55,7 @@ let option = mkOption { type = types.bool; default = false; - description = lib.mdDoc description; + description = mdDoc description; }; }; @@ -41,7 +64,7 @@ let option = mkOption { type = types.listOf types.str; default = []; - description = lib.mdDoc description; + description = mdDoc description; }; }; @@ -50,7 +73,7 @@ let option = mkOption { type = types.attrsOf types.str; default = {}; - description = lib.mdDoc description; + description = mdDoc description; }; }; @@ -59,7 +82,7 @@ let option = mkOption { type = types.str; inherit default; - description = lib.mdDoc description; + description = mdDoc description; }; }; @@ -86,7 +109,7 @@ let defaultText = literalMD '' calculated from `config.services.thanos.${cmd}` ''; - description = lib.mdDoc '' + description = mdDoc '' Arguments to the `thanos ${cmd}` command. Defaults to a list of arguments formed by converting the structured @@ -127,7 +150,7 @@ let if config.services.thanos..tracing.config == null then null else toString (toYAML "tracing.yaml" config.services.thanos..tracing.config); ''; - description = lib.mdDoc '' + description = mdDoc '' Path to YAML file that contains tracing configuration. See format details: @@ -192,7 +215,7 @@ let if config.services.thanos..objstore.config == null then null else toString (toYAML "objstore.yaml" config.services.thanos..objstore.config); ''; - description = lib.mdDoc '' + description = mdDoc '' Path to YAML file that contains object store configuration. See format details: @@ -231,7 +254,7 @@ let type = types.str; default = "/var/lib/${config.services.prometheus.stateDir}/data"; defaultText = literalExpression ''"/var/lib/''${config.services.prometheus.stateDir}/data"''; - description = lib.mdDoc '' + description = mdDoc '' Data directory of TSDB. ''; }; @@ -659,56 +682,56 @@ in { options.services.thanos = { - package = lib.mkPackageOptionMD pkgs "thanos" {}; + package = mkPackageOptionMD pkgs "thanos" {}; sidecar = paramsToOptions params.sidecar // { enable = mkEnableOption - (lib.mdDoc "the Thanos sidecar for Prometheus server"); + (mdDoc "the Thanos sidecar for Prometheus server"); arguments = mkArgumentsOption "sidecar"; }; store = paramsToOptions params.store // { enable = mkEnableOption - (lib.mdDoc "the Thanos store node giving access to blocks in a bucket provider."); + (mdDoc "the Thanos store node giving access to blocks in a bucket provider."); arguments = mkArgumentsOption "store"; }; query = paramsToOptions params.query // { enable = mkEnableOption - (lib.mdDoc ("the Thanos query node exposing PromQL enabled Query API " + + (mdDoc ("the Thanos query node exposing PromQL enabled Query API " + "with data retrieved from multiple store nodes")); arguments = mkArgumentsOption "query"; }; query-frontend = paramsToOptions params.query-frontend // { enable = mkEnableOption - (lib.mdDoc ("the Thanos query frontend implements a service deployed in front of queriers to + (mdDoc ("the Thanos query frontend implements a service deployed in front of queriers to improve query parallelization and caching.")); arguments = mkArgumentsOption "query-frontend"; }; rule = paramsToOptions params.rule // { enable = mkEnableOption - (lib.mdDoc ("the Thanos ruler service which evaluates Prometheus rules against" + + (mdDoc ("the Thanos ruler service which evaluates Prometheus rules against" + " given Query nodes, exposing Store API and storing old blocks in bucket")); arguments = mkArgumentsOption "rule"; }; compact = paramsToOptions params.compact // { enable = mkEnableOption - (lib.mdDoc "the Thanos compactor which continuously compacts blocks in an object store bucket"); + (mdDoc "the Thanos compactor which continuously compacts blocks in an object store bucket"); arguments = mkArgumentsOption "compact"; }; downsample = paramsToOptions params.downsample // { enable = mkEnableOption - (lib.mdDoc "the Thanos downsampler which continuously downsamples blocks in an object store bucket"); + (mdDoc "the Thanos downsampler which continuously downsamples blocks in an object store bucket"); arguments = mkArgumentsOption "downsample"; }; receive = paramsToOptions params.receive // { enable = mkEnableOption - (lib.mdDoc ("the Thanos receiver which accept Prometheus remote write API requests and write to local tsdb")); + (mdDoc ("the Thanos receiver which accept Prometheus remote write API requests and write to local tsdb")); arguments = mkArgumentsOption "receive"; }; };