diff --git a/nixos/modules/services/monitoring/prometheus/default.nix b/nixos/modules/services/monitoring/prometheus/default.nix
index 4f9be38f7f14..b2df0f5b79a3 100644
--- a/nixos/modules/services/monitoring/prometheus/default.nix
+++ b/nixos/modules/services/monitoring/prometheus/default.nix
@@ -370,6 +370,14 @@ let
List of file service discovery configurations.
'';
+ gce_sd_configs = mkOpt (types.listOf promTypes.gce_sd_config) ''
+ List of Google Compute Engine service discovery configurations.
+
+ See the
+ relevant Prometheus configuration docs for more detail.
+ '';
+
static_configs = mkOpt (types.listOf promTypes.static_config) ''
List of labeled target groups for this job.
'';
@@ -555,6 +563,48 @@ let
};
};
+ promTypes.gce_sd_config = types.submodule {
+ options = {
+ # Use `mkOption` instead of `mkOpt` for project and zone because they are
+ # required configuration values for `gce_sd_config`.
+ project = mkOption {
+ type = types.str;
+ description = ''
+ The GCP Project.
+ '';
+ };
+
+ zone = mkOption {
+ type = types.str;
+ description = ''
+ The zone of the scrape targets. If you need multiple zones use multiple
+ gce_sd_configs.
+ '';
+ };
+
+ filter = mkOpt types.str ''
+ Filter can be used optionally to filter the instance list by other
+ criteria Syntax of this filter string is described here in the filter
+ query parameter section: .
+ '';
+
+ refresh_interval = mkDefOpt types.str "60s" ''
+ Refresh interval to re-read the instance list.
+ '';
+
+ port = mkDefOpt types.int "80" ''
+ The port to scrape metrics from. If using the public IP address, this
+ must instead be specified in the relabeling rule.
+ '';
+
+ tag_separator = mkDefOpt types.str "," ''
+ The tag separator is used to separate the tags on concatenation.
+ '';
+ };
+ };
+
promTypes.relabel_config = types.submodule {
options = {
source_labels = mkOpt (types.listOf types.str) ''