{
  "leansignal_demand_export": "1.0",
  "exported_at": "2026-07-17T00:00:00Z",
  "source_tenant": "leansignal-catalog",
  "catalog": {
    "slug": "victoriametrics-otel-demand-standard",
    "integration": "victoriametrics",
    "variant": "standard",
    "title": "VictoriaMetrics — Standard",
    "category": "Infrastructure",
    "dashboards": 1,
    "panels": 7,
    "alerts": 6,
    "docs_url": "https://docs.leansignal.io/integrations/victoriametrics/"
  },
  "demand": {
    "ref": "demand",
    "name": "VictoriaMetrics — Standard (OpenTelemetry)",
    "description": "A rounded operational view: adds API request rate and errors and timeseries churn, with warning/critical alerting drawn from VictoriaMetrics’ own rules. The recommended default.",
    "dashboards": [
      {
        "ref": "dash-victoriametrics",
        "name": "VictoriaMetrics — Standard",
        "description": "VictoriaMetrics single-node metrics — ingestion rate, active series, disk usage, churn, query errors, and process health (standard variant).",
        "data": {
          "display": {
            "name": "VictoriaMetrics — Standard"
          },
          "panels": {
            "ingestion_rate": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Ingestion rate",
                  "description": "Datapoints inserted per second."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "rows/sec"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "sum by (instance) (rate(vm_rows_inserted_total{instance=~\"$instance\"}[5m]))",
                          "seriesNameFormat": "{{instance}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "active_series": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Active time series",
                  "description": "Series that received samples in the last hour — the store’s working set."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "decimal"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "sum by (instance) (vm_cache_entries{instance=~\"$instance\",type=\"storage/hour_metric_ids\"})",
                          "seriesNameFormat": "{{instance}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "disk_usage": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Disk space used",
                  "description": "Data size as a share of data + free space — the store goes read-only when full."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "percent-decimal"
                      },
                      "min": 0,
                      "max": 1
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "sum by (instance) (vm_data_size_bytes{instance=~\"$instance\"}) / (sum by (instance) (vm_free_disk_space_bytes{instance=~\"$instance\"}) + sum by (instance) (vm_data_size_bytes{instance=~\"$instance\"}))",
                          "seriesNameFormat": "{{instance}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "churn_rate": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Churn rate (new series)",
                  "description": "Brand-new series created per second — high churn points at unstable label values."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "counts/sec"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "sum by (instance) (rate(vm_new_timeseries_created_total{instance=~\"$instance\"}[5m]))",
                          "seriesNameFormat": "{{instance}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "query_rate": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "API requests by path",
                  "description": "Read and write API traffic per endpoint."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "requests/sec"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "sum by (instance, path) (rate(vm_http_requests_total{instance=~\"$instance\"}[5m]))",
                          "seriesNameFormat": "{{instance}} · {{path}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "request_errors": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "API request errors",
                  "description": "Failed API requests — zero on a healthy store."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "counts/sec"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "sum by (instance) (rate(vm_http_request_errors_total{instance=~\"$instance\"}[5m]))",
                          "seriesNameFormat": "{{instance}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "memory_usage": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Resident memory",
                  "description": "Anonymous resident memory of the VictoriaMetrics process."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "bytes"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "max by (instance) (process_resident_memory_anon_bytes{instance=~\"$instance\"})",
                          "seriesNameFormat": "{{instance}}"
                        }
                      }
                    }
                  }
                ]
              }
            }
          },
          "layouts": [
            {
              "kind": "Grid",
              "spec": {
                "display": {
                  "title": "Ingestion",
                  "collapse": {
                    "open": true
                  }
                },
                "items": [
                  {
                    "x": 0,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/ingestion_rate"
                    }
                  }
                ]
              }
            },
            {
              "kind": "Grid",
              "spec": {
                "display": {
                  "title": "Storage",
                  "collapse": {
                    "open": true
                  }
                },
                "items": [
                  {
                    "x": 0,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/active_series"
                    }
                  },
                  {
                    "x": 12,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/disk_usage"
                    }
                  },
                  {
                    "x": 0,
                    "y": 8,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/churn_rate"
                    }
                  }
                ]
              }
            },
            {
              "kind": "Grid",
              "spec": {
                "display": {
                  "title": "Queries",
                  "collapse": {
                    "open": true
                  }
                },
                "items": [
                  {
                    "x": 0,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/query_rate"
                    }
                  },
                  {
                    "x": 12,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/request_errors"
                    }
                  }
                ]
              }
            },
            {
              "kind": "Grid",
              "spec": {
                "display": {
                  "title": "Resources",
                  "collapse": {
                    "open": true
                  }
                },
                "items": [
                  {
                    "x": 0,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/memory_usage"
                    }
                  }
                ]
              }
            }
          ],
          "variables": [
            {
              "kind": "ListVariable",
              "spec": {
                "name": "instance",
                "display": {
                  "name": "Instance"
                },
                "allowAllValue": true,
                "allowMultiple": true,
                "customAllValue": ".*",
                "defaultValue": ".*",
                "plugin": {
                  "kind": "PrometheusLabelValuesVariable",
                  "spec": {
                    "labelName": "instance"
                  }
                }
              }
            }
          ],
          "duration": "1h",
          "refreshInterval": "30s",
          "datasources": {}
        }
      }
    ],
    "alert_rules": [
      {
        "ref": "alert-vm-service-down",
        "name": "VictoriaMetrics instance down",
        "description": null,
        "query": "min by (instance) (up{job=\"victoriametrics\"})",
        "condition_op": "lt",
        "threshold": 1,
        "interval": "1m",
        "for": "2m",
        "severity": "critical",
        "message": "VictoriaMetrics {{labels.instance}} is not responding to scrapes.",
        "notify_on_resolve": true,
        "paused": false,
        "channels": []
      },
      {
        "ref": "alert-vm-disk-runs-out-of-space",
        "name": "VictoriaMetrics disk running out of space",
        "description": null,
        "query": "sum by (instance) (vm_data_size_bytes) / (sum by (instance) (vm_free_disk_space_bytes) + sum by (instance) (vm_data_size_bytes))",
        "condition_op": "gt",
        "threshold": 0.8,
        "interval": "1m",
        "for": "30m",
        "severity": "critical",
        "message": "VictoriaMetrics {{labels.instance}} disk is {{value | percent:1}} full — it will become read-only when it fills.",
        "notify_on_resolve": true,
        "paused": false,
        "channels": []
      },
      {
        "ref": "alert-vm-high-memory-usage",
        "name": "VictoriaMetrics memory usage high",
        "description": null,
        "query": "min_over_time(process_resident_memory_anon_bytes[10m]) / vm_available_memory_bytes",
        "condition_op": "gt",
        "threshold": 0.8,
        "interval": "1m",
        "for": "5m",
        "severity": "critical",
        "message": "VictoriaMetrics {{labels.instance}} is using {{value | percent:1}} of available memory — risk of OOM.",
        "notify_on_resolve": true,
        "paused": false,
        "channels": []
      },
      {
        "ref": "alert-vm-request-errors",
        "name": "VictoriaMetrics API request errors",
        "description": null,
        "query": "sum by (instance) (increase(vm_http_request_errors_total[5m]))",
        "condition_op": "gt",
        "threshold": 0,
        "interval": "1m",
        "for": "15m",
        "severity": "warning",
        "message": "VictoriaMetrics {{labels.instance}} is returning API errors ({{value}} in 5m).",
        "notify_on_resolve": true,
        "paused": false,
        "channels": []
      },
      {
        "ref": "alert-vm-high-churn-rate",
        "name": "VictoriaMetrics high churn rate",
        "description": null,
        "query": "sum by (instance) (rate(vm_new_timeseries_created_total[5m])) / sum by (instance) (rate(vm_rows_inserted_total[5m]))",
        "condition_op": "gt",
        "threshold": 0.1,
        "interval": "1m",
        "for": "15m",
        "severity": "warning",
        "message": "VictoriaMetrics {{labels.instance}} churn rate is {{value | percent:1}} of inserts — check for high-cardinality labels.",
        "notify_on_resolve": true,
        "paused": false,
        "channels": []
      },
      {
        "ref": "alert-vm-rows-rejected",
        "name": "VictoriaMetrics rejecting rows on ingestion",
        "description": null,
        "query": "sum by (instance) (rate(vm_rows_ignored_total[5m]))",
        "condition_op": "gt",
        "threshold": 0,
        "interval": "1m",
        "for": "15m",
        "severity": "warning",
        "message": "VictoriaMetrics {{labels.instance}} is rejecting rows on ingestion ({{value}}/s) — data loss.",
        "notify_on_resolve": true,
        "paused": false,
        "channels": []
      }
    ]
  }
}
