From 49ec1b1ad31c76ef5b86eaef66793aa8a744f19c Mon Sep 17 00:00:00 2001 From: ThijsFeryn Date: Fri, 8 May 2026 14:24:59 +0200 Subject: [PATCH] Add standalone Grafana OTEL stack Remove .DS_Store files Add .gitignore --- .../grafana-otel-standalone/.gitignore | 1 + .../grafana-otel-standalone/README.md | 129 + .../grafana-otel-standalone/compose.yaml | 79 + .../conf/grafana/dashboards/varnish.json | 4438 +++++++++++++++++ .../provisioning/dashboards/dashboards.yaml | 14 + .../provisioning/datasources/datasources.yaml | 49 + .../conf/loki-config.yaml | 44 + .../conf/otel-collector-config.yaml | 66 + .../conf/prometheus.yaml | 26 + .../conf/tempo-config.yaml | 48 + 10 files changed, 4894 insertions(+) create mode 100644 docker-compose-examples/grafana-otel-standalone/.gitignore create mode 100644 docker-compose-examples/grafana-otel-standalone/README.md create mode 100644 docker-compose-examples/grafana-otel-standalone/compose.yaml create mode 100644 docker-compose-examples/grafana-otel-standalone/conf/grafana/dashboards/varnish.json create mode 100644 docker-compose-examples/grafana-otel-standalone/conf/grafana/provisioning/dashboards/dashboards.yaml create mode 100644 docker-compose-examples/grafana-otel-standalone/conf/grafana/provisioning/datasources/datasources.yaml create mode 100644 docker-compose-examples/grafana-otel-standalone/conf/loki-config.yaml create mode 100644 docker-compose-examples/grafana-otel-standalone/conf/otel-collector-config.yaml create mode 100644 docker-compose-examples/grafana-otel-standalone/conf/prometheus.yaml create mode 100644 docker-compose-examples/grafana-otel-standalone/conf/tempo-config.yaml diff --git a/docker-compose-examples/grafana-otel-standalone/.gitignore b/docker-compose-examples/grafana-otel-standalone/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/docker-compose-examples/grafana-otel-standalone/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/docker-compose-examples/grafana-otel-standalone/README.md b/docker-compose-examples/grafana-otel-standalone/README.md new file mode 100644 index 0000000..2d162d3 --- /dev/null +++ b/docker-compose-examples/grafana-otel-standalone/README.md @@ -0,0 +1,129 @@ +# Standalone OpenTelemetry & Grafana setup +This `docker compose` example contains a standalone observability stack for [OpenTelemetry](https://opentelemetry.io/) ingestion, storage and visualization with [Grafana](https://grafana.com/). + +It is intended as a drop-in backend you can point any OTLP-emitting workload at. It runs on the same Docker host, in another container, or on your computer without bringing along an application of its own. If you want a worked example wired up to Varnish, see [grafana-monitoring-otel](../grafana-monitoring-otel/) instead. + +## Components + +The stack is composed of five services, all attached to a shared `observability` bridge network: + +- **[OpenTelemetry Collector](https://opentelemetry.io/docs/collector/)** (`otel-collector`) — receives OTLP metrics, logs and traces from your workloads and fans them out to the right backend. +- **[Prometheus](https://prometheus.io/)** (`prometheus`) — stores metrics. The native OTLP receiver and remote-write receiver are both enabled, so the collector can push metrics directly via OTLP. +- **[Loki](https://grafana.com/oss/loki/)** (`loki`) — stores logs. Configured with the native OTLP receiver and indexes `service.name`, `service.namespace` and `deployment.environment` resource attributes as labels. +- **[Tempo](https://grafana.com/oss/tempo/)** (`tempo`) — stores traces. The metrics generator is enabled to derive service graphs and span metrics, which are remote-written to Prometheus. +- **[Grafana](https://grafana.com/)** (`grafana`) — visualization. Anonymous access is enabled with `Admin` role, so no login is required. Datasources for Prometheus, Loki and Tempo are pre-provisioned, including trace ↔ log ↔ metric correlation. + +The data flow looks like this: + +``` +your app ──OTLP──▶ otel-collector ──┬──▶ prometheus (metrics) + ├──▶ loki (logs) + └──▶ tempo (traces) + │ + ▼ + grafana +``` + +## Spinning it up + +From this directory: + +```sh +docker compose up -d +``` + +Once the containers are healthy, open Grafana at [http://localhost:3000](http://localhost:3000). No credentials are needed, and anonymous access is granted with admin privileges. The Prometheus, Loki and Tempo datasources are already configured under **Connections → Data sources**, and you can use the **Explore** tab to query each backend. + +## Tearing it down + +To stop the stack while keeping container state: + +```sh +docker compose stop +``` + +To remove the containers and the network: + +```sh +docker compose down +``` + +Note that this stack uses ephemeral in-container storage (no named volumes are declared), so all metrics, logs and traces are wiped when the containers are removed. + +## Dashboards +### Pre-provisioned Varnish dashboard + +Even though the stack itself does not run Varnish, a ready-made dashboard for debugging a running Varnish instance is shipped in [conf/grafana/dashboards/varnish.json](conf/grafana/dashboards/varnish.json) and provisioned automatically into Grafana. It shows up as **Varnish metrics** in the dashboard list — described as *"A dashboard to use to debug a running Varnish instance."* + +It is built on Prometheus metrics emitted by [`varnish-otel`](https://docs.varnish-software.com/varnish-otel/) (or any equivalent Varnish OTLP exporter) flowing through this stack's OTel Collector, and is organized into rows that cover the operational concerns you typically care about when triaging Varnish: + +- **Overview** — instance count, current serving rate, traffic offload, backend health, MSE4 stores online and panic counter. +- **Traffic** — data transfer per second, new connections and requests, offload rate, cache invalidation requests and objects invalidated. +- **Errors** — sick backends, session failures, backend errors, stale responses, MSE4 offline books/stores, brotli and other miscellaneous errors. +- **Saturation** — objects in cache, objects evicted or expired, ykey counts and iteration latency, memory governor, threads. +- **Latency** — request and backend latency distributions. +- **Virtual Registry & Artifact Accounting** — bandwidth, requests and cache hit rate broken down by virtual registry and artifact type (useful when fronting a registry-style workload). + +To open it, click the **Dashboards** icon in the left-hand Grafana sidebar and pick **Varnish metrics** from the list (it is provisioned at the root level, so no folder navigation is needed). The panels stay empty until something is actually pushing Varnish metrics into the collector — point your Varnish instance's OTLP exporter at the collector using one of the connection options described below. + +### Adding your own dashboards + +The whole [conf/grafana/dashboards/](conf/grafana/dashboards/) directory is mounted read-only into the Grafana container at `/var/lib/grafana/dashboards`, and the file provider is configured with `foldersFromFilesStructure: true` and a 10-second `updateIntervalSeconds`. To add your own dashboards: + +1. Drop a Grafana-exported JSON file (for example `my-dashboard.json`) into [conf/grafana/dashboards/](conf/grafana/dashboards/) next to `varnish.json`. Subdirectories become Grafana folders, so `conf/grafana/dashboards/team-a/foo.json` lands under a **team-a** folder in the UI. +2. Wait up to ten seconds — Grafana picks up new and changed files on disk automatically, so there's no need to restart the container. +3. Refresh the **Dashboards** view; the new dashboard appears in the list. + +If you exported the dashboard from another Grafana instance, make sure its panels reference the datasource UIDs provisioned here (`prometheus`, `loki`, `tempo`) — otherwise they will show "Datasource not found" until you remap them. Because `allowUiUpdates: true` is set, you can also tweak dashboards interactively in Grafana and then use **Share → Export → Save to file** to write the result back into [conf/grafana/dashboards/](conf/grafana/dashboards/). + +## Connecting to the stack + +### From the host (`localhost`) + +The following ports are published to the Docker host: + +| Service | Endpoint | Purpose | +| -------------- | -------------------------------------------------------------- | ------------------------ | +| Grafana | [http://localhost:3000](http://localhost:3000) | UI | +| OTel Collector | `http://localhost:4318` | OTLP/HTTP receiver | +| OTel Collector | `localhost:4317` | OTLP/gRPC receiver | +| OTel Collector | [http://localhost:8888/metrics](http://localhost:8888/metrics) | Collector self-metrics | +| Prometheus | [http://localhost:9090](http://localhost:9090) | Prometheus UI / API | +| Loki | [http://localhost:3100](http://localhost:3100) | Loki HTTP API | +| Tempo | [http://localhost:3200](http://localhost:3200) | Tempo HTTP API | + +Point an OTLP exporter on your host machine at the collector with, for example: + +```sh +export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 +export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf +``` + +### From another container (`host.docker.internal`) + +If your workload runs in a container that is **not** part of this compose project (for example, a separate `docker compose` stack or a one-off `docker run`), it cannot resolve `otel-collector` or `grafana` directly because it is on a different Docker network. Use `host.docker.internal` to reach the published ports on the host: + +```sh +export OTEL_EXPORTER_OTLP_ENDPOINT=http://host.docker.internal:4318 +export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf +``` + +The same hostname applies to Grafana ([http://host.docker.internal:3000](http://host.docker.internal:3000)) and to direct queries against Prometheus, Loki or Tempo. + +On Docker Desktop (macOS and Windows) `host.docker.internal` is available out of the box. On Linux, add this to the workload's service definition so the hostname resolves to the host gateway: + +```yaml +extra_hosts: + - "host.docker.internal:host-gateway" +``` + +### From a container on the same compose network + +If you extend this `compose.yaml` (or attach another compose project to the `observability` network), services can address each other by container name on the internal ports: + +- `http://otel-collector:4318` (OTLP/HTTP) +- `otel-collector:4317` (OTLP/gRPC) +- `http://grafana:3000` +- `http://prometheus:9090` +- `http://loki:3100` +- `http://tempo:3200` diff --git a/docker-compose-examples/grafana-otel-standalone/compose.yaml b/docker-compose-examples/grafana-otel-standalone/compose.yaml new file mode 100644 index 0000000..88e8186 --- /dev/null +++ b/docker-compose-examples/grafana-otel-standalone/compose.yaml @@ -0,0 +1,79 @@ +services: + loki: + image: grafana/loki:3.3.2 + container_name: loki + command: -config.file=/etc/loki/loki-config.yaml + volumes: + - ./conf/loki-config.yaml:/etc/loki/loki-config.yaml:ro + ports: + - "3100:3100" + networks: + - observability + + prometheus: + image: prom/prometheus:v3.1.0 + container_name: prometheus + command: + - --config.file=/etc/prometheus/prometheus.yaml + - --web.enable-otlp-receiver + - --web.enable-remote-write-receiver + - --enable-feature=native-histograms + volumes: + - ./conf/prometheus.yaml:/etc/prometheus/prometheus.yaml:ro + ports: + - "9090:9090" + networks: + - observability + + tempo: + image: grafana/tempo:2.7.0 + container_name: tempo + command: -config.file=/etc/tempo/tempo-config.yaml + volumes: + - ./conf/tempo-config.yaml:/etc/tempo/tempo-config.yaml:ro + ports: + - "3200:3200" + networks: + - observability + + otel-collector: + image: otel/opentelemetry-collector-contrib:0.116.1 + container_name: otel-collector + command: ["--config=/etc/otelcol/otel-collector-config.yaml"] + volumes: + - ./conf/otel-collector-config.yaml:/etc/otelcol/otel-collector-config.yaml:ro + ports: + - "4318:4318" # OTLP HTTP receiver (exposed to host) + - "4317:4317" # OTLP gRPC receiver (also exposed for convenience) + - "8888:8888" # Collector self-metrics + depends_on: + - loki + - prometheus + - tempo + networks: + - observability + + grafana: + image: grafana/grafana:11.4.0 + container_name: grafana + environment: + - GF_AUTH_ANONYMOUS_ENABLED=true + - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin + - GF_AUTH_DISABLE_LOGIN_FORM=true + - GF_FEATURE_TOGGLES_ENABLE=traceqlEditor,metricsSummary + - GF_INSTALL_PLUGINS=grafana-exploretraces-app + volumes: + - ./conf/grafana/provisioning:/etc/grafana/provisioning:ro + - ./conf/grafana/dashboards:/var/lib/grafana/dashboards:ro + ports: + - "3000:3000" + depends_on: + - loki + - prometheus + - tempo + networks: + - observability + +networks: + observability: + driver: bridge diff --git a/docker-compose-examples/grafana-otel-standalone/conf/grafana/dashboards/varnish.json b/docker-compose-examples/grafana-otel-standalone/conf/grafana/dashboards/varnish.json new file mode 100644 index 0000000..eebd506 --- /dev/null +++ b/docker-compose-examples/grafana-otel-standalone/conf/grafana/dashboards/varnish.json @@ -0,0 +1,4438 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "A dashboard to use to debug a running Varnish instance.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": null, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 134, + "panels": [], + "title": "Overview", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 2, + "x": 0, + "y": 1 + }, + "id": 132, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "count(varnish_uptime)", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Varnish instances", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "semi-dark-orange", + "value": 0 + } + ] + }, + "unit": "Bps", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 2, + "y": 1 + }, + "id": 129, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "(sum(rate(varnish_main_response_hdrbytes[$__rate_interval])) + sum(rate(varnish_main_response_bodybytes[$__rate_interval])))", + "hide": false, + "instant": false, + "legendFormat": "Bytes", + "range": true, + "refId": "Bytes" + } + ], + "title": "Serving", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "semi-dark-orange", + "value": 0 + } + ] + }, + "unit": "reqps", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 6, + "y": 1 + }, + "id": 130, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum((rate(varnish_main_client_requests[$__rate_interval])))", + "hide": false, + "instant": false, + "legendFormat": "Requests/sec", + "range": true, + "refId": "Requests" + } + ], + "title": "Serving", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "semi-dark-orange", + "value": 0 + } + ] + }, + "unit": "percentunit", + "min": 0, + "max": 1 + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 10, + "y": 1 + }, + "id": 91, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "1 - (sum(rate(varnish_backend_response_hdrbytes[$__rate_interval])) + sum(rate(varnish_backend_response_bodybytes[$__rate_interval]))) / (sum(rate(varnish_main_response_hdrbytes[$__rate_interval])) + sum(rate(varnish_main_response_bodybytes[$__rate_interval])))", + "hide": false, + "instant": false, + "legendFormat": "Bytes", + "range": true, + "refId": "Bytes" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "1- sum((rate(varnish_backend_requests[$__rate_interval]))) /sum((rate(varnish_main_client_requests[$__rate_interval])))", + "hide": false, + "instant": false, + "legendFormat": "Requests", + "range": true, + "refId": "Requests" + } + ], + "title": "Traffic offload", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "yellow", + "value": 0 + }, + { + "color": "green", + "value": 1 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Healthy backends" + }, + "properties": [ + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": 0 + }, + { + "color": "green", + "value": 1 + } + ] + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Sick backends" + }, + "properties": [ + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 1 + } + ] + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 3, + "x": 14, + "y": 1 + }, + "id": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(varnish_backend_is_healthy) / count(varnish_backend_is_healthy) ", + "hide": false, + "instant": true, + "legendFormat": "Sick", + "range": false, + "refId": "sick" + } + ], + "title": "Backend Health", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "yellow", + "value": 0 + }, + { + "color": "green", + "value": 1 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 3, + "x": 17, + "y": 1 + }, + "id": 99, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(varnish_mse4_store_online) / count(varnish_mse4_store_online)", + "hide": false, + "instant": true, + "legendFormat": "Stores offline", + "range": false, + "refId": "stores offline" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "builder", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "MSE4 stores online", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 20, + "y": 1 + }, + "id": 116, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(varnish_child_panics)", + "instant": true, + "legendFormat": "MGT uptime", + "range": false, + "refId": "A" + } + ], + "title": "Panics recorded", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "Data transfer per second, which consists of headers and body bytes in the backend requests and backend responses.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Bits per second", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + } + ] + }, + "unit": "bps", + "min": 0 + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "beresp" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "req" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 9, + "x": 0, + "y": 7 + }, + "id": 127, + "options": { + "legend": { + "calcs": [ + "mean", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_response_hdrbytes[$__rate_interval])+rate(varnish_main_response_bodybytes[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Client response", + "range": true, + "refId": "resp" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_backend_request_hdrbytes[$__rate_interval])+rate(varnish_backend_request_bodybytes[$__rate_interval]))", + "instant": false, + "legendFormat": "Backend request", + "range": true, + "refId": "bereq" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_request_hdrbytes[$__rate_interval])+rate(varnish_main_request_bodybytes[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Client request", + "range": true, + "refId": "req" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_backend_response_hdrbytes[$__rate_interval])+rate(varnish_backend_response_bodybytes[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Backend response", + "range": true, + "refId": "beresp" + } + ], + "title": "Data transfer per second", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "min": 0 + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/^Backend.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 7, + "x": 9, + "y": 7 + }, + "id": 95, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_backend_connections[$__rate_interval]))", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "Backend connections", + "range": true, + "refId": "Backend connections" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_sess[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Client connections", + "range": true, + "refId": "Client connections" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_backend_requests[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Backend requests", + "range": true, + "refId": "Backend requests" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_client_requests[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Client requests", + "range": true, + "refId": "Client requests" + } + ], + "title": "New connections and requests", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit", + "min": 0, + "max": 1 + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 8, + "x": 16, + "y": 7 + }, + "id": 135, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "1 - sum(rate(varnish_backend_requests[$__rate_interval])) / sum(rate(varnish_main_client_requests[$__rate_interval]))", + "legendFormat": "Requests", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "1 - sum(rate(varnish_main_backend_connections[$__rate_interval])) / sum(rate(varnish_main_sess[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Connections", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "1- (sum(rate(varnish_backend_response_hdrbytes[$__rate_interval])+rate(varnish_backend_response_bodybytes[$__rate_interval]))) / (sum(rate(varnish_main_response_hdrbytes[$__rate_interval])+rate(varnish_main_response_bodybytes[$__rate_interval])))", + "hide": false, + "instant": false, + "legendFormat": "Bytes", + "range": true, + "refId": "C" + } + ], + "title": "Offload rate", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 19 + }, + "id": 21, + "panels": [], + "title": "Traffic", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Operations", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps", + "min": 0 + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/[bB]ans/" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "unit" + } + ] + } + ] + }, + "gridPos": { + "h": 13, + "w": 8, + "x": 0, + "y": 20 + }, + "id": 110, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_purges[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Number of purge operations executed", + "range": true, + "refId": "Purges" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_bans[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Active Bans", + "range": true, + "refId": "Bans" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_ykey_purges[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "YKey purge operations", + "range": true, + "refId": "Ykey purges" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_ban_req[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Lurker-unfriendly bans", + "range": true, + "refId": "Lurker-unfriendly bans" + } + ], + "title": "Cache invalidation requests", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Objects invalidated", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 8, + "x": 8, + "y": 20 + }, + "id": 109, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_mse4_book_c_ykey_purged[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Number of objects purged with YKey", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_mse4_book_ykey_slicer_purged[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Number of slicer objects purged with YKey (MSE4)", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_obj_purged[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Number of purged objects", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_ban_obj_killed[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Objects killed by bans (lookup)", + "range": true, + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_ban_lurker_obj_killed[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Objects killed by bans (lurker)", + "range": true, + "refId": "E" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_ban_lurker_obj_killed_cutoff[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Objects killed by bans for cutoff (lurker)", + "range": true, + "refId": "F" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "rate(varnish_mse3_store_ykey_purged[$__rate_interval])", + "hide": false, + "instant": false, + "legendFormat": "Number of slicer objects purged with YKey (MSE3)", + "range": true, + "refId": "G" + } + ], + "title": "Objects invalidated", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 33 + }, + "id": 88, + "panels": [], + "title": "Errors", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [ + { + "options": { + "false": { + "index": 1, + "text": "Sick" + }, + "true": { + "index": 0, + "text": "Healthy" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byType", + "options": "boolean" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "basic", + "type": "color-background" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 8, + "x": 0, + "y": 34 + }, + "id": 131, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "12.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum by (backend_name, host_name) (varnish_backend_is_healthy)", + "format": "table", + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "A" + } + ], + "title": "Panel Title", + "transformations": [ + { + "id": "convertFieldType", + "options": { + "conversions": [ + { + "destinationType": "boolean", + "targetField": "Value" + } + ], + "fields": {} + } + }, + { + "id": "groupingToMatrix", + "options": { + "columnField": "backend_name", + "rowField": "host_name", + "valueField": "Value" + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "The number of backends that are marked as sick due to failing health probes or being manually set to sick via varnishadm.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 34 + }, + "id": 93, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "count by (host_name) (varnish_backend_is_healthy) - sum by (host_name)(varnish_backend_is_healthy)", + "hide": false, + "instant": false, + "legendFormat": "{{host_name}}", + "range": true, + "refId": "sick" + } + ], + "title": "Sick backends", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Failures per second", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "reqps", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 16, + "y": 34 + }, + "id": 68, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum by (failure_type) (rate(varnish_main_session_failed{failure_type!=\"\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "{{failure_type}}", + "range": true, + "refId": "A" + } + ], + "title": "Session failures", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Errors per second", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "reqps", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 39 + }, + "id": 69, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum by (failure_type) (rate(varnish_backend_failed{failure_type!=\"\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Fetch failed ({{failure_type}})", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_backend_wait_failed[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Backend conn. waited in queue and did not get a connection", + "range": true, + "refId": "N" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_bgfetch_no_thread[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Background fetch failed (no thread)", + "range": true, + "refId": "O" + } + ], + "title": "Backend errors", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 16, + "y": 39 + }, + "id": 97, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "rate(varnish_main_stale_fetch_delivers[$__rate_interval])", + "hide": false, + "instant": false, + "legendFormat": "Stale deliveries", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "rate(varnish_main_stale_fetch_rearms[$__rate_interval])", + "hide": false, + "instant": false, + "legendFormat": "Stale object rearmed", + "range": true, + "refId": "B" + } + ], + "title": "Stale", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 0, + "y": 44 + }, + "id": 136, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "count by (host_name) (varnish_mse4_book_online) - sum by (host_name) (varnish_mse4_book_online)", + "hide": false, + "instant": false, + "legendFormat": "Books offline ({{host_name}})", + "range": true, + "refId": "books" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "count by (host_name) (varnish_mse4_store_online) - sum by (host_name) (varnish_mse4_store_online)", + "hide": false, + "instant": false, + "legendFormat": "Stores offline ({{host_name}})", + "range": true, + "refId": "stores" + } + ], + "title": "MSE4 offline books/stores", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "reqps", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 44 + }, + "id": 92, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_client_req_417[$__rate_interval]))", + "instant": false, + "legendFormat": "Client requests received, subject to 417 errors", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_vdp_error[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Session Err VDP_FAILURE", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_stream_failure[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Session Err VDP_ERROR_FETCH", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_rapid_reset[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Session Err RAPID_RESET", + "range": true, + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_esi_errors[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "ESI parse errors", + "range": true, + "refId": "F" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_ws_backend_overflow[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "workspace_backend overflows", + "range": true, + "refId": "H" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_ws_client_overflow[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "workspace_client overflows", + "range": true, + "refId": "I" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_thread_thread_overflow[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "workspace_thread overflows", + "range": true, + "refId": "J" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_ws_session_overflow[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "workspace_session overflows", + "range": true, + "refId": "K" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_vcl_fail[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "VCL failures", + "range": true, + "refId": "L" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_lru_limited[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Reached nuke_limit", + "range": true, + "refId": "M" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_varnish_main_losthdr[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "HTTP header overflows", + "range": true, + "refId": "N" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_vcl_failure[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Session Err VCL_FAILURE", + "range": true, + "refId": "O" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_thread_limited[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Threads hit max", + "range": true, + "refId": "P" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_thread_failed[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Thread creation failed", + "range": true, + "refId": "Q" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_task_track_failed[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Failed to track a task", + "range": true, + "refId": "R" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_session_dropped[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Sessions dropped for thread", + "range": true, + "refId": "S" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_request_dropped[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Requests dropped", + "range": true, + "refId": "T" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_goto_dns_lookup_fails[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Number of unresolved DNS lookups from vmod_goto's DNS", + "range": true, + "refId": "U" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_main_vgs_msg_nospace[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Gravestone message insufficient space", + "range": true, + "refId": "V" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(rate(varnish_child_panics[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Child process panics", + "range": true, + "refId": "Z" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_client_req_400[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Client requests received, subject to 400 errors", + "range": true, + "refId": "Client requests received, subject to 400 errors" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_client_resp_500[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Delivery failed due to insufficient workspace.", + "range": true, + "refId": "Delivery failed due to insufficient workspace." + } + ], + "title": "Various errors", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 0, + "y": 49 + }, + "id": 98, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_mse4_c_eviction_failure[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Object or chunk eviction failures", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_mse4_c_allocation_failure[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Allocator failures", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(varnish_mse4_book_g_unreachable_objects)", + "hide": false, + "instant": false, + "legendFormat": "Objects from unreachable stores in the books", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_mse4_book_c_slot_liberation_failure[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Slot liberation failures", + "range": true, + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_mse4_store_c_allocation_failure[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Allocation request failures", + "range": true, + "refId": "E" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_mse4_store_c_allocation_failure_timeout[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Allocation request failure due to a timeout", + "range": true, + "refId": "F" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_mse4_store_c_allocation_failure_noslot[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "llocation request failure due to no slot available", + "range": true, + "refId": "G" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_mse4_store_c_segment_remap_fail[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Segment remap failure to produce towards the reserve", + "range": true, + "refId": "H" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_mse4_store_c_segment_prune_fail[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Segment pruning failure to produce towards the reserve", + "range": true, + "refId": "I" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_mse4_store_c_io_limited[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "IO engine has been request limited", + "range": true, + "refId": "J" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_mse4_store_g_io_blocked_read[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Read IO operations currently blocked", + "range": true, + "refId": "K" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_mse4_store_g_io_blocked_write[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Write IO operations currently blocked", + "range": true, + "refId": "L" + } + ], + "title": "MSE4 errors", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 49 + }, + "id": 79, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "rate(varnish_brotli_c_br_fail[$__rate_interval])", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "Brotli compressions failures", + "range": true, + "refId": "A", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "rate(varnish_brotli_test_decompression_fail[$__rate_interval])", + "format": "time_series", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "Brotli test decompression failures", + "range": true, + "refId": "B", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "rate(varnish_brotli_decompression_fail[$__rate_interval])", + "hide": false, + "instant": false, + "legendFormat": "Brotli decompression Failures", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "rate(varnish_main_brotli_c_br_fail[$__rate_interval])", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "D", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "rate(varnish_main_brotli_c_testunbr_fail[$__rate_interval])", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "E", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "rate(varnish_varnish_main_brotli_c_unbr_fail[$__rate_interval])", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "F", + "useBackend": false + } + ], + "title": "Brotli errors", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 54 + }, + "id": 89, + "panels": [], + "title": "Saturation", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Percentage per book", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit", + "min": 0, + "max": 1 + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 0, + "y": 55 + }, + "id": 102, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(varnish_mse4_book_slot_used)/sum(varnish_mse4_book_slot_used + varnish_mse4_book_slot_unused)", + "hide": false, + "instant": false, + "legendFormat": "Book slots", + "range": true, + "refId": "Book slots" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(varnish_mse4_byte_used)/sum(varnish_mse4_byte_used + varnish_mse4_byte_unused)", + "hide": false, + "instant": false, + "legendFormat": "Memory", + "range": true, + "refId": "Memory" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(varnish_mse4_store_bytes_used)/sum(varnish_mse4_store_bytes_used + varnish_mse4_store_bytes_unused)", + "hide": false, + "instant": false, + "legendFormat": "Disk", + "range": true, + "refId": "A" + } + ], + "title": "MSE4 usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 55 + }, + "id": 108, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(varnish_mse4_object_used)", + "hide": false, + "instant": false, + "legendFormat": "All objects", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "varnish_mse4_object_ephemeral", + "hide": false, + "instant": false, + "legendFormat": "Ephemeral objects", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(varnish_mse4_object_persisted)", + "hide": false, + "instant": false, + "legendFormat": "Persisted objects with at least one chunk in memory", + "range": true, + "refId": "C" + } + ], + "title": "Objects in the cache", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 16, + "y": 55 + }, + "id": 106, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(varnish_main_mem_private) / count(varnish_main_mem_private)", + "hide": false, + "instant": false, + "legendFormat": "Worker process private memory usage", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(varnish_main_mem_rss) / count(varnish_main_mem_rss)", + "hide": false, + "instant": false, + "legendFormat": "Worker process RSS memory usage", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(varnish_main_mem_file) / count (varnish_main_mem_file)", + "hide": false, + "instant": false, + "legendFormat": "RSS file usage", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(varnish_main_mem_swap) / count(varnish_main_mem_swap)", + "hide": false, + "instant": false, + "legendFormat": "Varnish worker process swap usage", + "range": true, + "refId": "D" + } + ], + "title": "Memory governor", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 0, + "y": 60 + }, + "id": 133, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum by (host_name) (varnish_main_thread_live)", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Threads", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 60 + }, + "id": 111, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(varnish_mse4_g_ykey_keys)", + "hide": false, + "instant": false, + "legendFormat": "In total", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(varnish_mse4_book_ykey_keys)", + "hide": false, + "instant": false, + "legendFormat": "in book {{mse4_book}}", + "range": true, + "refId": "B" + } + ], + "title": "Number of ykeys in the cache", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 16, + "y": 60 + }, + "id": 104, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_lru_nuked[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Number of LRU nuked objects", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_mse4_book_c_objects_liberated[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Number of objects evicted to gain free book slots", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_mse4_store_c_segment_pruned_objects[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Number of objects evicted during segment pruning", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "sum(rate(varnish_main_expired[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Expired objects", + "range": true, + "refId": "D" + } + ], + "title": "Objects evicted or expired", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 70 + }, + "id": 113, + "panels": [], + "title": "Latency", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Lookup latency", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + } + ] + }, + "unit": "reqps", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 71 + }, + "id": 117, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(varnish_mse4_book_c_ykey_iter_10ms[$__rate_interval])", + "instant": false, + "legendFormat": "Number of ykey iterations taking 0.01s or less", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(varnish_mse4_book_c_ykey_iter_100ms[$__rate_interval])", + "hide": false, + "instant": false, + "legendFormat": "Number of ykey iterations taking between 0.01s and 0.1s", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(varnish_mse4_book_c_ykey_iter_1000ms[$__rate_interval])", + "hide": false, + "instant": false, + "legendFormat": "Number of ykey iterations taking between 0.1s and 1s", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "rate(varnish_mse4_book_c_ykey_iter_1000ms_up[$__rate_interval])", + "hide": false, + "instant": false, + "legendFormat": "Number of ykey iterations taking more than 1s", + "range": true, + "refId": "D" + } + ], + "title": "Ykey iteration latency", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 77 + }, + "id": 142, + "panels": [], + "title": "Virtual Registry & Artifact Accounting", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "tooltip": false, + "viz": false, + "legend": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 78 + }, + "id": 137, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "rate(varnish_accounting_client_hits{accounting_level=\"total\",accounting_namespace!=\"\",handling!~\".+\"}[$__rate_interval]) / (rate(varnish_accounting_client_hits{accounting_level=\"total\",accounting_namespace!=\"\",handling!~\".+\"}[$__rate_interval]) + rate(varnish_accounting_client_misses{accounting_level=\"total\",accounting_namespace!=\"\",handling!~\".+\"}[$__rate_interval]))", + "legendFormat": "{{accounting_namespace}}", + "range": true, + "refId": "A" + } + ], + "title": "Cache Hit Rate by Virtual Registry", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "tooltip": false, + "viz": false, + "legend": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 78 + }, + "id": 138, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "rate(varnish_accounting_client_hits{accounting_key!=\"\",handling!~\".+\"}[$__rate_interval]) / (rate(varnish_accounting_client_hits{accounting_key!=\"\",handling!~\".+\"}[$__rate_interval]) + rate(varnish_accounting_client_misses{accounting_key!=\"\",handling!~\".+\"}[$__rate_interval]))", + "legendFormat": "{{accounting_namespace}}/{{accounting_key}}", + "range": true, + "refId": "A" + } + ], + "title": "Cache Hit Rate by Artifact Type", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "tooltip": false, + "viz": false, + "legend": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "reqps", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 86 + }, + "id": 139, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "rate(varnish_accounting_client_requests{accounting_level=\"total\",accounting_namespace!=\"\",handling!~\".+\"}[$__rate_interval])", + "legendFormat": "{{accounting_namespace}}", + "range": true, + "refId": "A" + } + ], + "title": "Requests by Virtual Registry", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "tooltip": false, + "viz": false, + "legend": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "Bps", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 86 + }, + "id": 140, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "rate(varnish_accounting_client_response_bodybytes{accounting_level=\"total\",accounting_namespace!=\"\",handling!~\".+\"}[$__rate_interval]) + rate(varnish_accounting_client_response_hdrbytes{accounting_level=\"total\",accounting_namespace!=\"\",handling!~\".+\"}[$__rate_interval])", + "legendFormat": "{{accounting_namespace}}", + "range": true, + "refId": "A" + } + ], + "title": "Bandwidth by Virtual Registry", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "tooltip": false, + "viz": false, + "legend": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "reqps", + "min": 0 + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 94 + }, + "id": 141, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "rate(varnish_accounting_client_requests{accounting_key!=\"\",handling!~\".+\"}[$__rate_interval])", + "legendFormat": "{{accounting_namespace}}/{{accounting_key}}", + "range": true, + "refId": "A" + } + ], + "title": "Requests by Artifact Type", + "type": "timeseries" + } + ], + "refresh": "5s", + "schemaVersion": 42, + "tags": [], + "templating": { + "list": [ + { + "current": { + "text": "", + "value": "" + }, + "definition": "label_values(varnish_main_client_requests,job)", + "includeAll": false, + "label": "job", + "name": "job", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(varnish_main_client_requests,job)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Varnish metrics", + "uid": "d96e0b09-246c-4a1f-b924-oodvar", + "version": 3 +} \ No newline at end of file diff --git a/docker-compose-examples/grafana-otel-standalone/conf/grafana/provisioning/dashboards/dashboards.yaml b/docker-compose-examples/grafana-otel-standalone/conf/grafana/provisioning/dashboards/dashboards.yaml new file mode 100644 index 0000000..3f4f48e --- /dev/null +++ b/docker-compose-examples/grafana-otel-standalone/conf/grafana/provisioning/dashboards/dashboards.yaml @@ -0,0 +1,14 @@ +apiVersion: 1 + +providers: + - name: default + orgId: 1 + folder: "" + folderUid: "" + type: file + disableDeletion: false + updateIntervalSeconds: 10 + allowUiUpdates: true + options: + path: /var/lib/grafana/dashboards + foldersFromFilesStructure: true diff --git a/docker-compose-examples/grafana-otel-standalone/conf/grafana/provisioning/datasources/datasources.yaml b/docker-compose-examples/grafana-otel-standalone/conf/grafana/provisioning/datasources/datasources.yaml new file mode 100644 index 0000000..b380a07 --- /dev/null +++ b/docker-compose-examples/grafana-otel-standalone/conf/grafana/provisioning/datasources/datasources.yaml @@ -0,0 +1,49 @@ +apiVersion: 1 + +datasources: + - name: Prometheus + type: prometheus + access: proxy + url: http://prometheus:9090 + uid: prometheus + isDefault: true + jsonData: + httpMethod: POST + timeInterval: 15s + exemplarTraceIdDestinations: + - name: trace_id + datasourceUid: tempo + + - name: Loki + type: loki + access: proxy + url: http://loki:3100 + uid: loki + jsonData: + derivedFields: + - name: TraceID + matcherRegex: "trace_id=(\\w+)" + url: "$${__value.raw}" + datasourceUid: tempo + + - name: Tempo + type: tempo + access: proxy + url: http://tempo:3200 + uid: tempo + jsonData: + tracesToLogsV2: + datasourceUid: loki + spanStartTimeShift: -5m + spanEndTimeShift: 5m + filterByTraceID: true + tracesToMetrics: + datasourceUid: prometheus + serviceMap: + datasourceUid: prometheus + nodeGraph: + enabled: true + search: + hide: false + lokiSearch: + datasourceUid: loki diff --git a/docker-compose-examples/grafana-otel-standalone/conf/loki-config.yaml b/docker-compose-examples/grafana-otel-standalone/conf/loki-config.yaml new file mode 100644 index 0000000..a5620f9 --- /dev/null +++ b/docker-compose-examples/grafana-otel-standalone/conf/loki-config.yaml @@ -0,0 +1,44 @@ +auth_enabled: false + +server: + http_listen_port: 3100 + grpc_listen_port: 9096 + log_level: info + +common: + instance_addr: 127.0.0.1 + path_prefix: /tmp/loki + storage: + filesystem: + chunks_directory: /tmp/loki/chunks + rules_directory: /tmp/loki/rules + replication_factor: 1 + ring: + kvstore: + store: inmemory + +schema_config: + configs: + - from: 2024-01-01 + store: tsdb + object_store: filesystem + schema: v13 + index: + prefix: index_ + period: 24h + +limits_config: + metric_aggregation_enabled: true + allow_structured_metadata: true + volume_enabled: true + otlp_config: + resource_attributes: + attributes_config: + - action: index_label + attributes: + - service.name + - service.namespace + - deployment.environment + +ruler: + alertmanager_url: http://localhost:9093 diff --git a/docker-compose-examples/grafana-otel-standalone/conf/otel-collector-config.yaml b/docker-compose-examples/grafana-otel-standalone/conf/otel-collector-config.yaml new file mode 100644 index 0000000..b2a0189 --- /dev/null +++ b/docker-compose-examples/grafana-otel-standalone/conf/otel-collector-config.yaml @@ -0,0 +1,66 @@ +receivers: + otlp: + protocols: + http: + endpoint: 0.0.0.0:4318 + grpc: + endpoint: 0.0.0.0:4317 + +processors: + batch: + timeout: 5s + send_batch_size: 1024 + memory_limiter: + check_interval: 1s + limit_percentage: 80 + spike_limit_percentage: 25 + +exporters: + # Metrics -> Prometheus (native OTLP receiver) + otlphttp/prometheus: + endpoint: http://prometheus:9090/api/v1/otlp + tls: + insecure: true + + # Logs -> Loki (native OTLP receiver) + otlphttp/loki: + endpoint: http://loki:3100/otlp + tls: + insecure: true + + # Traces -> Tempo (native OTLP receiver) + otlp/tempo: + endpoint: tempo:4317 + tls: + insecure: true + + debug: + verbosity: basic + +extensions: + health_check: + endpoint: 0.0.0.0:13133 + +service: + extensions: [health_check] + telemetry: + metrics: + readers: + - pull: + exporter: + prometheus: + host: 0.0.0.0 + port: 8888 + pipelines: + metrics: + receivers: [otlp] + processors: [memory_limiter, batch] + exporters: [otlphttp/prometheus, debug] + logs: + receivers: [otlp] + processors: [memory_limiter, batch] + exporters: [otlphttp/loki, debug] + traces: + receivers: [otlp] + processors: [memory_limiter, batch] + exporters: [otlp/tempo, debug] diff --git a/docker-compose-examples/grafana-otel-standalone/conf/prometheus.yaml b/docker-compose-examples/grafana-otel-standalone/conf/prometheus.yaml new file mode 100644 index 0000000..fdf186e --- /dev/null +++ b/docker-compose-examples/grafana-otel-standalone/conf/prometheus.yaml @@ -0,0 +1,26 @@ +global: + scrape_interval: 15s + evaluation_interval: 15s + +otlp: + promote_resource_attributes: + - service.name + - service.namespace + - service.instance.id + - deployment.environment + - k8s.cluster.name + - k8s.namespace.name + - k8s.pod.name + +storage: + tsdb: + out_of_order_time_window: 30m + +scrape_configs: + - job_name: prometheus + static_configs: + - targets: ["localhost:9090"] + + - job_name: otel-collector + static_configs: + - targets: ["otel-collector:8888"] diff --git a/docker-compose-examples/grafana-otel-standalone/conf/tempo-config.yaml b/docker-compose-examples/grafana-otel-standalone/conf/tempo-config.yaml new file mode 100644 index 0000000..ad0c0d0 --- /dev/null +++ b/docker-compose-examples/grafana-otel-standalone/conf/tempo-config.yaml @@ -0,0 +1,48 @@ +stream_over_http_enabled: true + +server: + http_listen_port: 3200 + log_level: info + +distributor: + receivers: + otlp: + protocols: + http: + endpoint: 0.0.0.0:4318 + grpc: + endpoint: 0.0.0.0:4317 + +ingester: + max_block_duration: 5m + +compactor: + compaction: + block_retention: 24h + +metrics_generator: + registry: + external_labels: + source: tempo + cluster: docker-compose + storage: + path: /var/tempo/generator/wal + remote_write: + - url: http://prometheus:9090/api/v1/write + send_exemplars: true + traces_storage: + path: /var/tempo/generator/traces + +storage: + trace: + backend: local + wal: + path: /var/tempo/wal + local: + path: /var/tempo/blocks + +overrides: + defaults: + metrics_generator: + processors: [service-graphs, span-metrics, local-blocks] + generate_native_histograms: both