Skip to content

grafana_rule_group : Error: conflicting fields "record" and "missing_series_evals_to_resolve" #2442

@stecullum

Description

@stecullum

Terraform Version

Terraform v1.13.3

Terraform Grafana Provider Version

version = "~> 3.25.1"

Grafana Version

Grafana v12.2.0-17282025910 (12382d7f20)

Affected Resource(s)

grafana_rule_group

Terraform Configuration Files

I have imported the loki rules from loki-2.9.7\production\loki-mixins-compiled\rules.yml via the grafana UI

Image
  • The rules import fine.. however when i export the rules as terraform i hit an issue issue.... grafana-ui is generating code thats not runnable from terraform
 Error: conflicting fields "record" and "missing_series_evals_to_resolve"
│ 
│   with module.rules_loki.grafana_rule_group.loki_rules,
│   on rules-loki/loki_rules.tf line 1, in resource "grafana_rule_group" "loki_rules":
│    1: resource "grafana_rule_group" "loki_rules" {
│ 
* exported working managed grafana recording rule 
* the grafana provider wants record and missing_series_evals_to_resolve to be mutually exlusive

resource "grafana_rule_group" "loki_rules" {
  name             = "loki_rules"
  folder_uid       = var.folder_uid
  interval_seconds = 60
  disable_provenance = true

  rule {
    name = "cluster_job:loki_request_duration_seconds:99quantile"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"histogram_quantile(0.99, sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, cluster, job))\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    annotations = {}
    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_job:loki_request_duration_seconds:99quantile"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }
  }
  rule {
    name = "cluster_job:loki_request_duration_seconds:50quantile"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"histogram_quantile(0.50, sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, cluster, job))\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_job:loki_request_duration_seconds:50quantile"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_job:loki_request_duration_seconds:avg"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"sum(rate(loki_request_duration_seconds_sum[1m])) by (cluster, job) / sum(rate(loki_request_duration_seconds_count[1m])) by (cluster, job)\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_job:loki_request_duration_seconds:avg"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_job:loki_request_duration_seconds_bucket:sum_rate"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, cluster, job)\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_job:loki_request_duration_seconds_bucket:sum_rate"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_job:loki_request_duration_seconds_sum:sum_rate"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"sum(rate(loki_request_duration_seconds_sum[1m])) by (cluster, job)\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_job:loki_request_duration_seconds_sum:sum_rate"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_job:loki_request_duration_seconds_count:sum_rate"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"sum(rate(loki_request_duration_seconds_count[1m])) by (cluster, job)\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_job:loki_request_duration_seconds_count:sum_rate"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_job_route:loki_request_duration_seconds:99quantile"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"histogram_quantile(0.99, sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, cluster, job, route))\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_job_route:loki_request_duration_seconds:99quantile"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_job_route:loki_request_duration_seconds:50quantile"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"histogram_quantile(0.50, sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, cluster, job, route))\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_job_route:loki_request_duration_seconds:50quantile"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_job_route:loki_request_duration_seconds:avg"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"sum(rate(loki_request_duration_seconds_sum[1m])) by (cluster, job, route) / sum(rate(loki_request_duration_seconds_count[1m])) by (cluster, job, route)\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_job_route:loki_request_duration_seconds:avg"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_job_route:loki_request_duration_seconds_bucket:sum_rate"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, cluster, job, route)\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_job_route:loki_request_duration_seconds_bucket:sum_rate"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_job_route:loki_request_duration_seconds_sum:sum_rate"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"sum(rate(loki_request_duration_seconds_sum[1m])) by (cluster, job, route)\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_job_route:loki_request_duration_seconds_sum:sum_rate"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_job_route:loki_request_duration_seconds_count:sum_rate"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"sum(rate(loki_request_duration_seconds_count[1m])) by (cluster, job, route)\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_job_route:loki_request_duration_seconds_count:sum_rate"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_namespace_job_route:loki_request_duration_seconds:99quantile"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"histogram_quantile(0.99, sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, cluster, namespace, job, route))\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_namespace_job_route:loki_request_duration_seconds:99quantile"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_namespace_job_route:loki_request_duration_seconds:50quantile"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"histogram_quantile(0.50, sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, cluster, namespace, job, route))\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_namespace_job_route:loki_request_duration_seconds:50quantile"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_namespace_job_route:loki_request_duration_seconds:avg"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"sum(rate(loki_request_duration_seconds_sum[1m])) by (cluster, namespace, job, route) / sum(rate(loki_request_duration_seconds_count[1m])) by (cluster, namespace, job, route)\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_namespace_job_route:loki_request_duration_seconds:avg"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_namespace_job_route:loki_request_duration_seconds_bucket:sum_rate"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, cluster, namespace, job, route)\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_namespace_job_route:loki_request_duration_seconds_bucket:sum_rate"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_namespace_job_route:loki_request_duration_seconds_sum:sum_rate"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"sum(rate(loki_request_duration_seconds_sum[1m])) by (cluster, namespace, job, route)\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_namespace_job_route:loki_request_duration_seconds_sum:sum_rate"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
  rule {
    name = "cluster_namespace_job_route:loki_request_duration_seconds_count:sum_rate"

    data {
      ref_id     = "query"
      query_type = "prometheus"

      relative_time_range {
        from = 660
        to   = 60
      }

      datasource_uid = "prometheus"
      model          = "{\"datasource\":{\"type\":\"prometheus\",\"uid\":\"prometheus\"},\"expr\":\"sum(rate(loki_request_duration_seconds_count[1m])) by (cluster, namespace, job, route)\",\"instant\":true,\"intervalMs\":1000,\"maxDataPoints\":43200,\"range\":false,\"refId\":\"query\"}"
    }

    labels = {
      __converted_prometheus_rule__ = "true"
    }
    is_paused = true

    record {
      metric                = "cluster_namespace_job_route:loki_request_duration_seconds_count:sum_rate"
      from                  = "query"
      target_datasource_uid = "prometheus"
    }

    missing_series_evals_to_resolve = 1
  }
}

Expected Behavior

A grafana rule exported from the grafana-ui should work

Actual Behavior

The exported rule contains invalid structure

Steps to Reproduce

No response

Important Factoids

No response

References

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions