From a52ea3675c6899a539d60813d3b77a53e1018539 Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Mon, 6 Jan 2025 01:06:47 +0100 Subject: [PATCH] feat(*): initialize new Snix infrastructure Co-Authored-By: edef Co-Authored-by: Ryan Lahfa Change-Id: Ica1cda177a236814de900f50a8a61d288f58f519 --- default.nix | 9 + fun/clbot/clbot.go | 2 +- ops/buildkite/snix.tf | 49 + .../{steps-depot.yml => steps-snix.yml} | 0 ops/buildkite/steps-tvix.yml | 4 - ops/buildkite/steps-tvl-kit.yml | 4 - ops/buildkite/tvl.tf | 52 - ops/dashboards/README.md | 3 + ops/dashboards/default.nix | 4 + ops/dashboards/json/node_exporter.json | 23899 ++++++++++++++++ .../default.nix | 6 +- .../deploy-machine.sh} | 16 +- ops/dns/.gitignore | 3 + ops/dns/README.md | 18 +- ops/dns/default.nix | 22 +- ops/dns/dns-snix-dev.tf | 112 + ops/dns/main.tf | 81 + ops/dns/nixery.dev.zone | 10 - ops/dns/tvl.fyi.zone | 39 - ops/dns/tvl.su.zone | 51 - ops/gerrit-tvl/default.nix | 3 +- ops/gerrit-tvl/static/tvl.js | 20 +- ops/hcloud/.gitignore | 3 + ops/hcloud/README.md | 20 + ops/hcloud/default.nix | 13 + ops/hcloud/raito.pub | 1 + ops/hcloud/snix.tf | 134 + ops/hetzner-s3/.gitignore | 3 + ops/hetzner-s3/README.md | 21 + ops/hetzner-s3/default.nix | 13 + ops/hetzner-s3/snix.tf | 63 + ops/keycloak/clients.tf | 76 +- ops/keycloak/main.tf | 48 +- ops/keycloak/permissions.tf | 100 + ops/keycloak/user_sources.tf | 30 +- ops/machines/all-systems.nix | 8 +- ops/machines/build01/default.nix | 94 + ops/machines/gerrit01/default.nix | 122 + ops/machines/gerrit01/disko.nix | 84 + ops/machines/meta01/default.nix | 145 + ops/machines/meta01/disko.nix | 84 + ops/machines/public01/default.nix | 206 + ops/machines/public01/disko.nix | 84 + ops/modules/default-imports.nix | 1 + ops/modules/forgejo.nix | 305 + ops/modules/gerrit-autosubmit.nix | 3 +- ops/modules/hetzner-cloud.nix | 76 + ops/modules/known-hosts.nix | 17 +- ops/modules/monorepo-gerrit.nix | 175 +- ops/modules/o11y/agent.nix | 132 + ops/modules/o11y/alertmanager-irc-relay.nix | 20 + ops/modules/o11y/alerts/.gitkeep | 0 ops/modules/o11y/grafana.nix | 148 + ops/modules/o11y/loki.nix | 90 + ops/modules/o11y/mimir.nix | 123 + ops/modules/o11y/tempo.nix | 71 + ops/modules/raito-vm.nix | 76 + ops/modules/restic.nix | 33 +- ops/modules/snix-buildkite.nix | 112 + ops/modules/stalwart.nix | 83 + ops/modules/tvl-buildkite.nix | 95 - ops/modules/www/auth.snix.dev.nix | 52 + ops/modules/www/base.nix | 4 +- .../www/{cl.tvl.fyi.nix => cl.snix.dev.nix} | 7 +- ops/modules/www/code.tvl.fyi.nix | 82 - ops/modules/www/git.snix.dev.nix | 26 + ops/modules/www/loki.snix.dev.nix | 22 + ops/modules/www/mail.snix.dev.nix | 25 + ops/modules/www/mimir.snix.dev.nix | 24 + ops/modules/www/status.snix.dev.nix | 25 + ops/modules/www/status.tvl.su.nix | 25 - ops/modules/www/tempo.snix.dev.nix | 22 + ops/nixos.nix | 6 +- .../alertmanager-irc-relay-environment.age | 12 + ops/secrets/buildkite-agent-token.age | 29 +- ops/secrets/buildkite-besadii-config.age | 13 + ops/secrets/buildkite-graphql-token.age | 28 +- ops/secrets/buildkite-ssh-private-key.age | Bin 1393 -> 929 bytes ops/secrets/forgejo-oauth-secret.age | 11 + ops/secrets/gerrit-oauth-secret.age | 11 + ops/secrets/gerrit-replication-key.age | Bin 0 -> 929 bytes ops/secrets/grafana-agent-password.age | 17 + ops/secrets/grafana-oauth-secret.age | 12 + ops/secrets/keycloak-db-password.age | Bin 0 -> 563 bytes ops/secrets/keycloak-db.age | 19 - ops/secrets/metrics-push-htpasswd.age | 11 + ops/secrets/mimir-environment.age | 12 + ops/secrets/mimir-webhook-url.age | 12 + ops/secrets/mkSecrets.nix | 4 +- ops/secrets/restic-bucket-credentials.age | Bin 0 -> 976 bytes ops/secrets/restic-repository-password.age | 17 + ops/secrets/secrets.nix | 102 +- ops/secrets/tf-buildkite.age | Bin 950 -> 595 bytes ops/secrets/tf-dns.age | 9 + ops/secrets/tf-hcloud.age | Bin 0 -> 608 bytes ops/secrets/tf-hetzner-s3.age | Bin 0 -> 628 bytes ops/secrets/tf-keycloak.age | Bin 1025 -> 654 bytes .../alertmanager-irc-relay/default.nix | 4 + third_party/alertmanager-irc-relay/module.nix | 53 + .../alertmanager-irc-relay/package.nix | 29 + third_party/default.nix | 3 +- third_party/disko/default.nix | 9 + .../gerrit/0001-Syntax-highlight-nix.patch | 37 - .../0002-Syntax-highlight-rules.pl.patch | 37 - .../0003-Add-titles-to-CLs-over-HTTP.patch | 214 - third_party/gerrit/bazelrc | 11 - third_party/gerrit/default.nix | 105 - third_party/gerrit/workspace_overrides.bzl | 5 - third_party/gerrit_plugins/builder.nix | 42 - .../gerrit_plugins/code-owners/default.nix | 17 - .../code-owners/using-usernames.patch | 472 - third_party/gerrit_plugins/oauth/default.nix | 18 - ...01-lix-Make-a-Code-Review-Gerrit-tab.patch | 28 + ...02-lix-link-gerrit-cl-and-change-ids.patch | 113 + third_party/lix_forgejo/api-dont-notify.patch | 79 + third_party/lix_forgejo/default.nix | 18 + third_party/lix_forgejo/emojis.txt | 1 + third_party/lix_forgejo/signin-redirect.patch | 30 + third_party/lix_forgejo/upstream-link.patch | 14 + third_party/nix-gerrit/default.nix | 12 + third_party/overlays/tvl.nix | 4 + third_party/sources/sources.json | 18 + tools/depot-deps.nix | 15 + users/raito/keys.nix | 8 + 124 files changed, 27723 insertions(+), 1631 deletions(-) create mode 100644 ops/buildkite/snix.tf rename ops/buildkite/{steps-depot.yml => steps-snix.yml} (100%) delete mode 100644 ops/buildkite/steps-tvix.yml delete mode 100644 ops/buildkite/steps-tvl-kit.yml delete mode 100644 ops/buildkite/tvl.tf create mode 100644 ops/dashboards/README.md create mode 100644 ops/dashboards/default.nix create mode 100644 ops/dashboards/json/node_exporter.json rename ops/{deploy-whitby => deploy-machine}/default.nix (75%) rename ops/{deploy-whitby/deploy-whitby.sh => deploy-machine/deploy-machine.sh} (65%) create mode 100644 ops/dns/.gitignore create mode 100644 ops/dns/dns-snix-dev.tf create mode 100644 ops/dns/main.tf delete mode 100644 ops/dns/nixery.dev.zone delete mode 100644 ops/dns/tvl.fyi.zone delete mode 100644 ops/dns/tvl.su.zone create mode 100644 ops/hcloud/.gitignore create mode 100644 ops/hcloud/README.md create mode 100644 ops/hcloud/default.nix create mode 100644 ops/hcloud/raito.pub create mode 100644 ops/hcloud/snix.tf create mode 100644 ops/hetzner-s3/.gitignore create mode 100644 ops/hetzner-s3/README.md create mode 100644 ops/hetzner-s3/default.nix create mode 100644 ops/hetzner-s3/snix.tf create mode 100644 ops/keycloak/permissions.tf create mode 100644 ops/machines/build01/default.nix create mode 100644 ops/machines/gerrit01/default.nix create mode 100644 ops/machines/gerrit01/disko.nix create mode 100644 ops/machines/meta01/default.nix create mode 100644 ops/machines/meta01/disko.nix create mode 100644 ops/machines/public01/default.nix create mode 100644 ops/machines/public01/disko.nix create mode 100644 ops/modules/forgejo.nix create mode 100644 ops/modules/hetzner-cloud.nix create mode 100644 ops/modules/o11y/agent.nix create mode 100644 ops/modules/o11y/alertmanager-irc-relay.nix create mode 100644 ops/modules/o11y/alerts/.gitkeep create mode 100644 ops/modules/o11y/grafana.nix create mode 100644 ops/modules/o11y/loki.nix create mode 100644 ops/modules/o11y/mimir.nix create mode 100644 ops/modules/o11y/tempo.nix create mode 100644 ops/modules/raito-vm.nix create mode 100644 ops/modules/snix-buildkite.nix create mode 100644 ops/modules/stalwart.nix delete mode 100644 ops/modules/tvl-buildkite.nix create mode 100644 ops/modules/www/auth.snix.dev.nix rename ops/modules/www/{cl.tvl.fyi.nix => cl.snix.dev.nix} (72%) delete mode 100644 ops/modules/www/code.tvl.fyi.nix create mode 100644 ops/modules/www/git.snix.dev.nix create mode 100644 ops/modules/www/loki.snix.dev.nix create mode 100644 ops/modules/www/mail.snix.dev.nix create mode 100644 ops/modules/www/mimir.snix.dev.nix create mode 100644 ops/modules/www/status.snix.dev.nix delete mode 100644 ops/modules/www/status.tvl.su.nix create mode 100644 ops/modules/www/tempo.snix.dev.nix create mode 100644 ops/secrets/alertmanager-irc-relay-environment.age create mode 100644 ops/secrets/buildkite-besadii-config.age create mode 100644 ops/secrets/forgejo-oauth-secret.age create mode 100644 ops/secrets/gerrit-oauth-secret.age create mode 100644 ops/secrets/gerrit-replication-key.age create mode 100644 ops/secrets/grafana-agent-password.age create mode 100644 ops/secrets/grafana-oauth-secret.age create mode 100644 ops/secrets/keycloak-db-password.age delete mode 100644 ops/secrets/keycloak-db.age create mode 100644 ops/secrets/metrics-push-htpasswd.age create mode 100644 ops/secrets/mimir-environment.age create mode 100644 ops/secrets/mimir-webhook-url.age create mode 100644 ops/secrets/restic-bucket-credentials.age create mode 100644 ops/secrets/restic-repository-password.age create mode 100644 ops/secrets/tf-dns.age create mode 100644 ops/secrets/tf-hcloud.age create mode 100644 ops/secrets/tf-hetzner-s3.age create mode 100644 third_party/alertmanager-irc-relay/default.nix create mode 100644 third_party/alertmanager-irc-relay/module.nix create mode 100644 third_party/alertmanager-irc-relay/package.nix create mode 100644 third_party/disko/default.nix delete mode 100644 third_party/gerrit/0001-Syntax-highlight-nix.patch delete mode 100644 third_party/gerrit/0002-Syntax-highlight-rules.pl.patch delete mode 100644 third_party/gerrit/0003-Add-titles-to-CLs-over-HTTP.patch delete mode 100644 third_party/gerrit/bazelrc delete mode 100644 third_party/gerrit/default.nix delete mode 100644 third_party/gerrit/workspace_overrides.bzl delete mode 100644 third_party/gerrit_plugins/builder.nix delete mode 100644 third_party/gerrit_plugins/code-owners/default.nix delete mode 100644 third_party/gerrit_plugins/code-owners/using-usernames.patch delete mode 100644 third_party/gerrit_plugins/oauth/default.nix create mode 100644 third_party/lix_forgejo/0001-lix-Make-a-Code-Review-Gerrit-tab.patch create mode 100644 third_party/lix_forgejo/0002-lix-link-gerrit-cl-and-change-ids.patch create mode 100644 third_party/lix_forgejo/api-dont-notify.patch create mode 100644 third_party/lix_forgejo/default.nix create mode 100644 third_party/lix_forgejo/emojis.txt create mode 100644 third_party/lix_forgejo/signin-redirect.patch create mode 100644 third_party/lix_forgejo/upstream-link.patch create mode 100644 third_party/nix-gerrit/default.nix create mode 100644 users/raito/keys.nix diff --git a/default.nix b/default.nix index c6454843a..e087dda81 100644 --- a/default.nix +++ b/default.nix @@ -23,6 +23,15 @@ let ''; exceptions = [ + # machines is allowed to access //users for several reasons: + # + # 1. User SSH keys are set in //users. + # 2. Some personal websites or demo projects are served from it. + [ "ops" "machines" "gerrit01" ] + [ "ops" "machines" "public01" ] + [ "ops" "machines" "build01" ] + [ "ops" "machines" "meta01" ] + # Due to evaluation order this also affects these targets. # TODO(tazjin): Can this one be removed somehow? [ "ops" "nixos" ] diff --git a/fun/clbot/clbot.go b/fun/clbot/clbot.go index 40b044f45..065759ad1 100644 --- a/fun/clbot/clbot.go +++ b/fun/clbot/clbot.go @@ -210,7 +210,7 @@ func changeShouldBeSkipped(onlyDisplay string, changeSubject string) bool { } func patchSetURL(c gerritevents.Change, p gerritevents.PatchSet) string { - return fmt.Sprintf("https://cl.tvl.fyi/%d", c.Number) + return fmt.Sprintf("https://cl.snix.dev/%d", c.Number) } func main() { diff --git a/ops/buildkite/snix.tf b/ops/buildkite/snix.tf new file mode 100644 index 000000000..2f41e1912 --- /dev/null +++ b/ops/buildkite/snix.tf @@ -0,0 +1,49 @@ +# Buildkite configuration for snix. + +terraform { + required_providers { + buildkite = { + source = "buildkite/buildkite" + } + } + + backend "s3" { + endpoints = { + s3 = "https://s3.dualstack.eu-central-1.amazonaws.com" + } + + bucket = "snix-tfstate" + key = "terraform/snix-buildkite" + region = "eu-central-1" + + skip_credentials_validation = true + skip_metadata_api_check = true + skip_requesting_account_id = true + } +} + +provider "buildkite" { + organization = "snix" +} + +resource "buildkite_cluster" "primary" { + name = "Primary cluster" + description = "Build everything and deploy" + emoji = "🚀" + color = "#bada55" + +} + +resource "buildkite_pipeline" "snix" { + name = "snix" + description = "Run full CI pipeline of the Snix monorepository." + repository = "https://cl.snix.dev/snix" + steps = file("./steps-snix.yml") + default_branch = "refs/heads/canon" + cluster_id = buildkite_cluster.primary.id +} + +resource "buildkite_cluster_queue" "default" { + cluster_id = buildkite_cluster.primary.id + key = "default" +} diff --git a/ops/buildkite/steps-depot.yml b/ops/buildkite/steps-snix.yml similarity index 100% rename from ops/buildkite/steps-depot.yml rename to ops/buildkite/steps-snix.yml diff --git a/ops/buildkite/steps-tvix.yml b/ops/buildkite/steps-tvix.yml deleted file mode 100644 index a6e9f13b1..000000000 --- a/ops/buildkite/steps-tvix.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -steps: - - label: ":buildkite: Upload pipeline" - command: "buildkite-agent pipeline upload" diff --git a/ops/buildkite/steps-tvl-kit.yml b/ops/buildkite/steps-tvl-kit.yml deleted file mode 100644 index a6e9f13b1..000000000 --- a/ops/buildkite/steps-tvl-kit.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -steps: - - label: ":buildkite: Upload pipeline" - command: "buildkite-agent pipeline upload" diff --git a/ops/buildkite/tvl.tf b/ops/buildkite/tvl.tf deleted file mode 100644 index ee032a514..000000000 --- a/ops/buildkite/tvl.tf +++ /dev/null @@ -1,52 +0,0 @@ -# Buildkite configuration for TVL. - -terraform { - required_providers { - buildkite = { - source = "buildkite/buildkite" - } - } - - backend "s3" { - endpoints = { - s3 = "https://objects.dc-sto1.glesys.net" - } - bucket = "tvl-state" - key = "terraform/tvl-buildkite" - region = "glesys" - - skip_credentials_validation = true - skip_region_validation = true - skip_metadata_api_check = true - skip_requesting_account_id = true - skip_s3_checksum = true - } -} - -provider "buildkite" { - organization = "tvl" -} - -resource "buildkite_pipeline" "depot" { - name = "depot" - description = "Run full CI pipeline of the depot, TVL's monorepo." - repository = "https://cl.tvl.fyi/depot" - steps = file("./steps-depot.yml") - default_branch = "refs/heads/canon" -} - -resource "buildkite_pipeline" "tvix" { - name = "tvix" - description = "Tvix, an exported subset of TVL depot" - repository = "https://code.tvl.fyi/depot.git:workspace=views/tvix.git" - steps = file("./steps-tvix.yml") - default_branch = "canon" -} - -resource "buildkite_pipeline" "tvl_kit" { - name = "tvl-kit" - description = "TVL Kit, an exported subset of TVL depot" - repository = "https://code.tvl.fyi/depot.git:workspace=views/kit.git" - steps = file("./steps-tvl-kit.yml") - default_branch = "canon" -} diff --git a/ops/dashboards/README.md b/ops/dashboards/README.md new file mode 100644 index 000000000..8f4b39f92 --- /dev/null +++ b/ops/dashboards/README.md @@ -0,0 +1,3 @@ +# Declarative dashboards in JSON Grafana format for `status.snix.dev` + +Add new dashboards to `default.nix` and they will be picked up automatically. diff --git a/ops/dashboards/default.nix b/ops/dashboards/default.nix new file mode 100644 index 000000000..b4bfe9a2e --- /dev/null +++ b/ops/dashboards/default.nix @@ -0,0 +1,4 @@ +{ ... }: { + node_exporter = ./json/node_exporter.json; + all = ./json; +} diff --git a/ops/dashboards/json/node_exporter.json b/ops/dashboards/json/node_exporter.json new file mode 100644 index 000000000..20ee2bb12 --- /dev/null +++ b/ops/dashboards/json/node_exporter.json @@ -0,0 +1,23899 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": {}, + "__requires": [ + { + "type": "panel", + "id": "bargauge", + "name": "Bar gauge", + "version": "" + }, + { + "type": "panel", + "id": "gauge", + "name": "Gauge", + "version": "" + }, + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "9.4.3" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "$$hashKey": "object:1058", + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "gnetId": 1860, + "graphTooltip": 1, + "id": null, + "links": [ + { + "icon": "external link", + "tags": [], + "targetBlank": true, + "title": "GitHub", + "type": "link", + "url": "https://github.com/rfmoz/grafana-dashboards" + }, + { + "icon": "external link", + "tags": [], + "targetBlank": true, + "title": "Grafana", + "type": "link", + "url": "https://grafana.com/grafana/dashboards/1860" + } + ], + "liveNow": false, + "panels": [ + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 261, + "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "Quick CPU / Mem / Disk", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Resource pressure via PSI", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "links": [], + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "dark-yellow", + "value": 70 + }, + { + "color": "dark-red", + "value": 90 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 323, + "links": [], + "options": { + "displayMode": "basic", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "text": {} + }, + "pluginVersion": "9.4.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "irate(node_pressure_cpu_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "instant": true, + "intervalFactor": 1, + "legendFormat": "CPU", + "range": false, + "refId": "CPU some", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "irate(node_pressure_memory_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "instant": true, + "intervalFactor": 1, + "legendFormat": "Mem", + "range": false, + "refId": "Memory some", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "irate(node_pressure_io_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "instant": true, + "intervalFactor": 1, + "legendFormat": "I/O", + "range": false, + "refId": "I/O some", + "step": 240 + } + ], + "title": "Pressure", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Busy state of all CPU cores together", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 20, + "links": [], + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true + }, + "pluginVersion": "9.4.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "100 * (1 - avg(rate(node_cpu_seconds_total{mode=\"idle\", instance=\"$node\"}[$__rate_interval])))", + "hide": false, + "instant": true, + "intervalFactor": 1, + "legendFormat": "", + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "CPU Busy", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "System load over all CPU cores together", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 155, + "links": [], + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true + }, + "pluginVersion": "9.4.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "scalar(node_load1{instance=\"$node\",job=\"$job\"}) * 100 / count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu))", + "format": "time_series", + "hide": false, + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "Sys Load", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Non available RAM memory", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 9, + "y": 1 + }, + "hideTimeOverride": false, + "id": 16, + "links": [], + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true + }, + "pluginVersion": "9.4.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "((node_memory_MemTotal_bytes{instance=\"$node\", job=\"$job\"} - node_memory_MemFree_bytes{instance=\"$node\", job=\"$job\"}) / node_memory_MemTotal_bytes{instance=\"$node\", job=\"$job\"}) * 100", + "format": "time_series", + "hide": true, + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "(1 - (node_memory_MemAvailable_bytes{instance=\"$node\", job=\"$job\"} / node_memory_MemTotal_bytes{instance=\"$node\", job=\"$job\"})) * 100", + "format": "time_series", + "hide": false, + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "B", + "step": 240 + } + ], + "title": "RAM Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Used Swap", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 10 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 25 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 12, + "y": 1 + }, + "id": 21, + "links": [], + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true + }, + "pluginVersion": "9.4.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "((node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"}) / (node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"})) * 100", + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "SWAP Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Used Root FS", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 15, + "y": 1 + }, + "id": 154, + "links": [], + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true + }, + "pluginVersion": "9.4.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "100 - ((node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"} * 100) / node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"})", + "format": "time_series", + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "Root FS Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Total number of CPU cores", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 1 + }, + "id": 14, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "9.4.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu))", + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "A" + } + ], + "title": "CPU Cores", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "System uptime", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 20, + "y": 1 + }, + "hideTimeOverride": true, + "id": 15, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "9.4.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "node_time_seconds{instance=\"$node\",job=\"$job\"} - node_boot_time_seconds{instance=\"$node\",job=\"$job\"}", + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "Uptime", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Total RootFS", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 70 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 3 + }, + "id": 23, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "9.4.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"}", + "format": "time_series", + "hide": false, + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "RootFS Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Total RAM", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 20, + "y": 3 + }, + "id": 75, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "9.4.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"}", + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "RAM Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Total SWAP", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 22, + "y": 3 + }, + "id": 18, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "9.4.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"}", + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "SWAP Total", + "type": "stat" + }, + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 263, + "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "Basic CPU / Mem / Net / Disk", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Basic CPU info", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "percent" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Busy Iowait" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy Iowait" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy System" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy User" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy Other" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 6 + }, + "id": 77, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "width": 250 + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"system\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))", + "format": "time_series", + "hide": false, + "instant": false, + "intervalFactor": 1, + "legendFormat": "Busy System", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"user\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy User", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"iowait\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Busy Iowait", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=~\".*irq\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Busy IRQs", + "range": true, + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode!='idle',mode!='user',mode!='system',mode!='iowait',mode!='irq',mode!='softirq'}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Busy Other", + "range": true, + "refId": "E", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"idle\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Idle", + "range": true, + "refId": "F", + "step": 240 + } + ], + "title": "CPU Basic", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Basic memory usage", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "SWAP Used" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap Used" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": false, + "mode": "normal" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Cache + Buffer" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Available" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#DEDAF7", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": false, + "mode": "normal" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 6 + }, + "id": 78, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "RAM Total", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"} - (node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} + node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"} + node_memory_SReclaimable_bytes{instance=\"$node\",job=\"$job\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "RAM Used", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} + node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"} + node_memory_SReclaimable_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "RAM Cache + Buffer", + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "RAM Free", + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "(node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "SWAP Used", + "refId": "E", + "step": 240 + } + ], + "title": "Memory Basic", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Basic network info per interface", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bps" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Recv_bytes_eth2" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Recv_bytes_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Recv_drop_eth2" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Recv_drop_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Recv_errs_eth2" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Recv_errs_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CCA300", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trans_bytes_eth2" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trans_bytes_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trans_drop_eth2" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trans_drop_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trans_errs_eth2" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trans_errs_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CCA300", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "recv_bytes_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "recv_drop_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "recv_drop_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#967302", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "recv_errs_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "recv_errs_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "trans_bytes_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "trans_bytes_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "trans_drop_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "trans_drop_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#967302", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "trans_errs_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "trans_errs_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 13 + }, + "id": 74, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_receive_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "recv {{device}}", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_transmit_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "trans {{device}} ", + "refId": "B", + "step": 240 + } + ], + "title": "Network Traffic Basic", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Disk space used of all filesystems mounted", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 13 + }, + "id": 152, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "100 - ((node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'} * 100) / node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{mountpoint}}", + "refId": "A", + "step": 240 + } + ], + "title": "Disk Space Used Basic", + "type": "timeseries" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 20 + }, + "id": 265, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "percentage", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "percent" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Idle - Waiting for something to happen" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Iowait - Waiting for I/O to complete" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Irq - Servicing interrupts" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Nice - Niced processes executing in user mode" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Softirq - Servicing softirqs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Steal - Time spent in other operating systems when running in a virtualized environment" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCE2DE", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "System - Processes executing in kernel mode" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "User - Normal processes executing in user mode" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#5195CE", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 21 + }, + "id": 3, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 250 + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"system\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "System - Processes executing in kernel mode", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"user\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "User - Normal processes executing in user mode", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"nice\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Nice - Niced processes executing in user mode", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "sum by(instance) (irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"iowait\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Iowait - Waiting for I/O to complete", + "range": true, + "refId": "E", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"irq\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Irq - Servicing interrupts", + "range": true, + "refId": "F", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"softirq\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Softirq - Servicing softirqs", + "range": true, + "refId": "G", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"steal\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Steal - Time spent in other operating systems when running in a virtualized environment", + "range": true, + "refId": "H", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"idle\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Idle - Waiting for something to happen", + "range": true, + "refId": "J", + "step": 240 + } + ], + "title": "CPU", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap - Swap memory usage" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused - Free memory unassigned" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Hardware Corrupted - *./" + }, + "properties": [ + { + "id": "custom.stacking", + "value": { + "group": false, + "mode": "normal" + } + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 21 + }, + "id": 24, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"} - node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"} - node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} - node_memory_Slab_bytes{instance=\"$node\",job=\"$job\"} - node_memory_PageTables_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapCached_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Apps - Memory used by user-space applications", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_PageTables_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "PageTables - Memory used to map between virtual and physical memory addresses", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_SwapCached_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "SwapCache - Memory that keeps track of pages that have been fetched from swap but not yet been modified", + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Slab_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Slab - Memory used by the kernel to cache data structures for its own use (caches like inode, dentry, etc)", + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Cache - Parked file data (file content) cache", + "refId": "E", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Buffers - Block device (e.g. harddisk) cache", + "refId": "F", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Unused - Free memory unassigned", + "refId": "G", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "(node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Swap - Swap space used", + "refId": "H", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_HardwareCorrupted_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working", + "refId": "I", + "step": 240 + } + ], + "title": "Memory Stack", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bits out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bps" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "receive_packets_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "receive_packets_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "transmit_packets_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "transmit_packets_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 33 + }, + "id": 84, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_receive_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_transmit_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Transmit", + "refId": "B", + "step": 240 + } + ], + "title": "Network Traffic", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 33 + }, + "id": 156, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'} - node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{mountpoint}}", + "refId": "A", + "step": 240 + } + ], + "title": "Disk Space Used", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "IO read (-) / write (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "iops" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Read.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 45 + }, + "id": 229, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])", + "intervalFactor": 4, + "legendFormat": "{{device}} - Reads completed", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])", + "intervalFactor": 1, + "legendFormat": "{{device}} - Writes completed", + "refId": "B", + "step": 240 + } + ], + "title": "Disk IOps", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes read (-) / write (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "io time" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*read*./" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byType", + "options": "time" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "hidden" + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 45 + }, + "id": 42, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_read_bytes_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{device}} - Successfully read bytes", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_written_bytes_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{device}} - Successfully written bytes", + "refId": "B", + "step": 240 + } + ], + "title": "I/O Usage Read / Write", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "%util", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "io time" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byType", + "options": "time" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "hidden" + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 57 + }, + "id": 127, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_io_time_seconds_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"} [$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{device}}", + "refId": "A", + "step": 240 + } + ], + "title": "I/O Utilization", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "percentage", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "bars", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 3, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "max": 1, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/^Guest - /" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#5195ce", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/^GuestNice - /" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#c15c17", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 57 + }, + "id": 319, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "sum by(instance) (irate(node_cpu_guest_seconds_total{instance=\"$node\",job=\"$job\", mode=\"user\"}[1m])) / on(instance) group_left sum by (instance)((irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}[1m])))", + "hide": false, + "legendFormat": "Guest - Time spent running a virtual CPU for a guest operating system", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "sum by(instance) (irate(node_cpu_guest_seconds_total{instance=\"$node\",job=\"$job\", mode=\"nice\"}[1m])) / on(instance) group_left sum by (instance)((irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}[1m])))", + "hide": false, + "legendFormat": "GuestNice - Time spent running a niced guest (virtual CPU for guest operating system)", + "range": true, + "refId": "B" + } + ], + "title": "CPU spent seconds in guests (VMs)", + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "CPU / Memory / Net / Disk", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 266, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 54 + }, + "id": 136, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Inactive_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Inactive - Memory which has been less recently used. It is more eligible to be reclaimed for other purposes", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Active_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Active - Memory that has been used more recently and usually not reclaimed unless absolutely necessary", + "refId": "B", + "step": 240 + } + ], + "title": "Memory Active / Inactive", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*CommitLimit - *./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 54 + }, + "id": 135, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Committed_AS_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Committed_AS - Amount of memory presently allocated on the system", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_CommitLimit_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "CommitLimit - Amount of memory currently available to be allocated on the system", + "refId": "B", + "step": 240 + } + ], + "title": "Memory Committed", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 64 + }, + "id": 191, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Inactive_file_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Inactive_file - File-backed memory on inactive LRU list", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Inactive_anon_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Inactive_anon - Anonymous and swap cache on inactive LRU list, including tmpfs (shmem)", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Active_file_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Active_file - File-backed memory on active LRU list", + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Active_anon_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Active_anon - Anonymous and swap cache on active least-recently-used (LRU) list, including tmpfs", + "refId": "D", + "step": 240 + } + ], + "title": "Memory Active / Inactive Detail", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 64 + }, + "id": 130, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Writeback_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Writeback - Memory which is actively being written back to disk", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_WritebackTmp_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "WritebackTmp - Memory used by FUSE for temporary writeback buffers", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Dirty_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Dirty - Memory which is waiting to get written back to the disk", + "refId": "C", + "step": 240 + } + ], + "title": "Memory Writeback and Dirty", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated with huge pages" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated with huge pages" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 74 + }, + "id": 138, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Mapped_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Mapped - Used memory in mapped pages files which have been mapped, such as libraries", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Shmem_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Shmem - Used shared memory (shared between several processes, thus including RAM disks)", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_ShmemHugePages_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated with huge pages", + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_ShmemPmdMapped_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ShmemPmdMapped - Amount of shared (shmem/tmpfs) memory backed by huge pages", + "refId": "D", + "step": 240 + } + ], + "title": "Memory Shared and Mapped", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 74 + }, + "id": 131, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_SUnreclaim_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "SUnreclaim - Part of Slab, that cannot be reclaimed on memory pressure", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_SReclaimable_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "SReclaimable - Part of Slab, that might be reclaimed, such as caches", + "refId": "B", + "step": 240 + } + ], + "title": "Memory Slab", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 84 + }, + "id": 70, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_VmallocChunk_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "VmallocChunk - Largest contiguous block of vmalloc area which is free", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_VmallocTotal_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "VmallocTotal - Total size of vmalloc memory area", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_VmallocUsed_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "VmallocUsed - Amount of vmalloc area which is used", + "refId": "C", + "step": 240 + } + ], + "title": "Memory Vmalloc", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 84 + }, + "id": 159, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Bounce_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Bounce - Memory used for block device bounce buffers", + "refId": "A", + "step": 240 + } + ], + "title": "Memory Bounce", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Inactive *./" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 94 + }, + "id": 129, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_AnonHugePages_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "AnonHugePages - Memory in anonymous huge pages", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_AnonPages_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "AnonPages - Memory in user pages not backed by files", + "refId": "B", + "step": 240 + } + ], + "title": "Memory Anonymous", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 94 + }, + "id": 160, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_KernelStack_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "KernelStack - Kernel memory stack. This is not reclaimable", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Percpu_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "PerCPU - Per CPU memory allocated dynamically by loadable modules", + "refId": "B", + "step": 240 + } + ], + "title": "Memory Kernel / CPU", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "pages", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 104 + }, + "id": 140, + "links": [], + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_HugePages_Free{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "HugePages_Free - Huge pages in the pool that are not yet allocated", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_HugePages_Rsvd{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "HugePages_Rsvd - Huge pages for which a commitment to allocate from the pool has been made, but no allocation has yet been made", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_HugePages_Surp{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "HugePages_Surp - Huge pages in the pool above the value in /proc/sys/vm/nr_hugepages", + "refId": "C", + "step": 240 + } + ], + "title": "Memory HugePages Counter", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 104 + }, + "id": 71, + "links": [], + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_HugePages_Total{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "HugePages - Total size of the pool of huge pages", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Hugepagesize_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Hugepagesize - Huge Page size", + "refId": "B", + "step": 240 + } + ], + "title": "Memory HugePages Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 114 + }, + "id": 128, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_DirectMap1G_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "DirectMap1G - Amount of pages mapped as this size", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_DirectMap2M_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "DirectMap2M - Amount of pages mapped as this size", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_DirectMap4k_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "DirectMap4K - Amount of pages mapped as this size", + "refId": "C", + "step": 240 + } + ], + "title": "Memory DirectMap", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 114 + }, + "id": 137, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Unevictable_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Unevictable - Amount of unevictable memory that can't be swapped out for a variety of reasons", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_Mlocked_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "MLocked - Size of pages locked to memory using the mlock() system call", + "refId": "B", + "step": 240 + } + ], + "title": "Memory Unevictable and MLocked", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 124 + }, + "id": 132, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_memory_NFS_Unstable_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "NFS Unstable - Memory in NFS pages sent to the server, but not yet committed to the storage", + "refId": "A", + "step": 240 + } + ], + "title": "Memory NFS", + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "Memory Meminfo", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 22 + }, + "id": 267, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "pages out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*out/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 41 + }, + "id": 176, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_vmstat_pgpgin{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Pagesin - Page in operations", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_vmstat_pgpgout{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Pagesout - Page out operations", + "refId": "B", + "step": 240 + } + ], + "title": "Memory Pages In / Out", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "pages out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*out/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 41 + }, + "id": 22, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_vmstat_pswpin{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Pswpin - Pages swapped in", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_vmstat_pswpout{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Pswpout - Pages swapped out", + "refId": "B", + "step": 240 + } + ], + "title": "Memory Pages Swap In / Out", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "faults", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Pgfault - Page major and minor fault operations" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": false, + "mode": "normal" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 51 + }, + "id": 175, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_vmstat_pgfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Pgfault - Page major and minor fault operations", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_vmstat_pgmajfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Pgmajfault - Major page fault operations", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_vmstat_pgfault{instance=\"$node\",job=\"$job\"}[$__rate_interval]) - irate(node_vmstat_pgmajfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Pgminfault - Minor page fault operations", + "refId": "C", + "step": 240 + } + ], + "title": "Memory Page Faults", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 51 + }, + "id": 307, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_vmstat_oom_kill{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "oom killer invocations ", + "refId": "A", + "step": 240 + } + ], + "title": "OOM Killer", + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "Memory Vmstat", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 293, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "seconds", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Variation*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 24 + }, + "id": 260, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_timex_estimated_error_seconds{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Estimated error in seconds", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_timex_offset_seconds{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Time offset in between local system and reference clock", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_timex_maxerror_seconds{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Maximum error in seconds", + "refId": "C", + "step": 240 + } + ], + "title": "Time Synchronized Drift", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 24 + }, + "id": 291, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_timex_loop_time_constant{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Phase-locked loop time adjust", + "refId": "A", + "step": 240 + } + ], + "title": "Time PLL Adjust", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Variation*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 34 + }, + "id": 168, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_timex_sync_status{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Is clock synchronized to a reliable server (1 = yes, 0 = no)", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_timex_frequency_adjustment_ratio{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Local clock frequency adjustment", + "refId": "B", + "step": 240 + } + ], + "title": "Time Synchronized Status", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "seconds", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 34 + }, + "id": 294, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_timex_tick_seconds{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Seconds between clock ticks", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_timex_tai_offset_seconds{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "International Atomic Time (TAI) offset", + "refId": "B", + "step": 240 + } + ], + "title": "Time Misc", + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "System Timesync", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 24 + }, + "id": 312, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 73 + }, + "id": 62, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_procs_blocked{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Processes blocked waiting for I/O to complete", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_procs_running{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Processes in runnable state", + "refId": "B", + "step": 240 + } + ], + "title": "Processes Status", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Enable with --collector.processes argument on node-exporter", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 73 + }, + "id": 315, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_processes_state{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ state }}", + "refId": "A", + "step": 240 + } + ], + "title": "Processes State", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "forks / sec", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 83 + }, + "id": 148, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_forks_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Processes forks second", + "refId": "A", + "step": 240 + } + ], + "title": "Processes Forks", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Max.*/" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 83 + }, + "id": 149, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(process_virtual_memory_bytes{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Processes virtual memory size in bytes", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "process_resident_memory_max_bytes{instance=\"$node\",job=\"$job\"}", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Maximum amount of virtual memory available in bytes", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(process_virtual_memory_bytes{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Processes virtual memory size in bytes", + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(process_virtual_memory_max_bytes{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Maximum amount of virtual memory available in bytes", + "refId": "D", + "step": 240 + } + ], + "title": "Processes Memory", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Enable with --collector.processes argument on node-exporter", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "PIDs limit" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F2495C", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 93 + }, + "id": 313, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_processes_pids{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Number of PIDs", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_processes_max_processes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "PIDs limit", + "refId": "B", + "step": 240 + } + ], + "title": "PIDs Number and Limit", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "seconds", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*waiting.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 93 + }, + "id": 305, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_schedstat_running_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU {{ cpu }} - seconds spent running a process", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_schedstat_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU {{ cpu }} - seconds spent by processing waiting for this CPU", + "refId": "B", + "step": 240 + } + ], + "title": "Process schedule stats Running / Waiting", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Enable with --collector.processes argument on node-exporter", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Threads limit" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F2495C", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 103 + }, + "id": 314, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_processes_threads{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Allocated threads", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_processes_max_threads{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Threads limit", + "refId": "B", + "step": 240 + } + ], + "title": "Threads Number and Limit", + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "System Processes", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 25 + }, + "id": 269, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 26 + }, + "id": 8, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_context_switches_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Context switches", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_intr_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Interrupts", + "refId": "B", + "step": 240 + } + ], + "title": "Context Switches / Interrupts", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 26 + }, + "id": 7, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_load1{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 4, + "legendFormat": "Load 1m", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_load5{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 4, + "legendFormat": "Load 5m", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_load15{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 4, + "legendFormat": "Load 15m", + "refId": "C", + "step": 240 + } + ], + "title": "System Load", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "hertz" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Max" + }, + "properties": [ + { + "id": "custom.lineStyle", + "value": { + "dash": [ + 10, + 10 + ], + "fill": "dash" + } + }, + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 10 + }, + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": false, + "viz": false + } + }, + { + "id": "custom.fillBelowTo", + "value": "Min" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min" + }, + "properties": [ + { + "id": "custom.lineStyle", + "value": { + "dash": [ + 10, + 10 + ], + "fill": "dash" + } + }, + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + }, + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": false, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 36 + }, + "id": 321, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "node_cpu_scaling_frequency_hertz{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU {{ cpu }}", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "avg(node_cpu_scaling_frequency_max_hertz{instance=\"$node\",job=\"$job\"})", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Max", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "avg(node_cpu_scaling_frequency_min_hertz{instance=\"$node\",job=\"$job\"})", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Min", + "range": true, + "refId": "C", + "step": 240 + } + ], + "title": "CPU Frequency Scaling", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "https://docs.kernel.org/accounting/psi.html", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Memory some" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "dark-red", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Memory full" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "light-red", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "I/O some" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "dark-blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "I/O full" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "light-blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 36 + }, + "id": 322, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(node_pressure_cpu_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "CPU some", + "range": true, + "refId": "CPU some", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(node_pressure_memory_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Memory some", + "range": true, + "refId": "Memory some", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(node_pressure_memory_stalled_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Memory full", + "range": true, + "refId": "Memory full", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(node_pressure_io_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "I/O some", + "range": true, + "refId": "I/O some", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "rate(node_pressure_io_stalled_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "I/O full", + "range": true, + "refId": "I/O full", + "step": 240 + } + ], + "title": "Pressure Stall Information", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Enable with --collector.interrupts argument on node-exporter", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Critical*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Max*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 46 + }, + "id": 259, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_interrupts_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ type }} - {{ info }}", + "refId": "A", + "step": 240 + } + ], + "title": "Interrupts Detail", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 46 + }, + "id": 306, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_schedstat_timeslices_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU {{ cpu }}", + "refId": "A", + "step": 240 + } + ], + "title": "Schedule timeslices executed by each cpu", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 56 + }, + "id": 151, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_entropy_available_bits{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Entropy available to random number generators", + "refId": "A", + "step": 240 + } + ], + "title": "Entropy", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "seconds", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 56 + }, + "id": 308, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(process_cpu_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Time spent", + "refId": "A", + "step": 240 + } + ], + "title": "CPU time spent in user and system contexts", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Max*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 66 + }, + "id": 64, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "process_max_fds{instance=\"$node\",job=\"$job\"}", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Maximum open file descriptors", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "process_open_fds{instance=\"$node\",job=\"$job\"}", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Open file descriptors", + "refId": "B", + "step": 240 + } + ], + "title": "File Descriptors", + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "System Misc", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 26 + }, + "id": 304, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "temperature", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "celsius" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Critical*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Max*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 59 + }, + "id": 158, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_hwmon_temp_celsius{instance=\"$node\",job=\"$job\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ chip_name }} {{ sensor }} temp", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_hwmon_temp_crit_alarm_celsius{instance=\"$node\",job=\"$job\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ chip_name }} {{ sensor }} Critical Alarm", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_hwmon_temp_crit_celsius{instance=\"$node\",job=\"$job\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ chip_name }} {{ sensor }} Critical", + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_hwmon_temp_crit_hyst_celsius{instance=\"$node\",job=\"$job\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ chip_name }} {{ sensor }} Critical Historical", + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_hwmon_temp_max_celsius{instance=\"$node\",job=\"$job\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ chip_name }} {{ sensor }} Max", + "refId": "E", + "step": 240 + } + ], + "title": "Hardware temperature monitor", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Max*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 59 + }, + "id": 300, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_cooling_device_cur_state{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Current {{ name }} in {{ type }}", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_cooling_device_max_state{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Max {{ name }} in {{ type }}", + "refId": "B", + "step": 240 + } + ], + "title": "Throttle cooling device", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 69 + }, + "id": 302, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_power_supply_online{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ power_supply }} online", + "refId": "A", + "step": 240 + } + ], + "title": "Power supply", + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "Hardware Misc", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 27 + }, + "id": 296, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 46 + }, + "id": 297, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_systemd_socket_accepted_connections_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ name }} Connections", + "refId": "A", + "step": 240 + } + ], + "title": "Systemd Sockets", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Failed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F2495C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FF9830", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#73BF69", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Deactivating" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FFCB7D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Activating" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C8F2C2", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 46 + }, + "id": 298, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_systemd_units{instance=\"$node\",job=\"$job\",state=\"activating\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Activating", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_systemd_units{instance=\"$node\",job=\"$job\",state=\"active\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Active", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_systemd_units{instance=\"$node\",job=\"$job\",state=\"deactivating\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Deactivating", + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_systemd_units{instance=\"$node\",job=\"$job\",state=\"failed\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Failed", + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_systemd_units{instance=\"$node\",job=\"$job\",state=\"inactive\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Inactive", + "refId": "E", + "step": 240 + } + ], + "title": "Systemd Units State", + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "Systemd", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 28 + }, + "id": 270, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "The number (after merges) of I/O requests completed per second for the device", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "IO read (-) / write (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "iops" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Read.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 47 + }, + "id": 9, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "intervalFactor": 4, + "legendFormat": "{{device}} - Reads completed", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "intervalFactor": 1, + "legendFormat": "{{device}} - Writes completed", + "refId": "B", + "step": 240 + } + ], + "title": "Disk IOps Completed", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "The number of bytes read from or written to the device per second", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes read (-) / write (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Read.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 47 + }, + "id": 33, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_read_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 4, + "legendFormat": "{{device}} - Read bytes", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_written_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Written bytes", + "refId": "B", + "step": 240 + } + ], + "title": "Disk R/W Data", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "The average time for requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "time. read (-) / write (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 30, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Read.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 57 + }, + "id": 37, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_read_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval]) / irate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "hide": false, + "interval": "", + "intervalFactor": 4, + "legendFormat": "{{device}} - Read wait time avg", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_write_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval]) / irate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{device}} - Write wait time avg", + "refId": "B", + "step": 240 + } + ], + "title": "Disk Average Wait Time", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "The average queue length of the requests that were issued to the device", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "aqu-sz", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 57 + }, + "id": 35, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_io_time_weighted_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "interval": "", + "intervalFactor": 4, + "legendFormat": "{{device}}", + "refId": "A", + "step": 240 + } + ], + "title": "Average Queue Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "The number of read and write requests merged per second that were queued to the device", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "I/Os", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "iops" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Read.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 67 + }, + "id": 133, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_reads_merged_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "intervalFactor": 1, + "legendFormat": "{{device}} - Read merged", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_writes_merged_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "intervalFactor": 1, + "legendFormat": "{{device}} - Write merged", + "refId": "B", + "step": 240 + } + ], + "title": "Disk R/W Merged", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Percentage of elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100% for devices serving requests serially. But for devices serving requests in parallel, such as RAID arrays and modern SSDs, this number does not reflect their performance limits.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "%util", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 30, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 67 + }, + "id": 36, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_io_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "interval": "", + "intervalFactor": 4, + "legendFormat": "{{device}} - IO", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_discard_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "interval": "", + "intervalFactor": 4, + "legendFormat": "{{device}} - discard", + "refId": "B", + "step": 240 + } + ], + "title": "Time Spent Doing I/Os", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "The number of outstanding requests at the instant the sample was taken. Incremented as requests are given to appropriate struct request_queue and decremented as they finish.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Outstanding req.", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 77 + }, + "id": 34, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_disk_io_now{instance=\"$node\",job=\"$job\"}", + "interval": "", + "intervalFactor": 4, + "legendFormat": "{{device}} - IO now", + "refId": "A", + "step": 240 + } + ], + "title": "Instantaneous Queue Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "IOs", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "iops" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 77 + }, + "id": 301, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_discards_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "interval": "", + "intervalFactor": 4, + "legendFormat": "{{device}} - Discards completed", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_disk_discards_merged_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{device}} - Discards merged", + "refId": "B", + "step": 240 + } + ], + "title": "Disk IOps Discards completed / merged", + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "Storage Disk", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 29 + }, + "id": 271, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 62 + }, + "id": 43, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{mountpoint}} - Available", + "metric": "", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_filesystem_free_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}", + "format": "time_series", + "hide": true, + "intervalFactor": 1, + "legendFormat": "{{mountpoint}} - Free", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}", + "format": "time_series", + "hide": true, + "intervalFactor": 1, + "legendFormat": "{{mountpoint}} - Size", + "refId": "C", + "step": 240 + } + ], + "title": "Filesystem space available", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "file nodes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 62 + }, + "id": 41, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_filesystem_files_free{instance=\"$node\",job=\"$job\",device!~'rootfs'}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{mountpoint}} - Free file nodes", + "refId": "A", + "step": 240 + } + ], + "title": "File Nodes Free", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "files", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 72 + }, + "id": 28, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_filefd_maximum{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 4, + "legendFormat": "Max open files", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_filefd_allocated{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Open files", + "refId": "B", + "step": 240 + } + ], + "title": "File Descriptor", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "file Nodes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 72 + }, + "id": 219, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_filesystem_files{instance=\"$node\",job=\"$job\",device!~'rootfs'}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{mountpoint}} - File nodes total", + "refId": "A", + "step": 240 + } + ], + "title": "File Nodes Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "/ ReadOnly" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 82 + }, + "id": 44, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_filesystem_readonly{instance=\"$node\",job=\"$job\",device!~'rootfs'}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{mountpoint}} - ReadOnly", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_filesystem_device_error{instance=\"$node\",job=\"$job\",device!~'rootfs',fstype!~'tmpfs'}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{mountpoint}} - Device error", + "refId": "B", + "step": 240 + } + ], + "title": "Filesystem in ReadOnly / Error", + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "Storage Filesystem", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 30 + }, + "id": 272, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "receive_packets_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "receive_packets_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "transmit_packets_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "transmit_packets_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 47 + }, + "id": 60, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_receive_packets_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_transmit_packets_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{device}} - Transmit", + "refId": "B", + "step": 240 + } + ], + "title": "Network Traffic by Packets", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 47 + }, + "id": 142, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_receive_errs_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive errors", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_transmit_errs_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Transmit errors", + "refId": "B", + "step": 240 + } + ], + "title": "Network Traffic Errors", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 57 + }, + "id": 143, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_receive_drop_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive drop", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_transmit_drop_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Transmit drop", + "refId": "B", + "step": 240 + } + ], + "title": "Network Traffic Drop", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 57 + }, + "id": 141, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_receive_compressed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive compressed", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_transmit_compressed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Transmit compressed", + "refId": "B", + "step": 240 + } + ], + "title": "Network Traffic Compressed", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 67 + }, + "id": 146, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_receive_multicast_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive multicast", + "refId": "A", + "step": 240 + } + ], + "title": "Network Traffic Multicast", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 67 + }, + "id": 144, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_receive_fifo_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive fifo", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_transmit_fifo_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Transmit fifo", + "refId": "B", + "step": 240 + } + ], + "title": "Network Traffic Fifo", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 77 + }, + "id": 145, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_receive_frame_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive frame", + "refId": "A", + "step": 240 + } + ], + "title": "Network Traffic Frame", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 77 + }, + "id": 231, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_transmit_carrier_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Statistic transmit_carrier", + "refId": "A", + "step": 240 + } + ], + "title": "Network Traffic Carrier", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 87 + }, + "id": 232, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_network_transmit_colls_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Transmit colls", + "refId": "A", + "step": 240 + } + ], + "title": "Network Traffic Colls", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "entries", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "NF conntrack limit" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 87 + }, + "id": 61, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_nf_conntrack_entries{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "NF conntrack entries", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_nf_conntrack_entries_limit{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "NF conntrack limit", + "refId": "B", + "step": 240 + } + ], + "title": "NF Conntrack", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Entries", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 97 + }, + "id": 230, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_arp_entries{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ device }} - ARP entries", + "refId": "A", + "step": 240 + } + ], + "title": "ARP Entries", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 97 + }, + "id": 288, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_network_mtu_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ device }} - Bytes", + "refId": "A", + "step": 240 + } + ], + "title": "MTU", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 107 + }, + "id": 280, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_network_speed_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ device }} - Speed", + "refId": "A", + "step": 240 + } + ], + "title": "Speed", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 107 + }, + "id": 289, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_network_transmit_queue_length{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ device }} - Interface transmit queue length", + "refId": "A", + "step": 240 + } + ], + "title": "Queue Length", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packetes drop (-) / process (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Dropped.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 117 + }, + "id": 290, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_softnet_processed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU {{cpu}} - Processed", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_softnet_dropped_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU {{cpu}} - Dropped", + "refId": "B", + "step": 240 + } + ], + "title": "Softnet Packets", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 117 + }, + "id": 310, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_softnet_times_squeezed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU {{cpu}} - Squeezed", + "refId": "A", + "step": 240 + } + ], + "title": "Softnet Out of Quota", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 127 + }, + "id": 309, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_network_up{operstate=\"up\",instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{interface}} - Operational state UP", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_network_carrier{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "instant": false, + "legendFormat": "{{device}} - Physical link state", + "refId": "B" + } + ], + "title": "Network Operational Status", + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "Network Traffic", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 31 + }, + "id": 273, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 48 + }, + "id": 63, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_sockstat_TCP_alloc{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "TCP_alloc - Allocated sockets", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_sockstat_TCP_inuse{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "TCP_inuse - Tcp sockets currently in use", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_sockstat_TCP_mem{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "TCP_mem - Used memory for tcp", + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_sockstat_TCP_orphan{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "TCP_orphan - Orphan sockets", + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_sockstat_TCP_tw{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "TCP_tw - Sockets waiting close", + "refId": "E", + "step": 240 + } + ], + "title": "Sockstat TCP", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 48 + }, + "id": 124, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_sockstat_UDPLITE_inuse{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "UDPLITE_inuse - Udplite sockets currently in use", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_sockstat_UDP_inuse{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "UDP_inuse - Udp sockets currently in use", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_sockstat_UDP_mem{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "UDP_mem - Used memory for udp", + "refId": "C", + "step": 240 + } + ], + "title": "Sockstat UDP", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 58 + }, + "id": 125, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_sockstat_FRAG_inuse{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "FRAG_inuse - Frag sockets currently in use", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_sockstat_RAW_inuse{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "RAW_inuse - Raw sockets currently in use", + "refId": "C", + "step": 240 + } + ], + "title": "Sockstat FRAG / RAW", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 58 + }, + "id": 220, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_sockstat_TCP_mem_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "mem_bytes - TCP sockets in that state", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_sockstat_UDP_mem_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "mem_bytes - UDP sockets in that state", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_sockstat_FRAG_memory{instance=\"$node\",job=\"$job\"}", + "interval": "", + "intervalFactor": 1, + "legendFormat": "FRAG_memory - Used memory for frag", + "refId": "C" + } + ], + "title": "Sockstat Memory Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "sockets", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 68 + }, + "id": 126, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_sockstat_sockets_used{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Sockets_used - Sockets currently in use", + "refId": "A", + "step": 240 + } + ], + "title": "Sockstat Used", + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "Network Sockstat", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 32 + }, + "id": 274, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "octets out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Out.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 33 + }, + "id": 221, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_IpExt_InOctets{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "InOctets - Received octets", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_IpExt_OutOctets{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "OutOctets - Sent octets", + "refId": "B", + "step": 240 + } + ], + "title": "Netstat IP In / Out Octets", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "datagrams", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 33 + }, + "id": 81, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Ip_Forwarding{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Forwarding - IP forwarding", + "refId": "A", + "step": 240 + } + ], + "title": "Netstat IP Forwarding", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "messages out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Out.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 43 + }, + "id": 115, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Icmp_InMsgs{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "InMsgs - Messages which the entity received. Note that this counter includes all those counted by icmpInErrors", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Icmp_OutMsgs{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "OutMsgs - Messages which this entity attempted to send. Note that this counter includes all those counted by icmpOutErrors", + "refId": "B", + "step": 240 + } + ], + "title": "ICMP In / Out", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "messages out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Out.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 43 + }, + "id": 50, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Icmp_InErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "InErrors - Messages which the entity received but determined as having ICMP-specific errors (bad ICMP checksums, bad length, etc.)", + "refId": "A", + "step": 240 + } + ], + "title": "ICMP Errors", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "datagrams out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Out.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Snd.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 53 + }, + "id": 55, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Udp_InDatagrams{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "InDatagrams - Datagrams received", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Udp_OutDatagrams{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "OutDatagrams - Datagrams sent", + "refId": "B", + "step": 240 + } + ], + "title": "UDP In / Out", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "datagrams", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 53 + }, + "id": 109, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Udp_InErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "InErrors - UDP Datagrams that could not be delivered to an application", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Udp_NoPorts{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "NoPorts - UDP Datagrams received on a port with no listener", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_UdpLite_InErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "interval": "", + "legendFormat": "InErrors Lite - UDPLite Datagrams that could not be delivered to an application", + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Udp_RcvbufErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "RcvbufErrors - UDP buffer errors received", + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Udp_SndbufErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "SndbufErrors - UDP buffer errors send", + "refId": "E", + "step": 240 + } + ], + "title": "UDP Errors", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "datagrams out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Out.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Snd.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 63 + }, + "id": 299, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Tcp_InSegs{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "InSegs - Segments received, including those received in error. This count includes segments received on currently established connections", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Tcp_OutSegs{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "OutSegs - Segments sent, including those on current connections but excluding those containing only retransmitted octets", + "refId": "B", + "step": 240 + } + ], + "title": "TCP In / Out", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 63 + }, + "id": 104, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_TcpExt_ListenOverflows{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "ListenOverflows - Times the listen queue of a socket overflowed", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_TcpExt_ListenDrops{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "ListenDrops - SYNs to LISTEN sockets ignored", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_TcpExt_TCPSynRetrans{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "TCPSynRetrans - SYN-SYN/ACK retransmits to break down retransmissions in SYN, fast/timeout retransmits", + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Tcp_RetransSegs{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "interval": "", + "legendFormat": "RetransSegs - Segments retransmitted - that is, the number of TCP segments transmitted containing one or more previously transmitted octets", + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Tcp_InErrs{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "interval": "", + "legendFormat": "InErrs - Segments received in error (e.g., bad TCP checksums)", + "refId": "E" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Tcp_OutRsts{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "interval": "", + "legendFormat": "OutRsts - Segments sent with RST flag", + "refId": "F" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "irate(node_netstat_TcpExt_TCPRcvQDrop{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "hide": false, + "interval": "", + "legendFormat": "TCPRcvQDrop - Packets meant to be queued in rcv queue but dropped because socket rcvbuf limit hit", + "range": true, + "refId": "G" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "irate(node_netstat_TcpExt_TCPOFOQueue{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "hide": false, + "interval": "", + "legendFormat": "TCPOFOQueue - TCP layer receives an out of order packet and has enough memory to queue it", + "range": true, + "refId": "H" + } + ], + "title": "TCP Errors", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "connections", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*MaxConn *./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 73 + }, + "id": 85, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_netstat_Tcp_CurrEstab{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "CurrEstab - TCP connections for which the current state is either ESTABLISHED or CLOSE- WAIT", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_netstat_Tcp_MaxConn{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "MaxConn - Limit on the total number of TCP connections the entity can support (Dynamic is \"-1\")", + "refId": "B", + "step": 240 + } + ], + "title": "TCP Connections", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Sent.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 73 + }, + "id": 91, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_TcpExt_SyncookiesFailed{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "SyncookiesFailed - Invalid SYN cookies received", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_TcpExt_SyncookiesRecv{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "SyncookiesRecv - SYN cookies received", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_TcpExt_SyncookiesSent{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "SyncookiesSent - SYN cookies sent", + "refId": "C", + "step": 240 + } + ], + "title": "TCP SynCookie", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "connections", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 83 + }, + "id": 82, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Tcp_ActiveOpens{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ActiveOpens - TCP connections that have made a direct transition to the SYN-SENT state from the CLOSED state", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "irate(node_netstat_Tcp_PassiveOpens{instance=\"$node\",job=\"$job\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "PassiveOpens - TCP connections that have made a direct transition to the SYN-RCVD state from the LISTEN state", + "refId": "B", + "step": 240 + } + ], + "title": "TCP Direct Transition", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "Enable with --collector.tcpstat argument on node-exporter", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "connections", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 83 + }, + "id": 320, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "node_tcp_connection_states{state=\"established\",instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "established - TCP sockets in established state", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "node_tcp_connection_states{state=\"fin_wait2\",instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "fin_wait2 - TCP sockets in fin_wait2 state", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "node_tcp_connection_states{state=\"listen\",instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "listen - TCP sockets in listen state", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "node_tcp_connection_states{state=\"time_wait\",instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "time_wait - TCP sockets in time_wait state", + "range": true, + "refId": "D", + "step": 240 + } + ], + "title": "TCP Stat", + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "Network Netstat", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 33 + }, + "id": 279, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "seconds", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 66 + }, + "id": 40, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_scrape_collector_duration_seconds{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{collector}} - Scrape duration", + "refId": "A", + "step": 240 + } + ], + "title": "Node Exporter Scrape Time", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*error.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F2495C", + "mode": "fixed" + } + }, + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 66 + }, + "id": 157, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_scrape_collector_success{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{collector}} - Scrape success", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "node_textfile_scrape_error{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{collector}} - Scrape textfile error (1 = true)", + "refId": "B", + "step": 240 + } + ], + "title": "Node Exporter Scrape", + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "000000001" + }, + "refId": "A" + } + ], + "title": "Node Exporter", + "type": "row" + } + ], + "refresh": "1m", + "revision": 1, + "schemaVersion": 38, + "style": "dark", + "tags": [ + "linux" + ], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "default", + "value": "default" + }, + "hide": 0, + "includeAll": false, + "label": "Datasource", + "multi": false, + "name": "datasource", + "options": [], + "query": "prometheus", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "definition": "", + "hide": 0, + "includeAll": false, + "label": "Job", + "multi": false, + "name": "job", + "options": [], + "query": { + "query": "label_values(node_uname_info, job)", + "refId": "Prometheus-job-Variable-Query" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "definition": "label_values(node_uname_info{job=\"$job\"}, instance)", + "hide": 0, + "includeAll": false, + "label": "Host", + "multi": false, + "name": "node", + "options": [], + "query": { + "query": "label_values(node_uname_info{job=\"$job\"}, instance)", + "refId": "Prometheus-node-Variable-Query" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "current": { + "selected": false, + "text": "[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+", + "value": "[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+" + }, + "hide": 2, + "includeAll": false, + "multi": false, + "name": "diskdevices", + "options": [ + { + "selected": true, + "text": "[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+", + "value": "[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+" + } + ], + "query": "[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-24h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "browser", + "title": "Node Exporter Full", + "uid": "rYdddlPWk", + "version": 92, + "weekStart": "" +} \ No newline at end of file diff --git a/ops/deploy-whitby/default.nix b/ops/deploy-machine/default.nix similarity index 75% rename from ops/deploy-whitby/default.nix rename to ops/deploy-machine/default.nix index aafe798cb..857d721ca 100644 --- a/ops/deploy-whitby/default.nix +++ b/ops/deploy-machine/default.nix @@ -1,7 +1,7 @@ { pkgs, ... }: pkgs.stdenv.mkDerivation { - name = "deploy-whitby"; + name = "deploy-machine"; phases = [ "installPhase" "installCheckPhase" ]; @@ -11,7 +11,7 @@ pkgs.stdenv.mkDerivation { installPhase = '' mkdir -p $out/bin - makeWrapper ${./deploy-whitby.sh} $out/bin/deploy-whitby.sh \ + makeWrapper ${./deploy-machine.sh} $out/bin/deploy-machine.sh \ --prefix PATH : ${with pkgs; lib.makeBinPath [ ansi2html git @@ -26,6 +26,6 @@ pkgs.stdenv.mkDerivation { doInstallCheck = true; installCheckPhase = '' - shellcheck $out/bin/deploy-whitby.sh + shellcheck $out/bin/deploy-machine.sh ''; } diff --git a/ops/deploy-whitby/deploy-whitby.sh b/ops/deploy-machine/deploy-machine.sh similarity index 65% rename from ops/deploy-whitby/deploy-whitby.sh rename to ops/deploy-machine/deploy-machine.sh index 756aa7ae0..88b89ef50 100755 --- a/ops/deploy-whitby/deploy-whitby.sh +++ b/ops/deploy-machine/deploy-machine.sh @@ -1,8 +1,14 @@ #!/usr/bin/env bash set -Ceuo pipefail -HTML_ROOT="${HTML_ROOT:-/var/html/deploys.tvl.fyi}" -URL_BASE="${URL_BASE:-https://deploys.tvl.fyi/diff}" +DOMAIN="snix.dev" +FORGE_URL="cl.snix.dev" +REPO="tvix" +TARGET_SYSTEM="gerrit01" +TARGET_IRC_CHANNEL="#tvix-dev" + +HTML_ROOT="${HTML_ROOT:-/var/html/deploys."$DOMAIN"}" +URL_BASE="${URL_BASE:-https://deploys."$DOMAIN"/diff}" IRCCAT_PORT="${IRCCAT_PORT:-4722}" drv_hash() { @@ -28,11 +34,11 @@ cleanup() { } trap cleanup EXIT -git clone https://cl.tvl.fyi/depot "$worktree_dir" --reference /depot +git clone https://"$FORGE_URL"/"$REPO" "$worktree_dir" --reference /"$REPO" git -C "$worktree_dir" checkout "$new_rev" current=$(nix show-derivation /run/current-system | jq -r 'keys | .[0]') -new=$(nix-instantiate -A ops.nixos.whitbySystem "$worktree_dir") +new=$(nix-instantiate -A ops.nixos."$TARGET_SYSTEM" "$worktree_dir") diff_filename="$(drv_hash "$current")..$(drv_hash "$new").html" nvd --color always diff "$current" "$new" \ @@ -40,7 +46,7 @@ nvd --color always diff "$current" "$new" \ >| "$HTML_ROOT/diff/$diff_filename" chmod a+r "$HTML_ROOT/diff/$diff_filename" -echo "#tvl whitby is being deployed! system diff: $URL_BASE/$diff_filename" \ +echo "$TARGET_IRC_CHANNEL $TARGET_SYSTEM is being deployed! system diff: $URL_BASE/$diff_filename" \ | nc -w 5 -N localhost "$IRCCAT_PORT" # TODO(grfn): Actually do the deploy diff --git a/ops/dns/.gitignore b/ops/dns/.gitignore new file mode 100644 index 000000000..de8e8f12e --- /dev/null +++ b/ops/dns/.gitignore @@ -0,0 +1,3 @@ +.terraform* +terraform.tfstate* +.envrc diff --git a/ops/dns/README.md b/ops/dns/README.md index 2290299fe..d36a74382 100644 --- a/ops/dns/README.md +++ b/ops/dns/README.md @@ -2,10 +2,18 @@ DNS configuration ================= This folder contains configuration for our DNS zones. The zones are hosted with -Google Cloud DNS, which supports zone-file based import/export. +Digital Ocean DNS, which possess a Terraform provider for DNS records. -Currently there is no automation to deploy these zones, but CI will check their -integrity. +Secrets are needed for applying this. The encrypted file +`//ops/secrets/tf-dns.age` contains `export` calls which should be +sourced, for example via `direnv`, by users with the appropriate +credentials. -*Note: While each zone file specifies an SOA record, it only exists to satisfy -`named-checkzone`. Cloud DNS manages this record for us.* +Here is an example `direnv` configuration: + +``` +# //ops/secrets/.envrc +source_up +eval $(age --decrypt -i ~/.ssh/id_ed25519 $(git rev-parse --show-toplevel)/ops/secrets/tf-dns.age) +watch_file $(git rev-parse --show-toplevel)/secrets/tf-dns.age +``` diff --git a/ops/dns/default.nix b/ops/dns/default.nix index 33fe6d6fe..c5764f4f4 100644 --- a/ops/dns/default.nix +++ b/ops/dns/default.nix @@ -1,5 +1,4 @@ -# Performs simple (local-only) validity checks on DNS zones. -{ depot, pkgs, ... }: +{ depot, lib, pkgs, ... }: let checkZone = zone: file: pkgs.runCommand "${zone}-check" { } '' @@ -7,8 +6,19 @@ let ''; in -depot.nix.readTree.drvTargets { - nixery-dev = checkZone "nixery.dev" ./nixery.dev.zone; - tvl-fyi = checkZone "tvl.fyi" ./tvl.fyi.zone; - tvl-su = checkZone "tvl.su" ./tvl.su.zone; +depot.nix.readTree.drvTargets rec { + # Provide a Terraform wrapper with the right provider installed. + terraform = pkgs.terraform.withPlugins (p: [ + p.digitalocean + ]); + + validate = { + snix-dev = checkZone "snix.dev" ./snix.dev.zone; + snix-systems = checkZone "snix.systems" ./snix.systems.zone; + terraform = depot.tools.checks.validateTerrform { + inherit terraform; + name = "dns"; + src = lib.cleanSource ./.; + }; + }; } diff --git a/ops/dns/dns-snix-dev.tf b/ops/dns/dns-snix-dev.tf new file mode 100644 index 000000000..dab707df0 --- /dev/null +++ b/ops/dns/dns-snix-dev.tf @@ -0,0 +1,112 @@ +# DNS configuration for snix.dev + +resource "digitalocean_domain" "snix_dev" { + name = "snix.dev" +} + +# Infrastructure records + +resource "digitalocean_record" "snix_dev_infra_gerrit01" { + domain = digitalocean_domain.snix_dev.id + type = "AAAA" + name = "gerrit01.infra" + value = var.gerrit01_ipv6 +} + +resource "digitalocean_record" "snix_dev_infra_public01" { + domain = digitalocean_domain.snix_dev.id + type = "AAAA" + name = "public01.infra" + value = var.public01_ipv6 +} + +resource "digitalocean_record" "snix_dev_infra_build01" { + domain = digitalocean_domain.snix_dev.id + type = "AAAA" + name = "build01.infra" + value = var.build01_ipv6 +} + +resource "digitalocean_record" "snix_dev_infra_meta01_v4" { + domain = digitalocean_domain.snix_dev.id + type = "A" + name = "meta01.infra" + value = var.meta01_ipv4 +} + +resource "digitalocean_record" "snix_dev_infra_meta01_v6" { + domain = digitalocean_domain.snix_dev.id + type = "AAAA" + name = "meta01.infra" + value = var.meta01_ipv6 +} + +resource "digitalocean_record" "snix_dev_infra_gerrit01_v4" { + domain = digitalocean_domain.snix_dev.id + type = "A" + name = "gerrit01.infra" + value = var.gerrit01_ipv4 +} + +resource "digitalocean_record" "snix_dev_infra_gerrit01_v6" { + domain = digitalocean_domain.snix_dev.id + type = "AAAA" + name = "gerrit01.infra" + value = var.gerrit01_ipv6 +} + +resource "digitalocean_record" "snix_dev_infra_public01_v4" { + domain = digitalocean_domain.snix_dev.id + type = "A" + name = "public01.infra" + value = var.public01_ipv4 +} + +resource "digitalocean_record" "snix_dev_infra_public01_v6" { + domain = digitalocean_domain.snix_dev.id + type = "AAAA" + name = "public01.infra" + value = var.public01_ipv6 +} + +# Email records +resource "digitalocean_record" "snix_dev_mail_v4" { + domain = digitalocean_domain.snix_dev.id + type = "A" + value = "49.12.112.149" + name = "mail" +} + +resource "digitalocean_record" "snix_dev_mail_v6" { + domain = digitalocean_domain.snix_dev.id + type = "AAAA" + value = "2a01:4f8:c013:3e62::2" + name = "mail" +} + +# Explicit records for all services running on public01 +resource "digitalocean_record" "snix_dev_public01" { + domain = digitalocean_domain.snix_dev.id + type = "CNAME" + value = "public01.infra.snix.dev." + name = each.key + for_each = toset(local.public01_services) +} + +# Explicit records for all services running on gerrit01 +resource "digitalocean_record" "snix_dev_gerrit01" { + domain = digitalocean_domain.snix_dev.id + type = "CNAME" + value = "gerrit01.infra.snix.dev." + name = each.key + for_each = toset(local.gerrit01_services) +} + +# Explicit records for all services running on gerrit01 +resource "digitalocean_record" "snix_dev_meta01" { + domain = digitalocean_domain.snix_dev.id + type = "CNAME" + value = "meta01.infra.snix.dev." + name = each.key + for_each = toset(local.meta01_services) +} diff --git a/ops/dns/main.tf b/ops/dns/main.tf new file mode 100644 index 000000000..32aea4cd9 --- /dev/null +++ b/ops/dns/main.tf @@ -0,0 +1,81 @@ +# Configure snix DNS resources. + +terraform { + required_providers { + digitalocean = { + source = "digitalocean/digitalocean" + } + } + + backend "s3" { + endpoints = { + s3 = "https://s3.dualstack.eu-central-1.amazonaws.com" + } + + bucket = "snix-tfstate" + key = "terraform/snix-dns" + region = "eu-central-1" + + skip_credentials_validation = true + skip_metadata_api_check = true + skip_requesting_account_id = true + } +} + +variable "sni_proxy_ipv4" { + type = string + default = "163.172.69.160" +} + +variable "public01_ipv6" { + type = string + default = "2a01:4f8:c013:3e62::1" +} + +variable "public01_ipv4" { + type = string + default = "49.13.70.233" +} + +variable "gerrit01_ipv6" { + type = string + default = "2a01:4f8:c17:6188::1" +} + +variable "gerrit01_ipv4" { + type = string + default = "138.199.144.184" +} + +variable "build01_ipv6" { + type = string + default = "2001:bc8:38ee:100:7000::20" +} + +variable "meta01_ipv4" { + type = string + default = "142.132.184.228" +} + +variable "meta01_ipv6" { + type = string + default = "2a01:4f8:c013:4a58::1" +} + +locals { + public01_services = [ + "auth", + "git", + "status" + ] + + gerrit01_services = [ + "cl" + ] + + meta01_services = [ + "mimir", + "loki", + "tempo" + ] +} diff --git a/ops/dns/nixery.dev.zone b/ops/dns/nixery.dev.zone deleted file mode 100644 index 44cabab29..000000000 --- a/ops/dns/nixery.dev.zone +++ /dev/null @@ -1,10 +0,0 @@ -;; Google Cloud DNS zone for nixery.dev -nixery.dev. 21600 IN SOA ns-cloud-b1.googledomains.com. cloud-dns-hostmaster.google.com. 5 21600 3600 259200 300 -nixery.dev. 21600 IN NS ns-cloud-b1.googledomains.com. -nixery.dev. 21600 IN NS ns-cloud-b2.googledomains.com. -nixery.dev. 21600 IN NS ns-cloud-b3.googledomains.com. -nixery.dev. 21600 IN NS ns-cloud-b4.googledomains.com. - -;; Records for pointing nixery.dev to whitby -nixery.dev. 300 IN A 49.12.129.211 -nixery.dev. 300 IN AAAA 2a01:4f8:242:5b21:0:feed:edef:beef diff --git a/ops/dns/tvl.fyi.zone b/ops/dns/tvl.fyi.zone deleted file mode 100644 index d1961c6a7..000000000 --- a/ops/dns/tvl.fyi.zone +++ /dev/null @@ -1,39 +0,0 @@ -;; Google Cloud DNS zone for tvl.fyi. -;; -;; This zone is hosted in the project 'tvl-fyi', and registered via -;; Google Domains. -tvl.fyi. 21600 IN SOA ns-cloud-b1.googledomains.com. cloud-dns-hostmaster.google.com. 20 21600 3600 259200 300 -tvl.fyi. 21600 IN NS ns-cloud-b1.googledomains.com. -tvl.fyi. 21600 IN NS ns-cloud-b2.googledomains.com. -tvl.fyi. 21600 IN NS ns-cloud-b3.googledomains.com. -tvl.fyi. 21600 IN NS ns-cloud-b4.googledomains.com. - -;; Mail forwarding (via domains.google) -tvl.fyi. 3600 IN MX 5 gmr-smtp-in.l.google.com. -tvl.fyi. 3600 IN MX 10 alt1.gmr-smtp-in.l.google.com. -tvl.fyi. 3600 IN MX 20 alt2.gmr-smtp-in.l.google.com. -tvl.fyi. 3600 IN MX 30 alt3.gmr-smtp-in.l.google.com. -tvl.fyi. 3600 IN MX 40 alt4.gmr-smtp-in.l.google.com. - -;; Landing website is hosted on whitby on the apex. -tvl.fyi. 21600 IN A 49.12.129.211 -tvl.fyi. 21600 IN AAAA 2a01:4f8:242:5b21:0:feed:edef:beef - -;; TVL infrastructure -whitby.tvl.fyi. 21600 IN A 49.12.129.211 -whitby.tvl.fyi. 21600 IN AAAA 2a01:4f8:242:5b21:0:feed:edef:beef - -;; TVL services -at.tvl.fyi. 21600 IN CNAME whitby.tvl.fyi. -atward.tvl.fyi. 21600 IN CNAME whitby.tvl.fyi. -b.tvl.fyi. 21600 IN CNAME whitby.tvl.fyi. -cache.tvl.fyi. 21600 IN CNAME whitby.tvl.fyi. -cl.tvl.fyi. 21600 IN CNAME whitby.tvl.fyi. -code.tvl.fyi. 21600 IN CNAME whitby.tvl.fyi. -cs.tvl.fyi. 21600 IN CNAME whitby.tvl.fyi. -deploys.tvl.fyi. 21600 IN CNAME whitby.tvl.fyi. -images.tvl.fyi. 21600 IN CNAME whitby.tvl.fyi. -login.tvl.fyi. 21600 IN CNAME whitby.tvl.fyi. -static.tvl.fyi. 21600 IN CNAME whitby.tvl.fyi. -status.tvl.fyi. 21600 IN CNAME whitby.tvl.fyi. -todo.tvl.fyi. 21600 IN CNAME whitby.tvl.fyi. diff --git a/ops/dns/tvl.su.zone b/ops/dns/tvl.su.zone deleted file mode 100644 index da46752f1..000000000 --- a/ops/dns/tvl.su.zone +++ /dev/null @@ -1,51 +0,0 @@ -;; Google Cloud DNS for tvl.su. -;; -;; This zone is hosted in the project 'tvl-fyi', and registered via -;; NIC.RU. -;; -;; This zone is mostly identical to tvl.fyi and will eventually become -;; the primary zone. -tvl.su. 21600 IN SOA ns-cloud-b1.googledomains.com. cloud-dns-hostmaster.google.com. 33 21600 3600 259200 300 -tvl.su. 21600 IN NS ns-cloud-b1.googledomains.com. -tvl.su. 21600 IN NS ns-cloud-b2.googledomains.com. -tvl.su. 21600 IN NS ns-cloud-b3.googledomains.com. -tvl.su. 21600 IN NS ns-cloud-b4.googledomains.com. - -;; Landing website is hosted on whitby on the apex. -tvl.su. 21600 IN A 49.12.129.211 -tvl.su. 21600 IN AAAA 2a01:4f8:242:5b21:0:feed:edef:beef - -;; TVL infrastructure -whitby.tvl.su. 21600 IN A 49.12.129.211 -whitby.tvl.su. 21600 IN AAAA 2a01:4f8:242:5b21:0:feed:edef:beef - -;; TVL services -at.tvl.su. 21600 IN CNAME whitby.tvl.su. -atward.tvl.su. 21600 IN CNAME whitby.tvl.su. -b.tvl.su. 21600 IN CNAME whitby.tvl.su. -cache.tvl.su. 21600 IN CNAME whitby.tvl.su. -cl.tvl.su. 21600 IN CNAME whitby.tvl.su. -code.tvl.su. 21600 IN CNAME whitby.tvl.su. -cs.tvl.su. 21600 IN CNAME whitby.tvl.su. -images.tvl.su. 21600 IN CNAME whitby.tvl.su. -login.tvl.su. 21600 IN CNAME whitby.tvl.su. -static.tvl.su. 21600 IN CNAME whitby.tvl.su. -status.tvl.su. 21600 IN CNAME whitby.tvl.su. -todo.tvl.su. 21600 IN CNAME whitby.tvl.su. - -;; Google Workspaces domain verification -tvl.su. 21600 IN TXT "google-site-verification=3ksTBzFK3lZlzD3ddBfpaHs9qasfAiYBmvbW2T_ejH4" - -;; Google Workspaces email configuration -tvl.su. 21600 IN MX 1 aspmx.l.google.com. -tvl.su. 21600 IN MX 5 alt1.aspmx.l.google.com. -tvl.su. 21600 IN MX 5 alt2.aspmx.l.google.com. -tvl.su. 21600 IN MX 10 alt3.aspmx.l.google.com. -tvl.su. 21600 IN MX 10 alt4.aspmx.l.google.com. -tvl.su. 21600 IN TXT "v=spf1 include:_spf.google.com ~all" -google._domainkey.tvl.su. 21600 IN TXT ("v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlqCbnGa8oPwrudJK60l6MJj3NBnwj8wAPXNGtYy2SXrOBi7FT+ySwW7ATpfv6Xq9zGDUWJsENPUlFmvDiUs7Qi4scnNvSO1L+sDseB9/q1m3gMFVnTuieDO/" "T+KKkg0+uYgMM7YX5PahsAAJJ+EMb/r4afl3tcBMPR64VveKQ0hiSHA4zIYPsB9FB+b8S5C46uyY0r6WR7IzGjq2Gzb1do0kxvaKItTITWLSImcUu5ZZuXOUKJb441frVBWur5lXaYuedkxb1IRTTK0V/mBODE1D7k73MxGrqlzaMPdCqz+c3hRE18WVUkBTYjANVXDrs3yzBBVxaIAeu++vkO6BvQIDAQAB") - -;; Google Workspaces site aliases -docs.tvl.su. 21600 IN CNAME ghs.googlehosted.com. -groups.tvl.su. 21600 IN CNAME ghs.googlehosted.com. -mail.tvl.su. 21600 IN CNAME ghs.googlehosted.com. diff --git a/ops/gerrit-tvl/default.nix b/ops/gerrit-tvl/default.nix index f3bec7a3a..2d019bbe7 100644 --- a/ops/gerrit-tvl/default.nix +++ b/ops/gerrit-tvl/default.nix @@ -1,8 +1,9 @@ { depot, pkgs, lib, ... }: +{ gerrit }: let classPath = lib.concatStringsSep ":" [ - "${depot.third_party.gerrit}/share/api/extension-api_deploy.jar" + "${gerrit}/share/api/extension-api_deploy.jar" ]; in pkgs.stdenvNoCC.mkDerivation rec { diff --git a/ops/gerrit-tvl/static/tvl.js b/ops/gerrit-tvl/static/tvl.js index 684636de3..e88df63fb 100644 --- a/ops/gerrit-tvl/static/tvl.js +++ b/ops/gerrit-tvl/static/tvl.js @@ -1,8 +1,8 @@ // vim: set noai ts=2 sw=2 et: */ -// This is a read-only Buildkite token: it was generated by lukegb@, and has +// This is a read-only Buildkite token: it was generated and installed by flokli@ and has // read_builds, read_build_logs, and read_pipelines permissions. -const BUILDKITE_TOKEN = 'a150658fb61062e432f13a032962d70fa9352088'; +const BUILDKITE_TOKEN = 'bkua_fbb743ba597d89caf522876289705f6571bb599d'; function encodeParams(p) { const pieces = []; @@ -77,25 +77,25 @@ function jobStateToCheckRunStatus(state) { return status; } -const tvlChecksProvider = { +const snixChecksProvider = { async fetch(change) { let {patchsetSha, repo} = change; const experiments = window.ENABLED_EXPERIMENTS || []; - if (experiments.includes("UiFeature__tvl_check_debug")) { + if (experiments.includes("UiFeature__snix_check_debug")) { patchsetSha = '76692104f58b849b1503a8d8a700298003fa7b5f'; - repo = 'depot'; + repo = 'snix'; } - if (repo !== 'depot') { - // We only handle TVL's depot at the moment. + if (repo !== 'snix') { + // We only handle snix's depot at the moment. return {responseCode: 'OK'}; } const params = { commit: patchsetSha, }; - const url = `https://api.buildkite.com/v2/organizations/tvl/pipelines/depot/builds?${encodeParams(params)}`; + const url = `https://api.buildkite.com/v2/organizations/snix/pipelines/snix/builds?${encodeParams(params)}`; const resp = await fetch(url, { headers: { Authorization: `Bearer ${BUILDKITE_TOKEN}`, @@ -183,7 +183,7 @@ const tvlChecksProvider = { }; Gerrit.install(plugin => { - console.log('TVL plugin initialising'); + console.log('snix plugin initialising'); - plugin.checks().register(tvlChecksProvider); + plugin.checks().register(snixChecksProvider); }); diff --git a/ops/hcloud/.gitignore b/ops/hcloud/.gitignore new file mode 100644 index 000000000..de8e8f12e --- /dev/null +++ b/ops/hcloud/.gitignore @@ -0,0 +1,3 @@ +.terraform* +terraform.tfstate* +.envrc diff --git a/ops/hcloud/README.md b/ops/hcloud/README.md new file mode 100644 index 000000000..4de1f5a44 --- /dev/null +++ b/ops/hcloud/README.md @@ -0,0 +1,20 @@ +Hetzner cloud configuration +======================= + +This contains Terraform configuration for setting up our Hetzner cloud resources, except S3, see `//ops//hetzner-s3` for this. + +Through `//tools/depot-deps` a `tf-hcloud` binary is made available +which contains a Terraform binary pre-configured with the correct +providers. This is automatically on your `$PATH` through `direnv`. + +However, secrets still need to be loaded to access the Terraform state +and speak to the Hetzner API. These are available to certain users +through `//ops/secrets`. + +This can be done with separate direnv configuration, for example: + +``` +# //ops/buildkite/.envrc +source_up +eval $(age --decrypt -i ~/.ssh/id_ed25519 $(git rev-parse --show-toplevel)/ops/secrets/tf-hcloud.age) +``` diff --git a/ops/hcloud/default.nix b/ops/hcloud/default.nix new file mode 100644 index 000000000..722026188 --- /dev/null +++ b/ops/hcloud/default.nix @@ -0,0 +1,13 @@ +{ depot, lib, pkgs, ... }: + +depot.nix.readTree.drvTargets rec { + terraform = pkgs.terraform.withPlugins (p: [ + p.hcloud + ]); + + validate = depot.tools.checks.validateTerraform { + inherit terraform; + name = "hcloud"; + src = lib.cleanSource ./.; + }; +} diff --git a/ops/hcloud/raito.pub b/ops/hcloud/raito.pub new file mode 100644 index 000000000..14f25b0da --- /dev/null +++ b/ops/hcloud/raito.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDcEkYM1r8QVNM/G5CxJInEdoBCWjEHHDdHlzDYNSUIdHHsn04QY+XI67AdMCm8w30GZnLUIj5RiJEWXREUApby0GrfxGGcy8otforygfgtmuUKAUEHdU2MMwrQI7RtTZ8oQ0USRGuqvmegxz3l5caVU7qGvBllJ4NUHXrkZSja2/51vq80RF4MKkDGiz7xUTixI2UcBwQBCA/kQedKV9G28EH+1XfvePqmMivZjl+7VyHsgUVj9eRGA1XWFw59UPZG8a7VkxO/Eb3K9NF297HUAcFMcbY6cPFi9AaBgu3VC4eetDnoN/+xT1owiHi7BReQhGAy/6cdf7C/my5ehZwD raito@RaitoBezarius-Laptop-OverDrive diff --git a/ops/hcloud/snix.tf b/ops/hcloud/snix.tf new file mode 100644 index 000000000..08adb9da6 --- /dev/null +++ b/ops/hcloud/snix.tf @@ -0,0 +1,134 @@ +# Hetzner cloud configuration for snix + +terraform { + required_providers { + hcloud = { + source = "hetznercloud/hcloud" + } + } + + backend "s3" { + endpoints = { + s3 = "https://s3.dualstack.eu-central-1.amazonaws.com" + } + + bucket = "snix-tfstate" + key = "terraform/snix-hcloud" + region = "eu-central-1" + + skip_credentials_validation = true + skip_metadata_api_check = true + skip_requesting_account_id = true + } +} + +provider "hcloud" { } + +resource "hcloud_ssh_key" "raito" { + name = "raito" + public_key = file("./raito.pub") +} + +# TODO: pipe it from nix ssh keys +# +resource "hcloud_server" "meta01" { + name = "meta01.infra.snix.dev" + image = "debian-12" + # Observability stacks can eat quite the amount of RAM. + server_type = "cx32" + datacenter = "fsn1-dc14" + ssh_keys = [ hcloud_ssh_key.raito.id ] + public_net { + ipv4_enabled = true + ipv6_enabled = true + } + + lifecycle { + ignore_changes = [ ssh_keys ] + } +} + +resource "hcloud_rdns" "meta01-v6" { + server_id = hcloud_server.meta01.id + ip_address = hcloud_server.meta01.ipv6_address + dns_ptr = "meta01.infra.snix.dev" +} + +resource "hcloud_rdns" "meta01-v4" { + server_id = hcloud_server.meta01.id + ip_address = hcloud_server.meta01.ipv4_address + dns_ptr = "meta01.infra.snix.dev" +} + +resource "hcloud_floating_ip" "mail" { + type = "ipv4" + server_id = hcloud_server.public01.id + description = "IPv4 for mail hosting" +} + +resource "hcloud_server" "public01" { + name = "public01.infra.snix.dev" + image = "debian-12" + server_type = "cx22" + datacenter = "fsn1-dc14" + ssh_keys = [ hcloud_ssh_key.raito.id ] + public_net { + ipv4_enabled = true + ipv6_enabled = true + } + lifecycle { + ignore_changes = [ ssh_keys ] + } +} + +resource "hcloud_rdns" "mail-v4" { + floating_ip_id = hcloud_floating_ip.mail.id + ip_address = hcloud_floating_ip.mail.ip_address + dns_ptr = "mail.snix.dev" +} + +resource "hcloud_rdns" "mail-v6" { + server_id = hcloud_server.public01.id + # Hardcoded because I don't want to compute it via Terraform. + ip_address = "2a01:4f8:c013:3e62::2" + dns_ptr = "mail.snix.dev" +} + +resource "hcloud_rdns" "public01-v4" { + server_id = hcloud_server.public01.id + ip_address = hcloud_server.public01.ipv4_address + dns_ptr = "public01.infra.snix.dev" +} + +resource "hcloud_rdns" "public01-v6" { + server_id = hcloud_server.public01.id + ip_address = hcloud_server.public01.ipv6_address + dns_ptr = "public01.infra.snix.dev" +} + +resource "hcloud_server" "gerrit01" { + name = "gerrit01.infra.snix.dev" + image = "debian-12" + server_type = "cpx31" + datacenter = "fsn1-dc14" + ssh_keys = [ hcloud_ssh_key.raito.id ] + public_net { + ipv4_enabled = true + ipv6_enabled = true + } + lifecycle { + ignore_changes = [ ssh_keys ] + } +} + +resource "hcloud_rdns" "gerrit01-v6" { + server_id = hcloud_server.gerrit01.id + ip_address = hcloud_server.gerrit01.ipv6_address + dns_ptr = "gerrit01.infra.snix.dev" +} + +resource "hcloud_rdns" "gerrit01-v4" { + server_id = hcloud_server.gerrit01.id + ip_address = hcloud_server.gerrit01.ipv4_address + dns_ptr = "gerrit01.infra.snix.dev" +} diff --git a/ops/hetzner-s3/.gitignore b/ops/hetzner-s3/.gitignore new file mode 100644 index 000000000..de8e8f12e --- /dev/null +++ b/ops/hetzner-s3/.gitignore @@ -0,0 +1,3 @@ +.terraform* +terraform.tfstate* +.envrc diff --git a/ops/hetzner-s3/README.md b/ops/hetzner-s3/README.md new file mode 100644 index 000000000..febf48fdd --- /dev/null +++ b/ops/hetzner-s3/README.md @@ -0,0 +1,21 @@ +Hetzner S3 configuration +======================= + +This contains Terraform configuration for setting up our Hetzner S3 +buckets. + +Through `//tools/depot-deps` a `tf-hetzner-s3` binary is made available +which contains a Terraform binary pre-configured with the correct +providers. This is automatically on your `$PATH` through `direnv`. + +However, secrets still need to be loaded to access the Terraform state +and speak to the Hetzner API. These are available to certain users +through `//ops/secrets`. + +This can be done with separate direnv configuration, for example: + +``` +# //ops/buildkite/.envrc +source_up +eval $(age --decrypt -i ~/.ssh/id_ed25519 $(git rev-parse --show-toplevel)/ops/secrets/tf-hetzner-s3.age) +``` diff --git a/ops/hetzner-s3/default.nix b/ops/hetzner-s3/default.nix new file mode 100644 index 000000000..d72081aff --- /dev/null +++ b/ops/hetzner-s3/default.nix @@ -0,0 +1,13 @@ +{ depot, lib, pkgs, ... }: + +depot.nix.readTree.drvTargets rec { + terraform = pkgs.terraform.withPlugins (p: [ + p.minio + ]); + + validate = depot.tools.checks.validateTerraform { + inherit terraform; + name = "hetzner-s3"; + src = lib.cleanSource ./.; + }; +} diff --git a/ops/hetzner-s3/snix.tf b/ops/hetzner-s3/snix.tf new file mode 100644 index 000000000..5d73ddbe6 --- /dev/null +++ b/ops/hetzner-s3/snix.tf @@ -0,0 +1,63 @@ +# Hetzner S3 configuration for snix +# https://docs.hetzner.com/storage/object-storage/getting-started/creating-a-bucket-minio-terraform/ + +terraform { + required_providers { + minio = { + source = "aminueza/minio" + } + } + + backend "s3" { + endpoints = { + s3 = "https://s3.dualstack.eu-central-1.amazonaws.com" + } + + bucket = "snix-tfstate" + key = "terraform/snix-hetzner-s3" + region = "eu-central-1" + + skip_credentials_validation = true + skip_metadata_api_check = true + skip_requesting_account_id = true + } +} + +# Hetzner access keys, not to confuse with the state S3. +variable "access_key" {} + +variable "secret_key" { + sensitive = true +} + +provider "minio" { + minio_server = "fsn1.your-objectstorage.com" + minio_user = "${var.access_key}" + minio_password = "${var.secret_key}" + minio_region = "fsn1" + minio_ssl = true +} + +resource "minio_s3_bucket" "mimir" { + bucket = "snix-mimir" + acl = "private" + object_locking = false +} + +resource "minio_s3_bucket" "loki" { + bucket = "snix-loki" + acl = "private" + object_locking = false +} + +resource "minio_s3_bucket" "tempo" { + bucket = "snix-tempo" + acl = "private" + object_locking = false +} + +resource "minio_s3_bucket" "backups" { + bucket = "snix-backups" + acl = "private" + object_locking = false +} diff --git a/ops/keycloak/clients.tf b/ops/keycloak/clients.tf index 178971ae3..839486206 100644 --- a/ops/keycloak/clients.tf +++ b/ops/keycloak/clients.tf @@ -1,48 +1,82 @@ # All Keycloak clients, that is applications which authenticate # through Keycloak. # -# Includes first-party (i.e. TVL-hosted) and third-party clients. +# Includes first-party (i.e. snix-hosted) and third-party clients. resource "keycloak_openid_client" "grafana" { - realm_id = keycloak_realm.tvl.id + realm_id = keycloak_realm.snix.id client_id = "grafana" name = "Grafana" enabled = true access_type = "CONFIDENTIAL" standard_flow_enabled = true - base_url = "https://status.tvl.su" + base_url = "https://status.snix.dev" + full_scope_allowed = true valid_redirect_uris = [ - "https://status.tvl.su/*", + "https://status.snix.dev/*", + ] +} + +resource "keycloak_openid_client_default_scopes" "grafana_default_scopes" { + realm_id = keycloak_realm.snix.id + client_id = keycloak_openid_client.grafana.id + + default_scopes = [ + "profile", + "email", + "roles", + "web-origins", ] } resource "keycloak_openid_client" "gerrit" { - realm_id = keycloak_realm.tvl.id + realm_id = keycloak_realm.snix.id client_id = "gerrit" - name = "TVL Gerrit" + name = "snix Gerrit" enabled = true access_type = "CONFIDENTIAL" standard_flow_enabled = true - base_url = "https://cl.tvl.fyi" - description = "TVL's code review tool" + base_url = "https://cl.snix.dev" + description = "snix project's code review tool" direct_access_grants_enabled = true exclude_session_state_from_auth_response = false valid_redirect_uris = [ - "https://cl.tvl.fyi/*", + "https://cl.snix.dev/*", ] web_origins = [ - "https://cl.tvl.fyi", + "https://cl.snix.dev", + ] +} + +resource "keycloak_openid_client" "forgejo" { + realm_id = keycloak_realm.snix.id + client_id = "forgejo" + name = "snix Forgejo" + enabled = true + access_type = "CONFIDENTIAL" + standard_flow_enabled = true + base_url = "https://git.snix.dev" + description = "snix project's code browsing, search and issue tracker" + direct_access_grants_enabled = true + exclude_session_state_from_auth_response = false + + valid_redirect_uris = [ + "https://git.snix.dev/*", + ] + + web_origins = [ + "https://git.snix.dev", ] } resource "keycloak_saml_client" "buildkite" { - realm_id = keycloak_realm.tvl.id + realm_id = keycloak_realm.snix.id client_id = "https://buildkite.com" name = "Buildkite" - base_url = "https://buildkite.com/sso/tvl" + base_url = "https://buildkite.com/sso/snix" client_signature_required = false assertion_consumer_post_url = "https://buildkite.com/sso/~/1531aca5-f49c-4151-8832-a451e758af4c/saml/consume" @@ -53,7 +87,7 @@ resource "keycloak_saml_client" "buildkite" { } resource "keycloak_saml_user_attribute_protocol_mapper" "buildkite_email" { - realm_id = keycloak_realm.tvl.id + realm_id = keycloak_realm.snix.id client_id = keycloak_saml_client.buildkite.id name = "buildkite-email-mapper" user_attribute = "email" @@ -62,24 +96,10 @@ resource "keycloak_saml_user_attribute_protocol_mapper" "buildkite_email" { } resource "keycloak_saml_user_attribute_protocol_mapper" "buildkite_name" { - realm_id = keycloak_realm.tvl.id + realm_id = keycloak_realm.snix.id client_id = keycloak_saml_client.buildkite.id name = "buildkite-name-mapper" user_attribute = "displayName" saml_attribute_name = "name" saml_attribute_name_format = "Unspecified" } - -resource "keycloak_openid_client" "panettone" { - realm_id = keycloak_realm.tvl.id - client_id = "panettone" - name = "Panettone" - enabled = true - access_type = "CONFIDENTIAL" - standard_flow_enabled = true - - valid_redirect_uris = [ - "https://b.tvl.fyi/auth", - "http://localhost:6161/auth", - ] -} diff --git a/ops/keycloak/main.tf b/ops/keycloak/main.tf index b330e2a4d..08baca003 100644 --- a/ops/keycloak/main.tf +++ b/ops/keycloak/main.tf @@ -1,6 +1,4 @@ -# Configure TVL Keycloak instance. -# -# TODO(tazjin): Configure GitLab IDP +# Configure snix's Keycloak instance. terraform { required_providers { @@ -11,43 +9,37 @@ terraform { backend "s3" { endpoints = { - s3 = "https://objects.dc-sto1.glesys.net" + s3 = "https://s3.dualstack.eu-central-1.amazonaws.com" } - bucket = "tvl-state" - key = "terraform/tvl-keycloak" - region = "glesys" + + bucket = "snix-tfstate" + key = "terraform/snix-keycloak" + region = "eu-central-1" skip_credentials_validation = true - skip_region_validation = true - skip_metadata_api_check = true + skip_metadata_api_check = true skip_requesting_account_id = true - skip_s3_checksum = true } } provider "keycloak" { client_id = "terraform" - url = "https://auth.tvl.fyi" - # NOTE: Docs mention this applies to "users of the legacy distribution of keycloak". - # However, we get a "failed to perform initial login to Keycloak: error - # sending POST request to https://auth.tvl.fyi/realms/master/protocol/openid-connect/token: 404 Not Found" - # if we don't set this. - base_path = "/auth" + url = "https://auth.snix.dev" } -resource "keycloak_realm" "tvl" { - realm = "TVL" +resource "keycloak_realm" "snix" { + realm = "snix-project" enabled = true - display_name = "The Virus Lounge" + display_name = "The snix project" default_signature_algorithm = "RS256" - smtp_server { - from = "tvlbot@tazj.in" - from_display_name = "The Virus Lounge" - host = "127.0.0.1" - port = "25" - reply_to = "depot@tvl.su" - ssl = false - starttls = false - } + # smtp_server { + # from = "tvlbot@tazj.in" + # from_display_name = "The Virus Lounge" + # host = "127.0.0.1" + # port = "25" + # reply_to = "depot@tvl.su" + # ssl = false + # starttls = false + # } } diff --git a/ops/keycloak/permissions.tf b/ops/keycloak/permissions.tf new file mode 100644 index 000000000..4549d1f30 --- /dev/null +++ b/ops/keycloak/permissions.tf @@ -0,0 +1,100 @@ +# This sets the permissions for various groups and users. + +# TODO: Realm-level composite roles +# resource "keycloak_role" "is_local_admin" { +# composite_roles = [ +# keycloak_role.blablabla.id +# ] +# } +# +# resource "keycloak_role" "can_manage_trusted_contributors" { +# } +# +# # WARNING: This give PII access to the user. +# resource "keycloak_role" "can_manage_snix" { +# } + +# Realm-level groups to bestow to users. +resource "keycloak_group" "snix_core_team" { + realm_id = keycloak_realm.snix.id + name = "snix core team" +} + +resource "keycloak_group_roles" "snix_core_team_roles" { + realm_id = keycloak_realm.snix.id + group_id = keycloak_group.snix_core_team.id + + role_ids = [ + # keycloak_role.is_local_admin, + # keycloak_role.can_manage_snix, + keycloak_role.grafana_admin.id, + # keycloak_role.forgejo_admin.id, + # keycloak_role.gerrit_admin.id + # keycloak_role.wiki_admin.id + ] +} + +resource "keycloak_group_memberships" "snix_core_team_members" { + realm_id = keycloak_realm.snix.id + group_id = keycloak_group.snix_core_team.id + + members = [ + "raitobezarius", + "edef" + ] +} + +resource "keycloak_group" "trusted_contributors" { + name = "trusted contributors" + realm_id = keycloak_realm.snix.id + +} + +resource "keycloak_group_roles" "trusted_contributors_roles" { + realm_id = keycloak_realm.snix.id + group_id = keycloak_group.trusted_contributors.id + + role_ids = [ + keycloak_role.grafana_editor.id + ] +} + +resource "keycloak_group" "wiki_editors" { + name = "wiki editors" + realm_id = keycloak_realm.snix.id +} + +# Application-level roles. + +# Grafana + +resource "keycloak_role" "grafana_editor" { + realm_id = keycloak_realm.snix.id + client_id = keycloak_openid_client.grafana.id + name = "Editor" + description = "Can edit things in Grafana" +} + +resource "keycloak_role" "grafana_admin" { + realm_id = keycloak_realm.snix.id + client_id = keycloak_openid_client.grafana.id + name = "Admin" + description = "Can admin things in Grafana" +} + +# TODO: +# Forgejo + +# resource "keycloak_role" "forgejo_admin" { +# } +# +# resource "keycloak_role" "forgejo_trusted_contributor" { +# } +# +# # Gerrit +# +# resource "keycloak_role" "gerrit_admin" { +# } +# +# resource "keycloak_role" "gerrit_trusted_contributor" { +# } diff --git a/ops/keycloak/user_sources.tf b/ops/keycloak/user_sources.tf index 7fa71e36f..499c7f7f3 100644 --- a/ops/keycloak/user_sources.tf +++ b/ops/keycloak/user_sources.tf @@ -6,44 +6,20 @@ variable "github_client_secret" { type = string } -resource "keycloak_ldap_user_federation" "tvl_ldap" { - name = "tvl-ldap" - realm_id = keycloak_realm.tvl.id - enabled = true - connection_url = "ldap://localhost" - users_dn = "ou=users,dc=tvl,dc=fyi" - username_ldap_attribute = "cn" - uuid_ldap_attribute = "cn" - rdn_ldap_attribute = "cn" - full_sync_period = 86400 - trust_email = true - - user_object_classes = [ - "inetOrgPerson", - "organizationalPerson", - ] - - lifecycle { - # Without this, terraform wants to recreate the resource. - ignore_changes = [ - delete_default_mappers - ] - } -} - # keycloak_oidc_identity_provider.github will be destroyed # (because keycloak_oidc_identity_provider.github is not in configuration) resource "keycloak_oidc_identity_provider" "github" { alias = "github" provider_id = "github" - client_id = "Iv23liXfGNIr7InMg5Uo" + client_id = "Ov23liKpXqs0aPaVgDpg" client_secret = var.github_client_secret - realm = keycloak_realm.tvl.id + realm = keycloak_realm.snix.id backchannel_supported = false gui_order = "1" store_token = false sync_mode = "IMPORT" trust_email = true + default_scopes = "openid user:email" # These default to built-in values for the `github` provider_id. authorization_url = "" diff --git a/ops/machines/all-systems.nix b/ops/machines/all-systems.nix index 289c2d88f..8aee761e9 100644 --- a/ops/machines/all-systems.nix +++ b/ops/machines/all-systems.nix @@ -1,6 +1,12 @@ { depot, ... }: (with depot.ops.machines; [ - meta01 + # Gerrit instance + gerrit01 + # Public-facing services public01 + # Build machine + build01 + # Observability stack and internal software + meta01 ]) diff --git a/ops/machines/build01/default.nix b/ops/machines/build01/default.nix new file mode 100644 index 000000000..1c31028a7 --- /dev/null +++ b/ops/machines/build01/default.nix @@ -0,0 +1,94 @@ +{ depot, lib, pkgs, ... }: # readTree options +{ config, ... }: # passed by module system +let + mod = name: depot.path.origSrc + ("/ops/modules/" + name); +in +{ + imports = [ + (mod "o11y/agent.nix") + (mod "snix-buildkite.nix") + (mod "known-hosts.nix") + + (depot.third_party.agenix.src + "/modules/age.nix") + ]; + + # Machine model taken from project Floral. + boot.isContainer = true; + + # XXX: There's currently no way to remove the "problematic" entries (trying + # to override the /proc, /sys, /dev, ... mounts from systemd-nspawn) while + # also keeping the entry for the wrappers dir. + boot.specialFileSystems = lib.mkForce { + "/run/wrappers" = { + fsType = "tmpfs"; + options = [ "nodev" "mode=755" "size=${config.security.wrapperDirSize}" ]; + }; + }; + + services.depot.buildkite = { + enable = true; + agentCount = 32; + }; + + boot.loader.initScript.enable = true; + system.switch.enableNg = false; + nix.package = pkgs.nix_2_3; + + networking = { + useNetworkd = true; + useHostResolvConf = false; + + hostName = "build01"; + domain = "infra.snix.dev"; + nameservers = [ + "2001:4860:4860::6464" + "2001:4860:4860::64" + ]; + + interfaces.host0.ipv6 = { + addresses = [ + { address = "2001:bc8:38ee:100:7000::20"; prefixLength = 64; } + ]; + routes = [ + { address = "64:ff9b::"; via = "2001:bc8:38ee:100::100"; prefixLength = 96; } + ]; + }; + + firewall.allowPing = true; + }; + + age.secrets = + let + secretFile = name: depot.ops.secrets."${name}.age"; + in + { + buildkite-agent-token = { + file = secretFile "buildkite-agent-token"; + mode = "0440"; + group = "buildkite-agents"; + }; + buildkite-private-key = { + file = secretFile "buildkite-ssh-private-key"; + mode = "0440"; + group = "buildkite-agents"; + }; + buildkite-besadii-config = { + file = secretFile "buildkite-besadii-config"; + mode = "0440"; + group = "buildkite-agents"; + }; + buildkite-graphql-token = { + file = secretFile "buildkite-graphql-token"; + mode = "0440"; + group = "buildkite-agents"; + }; + }; + + services.openssh.enable = true; + time.timeZone = "UTC"; + users.users.root.openssh.authorizedKeys.keys = with depot.users; flokli.keys.all ++ edef.keys.all ++ raito.keys.all; + users.groups.kvm = { }; + users.users.root.extraGroups = [ "kvm" ]; + + system.stateVersion = "25.05"; +} diff --git a/ops/machines/gerrit01/default.nix b/ops/machines/gerrit01/default.nix new file mode 100644 index 000000000..e2a0f576f --- /dev/null +++ b/ops/machines/gerrit01/default.nix @@ -0,0 +1,122 @@ +{ depot, lib, pkgs, ... }: # readTree options +{ config, ... }: # passed by module system + +let + mod = name: depot.path.origSrc + ("/ops/modules/" + name); +in +{ + imports = [ + ./disko.nix + + (mod "hetzner-cloud.nix") + (mod "restic.nix") + (mod "o11y/agent.nix") + (mod "gerrit-autosubmit.nix") + (mod "monorepo-gerrit.nix") + (mod "www/cl.snix.dev.nix") + (mod "known-hosts.nix") + + (depot.third_party.agenix.src + "/modules/age.nix") + (depot.third_party.disko.src + "/module.nix") + ]; + + infra.hardware.hetzner-cloud = { + enable = true; + ipv6 = "2a01:4f8:c17:6188::1/64"; + }; + + networking = { + hostName = "gerrit01"; + domain = "infra.snix.dev"; + }; + + # Disable background git gc system-wide, as it has a tendency to break CI. + environment.etc."gitconfig".source = pkgs.writeText "gitconfig" '' + [gc] + autoDetach = false + ''; + + time.timeZone = "UTC"; + + programs.mtr.enable = true; + programs.mosh.enable = true; + services.openssh = { + enable = true; + settings = { + PasswordAuthentication = false; + KbdInteractiveAuthentication = false; + }; + }; + + # Automatically collect garbage from the Nix store. + services.depot.automatic-gc = { + enable = true; + interval = "daily"; + diskThreshold = 5; # GiB + maxFreed = 3; # GiB + preserveGenerations = "30d"; + }; + + age.secrets = + let + secretFile = name: depot.ops.secrets."${name}.age"; + in + { + gerrit-oauth-secret.file = secretFile "gerrit-oauth-secret"; + gerrit-replication-key.file = secretFile "gerrit-replication-key"; + gerrit-autosubmit.file = secretFile "gerrit-autosubmit"; + gerrit-besadii-config = { + file = secretFile "buildkite-besadii-config"; + owner = "git"; + }; + restic-repository-password.file = secretFile "restic-repository-password"; + restic-bucket-credentials.file = secretFile "restic-bucket-credentials"; + }; + + services.depot = { + gerrit-autosubmit.enable = true; + restic.enable = true; + }; + + services.fail2ban.enable = true; + + environment.systemPackages = (with pkgs; [ + bat + bb + curl + direnv + fd + git + htop + hyperfine + jq + nano + nvd + ripgrep + tree + unzip + vim + ]) ++ (with depot; [ + ops.deploy-machine + ]); + + # Required for prometheus to be able to scrape stats + services.nginx.statusPage = true; + + users = { + # Set up a user & group for git shenanigans + groups.git = { }; + users.git = { + group = "git"; + isSystemUser = true; + createHome = true; + home = "/var/lib/git"; + }; + users.root.openssh.authorizedKeys.keys = with depot.users; flokli.keys.all ++ edef.keys.all ++ raito.keys.all; + }; + + boot.initrd.systemd.enable = true; + zramSwap.enable = true; + + system.stateVersion = "25.05"; +} diff --git a/ops/machines/gerrit01/disko.nix b/ops/machines/gerrit01/disko.nix new file mode 100644 index 000000000..e1711cead --- /dev/null +++ b/ops/machines/gerrit01/disko.nix @@ -0,0 +1,84 @@ +let + disk = "/dev/sda"; + targetFsType = "xfs"; + swapSizeInGb = 16; +in +{ + disko.devices = { + disk = { + ${disk} = { + device = "${disk}"; + type = "disk"; + content = { + type = "gpt"; + partitions = { + ESP = { + size = "1G"; + type = "EF00"; + priority = 100; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ "umask=0077" ]; + }; + }; + PRIMARY = { + # Take the next available range. + start = "0"; + end = "-${toString swapSizeInGb}G"; + content = { + type = "lvm_pv"; + vg = "vg_${targetFsType}"; + }; + }; + SWAP = { + # Start from the SWAP area. + start = "-${toString swapSizeInGb}G"; + size = "100%"; + content = { + type = "swap"; + }; + }; + }; + }; + }; + }; + lvm_vg = { + "vg_${targetFsType}" = { + type = "lvm_vg"; + lvs = { + ROOT = { + name = "ROOT"; + size = "2G"; + content = { + type = "filesystem"; + format = targetFsType; + mountpoint = "/"; + }; + }; + NIX = { + name = "NIX"; + size = "40%FREE"; + content = { + type = "filesystem"; + format = targetFsType; + mountpoint = "/nix"; + mountOptions = [ "noatime" ]; + }; + }; + VAR = { + name = "VAR"; + size = "100%FREE"; + content = { + type = "filesystem"; + format = targetFsType; + mountpoint = "/var"; + mountOptions = [ "noatime" ]; + }; + }; + }; + }; + }; + }; +} diff --git a/ops/machines/meta01/default.nix b/ops/machines/meta01/default.nix new file mode 100644 index 000000000..338349d95 --- /dev/null +++ b/ops/machines/meta01/default.nix @@ -0,0 +1,145 @@ +{ depot, lib, pkgs, ... }: # readTree options +{ config, ... }: # passed by module system + +let + mod = name: depot.path.origSrc + ("/ops/modules/" + name); +in +{ + imports = [ + ./disko.nix + + (mod "hetzner-cloud.nix") + (mod "o11y/agent.nix") + (mod "o11y/mimir.nix") + (mod "o11y/loki.nix") + (mod "o11y/tempo.nix") + (mod "o11y/alertmanager-irc-relay.nix") + (mod "known-hosts.nix") + (mod "clbot.nix") + + (mod "www/mimir.snix.dev.nix") + (mod "www/loki.snix.dev.nix") + (mod "www/tempo.snix.dev.nix") + + (depot.third_party.agenix.src + "/modules/age.nix") + (depot.third_party.disko.src + "/module.nix") + ]; + + infra.hardware.hetzner-cloud = { + enable = true; + ipv6 = "2a01:4f8:c013:4a58::1/64"; + }; + + networking = { + hostName = "meta01"; + domain = "infra.snix.dev"; + }; + + time.timeZone = "UTC"; + + programs.mtr.enable = true; + programs.mosh.enable = true; + services.openssh = { + enable = true; + settings = { + PasswordAuthentication = false; + KbdInteractiveAuthentication = false; + }; + }; + + # Automatically collect garbage from the Nix store. + services.depot.automatic-gc = { + enable = true; + interval = "daily"; + diskThreshold = 5; # GiB + maxFreed = 3; # GiB + preserveGenerations = "30d"; + }; + + services.depot = { + # TODO: make it possible to do `alertmanager.enable = true;` + prometheus.enable = true; + loki.enable = true; + tempo.enable = true; + clbot = { + enable = false; + channels = { + "#snix" = { }; + + flags = { + gerrit_host = "cl.snix.dev:29418"; + gerrit_ssh_auth_username = "clbot"; + # gerrit_ssh_auth_key = config.age.secrets.clbot-ssh-private-key.path; + + irc_server = "irc.hackint.org:6697"; + irc_tls = true; + irc_user = "snixbot"; + irc_nick = "snixbot"; + + notify_branches = "canon,refs/meta/config"; + notify_repo = "snix"; + + irc_pass = "$CLBOT_PASS"; + }; + }; + }; + }; + + networking.nftables.enable = true; + networking.firewall.extraInputRules = '' + # Prometheus, Loki, Tempo + ip6 saddr { 2a01:4f8:c013:3e62::1 } tcp dport { 9009, 9090, 9190 } accept + ip saddr { 49.13.70.233 } tcp dport { 9009, 9090, 9190 } accept + ''; + + age.secrets = + let + secretFile = name: depot.ops.secrets."${name}.age"; + in + { + mimir-environment.file = secretFile "mimir-environment"; + # Yes, they are literally the same: Hetzner Cloud has no support for per-bucket keys. + loki-environment.file = secretFile "mimir-environment"; + tempo-environment.file = secretFile "mimir-environment"; + metrics-push-htpasswd.file = secretFile "metrics-push-htpasswd"; + metrics-push-htpasswd.owner = "nginx"; + mimir-webhook-url.file = secretFile "mimir-webhook-url"; + alertmanager-irc-relay-environment.file = secretFile "alertmanager-irc-relay-environment"; + restic-repository-password.file = secretFile "restic-repository-password"; + restic-bucket-credentials.file = secretFile "restic-bucket-credentials"; + }; + + services.fail2ban.enable = true; + + environment.systemPackages = (with pkgs; [ + bat + bb + curl + direnv + fd + git + htop + hyperfine + jq + nano + nvd + ripgrep + tree + unzip + vim + ]) ++ (with depot; [ + ops.deploy-machine + ]); + + # Required for prometheus to be able to scrape stats + services.nginx.statusPage = true; + + users = { + users.root.openssh.authorizedKeys.keys = with depot.users; flokli.keys.all ++ edef.keys.all ++ raito.keys.all; + }; + + boot.initrd.systemd.enable = true; + zramSwap.enable = true; + + system.stateVersion = "25.05"; +} diff --git a/ops/machines/meta01/disko.nix b/ops/machines/meta01/disko.nix new file mode 100644 index 000000000..0a3e383a6 --- /dev/null +++ b/ops/machines/meta01/disko.nix @@ -0,0 +1,84 @@ +let + disk = "/dev/sda"; + targetFsType = "xfs"; + swapSizeInGb = 8; +in +{ + disko.devices = { + disk = { + ${disk} = { + device = "${disk}"; + type = "disk"; + content = { + type = "gpt"; + partitions = { + ESP = { + size = "1G"; + type = "EF00"; + priority = 100; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ "umask=0077" ]; + }; + }; + PRIMARY = { + # Take the next available range. + start = "0"; + end = "-${toString swapSizeInGb}G"; + content = { + type = "lvm_pv"; + vg = "vg_${targetFsType}"; + }; + }; + SWAP = { + # Start from the SWAP area. + start = "-${toString swapSizeInGb}G"; + size = "100%"; + content = { + type = "swap"; + }; + }; + }; + }; + }; + }; + lvm_vg = { + "vg_${targetFsType}" = { + type = "lvm_vg"; + lvs = { + ROOT = { + name = "ROOT"; + size = "2G"; + content = { + type = "filesystem"; + format = targetFsType; + mountpoint = "/"; + }; + }; + NIX = { + name = "NIX"; + size = "40%FREE"; + content = { + type = "filesystem"; + format = targetFsType; + mountpoint = "/nix"; + mountOptions = [ "noatime" ]; + }; + }; + VAR = { + name = "VAR"; + size = "100%FREE"; + content = { + type = "filesystem"; + format = targetFsType; + mountpoint = "/var"; + mountOptions = [ "noatime" ]; + }; + }; + }; + }; + }; + }; +} diff --git a/ops/machines/public01/default.nix b/ops/machines/public01/default.nix new file mode 100644 index 000000000..43672990e --- /dev/null +++ b/ops/machines/public01/default.nix @@ -0,0 +1,206 @@ +{ depot, lib, pkgs, ... }: # readTree options +{ config, ... }: # passed by module system + +let + mod = name: depot.path.origSrc + ("/ops/modules/" + name); +in +{ + imports = [ + ./disko.nix + + (mod "hetzner-cloud.nix") + (mod "forgejo.nix") + (mod "restic.nix") + # (mod "stalwart.nix") + # Automatically enable metric and log collection. + (mod "o11y/agent.nix") + (mod "o11y/grafana.nix") + (mod "www/status.snix.dev.nix") + (mod "www/auth.snix.dev.nix") + (mod "www/git.snix.dev.nix") + # (mod "www/mail.snix.dev.nix") + (mod "known-hosts.nix") + + (depot.third_party.agenix.src + "/modules/age.nix") + (depot.third_party.disko.src + "/module.nix") + ]; + + infra.hardware.hetzner-cloud = { + enable = true; + ipv6 = "2a01:4f8:c013:3e62::1/64"; + # Additional IPs. + floatingIPs = [ + "49.12.112.149/32" + ]; + }; + + networking = { + hostName = "public01"; + domain = "infra.snix.dev"; + }; + + time.timeZone = "UTC"; + + programs.mtr.enable = true; + programs.mosh.enable = true; + services.openssh = { + enable = true; + settings = { + PasswordAuthentication = false; + KbdInteractiveAuthentication = false; + }; + }; + + services.depot = { + # Automatically collect garbage from the Nix store. + automatic-gc = { + enable = true; + interval = "daily"; + diskThreshold = 5; # GiB + maxFreed = 3; # GiB + preserveGenerations = "30d"; + }; + forgejo = { + enable = true; + domain = "git.snix.dev"; + }; + grafana.enable = true; + # stalwart = { + # enable = true; + # mailDomain = "mail.snix.dev"; + # }; + # Configure backups to Hetzner Cloud + restic = { + enable = true; + paths = [ + "/var/backup/postgresql" + "/var/backup/mysql" + "/var/lib/grafana" + "/var/lib/forgejo" + ]; + }; + }; + + services.postgresqlBackup = { + enable = true; + databases = [ + "keycloak" + ]; + }; + + services.mysqlBackup = { + enable = true; + databases = [ + "forgejo" + ]; + }; + + services.keycloak = { + enable = true; + + settings = { + http-port = 9091; + hostname = "auth.snix.dev"; + proxy-headers = "xforwarded"; + http-enabled = true; + + # https://www.keycloak.org/docs/latest/server_admin/#_fine_grain_permissions + features = "admin-fine-grained-authz"; + }; + + # This will be immediately changed, so no harm in having it here. + # It's just a one-time-use random set of characters. + initialAdminPassword = "TUxLWjndUZQGQ0A3ws0LfUs1DYRdAVcK"; + + database = { + type = "postgresql"; + createLocally = true; + passwordFile = config.age.secrets.keycloak-db-password.path; + }; + }; + + systemd.services.keycloak.serviceConfig.Environment = [ + # https://bugs.openjdk.org/browse/JDK-8170568 someday… ! + "JAVA_OPTS_APPEND=-Djava.net.preferIPv6Addresses=system" + ]; + + age.secrets = + let + secretFile = name: depot.ops.secrets."${name}.age"; + in + { + forgejo-oauth-secret = { + file = secretFile "forgejo-oauth-secret"; + mode = "0440"; + group = "git"; + }; + grafana-oauth-secret = { + file = secretFile "grafana-oauth-secret"; + mode = "0440"; + owner = "grafana"; + }; + keycloak-db-password.file = secretFile "keycloak-db-password"; + restic-repository-password.file = secretFile "restic-repository-password"; + restic-bucket-credentials.file = secretFile "restic-bucket-credentials"; + }; + + # Start the Gerrit->IRC bot + # services.depot.clbot = { + # enable = true; + # channels = { + # "#snix-dev" = { }; + # }; + + # # See //fun/clbot for details. + # flags = { + # gerrit_host = "cl.tvl.fyi:29418"; + # gerrit_ssh_auth_username = "clbot"; + # gerrit_ssh_auth_key = config.age.secretsDir + "/clbot-ssh"; + + # irc_server = "localhost:${toString config.services.znc.config.Listener.l.Port}"; + # irc_user = "tvlbot"; + # irc_nick = "tvlbot"; + + # notify_branches = "canon,refs/meta/config"; + # notify_repo = "depot"; + + # # This secret is read from an environment variable, which is + # # populated by a systemd EnvironmentFile. + # irc_pass = "$CLBOT_PASS"; + # }; + # }; + + services.fail2ban.enable = true; + + environment.systemPackages = (with pkgs; [ + bat + bb + curl + direnv + fd + git + htop + hyperfine + jq + nano + nvd + ripgrep + tree + unzip + vim + ]) ++ (with depot; [ + ops.deploy-machine + ]); + + # Required for prometheus to be able to scrape stats + services.nginx.statusPage = true; + + users = { + users.root.openssh.authorizedKeys.keys = with depot.users; flokli.keys.all ++ edef.keys.all ++ raito.keys.all; + }; + + boot.initrd.systemd.enable = true; + zramSwap.enable = true; + + system.stateVersion = "25.05"; +} diff --git a/ops/machines/public01/disko.nix b/ops/machines/public01/disko.nix new file mode 100644 index 000000000..e1711cead --- /dev/null +++ b/ops/machines/public01/disko.nix @@ -0,0 +1,84 @@ +let + disk = "/dev/sda"; + targetFsType = "xfs"; + swapSizeInGb = 16; +in +{ + disko.devices = { + disk = { + ${disk} = { + device = "${disk}"; + type = "disk"; + content = { + type = "gpt"; + partitions = { + ESP = { + size = "1G"; + type = "EF00"; + priority = 100; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ "umask=0077" ]; + }; + }; + PRIMARY = { + # Take the next available range. + start = "0"; + end = "-${toString swapSizeInGb}G"; + content = { + type = "lvm_pv"; + vg = "vg_${targetFsType}"; + }; + }; + SWAP = { + # Start from the SWAP area. + start = "-${toString swapSizeInGb}G"; + size = "100%"; + content = { + type = "swap"; + }; + }; + }; + }; + }; + }; + lvm_vg = { + "vg_${targetFsType}" = { + type = "lvm_vg"; + lvs = { + ROOT = { + name = "ROOT"; + size = "2G"; + content = { + type = "filesystem"; + format = targetFsType; + mountpoint = "/"; + }; + }; + NIX = { + name = "NIX"; + size = "40%FREE"; + content = { + type = "filesystem"; + format = targetFsType; + mountpoint = "/nix"; + mountOptions = [ "noatime" ]; + }; + }; + VAR = { + name = "VAR"; + size = "100%FREE"; + content = { + type = "filesystem"; + format = targetFsType; + mountpoint = "/var"; + mountOptions = [ "noatime" ]; + }; + }; + }; + }; + }; + }; +} diff --git a/ops/modules/default-imports.nix b/ops/modules/default-imports.nix index 01a378ad0..d3060bb51 100644 --- a/ops/modules/default-imports.nix +++ b/ops/modules/default-imports.nix @@ -9,5 +9,6 @@ imports = [ ./automatic-gc.nix ./auto-deploy.nix + ./raito-vm.nix ]; } diff --git a/ops/modules/forgejo.nix b/ops/modules/forgejo.nix new file mode 100644 index 000000000..4b9606a58 --- /dev/null +++ b/ops/modules/forgejo.nix @@ -0,0 +1,305 @@ +# +# Forgejo Git Backend taken from Lix configuration. +# Thanks to all the Lix core developers for this! +# vim: et:ts=2:sw=2: +# +{ depot, pkgs, lib, config, ... }: +let + cfg = config.services.depot.forgejo; + inherit (lib) types mkEnableOption mkOption mkIf; + emojo = + let + handlePostFetch = '' + for i in $out/*_256.png; do + mv $i $(echo $i | sed -E 's/_256//g') + done + ''; + drgn = pkgs.fetchzip { + url = "https://volpeon.ink/emojis/drgn/drgn.zip"; + stripRoot = false; + sha256 = "sha256-/2MpbxMJC92a4YhwG5rP6TsDC/q1Ng5fFq4xe2cBrrM="; + postFetch = handlePostFetch; + }; + neocat = pkgs.fetchzip { + url = "https://volpeon.ink/emojis/neocat/neocat.zip"; + stripRoot = false; + sha256 = "sha256-Irh6Mv6ICDkaaenIFf8Cm1AFkdZy0gRVbXqgnwpk3Qw="; + postFetch = handlePostFetch; + }; + neofox = pkgs.fetchzip { + url = "https://volpeon.ink/emojis/neofox/neofox.zip"; + stripRoot = false; + sha256 = "sha256-FSTVYP/Bt25JfLr/Ny1g9oI9aAvAYLYhct31j3XRXYc="; + postFetch = handlePostFetch; + }; + dragon = pkgs.fetchFromGitHub { + owner = "chr-1x"; + repo = "dragn-emoji"; + rev = "969543d9918ce2f0794ccd1e41b276d1ab22f0d5"; + sha256 = "sha256-+40e9nKaIpQYZUiXh3Qe5jp2uvRbAQYDdXMGLEWHJio="; + postFetch = '' + for i in $out/*.svg; do + ${pkgs.librsvg}/bin/rsvg-convert -h 256 $i > a.png; + mv a.png $(echo $i | sed -E "s/svg$/png/"); + rm $i + done + ${pkgs.oxipng}/bin/oxipng -o max $out/*.png + ''; + }; + in + pkgs.symlinkJoin { name = "emojo"; paths = [ drgn neocat neofox dragon ]; }; +in +{ + options.services.depot.forgejo = { + enable = mkEnableOption "Forgejo Forge"; + + domain = mkOption { + type = types.str; + }; + }; + + config = mkIf cfg.enable { + # we have to use redis since we apparently have a "large instance" which + # "leaks hilarious amounts of memory if you use the default configuration" + services.redis = { + package = pkgs.valkey; + + vmOverCommit = true; + servers.forgejo = { + enable = true; + # disable persistence, so when redis inevitably OOMs due to + # forgejo throwing to much in it, we don't restore the dataset + # that caused the OOM, breaking the restart loop. + save = [ ]; + }; + }; + systemd.services.redis-forgejo.serviceConfig = { + Restart = "always"; + }; + systemd.services.forgejo = { + after = [ "redis-forgejo.service" ]; + wants = [ "redis-forgejo.service" ]; + }; + + services.forgejo = { + enable = true; + + package = pkgs.forgejo.overrideAttrs (old: { + patches = old.patches ++ (with depot.third_party.lix_forgejo.patches; [ + upstream_link + signin_redirect + api_dont_notify + forgejo_is_now_gerrit_native + forgejo_knows_about_gerrit + ]); + }); + + # General settings. + lfs.enable = true; + + # Make our checkout paths more in line with expectations by calling our user "git". + user = "git"; + group = "git"; + + # Secret mail config. + # mailerPasswordFile = config.age.secrets.forgejoSmtpSecret.path; + + # Server and database config. + settings = { + + # Sets the name in the titlebar, mostly. + DEFAULT.APP_NAME = "Snix Project"; + + # Settings for how we serve things. + server = { + DOMAIN = cfg.domain; + PROTOCOL = "http"; + ENABLE_ACME = true; + ACME_ACCEPTTOS = true; + ACME_EMAIL = "acme@snix.dev"; + LANDING_PAGE = "explore"; + ROOT_URL = "https://${cfg.domain}"; + + # open a server on localhost:6060 with pprof data + # !! note: the documentation says that this causes forgejo serv to dump + # random files in PPROF_DATA_PATH. + # This documentation is wrong, ENABLE_PPROF only affects forgejo web, + # and forgejo serv requires a --enable-pprof arg to do that. But it's + # not causing perf problems right now so we don't care about that + # anyway. + ENABLE_PPROF = true; + }; + + # openid is not used in our setup + openid = { + ENABLE_OPENID_SIGNIN = false; + ENABLE_OPENID_SIGNUP = false; + }; + + oauth2_client = { + ENABLE_AUTO_REGISTRATION = true; + REGISTER_EMAIL_CONFIRM = false; + ACCOUNT_LINKING = "login"; + USERNAME = "nickname"; + OPENID_CONNECT_SCOPES = "email profile"; + }; + + cache = { + ADAPTER = "redis"; + HOST = "redis+socket://${config.services.redis.servers.forgejo.unixSocket}"; + }; + "cache.last_commit" = { + ITEM_TTL = "24h"; # from default 8760h (1 year) + }; + + service = { + # We previously ran with "disable registration" which doesn't actually + # do anything to the OAuth login form, just the link account form. We + # suspect that if the account has all the required metadata like email + # to register cleanly, it doesn't use DISABLE_REGISTRATION at all. + # + # However this was probably relying on forgejo bugs, let's set it + # unambiguously. + DISABLE_REGISTRATION = false; + ALLOW_ONLY_EXTERNAL_REGISTRATION = true; + + #REQUIRE_SIGNIN_VIEW = false; + ENABLE_NOTIFY_MAIL = true; + + # Don't add org members as watchers on all repos, or indeed on new + # repos either. + # + # See: https://github.com/bmackinney/gitea/commit/a9eb2167536cfa8f7b7a23f73e11c8edf5dc0dc0 + AUTO_WATCH_NEW_REPOS = false; + }; + + session = { + # Put sessions in the DB so they survive restarts + PROVIDER = "db"; + PROVIDER_CONFIG = ""; + + # Cookie only works over https + COOKIE_SECURE = true; + + # 5 day sessions + SESSION_LIFE_TIME = 86400 * 5; + }; + + # Careful with these! + security = { + # Don't allow access to the install page; manage exclusively via Nix. + INSTALL_LOCK = true; + + # Allow internal users with the right permissions to set up Git hooks. + DISABLE_GIT_HOOKS = false; + }; + + # Note: PASSWD is set by NixOS up. + # mailer = { + # ENABLED = true; + # PROTOCOL = "smtps"; + # SMTP_ADDR = ""; + # SMTP_PORT = 465; + # USER = ""; + # FROM = ""; + # }; + + ui = { + # Add the used emojis from https://volpeon.ink/emojis/ as well as https://github.com/chr-1x/dragn-emoji + CUSTOM_EMOJIS = builtins.readFile depot.third_party.lix_forgejo.custom_emojis; + # Normal reaction emoji people always need. + REACTIONS = "+1, -1, laugh, confused, heart, hooray, eyes, melting_face, neocat_scream_scared, neofox_scream_scared, drgn_scream, neocat_heart, neofox_heart, drgn_heart, neocat_floof_reach, neocat_pleading, neofox_floof_reach, neofox_pleading, drgn_pleading"; + + # To protect privacy of users. + SHOW_USER_EMAIL = false; + }; + + # No runners are configured. + actions.ENABLED = false; + }; + + # Use a MySQL database, which we enable below. + database = { + type = "mysql"; + user = config.services.forgejo.user; + }; + }; + + # Inspired from Gerrit's way of doing things (from Lix). + # Before starting Forgejo, we will re-converge any required information. + # TODO: learn how to use update-oauth as well? + systemd.services.forgejo-keys = { + enable = true; + + before = [ "forgejo.service" ]; + wantedBy = [ "forgejo.service" ]; + after = [ "network.target" ]; + + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = "true"; + WorkingDirectory = "/var/lib/forgejo"; + User = "git"; + Group = "git"; + Environment = [ + "FORGEJO_WORK_DIR=/var/lib/forgejo" + ]; + }; + + path = [ config.services.forgejo.package ]; + + script = '' + NAME="Snix project" + PROVIDER="openidConnect" + CLIENT_ID="forgejo" + CLIENT_SECRET=$(cat ${config.age.secrets.forgejo-oauth-secret.path}) + DISCOVERY_URL="https://auth.snix.dev/realms/snix-project/.well-known/openid-configuration" + SCOPES=("openid" "profile" "email") + + # Check if the OAuth2 source already exists + if gitea admin auth list | grep -q "$NAME"; then + echo "OAuth2 source '$NAME' already exists. Skipping creation." + exit 0 + fi + + # Add the OAuth2 source + gitea admin auth add-oauth \ + --name "$NAME" \ + --provider "$PROVIDER" \ + --key "$CLIENT_ID" \ + --secret "$CLIENT_SECRET" \ + --auto-discover-url "$DISCOVERY_URL" \ + $(printf -- '--scopes "%s" ' "''${SCOPES[@]}") \ + --icon-url "$ICON_URL" + + echo "OAuth2 source '$NAME' added successfully." + ''; + }; + + # Create our user an group. This is necessary for any name that's + # not "forgejo", due to the nix module config. + users.users."${config.services.forgejo.group}" = { + description = "Gitea Service"; + useDefaultShell = true; + + home = config.services.forgejo.stateDir; + group = config.services.forgejo.group; + + # redis instance runs as redis-forgejo, so we need to be in that group to be able to connect + extraGroups = [ "redis-forgejo" ]; + + isSystemUser = true; + }; + users.groups."${config.services.forgejo.group}" = { }; + + # Enable the mysql server, which will provide the forgejo backing store. + services.mysql.enable = lib.mkForce true; + services.mysql.package = lib.mkForce pkgs.mariadb; + + systemd.tmpfiles.rules = let cfg = config.services.forgejo; in [ + "d '${cfg.customDir}/public/assets' 0750 ${cfg.user} ${cfg.group} - -" + "d '${cfg.customDir}/public/assets/img' 0750 ${cfg.user} ${cfg.group} - -" + "L+ '${cfg.customDir}/public/assets/img/emoji' - - - - ${emojo}" + ]; + }; +} diff --git a/ops/modules/gerrit-autosubmit.nix b/ops/modules/gerrit-autosubmit.nix index 34342c8d5..33d23ef26 100644 --- a/ops/modules/gerrit-autosubmit.nix +++ b/ops/modules/gerrit-autosubmit.nix @@ -12,7 +12,7 @@ in { options.services.depot.gerrit-autosubmit = { enable = lib.mkEnableOption description; - gerritUrl = mkStringOption "https://cl.tvl.fyi"; + gerritUrl = mkStringOption "https://cl.snix.dev"; secretsFile = with lib; mkOption { description = "Path to a systemd EnvironmentFile containing secrets"; @@ -37,6 +37,7 @@ in environment = { GERRIT_URL = cfg.gerritUrl; + GERRIT_USERNAME = "clbot"; }; }; }; diff --git a/ops/modules/hetzner-cloud.nix b/ops/modules/hetzner-cloud.nix new file mode 100644 index 000000000..266db4df2 --- /dev/null +++ b/ops/modules/hetzner-cloud.nix @@ -0,0 +1,76 @@ +{ config, lib, pkgs, modulesPath, ... }: +let + cfg = config.infra.hardware.hetzner-cloud; + inherit (lib) types mkOption mkEnableOption mkIf; +in +{ + imports = + [ (modulesPath + "/profiles/qemu-guest.nix") ]; + + options.infra.hardware.hetzner-cloud = { + enable = mkEnableOption "the Hetzner Cloud hardware profile"; + + ipv6 = mkOption { + type = types.str; + }; + + floatingIPs = mkOption { + type = types.listOf types.str; + default = [ ]; + }; + }; + + config = mkIf cfg.enable { + services.qemuGuest.enable = true; + systemd.network.enable = true; + networking.useDHCP = lib.mkDefault false; + + systemd.network.networks."10-wan" = { + matchConfig.Name = "enp1s0"; + linkConfig.RequiredForOnline = true; + networkConfig = { + # DHCPv4 for the IPv4 only. + DHCP = "ipv4"; + Address = [ cfg.ipv6 ] ++ cfg.floatingIPs; + }; + + routes = [ + { + Gateway = "fe80::1"; + } + ]; + + dns = [ "2a01:4ff:ff00::add:1" "2a01:4ff:ff00::add:2" ]; + }; + + boot.loader.systemd-boot.enable = true; + + boot.initrd.kernelModules = [ + "virtio_balloon" + "virtio_console" + "virtio_rng" + ]; + + boot.initrd.availableKernelModules = [ + "9p" + "9pnet_virtio" + "ata_piix" + "nvme" + "sd_mod" + "sr_mod" + "uhci_hcd" + "virtio_blk" + "virtio_mmio" + "virtio_net" + "virtio_pci" + "virtio_scsi" + "xhci_pci" + "ahci" + ]; + + boot.kernelModules = [ ]; + boot.extraModulePackages = [ ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + }; +} diff --git a/ops/modules/known-hosts.nix b/ops/modules/known-hosts.nix index 7943d7399..5ebceb9f2 100644 --- a/ops/modules/known-hosts.nix +++ b/ops/modules/known-hosts.nix @@ -1,8 +1,23 @@ -# Configure public keys for SSH hosts known to TVL. +# Configure public keys for SSH hosts known to the snix project. { ... }: { programs.ssh.knownHosts = { + public01 = { + hostNames = [ "public01.infra.snix.dev" "git.snix.dev" ]; + publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICzB7bqXWcv+sVokySvj1d74zRlVLSNqBw7/OY3c7QYd"; + }; + + gerrit01 = { + hostNames = [ "gerrit01.infra.snix.dev" "cl.snix.dev" ]; + publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN+RCLAExaM5EC70UsCPMtDT1Cfa80Ux/vex95fLk9S4"; + }; + + build01 = { + hostNames = [ "build01.infra.snix.dev" ]; + publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEteVaeN/FEAY8yyGWdAbv6+X6yv2m8+4F5qZEAhxW9f"; + }; + github = { hostNames = [ "github.com" ]; publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl"; diff --git a/ops/modules/monorepo-gerrit.nix b/ops/modules/monorepo-gerrit.nix index 5c8c8e841..e4ace557c 100644 --- a/ops/modules/monorepo-gerrit.nix +++ b/ops/modules/monorepo-gerrit.nix @@ -1,10 +1,13 @@ -# Gerrit configuration for the TVL monorepo +# Gerrit configuration for the snix monorepo { depot, pkgs, config, lib, ... }: let cfg = config.services.gerrit; - besadiiWithConfig = name: pkgs.writeShellScript "besadii-hook" '' + gerritPackage = depot.third_party.nix-gerrit.gerrit_3_11; + gerritPlugins = depot.third_party.nix-gerrit.plugins_3_11; + + besadiiWithConfig = name: pkgs.writeShellScript "besadii-gerrit01" '' export BESADII_CONFIG=/run/agenix/gerrit-besadii-config exec -a ${name} ${depot.ops.besadii}/bin/besadii "$@" ''; @@ -16,10 +19,11 @@ let ''; in { + networking.firewall.allowedTCPPorts = [ 29418 ]; services.gerrit = { enable = true; listenAddress = "[::]:4778"; # 4778 - grrt - serverId = "4fdfa107-4df9-4596-8e0a-1d2bbdd96e36"; + serverId = "b4813230-0b9b-46cb-b400-dcbed70f87e6"; builtinPlugins = [ "download-commands" @@ -27,28 +31,32 @@ in "replication" ]; - plugins = with depot.third_party.gerrit_plugins; [ - code-owners + plugins = with gerritPlugins; [ + # TODO: re-enable once we have figured out all the email situation. + # code-owners oauth - depot.ops.gerrit-tvl + (depot.ops.gerrit-tvl { + gerrit = gerritPackage; + }) ]; - package = depot.third_party.gerrit; + package = gerritPackage; jvmHeapLimit = "4g"; - # In some NixOS channel bump, the default version of OpenJDK has - # changed to one that is incompatible with our current version of - # Gerrit. - # - # TODO(tazjin): Update Gerrit and remove this when possible. - jvmPackage = pkgs.openjdk17_headless; + # WARN(raito): keep this synchronized with the Gerrit version! + jvmPackage = pkgs.openjdk21_headless; + + jvmOpts = [ + # https://bugs.openjdk.org/browse/JDK-8170568 someday… ! + "-Djava.net.preferIPv6Addresses=system" + ]; settings = { core.packedGitLimit = "100m"; log.jsonLogging = true; log.textLogging = false; - sshd.advertisedAddress = "code.tvl.fyi:29418"; + sshd.advertisedAddress = "cl.snix.dev:29418"; hooks.path = "${gerritHooks}"; cache.web_sessions.maxAge = "3 months"; plugins.allowRemoteAdmin = false; @@ -58,7 +66,7 @@ in # Configures gerrit for being reverse-proxied by nginx as per # https://gerrit-review.googlesource.com/Documentation/config-reverseproxy.html gerrit = { - canonicalWebUrl = "https://cl.tvl.fyi"; + canonicalWebUrl = "https://cl.snix.dev"; docUrl = "/Documentation"; }; @@ -72,43 +80,43 @@ in ]; # Configure for cgit. - gitweb = { - type = "custom"; - url = "https://code.tvl.fyi"; - project = "/"; - revision = "/commit/?id=\${commit}"; - branch = "/log/?h=\${branch}"; - tag = "/tag/?h=\${tag}"; - roottree = "/tree/?h=\${commit}"; - file = "/tree/\${file}?h=\${commit}"; - filehistory = "/log/\${file}?h=\${branch}"; - linkname = "cgit"; - }; + # gitweb = { + # type = "custom"; + # url = "https://code.snix.dev"; + # project = "/"; + # revision = "/commit/?id=\${commit}"; + # branch = "/log/?h=\${branch}"; + # tag = "/tag/?h=\${tag}"; + # roottree = "/tree/?h=\${commit}"; + # file = "/tree/\${file}?h=\${commit}"; + # filehistory = "/log/\${file}?h=\${branch}"; + # linkname = "cgit"; + # }; - # Auto-link panettone bug links - commentlink.panettone = { - match = "b/(\\d+)"; - link = "https://b.tvl.fyi/issues/$1"; - }; + # # Auto-link panettone bug links + # commentlink.panettone = { + # match = "b/(\\d+)"; + # link = "https://b.tvl.fyi/issues/$1"; + # }; # Auto-link other CLs commentlink.gerrit = { match = "cl/(\\d+)"; - link = "https://cl.tvl.fyi/$1"; + link = "https://cl.snix.dev/$1"; }; # Auto-link links to monotonically increasing revisions/commits - commentlink.revision = { - match = "r/(\\d+)"; - link = "https://code.tvl.fyi/commit/?h=refs/r/$1"; - }; + # commentlink.revision = { + # match = "r/(\\d+)"; + # link = "https://code.tvl.fyi/commit/?h=refs/r/$1"; + # }; # Configures integration with Keycloak, which then integrates with a # variety of backends. auth.type = "OAUTH"; plugin.gerrit-oauth-provider-keycloak-oauth = { - root-url = "https://auth.tvl.fyi/auth"; - realm = "TVL"; + root-url = "https://auth.snix.dev/"; + realm = "snix-project"; client-id = "gerrit"; # client-secret is set in /var/lib/gerrit/etc/secure.config. }; @@ -136,31 +144,34 @@ in # $site_path/etc/secure.config and is *not* controlled by Nix. # # Receiving email is not currently supported. - sendemail = { - enable = true; - html = false; - connectTimeout = "10sec"; - from = "TVL Code Review "; - includeDiff = true; - smtpEncryption = "none"; - smtpServer = "localhost"; - smtpServerPort = 2525; - }; + # sendemail = { + # enable = true; + # html = false; + # connectTimeout = "10sec"; + # from = "TVL Code Review "; + # includeDiff = true; + # smtpEncryption = "none"; + # smtpServer = "localhost"; + # smtpServerPort = 2525; + # }; }; - # Replication of the depot repository to secondary machines, for - # serving cgit/josh. + # Replication of the snix repository to secondary machines, for + # serving forgejo. replicationSettings = { gerrit.replicateOnStartup = true; - remote.sanduny = { - url = "depot@sanduny.tvl.su:/var/lib/depot"; - projects = "depot"; - }; - - remote.bugry = { - url = "depot@bugry.tvl.fyi:/var/lib/depot"; - projects = "depot"; + # Replicate to our forgejo instance. + remote.forgejo = { + url = "git@git.snix.dev:snix/snix.git"; + push = [ "+refs/heads/*:refs/heads/*" "+refs/tags/*:refs/tags/*" ]; + timeout = 30; + threads = 3; + remoteNameStyle = "dash"; + mirror = true; + # we are unsure if this should be private info + replicatePermissions = false; + projects = [ "snix" ]; }; }; }; @@ -178,6 +189,52 @@ in }; }; + # Taken from Lix. + # Before starting gerrit, we'll want to create a "secure auth" file that contains our secrets. + systemd.services.gerrit-keys = { + enable = true; + + before = [ "gerrit.service" ]; + wantedBy = [ "gerrit.service" ]; + after = [ "network.target" ]; + + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = "true"; + WorkingDirectory = "/var/lib/gerrit"; + }; + + path = [ pkgs.git ]; + + script = '' + CONF=etc/secure.config + + # Ensure our config file is accessible to gerrit. + touch $CONF + chmod 600 $CONF + + # Configure the SSH replication material + mkdir -p /var/lib/git/.ssh + cp ${config.age.secrets.gerrit-replication-key.path} /var/lib/git/.ssh/id_replication + cat > /var/lib/git/.ssh/config <''}; - } - - location = /go-get/tvix/castore-go { - alias ${pkgs.writeText "go-import-metadata.html" ''''}; - } - - location = /go-get/tvix/store-go { - alias ${pkgs.writeText "go-import-metadata.html" ''''}; - } - - location = /go-get/tvix/nar-bridge { - alias ${pkgs.writeText "go-import-metadata.html" ''''}; - } - - location = /tvix/build-go { - if ($args ~* "/?go-get=1") { - return 302 /go-get/tvix/build-go; - } - } - - location = /tvix/castore-go { - if ($args ~* "/?go-get=1") { - return 302 /go-get/tvix/castore-go; - } - } - - location = /tvix/store-go { - if ($args ~* "/?go-get=1") { - return 302 /go-get/tvix/store-go; - } - } - - location = /tvix/nar-bridge { - if ($args ~* "/?go-get=1") { - return 302 /go-get/tvix/nar-bridge; - } - } - - # Git operations on depot.git hit josh - location /depot.git { - proxy_pass http://127.0.0.1:${toString config.services.depot.josh.port}; - } - - # Git clone operations on '/' should be redirected to josh now. - location = /info/refs { - return 302 https://code.tvl.fyi/depot.git/info/refs$is_args$args; - } - - # Static assets must always hit the root. - location ~ ^/(favicon\.ico|cgit\.(css|png))$ { - proxy_pass http://localhost:2448; - } - - # Everything else is forwarded to cgit for the web view - location / { - proxy_pass http://localhost:2448/cgit.cgi/depot/; - } - ''; - }; - }; -} diff --git a/ops/modules/www/git.snix.dev.nix b/ops/modules/www/git.snix.dev.nix new file mode 100644 index 000000000..014c1137b --- /dev/null +++ b/ops/modules/www/git.snix.dev.nix @@ -0,0 +1,26 @@ +{ ... }: + +{ + imports = [ + ./base.nix + ]; + + config = { + services.nginx.virtualHosts.forgejo = { + serverName = "git.snix.dev"; + enableACME = true; + forceSSL = true; + locations."/" = { + proxyPass = "http://127.0.0.1:3000"; + extraConfig = '' + proxy_ssl_server_name on; + proxy_pass_header Authorization; + + # This has to be sufficiently large for uploading layers of + # non-broken docker images. + client_max_body_size 1G; + ''; + }; + }; + }; +} diff --git a/ops/modules/www/loki.snix.dev.nix b/ops/modules/www/loki.snix.dev.nix new file mode 100644 index 000000000..8d2ffe64a --- /dev/null +++ b/ops/modules/www/loki.snix.dev.nix @@ -0,0 +1,22 @@ +{ config, ... }: +{ + imports = [ + ./base.nix + ]; + + services.nginx = { + upstreams.loki = { + servers."127.0.0.1:${toString config.services.loki.configuration.server.http_listen_port}" = { }; + extraConfig = "keepalive 16;"; + }; + + virtualHosts."loki.snix.dev" = { + enableACME = true; + forceSSL = true; + locations."/loki/api/v1/push" = { + proxyPass = "http://loki"; + basicAuthFile = config.age.secrets.metrics-push-htpasswd.path; + }; + }; + }; +} diff --git a/ops/modules/www/mail.snix.dev.nix b/ops/modules/www/mail.snix.dev.nix new file mode 100644 index 000000000..3aceaaec4 --- /dev/null +++ b/ops/modules/www/mail.snix.dev.nix @@ -0,0 +1,25 @@ +{ config, ... }: + +{ + imports = [ + ./base.nix + ]; + + config = { + # Listen on a special IPv4 & IPv6 specialized for mail. + # This NGINX has only one role: obtain TLS/SSL certificates for the mailserver. + # All the TLS, IMAP, SMTP stuff is handled directly by the mailserver runtime. + # This is why you will not see any `stream { }` block here. + services.nginx.virtualHosts.stalwart = { + serverName = "mail.snix.dev"; + enableACME = true; + forceSSL = true; + + listenAddresses = [ + "127.0.0.2" + "49.12.112.149" + "[2a01:4f8:c013:3e62::2]" + ]; + }; + }; +} diff --git a/ops/modules/www/mimir.snix.dev.nix b/ops/modules/www/mimir.snix.dev.nix new file mode 100644 index 000000000..7a8f9e850 --- /dev/null +++ b/ops/modules/www/mimir.snix.dev.nix @@ -0,0 +1,24 @@ +{ config, ... }: +let + mimirPort = config.services.mimir.configuration.server.http_listen_port; +in +{ + imports = [ + ./base.nix + ]; + services.nginx = { + upstreams.mimir = { + servers."127.0.0.1:${toString mimirPort}" = { }; + extraConfig = "keepalive 16;"; + }; + + virtualHosts."mimir.snix.dev" = { + enableACME = true; + forceSSL = true; + locations."/api/v1/push" = { + proxyPass = "http://mimir"; + basicAuthFile = config.age.secrets.metrics-push-htpasswd.path; + }; + }; + }; +} diff --git a/ops/modules/www/status.snix.dev.nix b/ops/modules/www/status.snix.dev.nix new file mode 100644 index 000000000..0a3caceea --- /dev/null +++ b/ops/modules/www/status.snix.dev.nix @@ -0,0 +1,25 @@ +{ config, ... }: + +{ + imports = [ + ./base.nix + ]; + + config = { + services.nginx = + let + scfg = config.services.grafana.settings.server; + in + { + enable = true; + virtualHosts."${scfg.domain}" = { + enableACME = true; + forceSSL = true; + locations."/" = { + proxyPass = "http://${scfg.http_addr}:${toString scfg.http_port}"; + proxyWebsockets = true; + }; + }; + }; + }; +} diff --git a/ops/modules/www/status.tvl.su.nix b/ops/modules/www/status.tvl.su.nix deleted file mode 100644 index 7079c6026..000000000 --- a/ops/modules/www/status.tvl.su.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ config, ... }: - -{ - imports = [ - ./base.nix - ]; - - config = { - services.nginx.virtualHosts."status-fyi" = { - serverName = "status.tvl.fyi"; - enableACME = true; - extraConfig = "return 302 https://status.tvl.su$request_uri;"; - }; - - services.nginx.virtualHosts.grafana = { - serverName = "status.tvl.su"; - enableACME = true; - forceSSL = true; - - locations."/" = { - proxyPass = "http://localhost:${toString config.services.grafana.settings.server.http_port}"; - }; - }; - }; -} diff --git a/ops/modules/www/tempo.snix.dev.nix b/ops/modules/www/tempo.snix.dev.nix new file mode 100644 index 000000000..e8b5d640e --- /dev/null +++ b/ops/modules/www/tempo.snix.dev.nix @@ -0,0 +1,22 @@ +{ config, ... }: +{ + imports = [ + ./base.nix + ]; + + services.nginx = { + upstreams.tempo = { + servers."${config.services.tempo.settings.distributor.receivers.otlp.protocols.http.endpoint}" = { }; + extraConfig = "keepalive 16;"; + }; + + virtualHosts."tempo.snix.dev" = { + enableACME = true; + forceSSL = true; + locations."/" = { + proxyPass = "http://tempo"; + basicAuthFile = config.age.secrets.metrics-push-htpasswd.path; + }; + }; + }; +} diff --git a/ops/nixos.nix b/ops/nixos.nix index ad37496ca..b98c32dd8 100644 --- a/ops/nixos.nix +++ b/ops/nixos.nix @@ -60,5 +60,9 @@ in rec { ''; # Systems that should be built in CI - meta.ci.targets = [ ]; + gerrit01System = nixosFor depot.ops.machines.gerrit01; + public01System = nixosFor depot.ops.machines.public01; + build01System = nixosFor depot.ops.machines.build01; + meta01System = nixosFor depot.ops.machines.meta01; + meta.ci.targets = [ "gerrit01System" "public01System" "build01System" "meta01System" ]; } diff --git a/ops/secrets/alertmanager-irc-relay-environment.age b/ops/secrets/alertmanager-irc-relay-environment.age new file mode 100644 index 000000000..4a038443f --- /dev/null +++ b/ops/secrets/alertmanager-irc-relay-environment.age @@ -0,0 +1,12 @@ +age-encryption.org/v1 +-> ssh-ed25519 +qVung MFR57YIw4IZk4ZGFyCDV/gr+iso4XLL40MmESBr8NQI +6iyYl9pMtA309N3wQ5N7jA+rUN3DAcXq++dS5RFfaZc +-> X25519 q2U7kDMrPfI1a4XyJV2IJ+gxIiRX/xNIs9cgKNs2Ym4 +2E6TQubnQ4QmJt5t8PNiN3bQHtM9WR+QapVljYnOkEw +-> ssh-ed25519 C2zWnA ppTx3QL3a1xHqcYnfJkW5u0NtpCMPwL52lkLXYRB6is +8Vyz/NgMYICueDaGDVQ962atmeI7JvTweMXjQoQLm8s +-> ssh-ed25519 LzO4tw 2Z3IkWkmDSuGWtcuYEEiGVBB8olZMI6f5Ut14bZqgW8 +lRZExatm6jOLprlpSioWALwMHRurll48QNIXn7GwN7o +--- oXp6GuozUs9gwzmGng/e0rDlerNKZJIi49ss+ZMAXRE +,MÝ +‰ï¤¾Ê†Ê5¸ì‹ëÔ[ëÉ3kËŸ€HÏþ-æ—ãßûfå.vów€0†€R_e„Dk±- \ No newline at end of file diff --git a/ops/secrets/buildkite-agent-token.age b/ops/secrets/buildkite-agent-token.age index d6b864066..43426f830 100644 --- a/ops/secrets/buildkite-agent-token.age +++ b/ops/secrets/buildkite-agent-token.age @@ -1,20 +1,11 @@ age-encryption.org/v1 --> ssh-ed25519 OkGqLg WT+iZEFDR8xC1ypj5lLjCc8Q8a3E/LSE29a8SyGpGwg -1bwMz/pZPhrIpSXoWTda0ehVg9uHUA5LXu9ZOAp+jmE --> ssh-ed25519 xR+E/Q 4LfYYJalhmJVWa3Edzy57LOeJAEKWazCNkhTlJisEVc -Ab4PDdOHafkTcjRIzTs/hG92ueSF762TSIqsLTfM0oA --> ssh-ed25519 dcsaLw RZyn6l7iV4BWo5SX/8qf54un21EMAfypdLUAfPpmdnE -f15CElv+PEWR6C3O8V2qbBe+RFgm/sfhwwSWgbYK14Q --> ssh-ed25519 zcCuhA 6eKqLkucV2KO9SEAFa4Lprq/+Hawi4EDkcZ83ktIbB8 -cJUyoe+e528ycKpmZbXb43QCixWudUCoVQYIFcy7UvM --> ssh-ed25519 1SxhRA XSaYWJCKyuT0G8DOTEVBfRUp8SGJuMfCkwZcwG2BC3U -x95KAtE1txHaE/DiAL1SRGKt/aoaGpCyyCdqDF1v3vY --> ssh-ed25519 ch/9tw csU+Xmy01gzEtIeF8YubJWpdCLPUefnS25TqnAO3+C4 -tuDdDnwq35mdYFnZ0PTeGf/+wAbfrJKOpdtZvO2QX+c --> ssh-ed25519 CpJBgQ hQzuceRkrMcq8anAXFDfEzpx50K+eP5vSy4bgmGMC28 -AfQORHySKKic2mkNTx8n/prxR8lbv6md28VV+Yjl0do --> ssh-ed25519 aXKGcg kTkolPXSztb9g9xhpC/hDMwvbnsdkU36Mp/Zxk55QXc -7LeNOwPwyCgHGV6pedl6XqXiKwsAVCjvfEMuChnwUN4 ---- zbFSUb7Js+C+da2a14MNu/TZhpw7psLfD9EfK+awlEQ -¦åDËÿ˜Rœ—@ˆDñƒOx凿™[Vxß -$²‹lC°Ù.°ŒWìœ] ssh-ed25519 +qVung ZFmXZSq+DvoNCgZHoqGmc0oVoxotWOnSNgIWrv5GLVw +x2lbZWRxOorYSlThNalW8F06vixFjB4cxvRoHbIMENU +-> X25519 80hLko4Ont8T66KbHpegXfIcnbp8yNjS1cojiG7mvDY +IbJYd0v8HdLhW+BziRD01Fmo94cDGR+0icvroonLlmo +-> ssh-ed25519 C2zWnA XWgQLVQhfXI0H85TDhWur6AMeN5n60rHIbjF2T4N0Eo +kzyRRjCPW9cLi37l+2E1kNbr5dzTUHgMH5oaFwoNqS0 +-> ssh-ed25519 3T2Xig O5spWbLSVZyYNhd45L+voflabSnO4mq/8pWjpvO9kng +92q0DaERvVViCfEN3nW1lcXdQ1vbWndLfX6CW1ysoVs +--- LiNoXoSE5LMHeQAXBWkn6hSEdEI94id7pm8UzLDN6Lo +ŒÇê2dÄ=pÀ•£ÞOSâæ¥E8¡¬!§ëñsrZ £:àOÄÖ•ŸcCs'Yˆ¦•ð \ No newline at end of file diff --git a/ops/secrets/buildkite-besadii-config.age b/ops/secrets/buildkite-besadii-config.age new file mode 100644 index 000000000..5f910a0d9 --- /dev/null +++ b/ops/secrets/buildkite-besadii-config.age @@ -0,0 +1,13 @@ +age-encryption.org/v1 +-> ssh-ed25519 +qVung 3fkpILP2v3cya4RR/kfpBWEDZtmo1jn5d6L3EgvVVFk +6MsF0wGt/wfJTIgI0ahothPc2br3CplwRcoaDwLIkCQ +-> X25519 n21xXX/pcmB/+3PG+wlMuq6gaNwuERCvQqxDMxhepGk +VnbRBpA2zlIsrldqrJDYoSqivP69D5AVZ0xvo2w7dHQ +-> ssh-ed25519 C2zWnA ixzmDD0Ilj76ukzutqTLDeTBIIvvPIFW89UUJEE4slU +0IicUwhBo+9c+OxFge/UOYxRNfhzDt+Q2h+RagQnXfo +-> ssh-ed25519 x3gRmg ni3Jasf1IV71UVgcTFbf/atIOddr2lolLjurLpiNG0s +DA8WzuqXRMyY7gY62a7KNx04B54rV3g2tcNi2MiYmbA +-> ssh-ed25519 3T2Xig cg5Ki93tWlaURC/KRqE32oExDnvfcvEIfKNIJC3dKyg +ZfzJVZ2Bm6VVZUd6xOq77xbp5BWMcHdtAEB4LgdYIOg +--- TjhYtdAV2Qit8SgQ1ktCQxN7nbq96EcEdjAdQ8nKcu4 +‡¾ïâáOÄï7_8ûj嬂ÅLëõ‰8Êœöçû§vÙõåÙ0Êd <&=âÍ-™Ä”J^;”\h–lmÈåׄ»lÌøùìDú«aQ¯(5§¸Ç2Ã~Xã@qØs7ÇÊ ä-yU‚«vkðÛqÕ‡¦Íÿ÷'EqcR`GÍUÂZ Ð&mb'ˆ# Ò´ÄÑ’¶ü¼²Òƒ$7kæŸ ŧ¸£Ø®æÅy뛺¡Èy/"÷·  ,Ýö{‡c°Ö9çó\4ÜD[së¾å£êÍ0áù^bîTÔ‡ô a;©õgž4¯Pýå:‡ZÁ?úÆ2'6jœ[£ àG›klMƒØ&Rµ¨KLÉŽo¼/Ž087ôP-«yŸþžðHí¼(ò”šFjÈÆ¶jµŸ \ No newline at end of file diff --git a/ops/secrets/buildkite-graphql-token.age b/ops/secrets/buildkite-graphql-token.age index dc2a9b7de..cd758f79e 100644 --- a/ops/secrets/buildkite-graphql-token.age +++ b/ops/secrets/buildkite-graphql-token.age @@ -1,19 +1,11 @@ age-encryption.org/v1 --> ssh-ed25519 OkGqLg p2b6PpJcKcBQS6nUBtN33TTY/WhSkZyX11Qfr0uyji0 -YxLBGMuR4TYQkpyTZt/rjfNglqGCAPW6VqcSGDwUZJ4 --> ssh-ed25519 xR+E/Q 0rbUBI7F1Me6kkeeB5v7JLLXTvg4PlUiuVbo0LOlSg8 -9Np5qNztl7mQvM4r22icdmJsHisF2pnjmrefJ1FBKyc --> ssh-ed25519 dcsaLw 3rf1PBUTKxMNdAwq5nfknBH5gtA/s1iOOc6p+U/0x0A -tO4pzdD+z+6Npm9l3gVgLO71VJmiVSGq3FGaaWfSNzk --> ssh-ed25519 zcCuhA Ad5xMaTCB8pcxy/X31vKsNhC3uCex/2+ykQ/1BdPMRE -ENXTFjlPqNRARONR6lfRdpQdYxH7Pnu28JOBNN3eM2Q --> ssh-ed25519 1SxhRA UCsz/7KohWfkOBK66YafcU93GLCrihY29Pnzdy4TID8 -RUvL9DqAc8a9okBKlnADYyNpyABbuHXinn+Uit2OKy4 --> ssh-ed25519 ch/9tw 6y9zzfdWun5WV5IQsWHSnEI6VhWvwWMuBfQRHvnnxg0 -FPIxsRo6cUYZ4jK03Lbj1kLkrEZsIa32p2IczSZTQvI --> ssh-ed25519 CpJBgQ zEsWfAt2HUk3wHtnFzF0D4aKy4isM4AQLEdbkWh++j4 -3m50cqrB2FlkZy3dKT9UcCaeOlXsOyz+v2p0PD8n9hw --> ssh-ed25519 aXKGcg +KQkCsVWzXl6Ed6KIv3jGU4UlQnKmgS2A47esh245ms -fmrn4wUggVtnU0xLyVYqNcnScd/ZdECYVylrRID399s ---- S0uHuiqWz9M3xubQTE4OU39h74ENmRBD4p896amTuFU -•­³ë½L È   bd&Ôú½êãK‡Þ+0¶7ô»"õ“\z‚ è. ôöY¥llŒ  p~ἫpLCEg÷²ÕI \ No newline at end of file +-> ssh-ed25519 +qVung MkmafLpQl6prK08B32McpcLtwx72k0bQ01oVtATnFgQ +7E8fi0BHzulXux6xPLP+hw6ugSOuZXPrWHGNxpf4IcM +-> X25519 q7N6ltSbhrdmFFOttgg2KB5AQ7fsrXlogMNM+eYf/ng +KNiuCAjTK6/c8f2EIXolNC6nx8UycYTy4/L2ovnEi9E +-> ssh-ed25519 C2zWnA U7793cywgqfxK+oeBawtbLazIjap/5v9MKfIDHzAsQ4 +1kQphItEbxQbIN9kbvcypgDh6Glzbvaz9CSSv3Flhq0 +-> ssh-ed25519 3T2Xig HEo6B3qYzxQlKosmFaIpjV917tNaoZaphDDH4e9enD4 +7FD4U32n7mUzBGNvx/kjeFbzxR4ntixqiQoethtQPm8 +--- Jae1QioQwGwCJzOvRdlvMUVRCj9g4lt7YiR0AZxkAU4 +þþ[½w?ò §g ©_,áÚU?V‹.€†º-I<ô!ÀEÉâŒù?™uÄë­¡(+¬ f»Àc!°U»Ç ßÿ2ãÀµœQr \ No newline at end of file diff --git a/ops/secrets/buildkite-ssh-private-key.age b/ops/secrets/buildkite-ssh-private-key.age index 2ebb315ffba5bfb0dd4393b5bb6c027a56c2d31c..e36fe5ec827ae8a834ff88108c223763d8df369f 100644 GIT binary patch delta 906 zcmey!wUB*+YQ1)0SZQ9mLS>0ZYE-g|MV`B%M~G2mzKN5QS&CCwSZ=z%bCkDfPPlV{ zp|59|iBp9uSGHw(j&ZhMX?|u{siSL=qmhf7Uvju#ig!q^Q-yCvnX|KLnZL7BfOlRo zm#&>cgpsMKp`}8JX`zWmfX}ybwYeZUddZv+UiBmvurCFYn ziIV}BUq-2Rn5S=Pxk+lJfwpsii9u1gX|Y#IQC4Vict~<(agcMNcc4*uY9-i;;^GY5 z)D(z4&PG+?d5#LMQRY6C25$bAq2?h)g&r<>=}F-gDP^86&hCDuK5iMs+NEwqS%vl5 z0TGd02FaDa-nsrB5iah@j?N)I-uYD?7P)1Ssm}SSQ5JrMMwyWj*%hVwQSQkgA0b<3 z9AXranXX{uUKt*dW?W)oR$>|8<{VzEpO|7;R2Etunwsh#VQy6DY3`WinW>*?oXnLN z5oA#rR6%Y+>l;RApA+>t|$?T@~qJ<{X@2;S=WX8I@d+T$s+KtE;P!o0nrz zQS9yFTUJz=8x5MoMc#j)%wt1W(TEOjym2qC+mOKin%doX?L8T)^_wD zTkevS6JLY3x9ROMKlAXo)ZVAswdML+>(|}>5#k@R($gnoA$O8!^&{_$-$q>7RvQc& z$~KhiciMixH|1uHM0CUXT}Q3voL9cqe4|e0(up7jzM~6bBW|w9W3cL$%T8z(&MJHB z)R}SLq%vW9?Cs?mJ5%o0|DJO&jd|KWw|A?{rkZ(7D0&clIONgZ#@EXmMY>jfaOKy$ zaOmqj<^5cCTKRdqb)p^}-*Mk^wRY#qg4Zro-&7}4z-;Qx!HVhy=6%~SAO*F zF5b182FE96oVqPh71+b)qVSO|)+PSbdDmZW`#$^*)Md(l5Ptf(S6cG()60#kOP8JF z@`zBs?;_B=+Oyd5*XD?|J`9cATwZ_sPbT%R$ZQT-aaKzF=#xxuM(v6YHlJs;U!)B# hJtI#wOvGOA+t{E%NX`uQFLN@EN;FJQw+IU|aMU)<^7HWY@b@;#i{#2kER1xts50@$tE@=N zD0kEkC=1Op&nbuq)K4k(H}%iSH;M2nw}>b(Pe!+`B1qd+KTyH3(78C-ywEJsuh=-< zwZtsD%F#0-RXf?&(>LGMry!#wx7@9)JisC^C!Z_OEHlhEtEkYjAjQbAA}=J;qr}lY zCoIV_qbN9|AhM*;$k)s~t;(+?I27Hsl;q+>pK^ti^6a8yx6(?JY}YjXVwXHi|3c@Y zV2d=r)KG(b!-A^RJg2NOr^3?AAV;ncH&3%v{c@KmuRLEv_Z)4rkl?_|@JNG1Q%fI% z0^>r@ilWqtit@tZ0uyxGs*;^cGaMC?LNhZ8N{b6hOgtjO{k%NNBQg_>9Gx7qOv@b| zO)CstU6V}>igNTTT_d@QO`Uy~&M_{@G%Ip1C^0OL^ezmKO!N$KtSTx^4fihd@kn#?EH$sR z@Xzw`$#ms%w@CN(Ezx!lG)XT?G*9vM3U)8Fh^+83j4+H0jLOc>O>vB>bT8D_PsQ+C za)!QTNx6bYRz+%|SAJwgc}a41a;i&3R(MI3OIAjrcc`UbRGNuff^t(TOO2ANd`hzo%!&eiyh96%%v>xya>LD&gE0J-7~$=noUTw|>RMc7kYkbM zlM`g*V&qlq5tw9|V`N@X9`2Iom7Z;uA66M;l$q(3<;Yb~R*{?LSCwv1QC1#O8t7K+ zR~TUFoZ;h>q3u+XlbYh0U+I6slG7GUY(RlR{=*qQEu;q->A zmfCF*^?p_OCwzwCotHcI?3nrZrzhh>!BqvbE@tp*T%D3?tGlE8y!V2aN9VAg-KxM7 zENhR1^VjX(Hny6!M%oh+!eVpd#z(7by_<(=ZD#a{v{y~A&<&*NEgxV!si zdnuFAo%#}wugdbWXLf#{azJZNQ@r);n|rr!;nUx<`lg4O>DIgkXNCRTUQJnnhRv(5 zzcNsKu_;dP{q1Bmi<~3Wxvz diff --git a/ops/secrets/forgejo-oauth-secret.age b/ops/secrets/forgejo-oauth-secret.age new file mode 100644 index 000000000..09195b940 --- /dev/null +++ b/ops/secrets/forgejo-oauth-secret.age @@ -0,0 +1,11 @@ +age-encryption.org/v1 +-> ssh-ed25519 +qVung 8iqOuW6HDFzo0OdoyM0E0hSIl/Ow0e5/PV7z0hkzCgU +DYyC80e9XV/a91NBgkD+mOQfc4TCKJrMjL7z+/DAeWM +-> X25519 C6/8kewhvSzFZG7ElpgVz8Pji3sKIpnvjH9PJWXZ0mM +znSY1QbscbPqlEcATRyeJBUwwLyXWyT7i/CQu/XJg2s +-> ssh-ed25519 C2zWnA Z2/nUTlz/ryC2CHeVuhmry9eIV2Oe8lH0hTpeyJfD1c +GsE3eELzxivFKYfw2MXC/jJhdP6tooGVqUCfUjVSfzM +-> ssh-ed25519 uZGziw EwZG9bpYuh8610nNV/9iP7v3c9WE82sijCvNbtoNTRM +7yO2Bblf1fbGIuwfa3hF7T+xUmrEAtueDGTPtGkv1mE +--- aZjZHNae86WtaWj/KYnLH12DsryG8WPsxLEBULJj1+A +üÌuáõ †²Î#ýe–AÂÝÿ¥¾pé†^ñïfÌá««%líj-ráqö‹q¬ÞXÉ^Ì;&äÎh¨Ð+Pë7 \ No newline at end of file diff --git a/ops/secrets/gerrit-oauth-secret.age b/ops/secrets/gerrit-oauth-secret.age new file mode 100644 index 000000000..37a865789 --- /dev/null +++ b/ops/secrets/gerrit-oauth-secret.age @@ -0,0 +1,11 @@ +age-encryption.org/v1 +-> ssh-ed25519 +qVung CNWkmpktIsB/XR4m20Zhhqb54CkxizUW8EU/UdYZ9DI +Xt7Rjr9MzceUIvRqkszaBsrrYtgj9mVCYeKZmgw6Fm8 +-> X25519 UhegFmsgtO0412BIIyUhWKsokIuIVdzprxUzJQ4AWBA +mzaUhweKSBbtSNlsoLOOQPUiYg7lubiZAjBaPApyMtg +-> ssh-ed25519 C2zWnA qGtHvxEIG70n6DBaPIomDwZ61/UvUHk10SblLCaaL2A +xFkJfWcpCE9+YwpQR5HE8KA7kEZy6UL5X78hFWvC5mI +-> ssh-ed25519 x3gRmg 4BBGKNHHg7JBUeZ2bfeIQq5tSZBHP40ukJCX3yOLjgk +JPVfhyh2G9XC4vt66Sv9Mu1dtJjuxadnASLo2aaLf8k +--- Ttka8+om8tOvGOGDQu/xm0q1jLUdtmYLuKkDKB7u0ok +9øp …ÊŠÔÐàödŒú?Vº?eBÂ^%r3ñíWÔ|”Wf™àÀJäÐ’4ö»‡pœ¿¦ÿÖOb³n›·gÄdÊA \ No newline at end of file diff --git a/ops/secrets/gerrit-replication-key.age b/ops/secrets/gerrit-replication-key.age new file mode 100644 index 0000000000000000000000000000000000000000..9fa0857691c6a14f62e435119fc9a1b689fe78eb GIT binary patch literal 929 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCUFE(|NpOIHYX%ydrm zif}Y4^YHS>P7g6ibIf;iax!qvb}9}u)OYvvtqSvqh_uuW@#V5CiZqNUk216<_H{9H z^2toi^UQNk&Z#POuE;aU_fL(|E)I#PbPgyni3Hge0kNpe+`=&+&nvqiGA%jWC(_$P z+c!WzB&964IN!xRBRSN#IL+ChAlon}*Mci6!YLrfz(29v)Y~mUKgZLg$kDN^$T6?1 z+|nmc-znYQFw)#TRKGmY-4kR3vVWY7s>1Ue6|$0zgChKmD$B~uO1*=Fvm>&6oeYYi z{PW6-3)1|`(z8=Sf)f*qLk*1rx%9J5Q_`xUoU-&&%BsA)3yuAJ!dzTR6LU%m(jwfm z%Sw_mO}uh5eN0M=(QT_RP7lgWSFkY1Gt2aI3p4e1&2&mJ2=&d1^0#zJ%`ZyL_V)Hq z2`VuOP4h4DFx0LL*jZdO>>!2qwrZhj4R+ox`^q*+|#S(9J+CM;}V_4 z8w%e3zq&5nJmSTdeQmAPD_$;b4g2=5j!n3NN%_~&r+PcK*GO8NDE9Cb6*Ky~`Rdc! zC3)W>B|j|Hnfi8)YHjT*yE8i(%Vrz%71ll3dVhh`n{WQInIYl3x6Bt(Ht~|~I9OR{ zSz~o@^#bE7e^D8ig+&6i~@wDQS` zK7DR-ZpO7KC(Gp~_0OBo7{l??|JLzs*6qfP-l;oJ&y3q#HTlK1C40?Wr)8a3(7^D4 z*TMYx4p-~HS5GjQDMv;KFs(C)5enR!YpO7tS-V49=l&AToJrmKe6{iRoQ4@|tXGEa zo@(l;)BF0~{bjMnjtoDSb20iHSO5C>=0rI&0qEMU2 s*9D>L ssh-ed25519 +qVung M6L0Lr7nf8C2Bvq3yK9BpDkbFShdYa8xJJNJfw6fSEM +j/s8WqJlEySvUr52noQi8yclurRNWl8E/jKKpBiapyY +-> X25519 pbd5f6XiLXiFQ6uV4P071j2Q6qCQzrK3aF3ln3C532k +HvrV8RvjysTn8eSMqGVKwhCxjTEnvdm7hmde4hyCLRI +-> ssh-ed25519 C2zWnA myuJkAJcbRLYNZJJk6UCu+lp5DjmesusJdpE2FbjNA4 +6YgIR3q7+27SQxHlKDJLLcESge21IaZcXXw0pkz0hSg +-> ssh-ed25519 x3gRmg 2uQHWIxs9okVv+kSJaLXeTibUIsVzuFkLjluClzINQQ +q1tCF2imWqStdjDsiUkmbl2jPYza4Gtht1IUw75uzpg +-> ssh-ed25519 uZGziw Da2diR7zKn6aBbpJdqlTDow7wuICg0uS8hpvDr6bxSs +mX/4Z66pX+kpA1Uw9pGxzdlEOdRmFrzaMIdCQH04XMg +-> ssh-ed25519 3T2Xig yHEKJv/U07xcpAwCHlDTVKLcCIs8/eJ4fpm6ul9mb2M +aHVfdIQcBlAoWuGJGqTfZUB/tROk1ZHlle/1BqDySGA +-> ssh-ed25519 LzO4tw b46U8tzzshDbSAUlUVRoVMPd0mUHDgoEPhCH12Ew73Q +EnlrYB+Hf47svM4Ha3BQVRIYGI+XaWUKLzbRvAa3M2I +--- p5jfa1L6lRIgt/Twyi3EaFAWiUVrDLo051N2a61qkUw +Øz'Ùy–#ÛဠÞ^&¶+7:­®ÖÇgÀÑÂwtìyó4ŽjÆHZï]‘ÏÞGä|áÝFÞ2بÊJ \ No newline at end of file diff --git a/ops/secrets/grafana-oauth-secret.age b/ops/secrets/grafana-oauth-secret.age new file mode 100644 index 000000000..3480319e5 --- /dev/null +++ b/ops/secrets/grafana-oauth-secret.age @@ -0,0 +1,12 @@ +age-encryption.org/v1 +-> ssh-ed25519 +qVung Jv9hZHfNQeWjgop6+YbfmYHCgRByjfyXmTvxoA9vZ2U +lzwj3VNiFkjNgix5k7HLhqC9tt+poR+EilsEKBHQVaU +-> X25519 f0zBSraN1uTvZNfybRJpDhDiXnohF5XDBZe1GCnGmhc ++2kNv3oO5flAxp8ESSXYu968tTBLEzg2K1YJP3KJlL0 +-> ssh-ed25519 C2zWnA 8jygqU5lD8UrybSLuE1gw0VM8YMwT2nqFkcykelZFUo +7YJH6vUi1FSpIBZ9L5lchw0OPjokC8QTJZ+fRBNUQgE +-> ssh-ed25519 uZGziw LkSTjIdlHXZCeVwiBatnbKZgmgYIJ2kzpXd4Kq2lpCA +3GcixBxUmcwXGWhUB8lgGbrLtg+j3QTeCWtVL9i/t8w +--- F2fzakv5un2T3gOOGi8aDqaFW666P765JkeBNuxDRTI +Ϩcã•ñZV÷Г +÷Ú®`ñìúáÇú-'È¢€+DMß=s\KUÚóbªÕù~T°C)cµHàãZm \ No newline at end of file diff --git a/ops/secrets/keycloak-db-password.age b/ops/secrets/keycloak-db-password.age new file mode 100644 index 0000000000000000000000000000000000000000..a641a52c5d8697053b0874f57e37657fe019fc46 GIT binary patch literal 563 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCUFE(|NpOIN7Ot*i<$ zO$iDv%ni^l@G#5>_BP25PIn3m4bODXv9$2Z$nq}DFgGtq&*n-mFAhpBN!QO$k2KEF zP7gM%GOLP+3Mfkna1037&Z!Jb%dc{@NKHyFb_LlM0kJ4YJIN!XD#F*oQ9H%URo}Zx zKQK5iB``V5z}L;yBQMJ+)2yo4Gc4IB*n%sh$Tz2?s4UQ;INPYipg1_dILWEP$0wjH zDJ3l;AfqJ0-!aU)C^EIY(gI`yvVWY7s>1Ue719%f!m~Wh3`$FVJ`y-KnoqP&v~BfYDte8MdzN9U7@>Kc!MUxwh`iv)sgt>p&95Hpu+(7R}h28JPjx$);ec5#W XW80m)x{9y8?pw1Gq8?YXOv?cPz*oZL literal 0 HcmV?d00001 diff --git a/ops/secrets/keycloak-db.age b/ops/secrets/keycloak-db.age deleted file mode 100644 index a2fe65500..000000000 --- a/ops/secrets/keycloak-db.age +++ /dev/null @@ -1,19 +0,0 @@ -age-encryption.org/v1 --> ssh-ed25519 OkGqLg 85hbcQ9r29CC95B1CXO+uftm7ywhTeWCpklX4hOc2gU -7EO8O5/eg1noB8nbl9XL+m8WAvLp6QnA25CiTsp5jfY --> ssh-ed25519 xR+E/Q Hefp9fWCq9sWdgyKp3gNEO1p9yWFK4sYX8xMxkyy9G4 -JXofip2LGkJFDBb+6DegoFGDPjk8FGF+AqaAy5FPqwk --> ssh-ed25519 dcsaLw IUoPTD1SfnY/wXXFcIc6h47fea6ukWAurUmfqwTQOAs -G/YeKUk8IQXBQ1q8338HxUg2vXqmh8LOIHSX4Qn1CFo --> ssh-ed25519 zcCuhA 2LrAbe+Jpsg6gFzbnx3ppDesbQSWqzHs2uOv9szb80U -idJNMv6Lf0k2NsfOcm7it8LwPYxjdq7+LS7PUzQ89Qg --> ssh-ed25519 1SxhRA idcz/kk9WyIA4I2NwzzPiMX0AmXkV3FTHxoE12n2eWQ -e+4am77QT0fDv9Xgci4L+VsgFyKT4ZHjB0FWe76hV3g --> ssh-ed25519 ch/9tw RNZWeD7W18wpcpBksipmib6vhHmaCP5iQeK4uLHU604 -bH/PJprw6+jEktmPnS3OrGMtJ/XHYVZQoQRdReLkLYM --> ssh-ed25519 CpJBgQ w9gTapqMBoJl+C4sWIGIDCZpemRCEu1iDUUWFt2rW0A -1nYU4UiHYT9vPASYHwunK2Td+acAmjzRpFpLioNneJc --> ssh-ed25519 aXKGcg evsnA8cq5xz+0GdKT7cBZWckBpX+w05yLOOaOL4+0BM -LigkUyewAl+O0KBKuykbwKzFTCY5n6lnCcarl2Vu0NE ---- KhA9LmsAYYPMrJrsJYZyEq04LvrMZkJaCL5Bt5ruYD0 -VÚOÜ{$®ÞÁ[ônÔýG7 /ÀgÔ0¾“ÊqCnˆé9ÝíÙ(g¼ô¨®áb@¢ \ No newline at end of file diff --git a/ops/secrets/metrics-push-htpasswd.age b/ops/secrets/metrics-push-htpasswd.age new file mode 100644 index 000000000..53e3535f3 --- /dev/null +++ b/ops/secrets/metrics-push-htpasswd.age @@ -0,0 +1,11 @@ +age-encryption.org/v1 +-> ssh-ed25519 +qVung sFiPxBiVIYJPK2dYZmzCJ4Xv6x0qPmAjBmegh3EN2RE +oyQ7LKEKQK8R1fDFq5v9gLh4ZSYsRBKijz8jq638QKM +-> X25519 MAlDEEtm8yz+mtLnsWTSw/iDMn9SsY20inGM4gwKsWc +5l7cw0zHMOKXkYKxvFGNYGqMuLk8KQJKOCUnHNlQVaU +-> ssh-ed25519 C2zWnA du7PyTSMnqJCQH/TXLh2uzhdjmnQbh6KxRJ5M5W9fxI +GRaZU3cCe/wHNmnrMP5EeSf0Z3xtV/XRY41jc+fooUA +-> ssh-ed25519 LzO4tw lQVDe2IUXkk30rn1C7LEnBAE92v1Tx/zTyiLT45DZHw +HfynROGBmyICXVs0Gc+/yTlFazuz2WyCq80Y2ciNhwc +--- 5ars0rPwU9G2blh2eOKmGt28AdawIPXAWuZrd79rKDw +d{Ë‘ÛHøÒ­^nožz”<CLý~îMˆ\EeN¯ï~µŸðW;"úÓYDpŽ7 tðˆ+ì-J¼ýã‰|q«¡Þ?/ß¹jFRX õªØãÏbÁฬjÂ,šuË'šëË¿ÓLE@¥æ \ No newline at end of file diff --git a/ops/secrets/mimir-environment.age b/ops/secrets/mimir-environment.age new file mode 100644 index 000000000..df1921221 --- /dev/null +++ b/ops/secrets/mimir-environment.age @@ -0,0 +1,12 @@ +age-encryption.org/v1 +-> ssh-ed25519 +qVung P6nn2lXFAdzZmq9Uca1Y5V+yUuNe1NtTsb9v1GEpLTE +iX//2OZXlnc5a8GDnFqc2AwvnE5F934YqrIHmasKXjI +-> X25519 TTeB7TDM1XHpDU+5yn65j/wUKH1AA2qhv7FOWgxv3X4 +fS3BZ7dbToKruan7N8HW2YsHSCvy803Mdqc9VymonRE +-> ssh-ed25519 C2zWnA YzTQJhSKUp9PsRjyY0NchhsdOCO29f1Gy6MyoxNJmmM +Tr/K0YK+NrNvTuamgU3QANHMW4gFSzTX3fj3iJ27MNQ +-> ssh-ed25519 LzO4tw 2Ea1tYhWtNV72FCqoZx7E4B0KhDxVBv88nhyFyBxkwk +tYBPAYF4T40TIABaAZ79pCtJ9XGPRN4N7sDIlQreizg +--- +0LKKglhNwUNcFTCFPXyjUSdao0xG6t18Z/2o/XIHj8 +(MLDîÖ=vümèø±j®óðIê4No@a5S¶“àéÑÑ×ùÑ+% +ÐD±[¯>µÄg¤ºÌjMÍ´D5’(‚å&ie)‚æ`µ™¿>)äè¬wñqÑèowô:r³!å|¯øïz]ã{L‡°­ëû \ No newline at end of file diff --git a/ops/secrets/mimir-webhook-url.age b/ops/secrets/mimir-webhook-url.age new file mode 100644 index 000000000..9431774bd --- /dev/null +++ b/ops/secrets/mimir-webhook-url.age @@ -0,0 +1,12 @@ +age-encryption.org/v1 +-> ssh-ed25519 +qVung GkyQbgnYLKVP5aStgR2xpTBWLQjRRrB0iZFh34bz6Ek +5MkXZmVlI77MlI7Q4u7rJpXlOvy0lhSX0zMRlf5PnsE +-> X25519 Ulq3EUtAo75G3++IwtcJ0HTV/WUJLxRD1CSlhDvBMjY +YnYrw6Kgy9H9M3tS80wHr3aMDA4UJaZZqFVTFy5GL4k +-> ssh-ed25519 C2zWnA V89wrBq9DMsnDc5OuO6Sd5Lah1r+QmVLjoQZE51ymzU +On5m4AXJFBo5Egk66tqxViK2/C8/taLukADxwRpn7gU +-> ssh-ed25519 LzO4tw 3rGT8uh5vI8uN1NrhSovG3KjVSLJBbxLrwz7vvOQVms +DugUB6q10ckKY9MocAhrYiVwYrW5fhC7MgXnIdHbjfk +--- h69fCsqmWgpINlubOaE0nq+pYwizAaMQjiuibM1hAXg +Æ`ŠÈqÝ/㨆\,íài±â+HU|«»Áß–ã-æ!ïŽ\ôõ +Êéi„w¶ë˜'a˜P‚…‹ \ No newline at end of file diff --git a/ops/secrets/mkSecrets.nix b/ops/secrets/mkSecrets.nix index c99130835..e22745b96 100644 --- a/ops/secrets/mkSecrets.nix +++ b/ops/secrets/mkSecrets.nix @@ -9,6 +9,7 @@ let inherit (depot.nix.yants) attrs any + either defun list path @@ -17,7 +18,8 @@ let struct ; ssh-pubkey = restrict "SSH pubkey" (lib.hasPrefix "ssh-") string; - agenixSecret = struct "agenixSecret" { publicKeys = list ssh-pubkey; }; + age-pubkey = restrict "age pubkey" (lib.hasPrefix "age") string; + agenixSecret = struct "agenixSecret" { publicKeys = list (either age-pubkey ssh-pubkey); }; in defun [ path (attrs agenixSecret) (attrs any) ] diff --git a/ops/secrets/restic-bucket-credentials.age b/ops/secrets/restic-bucket-credentials.age new file mode 100644 index 0000000000000000000000000000000000000000..3231702e4652cde1bc908763ccd6ecfd22f96aa9 GIT binary patch literal 976 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCUFE(|NpOIPsKPb<{c z4|jIT3{MPp)(;OZE%Zus2}&x<)=td!E!MU)4hiwiGBGtY2;@o$_saFmGL3XG_6^O^ zF3kz|2s97O$+QeFGA=GFG4QL%a4iWg@k>p1PY2l+0kO!@)ipfW)iOuBATTh%yui@d z$0XBOKhne5&)GD>z|1Ue6_T`#qP$Cdqx?;b%#Cu3gG{0_$^+6| zovTtE(+XW&^s_2c%Jst%gVW0`xZI2jLsFw0OMObRLVSbr{j$>nQVg^+-ST`a)70#(EX=dO{z0~_!Zr5`4y2#iTMFxm3i5IrY6RI6W1$Sxz1jR5 zG7}$*%pC6=pCFSQW7DeCD)-1VefO{`*Hl+$$Gnh2&txuLU0sDFKZAV35R1}OM=!Um z2;V@Llw#j7v!JkG|GbJ4W24N#Aa`GVgEI5r$WSiR`Zuc6&xA1atY}-5x{tRvBwpUm z?6&*9Hurb_rE4NiPJ4Rxu&mGbnr$=Ye7)ke&+hm0eHs%hgz6?Sc`qqG(k^K5N>0eC zo+~~4;IcX9eJtz#&f8`vsOu+opu=eLvwaelPahwbE3G^5Iwm~e@YIDK543j$&l7+D kz-h*6TgIBJS#AG5erJ@>@jJS0dhMU!Cm(p8+q!H50NZ>}sQ>@~ literal 0 HcmV?d00001 diff --git a/ops/secrets/restic-repository-password.age b/ops/secrets/restic-repository-password.age new file mode 100644 index 000000000..d22eaf38b --- /dev/null +++ b/ops/secrets/restic-repository-password.age @@ -0,0 +1,17 @@ +age-encryption.org/v1 +-> ssh-ed25519 +qVung fEPHUIHGP1lq7BefcyrrBhsh2pIcfBYOp8JdA8gLlF8 +xfSkbL06XJnDWwMYbYbDb9aL1ZiMFADPJMsA9Yc8OGc +-> X25519 7A8fombypOBpzi0kY9KEaXXUaK2/TqZxDdA7xdBZq3s +O+zKJvjLihSHagyexDWPb7B6BYXWtqDG5jNe1Cy7elE +-> ssh-ed25519 C2zWnA THArgNXfZTE7IEDSx5btgH2M26LEWf7xil0fpvyG/HU +IEhcR42wwsfZBzFomZQjyX3aTxM72Mq/9lYJypH4fCI +-> ssh-ed25519 x3gRmg LppryFQR0QVRXNudhnH1xagauUB3qJku3tGwnP7uwnM +E4Np7eNxtUWgCgeNeKKRHRUw3e2n7UJiVRRM6Rq6M1M +-> ssh-ed25519 uZGziw omZBRMsKsgRgvV18Kx1RKrrT79T5Ec6AJLLqyZ8NcDY +xofz1/6hFIYy9cX5xh59EYN5yXnTnoeLpqoaqF91NWA +-> ssh-ed25519 3T2Xig UK5jbvRneWnyiWXIr7LOUofglIcLixZ1Kk3azGtLaSA +tTzIXc8Z3rxyudWGRifZXdva4ThElZryfWQk/jO7Cl4 +-> ssh-ed25519 LzO4tw plLskc3SFPm2sXhZMLAPTC6abHbe4JP5+/utI29SI1Y +qpna8eExCro5pqImBFDCOC4A6tSxp788qZU3U1ugqb8 +--- qyCRIv4thNmOpjMx3QHMxFFT04kLyvUiGnt7Goj4ri0 +›Î¿$C[Fe&>G¶›}©Ÿ%V66²2À¯w2)Ö¤°Í ¬%;XvØzœJôଚR¹_/j½(¹yEqD]› \ No newline at end of file diff --git a/ops/secrets/secrets.nix b/ops/secrets/secrets.nix index 273f00d62..54bd2774d 100644 --- a/ops/secrets/secrets.nix +++ b/ops/secrets/secrets.nix @@ -1,67 +1,59 @@ let - tazjin = [ - # tverskoy - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM1fGWz/gsq+ZeZXjvUrV+pBlanw1c3zJ9kLTax9FWQy" - - # zamalek - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBRXeb8EuecLHP0bW4zuebXp4KRnXgJTZfeVWXQ1n1R" - - # khamovnik - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID1ptE5HvGSXxSXo+aHBTKa5PBlAM1HqmpzWz0yAhHLj" - - # arbat - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ1Eai0p7eF7XML5wokqF4GlVZM+YXEORfs/GPGwEky7" + raito = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICaw9ihTG7ucB8P38XdalEWev8+q96e2yNm4B+/I9IJp" ]; - aspen = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMcBGBoWd5pPIIQQP52rcFOQN3wAY0J/+K2fuU6SffjA " + edef = [ + "age1n8vj5s4s9vyl8cq76q3mxaj5yxhmeuzh3puffp27j59e6vsj9frq34f90r" ]; - sterni = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJk+KvgvI2oJTppMASNUfMcMkA2G5ZNt+HnWDzaXKLlo" + flokli = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPTVTXOutUZZjXLB0lUSgeKcSY/8mxKkC0ingGK1whD2 flokli" ]; - flokli = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPTVTXOutUZZjXLB0lUSgeKcSY/8mxKkC0ingGK1whD2 flokli"; + gerrit01 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN+RCLAExaM5EC70UsCPMtDT1Cfa80Ux/vex95fLk9S4 root@gerrit01"; + public01 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICzB7bqXWcv+sVokySvj1d74zRlVLSNqBw7/OY3c7QYd root@public01"; + build01 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEteVaeN/FEAY8yyGWdAbv6+X6yv2m8+4F5qZEAhxW9f root@build01"; + meta01 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINj2csTShq5PsmB/T0596TASyf7VImD4592HEqaYHgKh root@meta01"; - sanduny = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOag0XhylaTVhmT6HB8EN2Fv5Ymrc4ZfypOXONUkykTX"; - nevsky = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHQe7M+G8Id3ZD7j+I07TCUV1o12q1vpsOXHRlcPSEfa"; - bugry = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGqG6sITyJ/UsQ/RtYqmmMvTT4r4sppadoQIz5SvA+5J"; + superadmins = raito ++ edef ++ flokli; - admins = tazjin ++ aspen ++ sterni; - allHosts = [ sanduny nevsky bugry ]; - for = hosts: { - publicKeys = hosts ++ admins; - }; + allDefault.publicKeys = superadmins ++ [ gerrit01 public01 build01 meta01 ]; + terraform.publicKeys = superadmins; + gerrit01Default.publicKeys = superadmins ++ [ gerrit01 ]; + public01Default.publicKeys = superadmins ++ [ public01 ]; + build01Default.publicKeys = superadmins ++ [ build01 ]; + meta01Default.publicKeys = superadmins ++ [ meta01 ]; + ciDefault.publicKeys = superadmins ++ [ gerrit01 build01 ]; in { - "besadii.age" = for [ nevsky ]; - "buildkite-agent-token.age" = for [ nevsky ]; - "buildkite-graphql-token.age" = for [ nevsky ]; - "buildkite-ssh-private-key.age" = for [ nevsky ]; - "clbot-ssh.age" = for [ nevsky ]; - "clbot.age" = for [ nevsky ]; - "depot-inbox-imap.age" = for [ sanduny ]; - "depot-replica-key.age" = for [ nevsky ]; - "gerrit-autosubmit.age" = for [ nevsky ]; - "gerrit-secrets.age" = for [ nevsky ]; - "grafana.age" = for [ nevsky ]; - "irccat.age" = for [ nevsky ]; - "journaldriver.age" = for allHosts; - "keycloak-db.age" = for [ nevsky ]; - "nix-cache-priv.age" = for [ nevsky ]; - "nix-cache-pub.age" = for [ nevsky ]; - "owothia.age" = for [ nevsky ]; - "panettone.age" = for [ nevsky ]; - "restic-bugry.age" = for [ bugry ]; - "restic-nevsky.age" = for [ nevsky ]; - "restic-sanduny.age" = for [ sanduny ]; - "smtprelay.age" = for [ nevsky ]; - "teleirc.age" = for [ nevsky ]; - "tf-buildkite.age" = for [ /* humans only */ ]; - "tf-glesys.age" = for [ /* humans only */ ]; - "tf-keycloak.age" = for [ flokli ]; - "tvl-alerts-bot-telegram-token.age" = for [ nevsky ]; - "wg-bugry.age" = for [ bugry ]; - "wg-nevsky.age" = for [ nevsky ]; - "yc-restic.age" = for [ nevsky sanduny bugry ]; + "grafana-agent-password.age" = allDefault; + + "restic-repository-password.age" = allDefault; + "restic-bucket-credentials.age" = allDefault; + + "keycloak-db-password.age" = public01Default; + "gerrit-oauth-secret.age" = gerrit01Default; + "gerrit-replication-key.age" = gerrit01Default; + "gerrit-autosubmit.age" = gerrit01Default; + + "forgejo-oauth-secret.age" = public01Default; + "grafana-oauth-secret.age" = public01Default; + + "buildkite-agent-token.age" = build01Default; + "buildkite-ssh-private-key.age" = build01Default; + "buildkite-besadii-config.age" = ciDefault; + "buildkite-graphql-token.age" = build01Default; + + "metrics-push-htpasswd.age" = meta01Default; + "alertmanager-irc-relay-environment.age" = meta01Default; + "mimir-environment.age" = meta01Default; + "mimir-webhook-url.age" = meta01Default; + "loki-environment.age" = meta01Default; + + "tf-dns.age" = terraform; + "tf-keycloak.age" = terraform; + "tf-hcloud.age" = terraform; + "tf-hetzner-s3.age" = terraform; + "tf-buildkite.age" = terraform; } diff --git a/ops/secrets/tf-buildkite.age b/ops/secrets/tf-buildkite.age index 6f7ed8c90c51d241e567c83d115ad3004bb6cee9..7f1032ede7eef97850ffbefa407ea4550a60cc34 100644 GIT binary patch delta 569 zcmdnSewk&0YQ1)0SZQ9mLZW+Gm|XjV0fZmajIvEPiA0lnXjV> zm#&>cgpsMKp`}7pSbZ5SYB$Xe{hJArK4f8f2n7ndr30LisIr7 z-P9C_JeuAy!QuDJmv2FYdtABV_j1zuUDW*(+#UJ+UK zmhO%gT;Xn}eo4i}&cOj;#lZo7CKm1~0Ul))r8z+rE-8+AW|rBWnNhi>Mj6_XT)Mit z3f`3#$)V=1Wu<8mi6Kd)mTq3j<|f8I+OGaao{>rEF6p6u!QnxH0T~g#TpD~)?xnYz zH}LI$u;b}_MT5=L7xENuUAe?CN$vVxuX@w|2j3oXx=t@!QD{-dH&0~x1h)FHH3yxS ze6T#q(ChwUVgB2msl}I8EcbmpyZuex=R~hzyH)ACJGgb%{sXP2 zudyxGUErv;-TAV@q?=AVMFgFX^&T=WstL`C?~LX7r22Mc$)Bg6HgDejE$05GuYso& zI)v+H7`e*Z?+g94#&&jQ>(6C*+DWktm8)jF+_&)3=BfV|X7+BsEIg~wvGxARf59b- L7w?g7NoNHB&y3#R literal 950 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCSnNiI(GDObn~Da$OV z4Dtx}3#+myFv&G^^VbhdDswY;3@ywoGAs?Q2(WZ@Ow9MlGvNv@i?GNwEX^y?PBtsf z$g@l_2rtO2ayNBPGd9jnstio3D7Wx&ER0Hwa74GQD%rU-!%?9$J;XEL!X?xqILRd} zHP9_J(;_R(ucWLhy}-jasI(%}*V!^8KgTz++>uw8Atw#YEf5#iBT(5W_aZ;EIeOM}?BW@It?AgB0JyQvW1(lMpAf#E?X< z5T{JT)bb#GN3$f$Dt8a#BzL#+WG;8JO3So>%1C4Pk`PNL(;&x!)U?8IpEB=?$V~T; z>=NVL(4geXY@evoKy<$)XXsm&lq)288=IAT1(pUHIl2eAl@&xKmwSaedY9^Fc?I|f z1%)NKXGSI&RGLS*Cv&-lxMp}58tP{k8W?%yq(@a0I8}J~8oRp(8wO@YnI%@`28MeU zXH=Mlg`(T$T;S!D9;i^18D*AYT9WRPpYNOPYg`pr;azE-YH1N1T9oVSno$svtRGga z9~qwPp3GHZY+B}I=GnXlSxih)Z^)NmO!FaC($`aAiQ0w|S{=sjI$GUS&>}Pcaww7YD)A1$$Y~PjR>q z_dRFX)W#j(r=710st#DZBhrWKU;TsfzWmxRf=Qd!yBUODkW@V6yJ^9ng(v5poV>60 zQ{v&GGYx+|(lUO_o#1$JZ%sUdF9$b2uXlXazsqlrOgUnD_21jM{OjzNt(leT+#C|S z_{Ex70i)*}x%)G`^+L9``%e95w$+mBlW_`Tq4}I65!1tjqT(knEqWU9xRAVYK1SU;$Nx*OAfAG%*L_A?ZV8H^4$wP3ce+&yUk{2 P=4t=?Id$#j)wO>CVQ5%A diff --git a/ops/secrets/tf-dns.age b/ops/secrets/tf-dns.age new file mode 100644 index 000000000..7b0a35b4f --- /dev/null +++ b/ops/secrets/tf-dns.age @@ -0,0 +1,9 @@ +age-encryption.org/v1 +-> ssh-ed25519 +qVung bfXcCFJcGZMG7wn8/9WXcZNZ5GlinAZWMAcC1NhQ1Fk +NNw4bHM7t3UFYapqdSwfY5y+2vAVUsEtP42KUYRO5QI +-> X25519 wNi7DKA0ego6INa6mKuqy3JDfj3bt6EAz5wdcBIuwF4 +mnTNxiy4NXCBb6L8SKbFSfyBaVt9q2bq33DxHh7RhaI +-> ssh-ed25519 C2zWnA JsfydhJKmS72cyDYruJiq0AXStdZRfTeluZg7iSbS10 +kUrGkroP+sGLvHZKtOOsZg+PO18VjdEqgcIUlPiQbp4 +--- KHJEkrcyHBIUPQaLKydcvd3uxue+2hDkJK4zze4BRYc +&=áÏ·ö+êÈné€ßo€â}¶mæ¶örÖP¸ <@¦À¶ÿU‘ÒÍ. ‰øóU5¼1ÒDŒze»Ø …‘uÞ%…Uö¯ÿ7“J‹ë\”÷h4vn»‰:§¶’n–·Ú€Ü©ÑêqºQ§ƒùÛ&¸í¥K÷­•Ãxm¾—‚ÚÝ-È`åó ,Æ|ÚЧ!ö¦ã:¢ÉløPl”é6ï+¥ÁxîFu$’‚¬X·>kG:üÒ ½!›é¸=‰¸”ò±²Åz,\k ¬s&w;¥aOÛ¯­ÌVçjÅg-«ÜÞ \ No newline at end of file diff --git a/ops/secrets/tf-hcloud.age b/ops/secrets/tf-hcloud.age new file mode 100644 index 0000000000000000000000000000000000000000..e37051f850e46f518ce4b5d84c7ec74afc0bb021 GIT binary patch literal 608 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCUFE(|NpOIJwsH+Bxv zH#Rf$^G}Y<56;gBPl_@&snQQM^K=a=vMkLDvna022{#Q6$>z#&OAhnbP7Y7=NKG;` zw@k}4D9Q7yaCQmRE;Q5EH_r+$Nip>*bt|YU2?f~}0kKHmJtRWgGqSuqEUhXl(AV22 zS35X6u*9*@H^959Fg!23s?;1Ue6}&vc3WL+Uoy#o3{Pj&TTr=GCy>b&P zb9{@mef^@+lCrW)T}?`i-GZIdxlFx_EKSnA-BNtRBE7v09W9bm^9=){d_9sqlM*u= zOG468vvM*MGrfvkxpZ}P6%5_=-HHm_^35DQJo1yujXaE_g3K*VQz8w0d;*RAO-suC zOuRBe%MJ8Rxc)@TJleypJ7N0-*+}t;sjJTV8|yY)SU7jFGRFqZ*RPL6&b%m9@;&;a zK=+s2U7s2rY8M|m9qQK4l08dKU>9= zcw-xL8NaNSXzbOPiUs?=*JOlin=IyLSaLa0I@M|wCD75VFg(ZDs2pSivVWY7s>1Ue6;cC>LvzD}oQr&nja<^ST>~>Ce51^x zBBF|&GSVX5lCp|Ciu@{z5`Bz4xy%9#(jqHEGu>0Qvt3=n%#HQkOZ2m%3X(&@vYb+b z@q}%xm1KQCtPzjU1FK2HI?B9kV`HyL)Z{N4V%HYmYzpw&!*Jq&(uEg`kKAtbfAmV^^F0IW8Ao1M6bLlV zH}RczCRC&;afj1ZM#uZRZmOUVCMnr&AbJ7KQz~54EpwU_?u$Ni Gs|5hheeh@i literal 0 HcmV?d00001 diff --git a/ops/secrets/tf-keycloak.age b/ops/secrets/tf-keycloak.age index 87a1d14f5dd391e8a5666ae8bc01c9da39fa08dc..1ebcaa08282ca7edc1868cfbd3501350baa20a23 100644 GIT binary patch delta 628 zcmZqV=wqFrTCZIgR+^Wt;FW8tALNl5W#}1Jk(^|aXkL_^k&;pAlN?c45Ez(ZSsren zuN~s$ZRG6AWocgMUzD8gY2lis9pPc-85CITlz;mFJTh6sr)gPz zeqfaamx;4is8NJrdX;y9g-Nl9@?NkO=IM6O$8u~|}9X>g&wc8EnzQJ9BkQGri>N~NnO*Ij+?M`^a1 zZM(%6h!%bfpE!@hK|krm_r<^8m43@WcrS+-m&S*o7>xNSY9~xqf@WI zpQTPkpmdG&_VXR8&%XcPv3pDF{BwVfsQ=yC>v6jJ{)|IMbT)0Az4=(omDP1Yd*f5O zE^Tx^xG7i4{QlnD%eu~aw$34?N+rQh74}}077SW?aR1Xk%Y4rNw|pVGSnG0QoQl>n z7njfn!5??VFr009`*OyeO`kvhn`pV$Y~y8>Q%;r)vv<@i?3{3QaZt*jv5 zsKU?R!Y`^aAS@~=CEUO_O54OBD=pd7J2cJEBcIDWLq8|YAh)2((lM{pBGEF}FEXnl zSv%9k$fP(VB*@Xiu{f%z+&SON3&S?U;EIeOM}?eh%VHBhw<3Kn-x9wf<5UBK>`?70 z?NlQV{Q#H59J7?t2(NHYgIpJ*NG>Dqq$HmrSC^EC@G5ur)B<n3kL3n3LyNTvFtn7VcAEX=GNGXOx-btZnX` z1O6!Zt7cNrf*_qnc1 z$ug=O|CNfZ}5PWS62+?QjpnysX6V3X7!TbgpeLmux>YLwlw{dG3*x z2h*1IoCv+D`aAjGC5;8sw{=ARtSs{uUhESi!MI_Dxt}6et)1cBy=SH@_Pc&DEat54 zdx^@3E^n3w^KZuw3D{5iLPJ?}?rF?|sKceO^ -Date: Thu, 2 Jul 2020 23:02:32 +0100 -Subject: [PATCH 1/3] Syntax highlight nix - ---- - .../app/embed/diff/gr-syntax-layer/gr-syntax-layer-worker.ts | 1 + - resources/com/google/gerrit/server/mime/mime-types.properties | 1 + - 2 files changed, 2 insertions(+) - -diff --git a/polygerrit-ui/app/embed/diff/gr-syntax-layer/gr-syntax-layer-worker.ts b/polygerrit-ui/app/embed/diff/gr-syntax-layer/gr-syntax-layer-worker.ts -index 50742903de..d1e89920cc 100644 ---- a/polygerrit-ui/app/embed/diff/gr-syntax-layer/gr-syntax-layer-worker.ts -+++ b/polygerrit-ui/app/embed/diff/gr-syntax-layer/gr-syntax-layer-worker.ts -@@ -98,6 +98,7 @@ const LANGUAGE_MAP = new Map([ - ['text/x-vhdl', 'vhdl'], - ['text/x-yaml', 'yaml'], - ['text/vbscript', 'vbscript'], -+ ['text/x-nix', 'nix'], - ]); - - const CLASS_PREFIX = 'gr-syntax gr-syntax-'; -diff --git a/resources/com/google/gerrit/server/mime/mime-types.properties b/resources/com/google/gerrit/server/mime/mime-types.properties -index 642ef474a5..97f1ff835b 100644 ---- a/resources/com/google/gerrit/server/mime/mime-types.properties -+++ b/resources/com/google/gerrit/server/mime/mime-types.properties -@@ -154,6 +154,7 @@ msgenny = text/x-msgenny - mts = application/typescript - nb = text/x-mathematica - nginx.conf = text/x-nginx-conf -+nix = text/x-nix - nsh = text/x-nsis - nsi = text/x-nsis - nt = text/n-triples --- -2.45.1 - diff --git a/third_party/gerrit/0002-Syntax-highlight-rules.pl.patch b/third_party/gerrit/0002-Syntax-highlight-rules.pl.patch deleted file mode 100644 index d0da61dd0..000000000 --- a/third_party/gerrit/0002-Syntax-highlight-rules.pl.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 63f1ff6ea749ae2af29a53463bca81bc3f4bf25b Mon Sep 17 00:00:00 2001 -From: Luke Granger-Brown -Date: Thu, 2 Jul 2020 23:02:43 +0100 -Subject: [PATCH 2/3] Syntax highlight rules.pl - ---- - .../app/embed/diff/gr-syntax-layer/gr-syntax-layer-worker.ts | 1 + - resources/com/google/gerrit/server/mime/mime-types.properties | 1 + - 2 files changed, 2 insertions(+) - -diff --git a/polygerrit-ui/app/embed/diff/gr-syntax-layer/gr-syntax-layer-worker.ts b/polygerrit-ui/app/embed/diff/gr-syntax-layer/gr-syntax-layer-worker.ts -index d1e89920cc..5d62af1c64 100644 ---- a/polygerrit-ui/app/embed/diff/gr-syntax-layer/gr-syntax-layer-worker.ts -+++ b/polygerrit-ui/app/embed/diff/gr-syntax-layer/gr-syntax-layer-worker.ts -@@ -72,6 +72,7 @@ const LANGUAGE_MAP = new Map([ - ['text/x-perl', 'perl'], - ['text/x-pgsql', 'pgsql'], // postgresql - ['text/x-php', 'php'], -+ ['text/x-prolog', 'prolog'], - ['text/x-properties', 'properties'], - ['text/x-protobuf', 'protobuf'], - ['text/x-puppet', 'puppet'], -diff --git a/resources/com/google/gerrit/server/mime/mime-types.properties b/resources/com/google/gerrit/server/mime/mime-types.properties -index 97f1ff835b..85d630340f 100644 ---- a/resources/com/google/gerrit/server/mime/mime-types.properties -+++ b/resources/com/google/gerrit/server/mime/mime-types.properties -@@ -208,6 +208,7 @@ rq = application/sparql-query - rs = text/x-rustsrc - rss = application/xml - rst = text/x-rst -+rules.pl = text/x-prolog - README.md = text/x-gfm - s = text/x-gas - sas = text/x-sas --- -2.45.1 - diff --git a/third_party/gerrit/0003-Add-titles-to-CLs-over-HTTP.patch b/third_party/gerrit/0003-Add-titles-to-CLs-over-HTTP.patch deleted file mode 100644 index a5881e5a6..000000000 --- a/third_party/gerrit/0003-Add-titles-to-CLs-over-HTTP.patch +++ /dev/null @@ -1,214 +0,0 @@ -From ca2df6d7f53441d443d42908e30bf60fbfc15392 Mon Sep 17 00:00:00 2001 -From: Luke Granger-Brown -Date: Thu, 2 Jul 2020 23:03:02 +0100 -Subject: [PATCH 3/3] Add titles to CLs over HTTP - ---- - .../gerrit/httpd/raw/IndexHtmlUtil.java | 12 +++- - .../google/gerrit/httpd/raw/IndexServlet.java | 8 ++- - .../google/gerrit/httpd/raw/StaticModule.java | 5 +- - .../gerrit/httpd/raw/TitleComputer.java | 67 +++++++++++++++++++ - .../gerrit/httpd/raw/PolyGerritIndexHtml.soy | 4 +- - 5 files changed, 88 insertions(+), 8 deletions(-) - create mode 100644 java/com/google/gerrit/httpd/raw/TitleComputer.java - -diff --git a/java/com/google/gerrit/httpd/raw/IndexHtmlUtil.java b/java/com/google/gerrit/httpd/raw/IndexHtmlUtil.java -index a92dd18f04..f87c46d321 100644 ---- a/java/com/google/gerrit/httpd/raw/IndexHtmlUtil.java -+++ b/java/com/google/gerrit/httpd/raw/IndexHtmlUtil.java -@@ -41,6 +41,7 @@ import java.util.Collections; - import java.util.HashMap; - import java.util.HashSet; - import java.util.Map; -+import java.util.Optional; - import java.util.Set; - import java.util.function.Function; - -@@ -63,13 +64,14 @@ public class IndexHtmlUtil { - String faviconPath, - Map urlParameterMap, - Function urlInScriptTagOrdainer, -- String requestedURL) -+ String requestedURL, -+ TitleComputer titleComputer) - throws URISyntaxException, RestApiException { - ImmutableMap.Builder data = ImmutableMap.builder(); - data.putAll( - staticTemplateData( - canonicalURL, cdnPath, faviconPath, urlParameterMap, urlInScriptTagOrdainer)) -- .putAll(dynamicTemplateData(gerritApi, requestedURL, canonicalURL)); -+ .putAll(dynamicTemplateData(gerritApi, requestedURL, canonicalURL, titleComputer)); - Set enabledExperiments = new HashSet<>(); - enabledExperiments.addAll(experimentFeatures.getEnabledExperimentFeatures()); - // Add all experiments enabled through url -@@ -82,7 +84,7 @@ public class IndexHtmlUtil { - - /** Returns dynamic parameters of {@code index.html}. */ - public static ImmutableMap dynamicTemplateData( -- GerritApi gerritApi, String requestedURL, String canonicalURL) -+ GerritApi gerritApi, String requestedURL, String canonicalURL, TitleComputer titleComputer) - throws RestApiException, URISyntaxException { - ImmutableMap.Builder data = ImmutableMap.builder(); - Map initialData = new HashMap<>(); -@@ -141,6 +143,10 @@ public class IndexHtmlUtil { - } - - data.put("gerritInitialData", initialData); -+ -+ Optional title = titleComputer.computeTitle(requestedURL); -+ title.ifPresent(s -> data.put("title", s)); -+ - return data.build(); - } - -diff --git a/java/com/google/gerrit/httpd/raw/IndexServlet.java b/java/com/google/gerrit/httpd/raw/IndexServlet.java -index fcb821e5ae..e1464b992b 100644 ---- a/java/com/google/gerrit/httpd/raw/IndexServlet.java -+++ b/java/com/google/gerrit/httpd/raw/IndexServlet.java -@@ -48,13 +48,15 @@ public class IndexServlet extends HttpServlet { - private final ExperimentFeatures experimentFeatures; - private final SoySauce soySauce; - private final Function urlOrdainer; -+ private TitleComputer titleComputer; - - IndexServlet( - @Nullable String canonicalUrl, - @Nullable String cdnPath, - @Nullable String faviconPath, - GerritApi gerritApi, -- ExperimentFeatures experimentFeatures) { -+ ExperimentFeatures experimentFeatures, -+ TitleComputer titleComputer) { - this.canonicalUrl = canonicalUrl; - this.cdnPath = cdnPath; - this.faviconPath = faviconPath; -@@ -69,6 +71,7 @@ public class IndexServlet extends HttpServlet { - (s) -> - UnsafeSanitizedContentOrdainer.ordainAsSafe( - s, SanitizedContent.ContentKind.TRUSTED_RESOURCE_URI); -+ this.titleComputer = titleComputer; - } - - @Override -@@ -86,7 +89,8 @@ public class IndexServlet extends HttpServlet { - faviconPath, - parameterMap, - urlOrdainer, -- getRequestUrl(req)); -+ getRequestUrl(req), -+ titleComputer); - renderer = soySauce.renderTemplate("com.google.gerrit.httpd.raw.Index").setData(templateData); - } catch (URISyntaxException | RestApiException e) { - throw new IOException(e); -diff --git a/java/com/google/gerrit/httpd/raw/StaticModule.java b/java/com/google/gerrit/httpd/raw/StaticModule.java -index b00294f73e..f1c1aae12c 100644 ---- a/java/com/google/gerrit/httpd/raw/StaticModule.java -+++ b/java/com/google/gerrit/httpd/raw/StaticModule.java -@@ -224,10 +224,11 @@ public class StaticModule extends ServletModule { - @CanonicalWebUrl @Nullable String canonicalUrl, - @GerritServerConfig Config cfg, - GerritApi gerritApi, -- ExperimentFeatures experimentFeatures) { -+ ExperimentFeatures experimentFeatures, -+ TitleComputer titleComputer) { - String cdnPath = options.devCdn().orElseGet(() -> cfg.getString("gerrit", null, "cdnPath")); - String faviconPath = cfg.getString("gerrit", null, "faviconPath"); -- return new IndexServlet(canonicalUrl, cdnPath, faviconPath, gerritApi, experimentFeatures); -+ return new IndexServlet(canonicalUrl, cdnPath, faviconPath, gerritApi, experimentFeatures, titleComputer); - } - - @Provides -diff --git a/java/com/google/gerrit/httpd/raw/TitleComputer.java b/java/com/google/gerrit/httpd/raw/TitleComputer.java -new file mode 100644 -index 0000000000..8fd2053ad0 ---- /dev/null -+++ b/java/com/google/gerrit/httpd/raw/TitleComputer.java -@@ -0,0 +1,67 @@ -+package com.google.gerrit.httpd.raw; -+ -+import com.google.common.flogger.FluentLogger; -+import com.google.gerrit.entities.Change; -+import com.google.gerrit.extensions.restapi.ResourceConflictException; -+import com.google.gerrit.extensions.restapi.ResourceNotFoundException; -+import com.google.gerrit.server.change.ChangeResource; -+import com.google.gerrit.server.permissions.PermissionBackendException; -+import com.google.gerrit.server.restapi.change.ChangesCollection; -+import com.google.inject.Inject; -+import com.google.inject.Provider; -+import com.google.inject.Singleton; -+ -+import java.net.MalformedURLException; -+import java.net.URL; -+import java.util.Optional; -+import java.util.regex.Matcher; -+import java.util.regex.Pattern; -+ -+@Singleton -+public class TitleComputer { -+ private static final FluentLogger logger = FluentLogger.forEnclosingClass(); -+ -+ @Inject -+ public TitleComputer(Provider changes) { -+ this.changes = changes; -+ } -+ -+ public Optional computeTitle(String requestedURI) { -+ URL url = null; -+ try { -+ url = new URL(requestedURI); -+ } catch (MalformedURLException e) { -+ logger.atWarning().log("Failed to turn %s into a URL.", requestedURI); -+ return Optional.empty(); -+ } -+ -+ // Try to turn this into a change. -+ Optional changeId = tryExtractChange(url.getPath()); -+ if (changeId.isPresent()) { -+ return titleFromChangeId(changeId.get()); -+ } -+ -+ return Optional.empty(); -+ } -+ -+ private static final Pattern extractChangeIdRegex = Pattern.compile("^/(?:c/.*/\\+/)?(?[0-9]+)(?:/[0-9]+)?(?:/.*)?$"); -+ private final Provider changes; -+ -+ private Optional tryExtractChange(String path) { -+ Matcher m = extractChangeIdRegex.matcher(path); -+ if (!m.matches()) { -+ return Optional.empty(); -+ } -+ return Change.Id.tryParse(m.group("changeId")); -+ } -+ -+ private Optional titleFromChangeId(Change.Id changeId) { -+ ChangesCollection changesCollection = changes.get(); -+ try { -+ ChangeResource changeResource = changesCollection.parse(changeId); -+ return Optional.of(changeResource.getChange().getSubject()); -+ } catch (ResourceConflictException | ResourceNotFoundException | PermissionBackendException e) { -+ return Optional.empty(); -+ } -+ } -+} -diff --git a/resources/com/google/gerrit/httpd/raw/PolyGerritIndexHtml.soy b/resources/com/google/gerrit/httpd/raw/PolyGerritIndexHtml.soy -index 5ff1822cd9..81c3cdf0e1 100644 ---- a/resources/com/google/gerrit/httpd/raw/PolyGerritIndexHtml.soy -+++ b/resources/com/google/gerrit/httpd/raw/PolyGerritIndexHtml.soy -@@ -33,10 +33,12 @@ - {@param? defaultDashboardHex: ?} - {@param? dashboardQuery: ?} - {@param? userIsAuthenticated: ?} -+ {@param? title: ?} - {\n} - {\n} - {\n} -- {\n} -+ {if $title}{$title} · Gerrit Code Review{\n}{/if} -+ {\n} - {\n} - {\n} - --- -2.45.1 - diff --git a/third_party/gerrit/bazelrc b/third_party/gerrit/bazelrc deleted file mode 100644 index f77da77b4..000000000 --- a/third_party/gerrit/bazelrc +++ /dev/null @@ -1,11 +0,0 @@ -# Not using common --repository_cache because Gerrit's bazelrc overrides this... -build --repository_cache=repository-cache -build --action_env=SSL_CERT_FILE -build --action_env=GERRIT_CACHE_HOME -build --tool_java_runtime_version=local_jdk --java_runtime_version=local_jdk -build --workspace_status_command="cat .version" - -# Disable errorprone -build --javacopt="-XepDisableAllChecks" - -sync --repository_cache=repository-cache diff --git a/third_party/gerrit/default.nix b/third_party/gerrit/default.nix deleted file mode 100644 index 765b8ebab..000000000 --- a/third_party/gerrit/default.nix +++ /dev/null @@ -1,105 +0,0 @@ -{ depot, pkgs, ... }: - -let - inherit (depot.nix) buildBazelPackageNG; - inherit (buildBazelPackageNG) bazelRulesJavaHook bazelRulesNodeJS5Hook; -in -pkgs.lib.makeOverridable depot.nix.buildBazelPackageNG rec { - pname = "gerrit"; - version = "3.10.0"; - - bazel = pkgs.bazel_7; - - src = (pkgs.fetchgit { - url = "https://gerrit.googlesource.com/gerrit"; - rev = "v${version}"; - fetchSubmodules = true; - deepClone = true; - hash = "sha256-FpKuzityHuHNYBIOL8YUjCLlkuVBfxjvHECb26NsZNE="; - }).overrideAttrs (_: { - env.NIX_PREFETCH_GIT_CHECKOUT_HOOK = '' - pushd "$dir" >/dev/null - ${pkgs.python3}/bin/python tools/workspace_status_release.py | sort > .version - popd >/dev/null - - # delete all the .git; we can't do this using fetchgit if deepClone is on, - # but our mischief has already been achieved by the python command above :) - find "$dir" -name .git -print0 | xargs -0 rm -rf - ''; - }); - depsHash = "sha256:114k8ck7056c415qncqmykwqrgprmxnaw3pdv50758mrgw7zdkpm"; - - patches = [ - ./0001-Syntax-highlight-nix.patch - ./0002-Syntax-highlight-rules.pl.patch - ./0003-Add-titles-to-CLs-over-HTTP.patch - ]; - - nativeBuildInputs = with pkgs; [ - bazelRulesJavaHook - bazelRulesNodeJS5Hook - - curl - jdk - python3 - unzip - ]; - - prePatch = '' - rm .bazelversion - - ln -sf ${./bazelrc} user.bazelrc - - ln -sf ${./workspace_overrides.bzl} workspace_overrides.bzl - substituteInPlace WORKSPACE \ - --replace-fail 'load("@io_bazel_rules_webtesting//web:repositories.bzl"' 'load("//:workspace_overrides.bzl"' \ - --replace-fail 'load("@io_bazel_rules_webtesting//web/versioned:browsers-0.3.3.bzl"' 'load("//:workspace_overrides.bzl"' - - patchShebangs Documentation/replace_macros.py - ''; - - postPatch = '' - sed -Ei 's,^(STABLE_BUILD_GERRIT_LABEL.*)$,\1-dirty-nix,' .version - ''; - - preBuild = '' - export GERRIT_CACHE_HOME=$HOME/gerrit-cache - ''; - - extraCacheInstall = '' - cp -R $GERRIT_CACHE_HOME $out/gerrit-cache - ''; - - extraBuildSetup = '' - ln -sf $cache/gerrit-cache $GERRIT_CACHE_HOME - ''; - extraBuildInstall = '' - mkdir -p "$out"/share/api/ - unzip bazel-bin/api-skip-javadoc.zip -d "$out"/share/api - ''; - - bazelTargets = { - "//:release" = "$out/webapps/gerrit-${version}.war"; - "//:api-skip-javadoc" = null; - }; - - passthru = { - # A list of plugins that are part of the gerrit.war file. - # Use `java -jar gerrit.war ls | grep -Po '(?<=plugins/)[^.]+' | sed -e 's,^,",' -e 's,$,",' | sort` to generate that list. - plugins = [ - "codemirror-editor" - "commit-message-length-validator" - "delete-project" - "download-commands" - "gitiles" - "hooks" - "plugin-manager" - "replication" - "reviewnotes" - "singleusergroup" - "webhooks" - ]; - }; - - meta.ci.targets = [ "cache" ]; -} diff --git a/third_party/gerrit/workspace_overrides.bzl b/third_party/gerrit/workspace_overrides.bzl deleted file mode 100644 index 839368606..000000000 --- a/third_party/gerrit/workspace_overrides.bzl +++ /dev/null @@ -1,5 +0,0 @@ -def web_test_repositories(): - pass - -def browser_repositories(*args, **kwargs): - pass diff --git a/third_party/gerrit_plugins/builder.nix b/third_party/gerrit_plugins/builder.nix deleted file mode 100644 index a478dfe5d..000000000 --- a/third_party/gerrit_plugins/builder.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ depot, lib, pkgs, ... }: -{ - buildGerritBazelPlugin = - { name - , version - , src - , depsHash ? null - , overlayPluginCmd ? '' - cp -R "${src}" "$out/plugins/${name}" - echo "STABLE_BUILD_${lib.toUpper name}_LABEL v${version}-nix${if patches != [] then "-dirty" else ""}" >> $out/.version - '' - , postOverlayPlugin ? "" - , postPatch ? "" - , patches ? [ ] - }: ((depot.third_party.gerrit.override (old: { - name = "${name}.jar"; - - src = pkgs.runCommandLocal "${name}-src" { } '' - cp -R "${depot.third_party.gerrit.src}" "$out" - chmod -R +w "$out" - ${overlayPluginCmd} - ${postOverlayPlugin} - ''; - depsHash = (if depsHash != null then depsHash else old.depsHash); - - bazelTargets = { - "//plugins/${name}" = "$out"; - }; - - extraBuildInstall = ""; - })).overrideAttrs (super: { - postPatch = '' - ${super.postPatch or ""} - pushd "plugins/${name}" - ${lib.concatMapStringsSep "\n" (patch: '' - patch -p1 < ${patch} - '') patches} - popd - ${postPatch} - ''; - })); -} diff --git a/third_party/gerrit_plugins/code-owners/default.nix b/third_party/gerrit_plugins/code-owners/default.nix deleted file mode 100644 index c849bfb52..000000000 --- a/third_party/gerrit_plugins/code-owners/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ depot, pkgs, ... }@args: - -let - inherit (import ../builder.nix args) buildGerritBazelPlugin; -in -buildGerritBazelPlugin rec { - name = "code-owners"; - version = "7de40d8"; - src = pkgs.fetchgit { - url = "https://gerrit.googlesource.com/plugins/code-owners"; - rev = "7de40d8b30e55eb64316b6fc3d0d00da9caddade"; - hash = "sha256-0sLwUcG9RN1o9vZGW8ErwL7UgJapgYoo8XMGsWLO25Q="; - }; - patches = [ - ./using-usernames.patch - ]; -} diff --git a/third_party/gerrit_plugins/code-owners/using-usernames.patch b/third_party/gerrit_plugins/code-owners/using-usernames.patch deleted file mode 100644 index 25079ae13..000000000 --- a/third_party/gerrit_plugins/code-owners/using-usernames.patch +++ /dev/null @@ -1,472 +0,0 @@ -commit 29ace6c38ac513f7ec56ca425230d5712c081043 -Author: Luke Granger-Brown -Date: Wed Sep 21 03:15:38 2022 +0100 - - Add support for usernames and groups - - Change-Id: I3ba8527f66216d08e555a6ac4451fe0d1e090de5 - -diff --git a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolver.java b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolver.java -index 70009591..6dc596c9 100644 ---- a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolver.java -+++ b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolver.java -@@ -17,6 +17,8 @@ package com.google.gerrit.plugins.codeowners.backend; - import static com.google.common.base.Preconditions.checkState; - import static com.google.common.collect.ImmutableMap.toImmutableMap; - import static com.google.common.collect.ImmutableSet.toImmutableSet; -+import static com.google.common.collect.ImmutableSetMultimap.flatteningToImmutableSetMultimap; -+import static com.google.common.collect.ImmutableSetMultimap.toImmutableSetMultimap; - import static com.google.gerrit.plugins.codeowners.backend.CodeOwnersInternalServerErrorException.newInternalServerError; - import static java.util.Objects.requireNonNull; - -@@ -25,6 +27,7 @@ import com.google.common.collect.ImmutableList; - import com.google.common.collect.ImmutableMap; - import com.google.common.collect.ImmutableMultimap; - import com.google.common.collect.ImmutableSet; -+import com.google.common.collect.ImmutableSetMultimap; - import com.google.common.collect.Iterables; - import com.google.common.collect.Streams; - import com.google.common.flogger.FluentLogger; -@@ -33,17 +36,24 @@ import com.google.gerrit.entities.Project; - import com.google.gerrit.metrics.Timer0; - import com.google.gerrit.plugins.codeowners.backend.config.CodeOwnersPluginConfiguration; - import com.google.gerrit.plugins.codeowners.metrics.CodeOwnerMetrics; -+import com.google.gerrit.server.AnonymousUser; - import com.google.gerrit.server.CurrentUser; - import com.google.gerrit.server.IdentifiedUser; - import com.google.gerrit.server.account.AccountCache; - import com.google.gerrit.server.account.AccountControl; - import com.google.gerrit.server.account.AccountState; -+import com.google.gerrit.server.account.GroupBackend; -+import com.google.gerrit.server.account.GroupBackends; -+import com.google.gerrit.server.account.InternalGroupBackend; - import com.google.gerrit.server.account.externalids.ExternalId; - import com.google.gerrit.server.account.externalids.ExternalIdCache; - import com.google.gerrit.server.permissions.GlobalPermission; - import com.google.gerrit.server.permissions.PermissionBackend; - import com.google.gerrit.server.permissions.PermissionBackendException; -+import com.google.gerrit.server.util.RequestContext; -+import com.google.gerrit.server.util.ThreadLocalRequestContext; - import com.google.inject.Inject; -+import com.google.inject.OutOfScopeException; - import com.google.inject.Provider; - import java.io.IOException; - import java.nio.file.Path; -@@ -102,6 +112,8 @@ public class CodeOwnerResolver { - - @VisibleForTesting public static final String ALL_USERS_WILDCARD = "*"; - -+ public static final String GROUP_PREFIX = "group:"; -+ - private final CodeOwnersPluginConfiguration codeOwnersPluginConfiguration; - private final PermissionBackend permissionBackend; - private final Provider currentUser; -@@ -112,6 +124,8 @@ public class CodeOwnerResolver { - private final CodeOwnerMetrics codeOwnerMetrics; - private final UnresolvedImportFormatter unresolvedImportFormatter; - private final TransientCodeOwnerCache transientCodeOwnerCache; -+ private final InternalGroupBackend groupBackend; -+ private final ThreadLocalRequestContext context; - - // Enforce visibility by default. - private boolean enforceVisibility = true; -@@ -132,7 +146,9 @@ public class CodeOwnerResolver { - PathCodeOwners.Factory pathCodeOwnersFactory, - CodeOwnerMetrics codeOwnerMetrics, - UnresolvedImportFormatter unresolvedImportFormatter, -- TransientCodeOwnerCache transientCodeOwnerCache) { -+ TransientCodeOwnerCache transientCodeOwnerCache, -+ InternalGroupBackend groupBackend, -+ ThreadLocalRequestContext context) { - this.codeOwnersPluginConfiguration = codeOwnersPluginConfiguration; - this.permissionBackend = permissionBackend; - this.currentUser = currentUser; -@@ -143,6 +159,8 @@ public class CodeOwnerResolver { - this.codeOwnerMetrics = codeOwnerMetrics; - this.unresolvedImportFormatter = unresolvedImportFormatter; - this.transientCodeOwnerCache = transientCodeOwnerCache; -+ this.groupBackend = groupBackend; -+ this.context = context; - } - - /** -@@ -361,6 +379,12 @@ public class CodeOwnerResolver { - "cannot resolve code owner email %s: no account with this email exists", - CodeOwnerResolver.ALL_USERS_WILDCARD)); - } -+ if (codeOwnerReference.email().startsWith(GROUP_PREFIX)) { -+ return OptionalResultWithMessages.createEmpty( -+ String.format( -+ "cannot resolve code owner email %s: this is a group", -+ codeOwnerReference.email())); -+ } - - ImmutableList.Builder messageBuilder = ImmutableList.builder(); - AtomicBoolean ownedByAllUsers = new AtomicBoolean(false); -@@ -405,9 +429,53 @@ public class CodeOwnerResolver { - ImmutableMultimap annotations) { - requireNonNull(codeOwnerReferences, "codeOwnerReferences"); - -+ ImmutableSet groupsToResolve = -+ codeOwnerReferences.stream() -+ .map(CodeOwnerReference::email) -+ .filter(ref -> ref.startsWith(GROUP_PREFIX)) -+ .map(ref -> ref.substring(GROUP_PREFIX.length())) -+ .collect(toImmutableSet()); -+ -+ // When we call GroupBackends.findExactSuggestion we need to ensure that we -+ // have a user in context. This is because the suggestion backend is -+ // likely to want to try to check that we can actually see the group it's -+ // returning (which we also check for explicitly, because I have trust -+ // issues). -+ RequestContext oldCtx = context.getContext(); -+ // Check if we have a user in the context at all... -+ try { -+ oldCtx.getUser(); -+ } catch (OutOfScopeException | NullPointerException e) { -+ // Nope. -+ RequestContext newCtx = () -> { -+ return new AnonymousUser(); -+ }; -+ context.setContext(newCtx); -+ } -+ ImmutableSetMultimap resolvedGroups = null; -+ try { -+ resolvedGroups = -+ groupsToResolve.stream() -+ .map(groupName -> GroupBackends.findExactSuggestion(groupBackend, groupName)) -+ .filter(groupRef -> groupRef != null) -+ .filter(groupRef -> groupBackend.isVisibleToAll(groupRef.getUUID())) -+ .map(groupRef -> groupBackend.get(groupRef.getUUID())) -+ .collect(flatteningToImmutableSetMultimap( -+ groupRef -> GROUP_PREFIX + groupRef.getName(), -+ groupRef -> accountCache -+ .get(ImmutableSet.copyOf(groupRef.getMembers())) -+ .values().stream() -+ .map(accountState -> CodeOwner.create(accountState.account().id())))); -+ } finally { -+ context.setContext(oldCtx); -+ } -+ ImmutableSetMultimap usersToGroups = -+ resolvedGroups.inverse(); -+ - ImmutableSet emailsToResolve = - codeOwnerReferences.stream() - .map(CodeOwnerReference::email) -+ .filter(ref -> !ref.startsWith(GROUP_PREFIX)) - .filter(filterOutAllUsersWildCard(ownedByAllUsers)) - .collect(toImmutableSet()); - -@@ -442,7 +510,8 @@ public class CodeOwnerResolver { - ImmutableMap codeOwnersByEmail = - accountsByEmail.map(mapToCodeOwner()).collect(toImmutableMap(Pair::key, Pair::value)); - -- if (codeOwnersByEmail.keySet().size() < emailsToResolve.size()) { -+ if (codeOwnersByEmail.keySet().size() < emailsToResolve.size() || -+ resolvedGroups.keySet().size() < groupsToResolve.size()) { - hasUnresolvedCodeOwners.set(true); - } - -@@ -456,7 +525,9 @@ public class CodeOwnerResolver { - cachedCodeOwnersByEmail.entrySet().stream() - .filter(e -> e.getValue().isPresent()) - .map(e -> Pair.of(e.getKey(), e.getValue().get())); -- Streams.concat(newlyResolvedCodeOwnersStream, cachedCodeOwnersStream) -+ Stream> resolvedGroupsCodeOwnersStream = -+ resolvedGroups.entries().stream().map(e -> Pair.of(e.getKey(), e.getValue())); -+ Streams.concat(Streams.concat(newlyResolvedCodeOwnersStream, cachedCodeOwnersStream), resolvedGroupsCodeOwnersStream) - .forEach( - p -> { - ImmutableSet.Builder annotationBuilder = ImmutableSet.builder(); -@@ -467,6 +538,12 @@ public class CodeOwnerResolver { - annotationBuilder.addAll( - annotations.get(CodeOwnerReference.create(ALL_USERS_WILDCARD))); - -+ // annotations for the groups this user is in apply as well -+ for (String group : usersToGroups.get(p.value())) { -+ annotationBuilder.addAll( -+ annotations.get(CodeOwnerReference.create(group))); -+ } -+ - if (!codeOwnersWithAnnotations.containsKey(p.value())) { - codeOwnersWithAnnotations.put(p.value(), new HashSet<>()); - } -@@ -570,7 +647,7 @@ public class CodeOwnerResolver { - } - - messages.add(String.format("email %s has no domain", email)); -- return false; -+ return true; // TVL: we allow domain-less strings which are treated as usernames. - } - - /** -@@ -585,11 +662,29 @@ public class CodeOwnerResolver { - */ - private ImmutableMap> lookupExternalIds( - ImmutableList.Builder messages, ImmutableSet emails) { -+ String[] actualEmails = emails.stream() -+ .filter(email -> email.contains("@")) -+ .toArray(String[]::new); -+ ImmutableSet usernames = emails.stream() -+ .filter(email -> !email.contains("@")) -+ .collect(ImmutableSet.toImmutableSet()); - try { -- ImmutableMap> extIdsByEmail = -- externalIdCache.byEmails(emails.toArray(new String[0])).asMap(); -+ ImmutableMap> extIds = -+ new ImmutableMap.Builder>() -+ .putAll(externalIdCache.byEmails(actualEmails).asMap()) -+ .putAll(externalIdCache.allByAccount().entries().stream() -+ .map(entry -> entry.getValue()) -+ .filter(externalId -> -+ externalId.key().scheme() != null && -+ externalId.key().isScheme(ExternalId.SCHEME_USERNAME) && -+ usernames.contains(externalId.key().id())) -+ .collect(toImmutableSetMultimap( -+ externalId -> externalId.key().id(), -+ externalId -> externalId)) -+ .asMap()) -+ .build(); - emails.stream() -- .filter(email -> !extIdsByEmail.containsKey(email)) -+ .filter(email -> !extIds.containsKey(email)) - .forEach( - email -> { - transientCodeOwnerCache.cacheNonResolvable(email); -@@ -598,7 +693,7 @@ public class CodeOwnerResolver { - "cannot resolve code owner email %s: no account with this email exists", - email)); - }); -- return extIdsByEmail; -+ return extIds; - } catch (IOException e) { - throw newInternalServerError( - String.format("cannot resolve code owner emails: %s", emails), e); -@@ -815,6 +910,15 @@ public class CodeOwnerResolver { - user != null ? user.getLoggableName() : currentUser.get().getLoggableName())); - return true; - } -+ if (!email.contains("@")) { -+ // the email is the username of the account, or a group, or something else. -+ messages.add( -+ String.format( -+ "account %s is visible to user %s", -+ accountState.account().id(), -+ user != null ? user.getLoggableName() : currentUser.get().getLoggableName())); -+ return true; -+ } - - if (user != null) { - if (user.hasEmailAddress(email)) { -diff --git a/java/com/google/gerrit/plugins/codeowners/backend/findowners/FindOwnersCodeOwnerConfigParser.java b/java/com/google/gerrit/plugins/codeowners/backend/findowners/FindOwnersCodeOwnerConfigParser.java -index 5f350998..7977ba55 100644 ---- a/java/com/google/gerrit/plugins/codeowners/backend/findowners/FindOwnersCodeOwnerConfigParser.java -+++ b/java/com/google/gerrit/plugins/codeowners/backend/findowners/FindOwnersCodeOwnerConfigParser.java -@@ -149,7 +149,8 @@ public class FindOwnersCodeOwnerConfigParser implements CodeOwnerConfigParser { - private static final String EOL = "[\\s]*(#.*)?$"; // end-of-line - private static final String GLOB = "[^\\s,=]+"; // a file glob - -- private static final String EMAIL_OR_STAR = "([^\\s<>@,]+@[^\\s<>@#,]+|\\*)"; -+ // Also allows usernames, and group:$GROUP_NAME. -+ private static final String EMAIL_OR_STAR = "([^\\s<>@,]+@[^\\s<>@#,]+?|\\*|[a-zA-Z0-9_\\-]+|group:[a-zA-Z0-9_\\-]+)"; - private static final String EMAIL_LIST = - "(" + EMAIL_OR_STAR + "(" + COMMA + EMAIL_OR_STAR + ")*)"; - -diff --git a/javatests/com/google/gerrit/plugins/codeowners/backend/AbstractFileBasedCodeOwnerBackendTest.java b/javatests/com/google/gerrit/plugins/codeowners/backend/AbstractFileBasedCodeOwnerBackendTest.java -index 7ec92959..59cf7e05 100644 ---- a/javatests/com/google/gerrit/plugins/codeowners/backend/AbstractFileBasedCodeOwnerBackendTest.java -+++ b/javatests/com/google/gerrit/plugins/codeowners/backend/AbstractFileBasedCodeOwnerBackendTest.java -@@ -424,7 +424,7 @@ public abstract class AbstractFileBasedCodeOwnerBackendTest extends AbstractCode - .commit() - .parent(head) - .message("Add invalid test code owner config") -- .add(JgitPath.of(codeOwnerConfigKey.filePath(getFileName())).get(), "INVALID")); -+ .add(JgitPath.of(codeOwnerConfigKey.filePath(getFileName())).get(), "INVALID!")); - } - - // Try to update the code owner config. -diff --git a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolverTest.java b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolverTest.java -index 6171aca9..37699012 100644 ---- a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolverTest.java -+++ b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolverTest.java -@@ -24,8 +24,10 @@ import com.google.gerrit.acceptance.TestAccount; - import com.google.gerrit.acceptance.TestMetricMaker; - import com.google.gerrit.acceptance.config.GerritConfig; - import com.google.gerrit.acceptance.testsuite.account.AccountOperations; -+import com.google.gerrit.acceptance.testsuite.group.GroupOperations; - import com.google.gerrit.acceptance.testsuite.request.RequestScopeOperations; - import com.google.gerrit.entities.Account; -+import com.google.gerrit.entities.AccountGroup; - import com.google.gerrit.plugins.codeowners.acceptance.AbstractCodeOwnersTest; - import com.google.gerrit.server.ServerInitiated; - import com.google.gerrit.server.account.AccountsUpdate; -@@ -51,6 +53,7 @@ public class CodeOwnerResolverTest extends AbstractCodeOwnersTest { - @Inject private RequestScopeOperations requestScopeOperations; - @Inject @ServerInitiated private Provider accountsUpdate; - @Inject private AccountOperations accountOperations; -+ @Inject private GroupOperations groupOperations; - @Inject private ExternalIdNotes.Factory externalIdNotesFactory; - @Inject private TestMetricMaker testMetricMaker; - @Inject private ExternalIdFactory externalIdFactory; -@@ -112,6 +115,18 @@ public class CodeOwnerResolverTest extends AbstractCodeOwnersTest { - .contains(String.format("account %s is visible to user %s", admin.id(), admin.username())); - } - -+ @Test -+ public void resolveCodeOwnerReferenceForUsername() throws Exception { -+ OptionalResultWithMessages result = -+ codeOwnerResolverProvider -+ .get() -+ .resolveWithMessages(CodeOwnerReference.create(admin.username())); -+ assertThat(result.get()).hasAccountIdThat().isEqualTo(admin.id()); -+ assertThat(result) -+ .hasMessagesThat() -+ .contains(String.format("account %s is visible to user %s", admin.id(), admin.username())); -+ } -+ - @Test - public void cannotResolveCodeOwnerReferenceForStarAsEmail() throws Exception { - OptionalResultWithMessages result = -@@ -127,6 +142,18 @@ public class CodeOwnerResolverTest extends AbstractCodeOwnersTest { - CodeOwnerResolver.ALL_USERS_WILDCARD)); - } - -+ @Test -+ public void cannotResolveCodeOwnerReferenceForGroup() throws Exception { -+ OptionalResultWithMessages result = -+ codeOwnerResolverProvider -+ .get() -+ .resolveWithMessages(CodeOwnerReference.create("group:Administrators")); -+ assertThat(result).isEmpty(); -+ assertThat(result) -+ .hasMessagesThat() -+ .contains("cannot resolve code owner email group:Administrators: this is a group"); -+ } -+ - @Test - public void resolveCodeOwnerReferenceForAmbiguousEmailIfOtherAccountIsInactive() - throws Exception { -@@ -397,6 +424,64 @@ public class CodeOwnerResolverTest extends AbstractCodeOwnersTest { - assertThat(result.hasUnresolvedCodeOwners()).isFalse(); - } - -+ @Test -+ public void resolvePathCodeOwnersWhenNonVisibleGroupIsUsed() throws Exception { -+ CodeOwnerConfig codeOwnerConfig = -+ CodeOwnerConfig.builder(CodeOwnerConfig.Key.create(project, "master", "/"), TEST_REVISION) -+ .addCodeOwnerSet( -+ CodeOwnerSet.createWithoutPathExpressions("group:Administrators")) -+ .build(); -+ -+ CodeOwnerResolverResult result = -+ codeOwnerResolverProvider -+ .get() -+ .resolvePathCodeOwners(codeOwnerConfig, Paths.get("/README.md")); -+ assertThat(result.codeOwnersAccountIds()).isEmpty(); -+ assertThat(result.ownedByAllUsers()).isFalse(); -+ assertThat(result.hasUnresolvedCodeOwners()).isTrue(); -+ } -+ -+ @Test -+ public void resolvePathCodeOwnersWhenVisibleGroupIsUsed() throws Exception { -+ AccountGroup.UUID createdGroupUUID = groupOperations -+ .newGroup() -+ .name("VisibleGroup") -+ .visibleToAll(true) -+ .addMember(admin.id()) -+ .create(); -+ -+ CodeOwnerConfig codeOwnerConfig = -+ CodeOwnerConfig.builder(CodeOwnerConfig.Key.create(project, "master", "/"), TEST_REVISION) -+ .addCodeOwnerSet( -+ CodeOwnerSet.createWithoutPathExpressions("group:VisibleGroup")) -+ .build(); -+ -+ CodeOwnerResolverResult result = -+ codeOwnerResolverProvider -+ .get() -+ .resolvePathCodeOwners(codeOwnerConfig, Paths.get("/README.md")); -+ assertThat(result.codeOwnersAccountIds()).containsExactly(admin.id()); -+ assertThat(result.ownedByAllUsers()).isFalse(); -+ assertThat(result.hasUnresolvedCodeOwners()).isFalse(); -+ } -+ -+ @Test -+ public void resolvePathCodeOwnersWhenUsernameIsUsed() throws Exception { -+ CodeOwnerConfig codeOwnerConfig = -+ CodeOwnerConfig.builder(CodeOwnerConfig.Key.create(project, "master", "/"), TEST_REVISION) -+ .addCodeOwnerSet( -+ CodeOwnerSet.createWithoutPathExpressions(admin.username())) -+ .build(); -+ -+ CodeOwnerResolverResult result = -+ codeOwnerResolverProvider -+ .get() -+ .resolvePathCodeOwners(codeOwnerConfig, Paths.get("/README.md")); -+ assertThat(result.codeOwnersAccountIds()).containsExactly(admin.id()); -+ assertThat(result.ownedByAllUsers()).isFalse(); -+ assertThat(result.hasUnresolvedCodeOwners()).isFalse(); -+ } -+ - @Test - public void resolvePathCodeOwnersNonResolvableCodeOwnersAreFilteredOut() throws Exception { - CodeOwnerConfig codeOwnerConfig = -@@ -655,7 +740,7 @@ public class CodeOwnerResolverTest extends AbstractCodeOwnersTest { - "domain example.com of email foo@example.org@example.com is allowed"); - assertIsEmailDomainAllowed( - "foo@example.org", false, "domain example.org of email foo@example.org is not allowed"); -- assertIsEmailDomainAllowed("foo", false, "email foo has no domain"); -+ assertIsEmailDomainAllowed("foo", true, "email foo has no domain"); - assertIsEmailDomainAllowed( - "foo@example.com@example.org", - false, -diff --git a/javatests/com/google/gerrit/plugins/codeowners/backend/findowners/FindOwnersCodeOwnerConfigParserTest.java b/javatests/com/google/gerrit/plugins/codeowners/backend/findowners/FindOwnersCodeOwnerConfigParserTest.java -index 260e635e..7aab99d0 100644 ---- a/javatests/com/google/gerrit/plugins/codeowners/backend/findowners/FindOwnersCodeOwnerConfigParserTest.java -+++ b/javatests/com/google/gerrit/plugins/codeowners/backend/findowners/FindOwnersCodeOwnerConfigParserTest.java -@@ -158,16 +158,42 @@ public class FindOwnersCodeOwnerConfigParserTest extends AbstractCodeOwnerConfig - codeOwnerConfigParser.parse( - TEST_REVISION, - CodeOwnerConfig.Key.create(project, "master", "/"), -- getCodeOwnerConfig(EMAIL_1, "INVALID", "NOT_AN_EMAIL", EMAIL_2))); -+ getCodeOwnerConfig(EMAIL_1, "INVALID!", "NOT!AN_EMAIL", EMAIL_2))); - assertThat(exception.getFullMessage(FindOwnersBackend.CODE_OWNER_CONFIG_FILE_NAME)) - .isEqualTo( - String.format( - "invalid code owner config file '/OWNERS' (project = %s, branch = master):\n" -- + " invalid line: INVALID\n" -- + " invalid line: NOT_AN_EMAIL", -+ + " invalid line: INVALID!\n" -+ + " invalid line: NOT!AN_EMAIL", - project)); - } - -+ @Test -+ public void codeOwnerConfigWithUsernames() throws Exception { -+ assertParseAndFormat( -+ getCodeOwnerConfig(EMAIL_1, "USERNAME", EMAIL_2), -+ codeOwnerConfig -> -+ assertThat(codeOwnerConfig) -+ .hasCodeOwnerSetsThat() -+ .onlyElement() -+ .hasCodeOwnersEmailsThat() -+ .containsExactly(EMAIL_1, "USERNAME", EMAIL_2), -+ getCodeOwnerConfig(EMAIL_1, "USERNAME", EMAIL_2)); -+ } -+ -+ @Test -+ public void codeOwnerConfigWithGroups() throws Exception { -+ assertParseAndFormat( -+ getCodeOwnerConfig(EMAIL_1, "group:tvl-employees", EMAIL_2), -+ codeOwnerConfig -> -+ assertThat(codeOwnerConfig) -+ .hasCodeOwnerSetsThat() -+ .onlyElement() -+ .hasCodeOwnersEmailsThat() -+ .containsExactly(EMAIL_1, "group:tvl-employees", EMAIL_2), -+ getCodeOwnerConfig(EMAIL_1, "group:tvl-employees", EMAIL_2)); -+ } -+ - @Test - public void codeOwnerConfigWithComment() throws Exception { - assertParseAndFormat( diff --git a/third_party/gerrit_plugins/oauth/default.nix b/third_party/gerrit_plugins/oauth/default.nix deleted file mode 100644 index a02e2dd1f..000000000 --- a/third_party/gerrit_plugins/oauth/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ depot, pkgs, ... }@args: - -let - inherit (import ../builder.nix args) buildGerritBazelPlugin; -in -buildGerritBazelPlugin rec { - name = "oauth"; - version = "982316"; - src = pkgs.fetchgit { - url = "https://gerrit.googlesource.com/plugins/oauth"; - rev = "98231604d60788bb43490f1a301d792817ac8008"; - hash = "sha256-AuVO1Yys8BYqGHZI/adszCUg0JM2v4Td4fe26LdOPLM="; - }; - depsHash = "sha256:10py3vq9sfq5j4gjrlxff01vp346jbcygry06x4zc26xgnf4pa9r"; - postOverlayPlugin = '' - cp "${src}/external_plugin_deps.bzl" "$out/plugins/external_plugin_deps.bzl" - ''; -} diff --git a/third_party/lix_forgejo/0001-lix-Make-a-Code-Review-Gerrit-tab.patch b/third_party/lix_forgejo/0001-lix-Make-a-Code-Review-Gerrit-tab.patch new file mode 100644 index 000000000..38ce925d4 --- /dev/null +++ b/third_party/lix_forgejo/0001-lix-Make-a-Code-Review-Gerrit-tab.patch @@ -0,0 +1,28 @@ +From 0edb45d9dc9a2688c8b66a21df2a555f864fb81c Mon Sep 17 00:00:00 2001 +From: Jade Lovelace +Date: Thu, 16 May 2024 18:15:54 -0700 +Subject: [PATCH 1/2] lix: Make a Code Review (Gerrit) tab + +--- + templates/repo/header.tmpl | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/templates/repo/header.tmpl b/templates/repo/header.tmpl +index 21017415c1..c5a36b2203 100644 +--- a/templates/repo/header.tmpl ++++ b/templates/repo/header.tmpl +@@ -99,6 +99,11 @@ + + {{end}} + ++ {{if and (eq .Repository.Name "snix") (eq .Repository.OwnerName "snix")}} ++ ++ {{svg "octicon-code-review"}} Code Review (Gerrit) ++ ++ {{end}} + {{if .Permission.CanRead $.UnitTypeExternalTracker}} + + {{svg "octicon-link-external"}} {{ctx.Locale.Tr "repo.issues"}} +-- +2.45.1 + diff --git a/third_party/lix_forgejo/0002-lix-link-gerrit-cl-and-change-ids.patch b/third_party/lix_forgejo/0002-lix-link-gerrit-cl-and-change-ids.patch new file mode 100644 index 000000000..f987843d0 --- /dev/null +++ b/third_party/lix_forgejo/0002-lix-link-gerrit-cl-and-change-ids.patch @@ -0,0 +1,113 @@ +From c560d6e110377fb6f42e841a0bd35f80c0f2eb29 Mon Sep 17 00:00:00 2001 +From: Jade Lovelace +Date: Thu, 16 May 2024 19:56:25 -0700 +Subject: [PATCH 2/2] lix: link gerrit cl/ and change-ids + +This code is a bit dubious but you know, golang + +Co-authored-by: Ryan Lahfa +--- + modules/markup/html.go | 59 ++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 59 insertions(+) + +diff --git a/modules/markup/html.go b/modules/markup/html.go +index 2e65827bf7..2d474077a5 100644 +--- a/modules/markup/html.go ++++ b/modules/markup/html.go +@@ -50,6 +50,20 @@ var ( + // so that abbreviated hash links can be used as well. This matches git and GitHub usability. + hashCurrentPattern = regexp.MustCompile(`(?:\s|^|\(|\[)([0-9a-f]{7,64})(?:\s|$|\)|\]|[.,:](\s|$))`) + ++ // Gerrit change ID pattern ++ changeIdPattern = GerritPattern{ ++ urlMatch: 1, ++ displayMatch: 1, ++ pattern: regexp.MustCompile(`(?:\s|^|\(|\[)(I[0-9a-f]{8,40})(?:\s|$|\)|\]|[.,](\s|$))`), ++ } ++ ++ // Gerrit cl/ pattern ++ clSlashPattern = GerritPattern{ ++ urlMatch: 2, ++ displayMatch: 1, ++ pattern: regexp.MustCompile(`(?:^|[\s\]\[(){},.;:!?])(cl/([0-9]{0,6}))(?:$|[\s\]\[(){},.;:!?])`), ++ } ++ + // shortLinkPattern matches short but difficult to parse [[name|link|arg=test]] syntax + shortLinkPattern = regexp.MustCompile(`\[\[(.*?)\]\](\w*)`) + +@@ -77,6 +91,14 @@ var ( + InlineCodeBlockRegex = regexp.MustCompile("`[^`]+`") + ) + ++type GerritPattern struct { ++ // The match group to put in the URL ++ urlMatch int ++ // The match group to render as the link ++ displayMatch int ++ pattern *regexp.Regexp ++} ++ + // CSS class for action keywords (e.g. "closes: #1") + const keywordClass = "issue-keyword" + +@@ -152,6 +174,7 @@ var defaultProcessors = []processor{ + issueIndexPatternProcessor, + commitCrossReferencePatternProcessor, + hashCurrentPatternProcessor, ++ gerritCLPatternProcessor, + emailAddressProcessor, + emojiProcessor, + emojiShortCodeProcessor, +@@ -179,6 +202,7 @@ var commitMessageProcessors = []processor{ + issueIndexPatternProcessor, + commitCrossReferencePatternProcessor, + hashCurrentPatternProcessor, ++ gerritCLPatternProcessor, + emailAddressProcessor, + emojiProcessor, + emojiShortCodeProcessor, +@@ -788,6 +812,41 @@ func shortLinkProcessor(ctx *RenderContext, node *html.Node) { + } + } + ++func gerritCLPatternProcessor(ctx *RenderContext, node *html.Node) { ++ if ctx.Metas == nil || node == nil { ++ return ++ } ++ ++ pats := []*GerritPattern{ ++ &changeIdPattern, ++ &clSlashPattern, ++ } ++ ++ next := node.NextSibling ++ for node != nil && node != next { ++ for _, pat := range pats { ++ m := pat.pattern.FindStringSubmatchIndex(node.Data) ++ if m == nil { ++ continue ++ } ++ ++ linkPart := node.Data[m[pat.urlMatch*2]:m[pat.urlMatch*2+1]] ++ linkNamePart := node.Data[m[pat.displayMatch*2]:m[pat.displayMatch*2+1]] ++ link := util.URLJoin("https://cl.snix.dev/q", linkPart) ++ replaceContent(node, m[pat.displayMatch*2], m[pat.displayMatch*2+1], createCodeLink(link, linkNamePart, "")) ++ } ++ ++ // FIXME: I don't understand how any of this stuff was supposed to work to ++ // begin with, since it seems like it returns if it doesn't just match in ++ // the first node???! ++ if node.NextSibling == nil { ++ return ++ } ++ ++ node = node.NextSibling.NextSibling ++ } ++} ++ + func fullIssuePatternProcessor(ctx *RenderContext, node *html.Node) { + if ctx.Metas == nil { + return +-- +2.47.0 + diff --git a/third_party/lix_forgejo/api-dont-notify.patch b/third_party/lix_forgejo/api-dont-notify.patch new file mode 100644 index 000000000..8a446884e --- /dev/null +++ b/third_party/lix_forgejo/api-dont-notify.patch @@ -0,0 +1,79 @@ +From 616ea9925fb7a28f1594694665ca89462bcbd461 Mon Sep 17 00:00:00 2001 +From: Jade Lovelace +Date: Tue, 19 Mar 2024 18:42:13 -0700 +Subject: [PATCH] Add a dont_notify option to the issue create api + +yolo +--- + modules/structs/issue.go | 1 + + routers/api/v1/repo/issue.go | 2 +- + routers/web/repo/issue.go | 2 +- + services/issue/issue.go | 6 +++++- + 4 files changed, 8 insertions(+), 3 deletions(-) + +diff --git a/modules/structs/issue.go b/modules/structs/issue.go +index e2b49e94c5..09d239cdb7 100644 +--- a/modules/structs/issue.go ++++ b/modules/structs/issue.go +@@ -97,6 +97,7 @@ type CreateIssueOption struct { + // list of label ids + Labels []int64 `json:"labels"` + Closed bool `json:"closed"` ++ DontNotify bool `json:"dont_notify"` + } + + // EditIssueOption options for editing an issue +diff --git a/routers/api/v1/repo/issue.go b/routers/api/v1/repo/issue.go +index 0d304dd66d..d9431ef201 100644 +--- a/routers/api/v1/repo/issue.go ++++ b/routers/api/v1/repo/issue.go +@@ -708,7 +708,7 @@ func CreateIssue(ctx *context.APIContext) { + form.Labels = make([]int64, 0) + } + +- if err := issue_service.NewIssue(ctx, ctx.Repo.Repository, issue, form.Labels, nil, assigneeIDs); err != nil { ++ if err := issue_service.NewIssue(ctx, ctx.Repo.Repository, issue, form.Labels, nil, assigneeIDs, !form.DontNotify); err != nil { + if errors.Is(err, user_model.ErrBlockedByUser) { + ctx.Error(http.StatusForbidden, "BlockedByUser", err) + return +diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go +index afa6160d42..dbc500819e 100644 +--- a/routers/web/repo/issue.go ++++ b/routers/web/repo/issue.go +@@ -1249,7 +1249,7 @@ func NewIssuePost(ctx *context.Context) { + Ref: form.Ref, + } + +- if err := issue_service.NewIssue(ctx, repo, issue, labelIDs, attachments, assigneeIDs); err != nil { ++ if err := issue_service.NewIssue(ctx, repo, issue, labelIDs, attachments, assigneeIDs, true); err != nil { + if errors.Is(err, user_model.ErrBlockedByUser) { + ctx.RenderWithErr(ctx.Tr("repo.issues.blocked_by_user"), tplIssueNew, form) + return +diff --git a/services/issue/issue.go b/services/issue/issue.go +index 5e726176d0..cdb2f69828 100644 +--- a/services/issue/issue.go ++++ b/services/issue/issue.go +@@ -24,7 +24,7 @@ import ( + ) + + // NewIssue creates new issue with labels for repository. +-func NewIssue(ctx context.Context, repo *repo_model.Repository, issue *issues_model.Issue, labelIDs []int64, uuids []string, assigneeIDs []int64) error { ++func NewIssue(ctx context.Context, repo *repo_model.Repository, issue *issues_model.Issue, labelIDs []int64, uuids []string, assigneeIDs []int64, notify bool) error { + // Check if the user is not blocked by the repo's owner. + if user_model.IsBlocked(ctx, repo.OwnerID, issue.PosterID) { + return user_model.ErrBlockedByUser +@@ -45,7 +45,11 @@ func NewIssue(ctx context.Context, repo *repo_model.Repository, issue *issues_mo + return err + } + ++ if !notify { ++ return nil ++ } + notify_service.NewIssue(ctx, issue, mentions) ++ + if len(issue.Labels) > 0 { + notify_service.IssueChangeLabels(ctx, issue.Poster, issue, issue.Labels, nil) + } +-- +2.44.0 + diff --git a/third_party/lix_forgejo/default.nix b/third_party/lix_forgejo/default.nix new file mode 100644 index 000000000..c864592ac --- /dev/null +++ b/third_party/lix_forgejo/default.nix @@ -0,0 +1,18 @@ +# Patches that the Lix core team developed for git.lix.systems +# Re-applied for git.snix.dev +{ ... }: { + patches = { + # Show a link to upstream for a nixos/nix repository. + upstream_link = ./upstream-link.patch; + # Make it possible not to be notified upon issue creation. + # Minimize noise. + api_dont_notify = ./api-dont-notify.patch; + # Sign in redirection to the OAuth 2 handler. + signin_redirect = ./signin-redirect.patch; + # Series to make Forgejo more Gerrit compatible. + forgejo_is_now_gerrit_native = ./0001-lix-Make-a-Code-Review-Gerrit-tab.patch; + # Modified for our Gerrit instance. + forgejo_knows_about_gerrit = ./0002-lix-link-gerrit-cl-and-change-ids.patch; + }; + custom_emojis = ./emojis.txt; +} diff --git a/third_party/lix_forgejo/emojis.txt b/third_party/lix_forgejo/emojis.txt new file mode 100644 index 000000000..3a59d6cf6 --- /dev/null +++ b/third_party/lix_forgejo/emojis.txt @@ -0,0 +1 @@ +dragnangry, dragnaww, dragnblanketgrumpy, dragnblanket, dragnblanketsleeppats, dragnblanketsleep, dragnconfused, dragncookie, dragncoolmlem, dragncool, dragncrysmile, dragndrool, dragneyes, dragnfloshed, dragnflushed, dragngrimace, dragnhappy, dragnhatch, dragnheadphones, dragnheadtilt, dragnhearteyes, dragnheart, dragnloaf, dragnmelt, dragnmlem, dragno, dragnowo, dragnpats, dragnpizza, dragnsad, dragnsarc, dragnshock, dragnsip, dragnsleep, dragnsmirk, dragnsob, dragnsweats, dragntea, dragnthinkflare, dragnthinkhappy, dragnthink, dragnthx, dragnupsidedown, dragnuwumlem, dragnuwu, dragnwitch, dragnyell, drgn_0_0, drgn_3c_evil, drgn_3c, drgn_angel_blep, drgn_angel_happy, drgn_angel_mlem, drgn_angel_pleading, drgn_angel, drgn_angry, drgn_aww, drgn_blep, drgn_blush, drgn_boop, drgn_bottom, drgn_box, drgn_bread, drgn_comfy_blep, drgn_comfy_cup_mlem, drgn_comfy_cup, drgn_comfy_cute, drgn_comfy_drowsy, drgn_comfy_evil, drgn_comfy_happy, drgn_comfy_mlem, drgn_comfy_owo, drgn_comfy, drgn_comfy_smug, drgn_comfy__w_, drgn_confused, drgn_cool_fingergun, drgn_cool, drgn_cool_reject, drgn_cry_loud, drgn_cry, drgn_cup_drowsy, drgn_cup_mlem, drgn_cup, drgn_cute, drgn_dark_mlem, drgn_dark, drgn_dizzy, drgn_drool, drgn_drowsy, drgn_eastern, drgn_evil, drgn_fingergun, drgn_fire_blue, drgn_fire, drgn_flag_ace, drgn_flag_agender, drgn_flag_ambiamorous, drgn_flag_androgyne, drgn_flag_aroflux, drgn_flag_aro, drgn_flag_autism, drgn_flag_bigender, drgn_flag_bi, drgn_flag_demiace, drgn_flag_demiaro, drgn_flag_demiflux, drgn_flag_demigirl, drgn_flag_demiguy, drgn_flag_demilesbian, drgn_flag_deminb, drgn_flag_disabled, drgn_flag_finsexual, drgn_flag_gay, drgn_flag_genderfluid, drgn_flag_intersex, drgn_flag_lesbian, drgn_flag_nb, drgn_flag_pan, drgn_flag_plural, drgn_flag_polyam, drgn_flag_rainbow, drgn_flag_salmacian, drgn_flag_sapphic, drgn_flag_trans, drgn_flat_blep, drgn_flat_blush, drgn_flat_happy, drgn_flat_heart, drgn_flat_mute, drgn_flat_nervous, drgn_flat_owo, drgn_flat_pleading, drgn_flat, drgn_flat_sleep, drgn_flat_sob_heart, drgn_flat_sob, drgn_flat_x_x, drgn_flush, drgn_glare, drgn_glare_sob, drgn_glasses, drgn_gun, drgn_happy_blep, drgn_happy_mlem, drgn_happy, drgn_hatch_mlem, drgn_hatch, drgn_heart, drgn_hidden, drgn_hide_blush, drgn_hide_nervous, drgn_hide, drgn_hyper, drgn_in_cup, drgn_knife_angry, drgn_knife, drgn_laser_end_hit, drgn_laser_end, drgn_laser_mid, drgn_laser_short_hit, drgn_laser_short, drgn_laser_start, drgn_lick, drgn_lol_nervous, drgn_lol, drgn_lol_tear, drgn_lurk_blep, drgn_lurk_cute, drgn_lurk_nervous, drgn_lurk_notice, drgn_lurk_owo, drgn_lurk_pleading, drgn_lurk, drgn_lurk_sob, drgn_lurk__w_, drgn_mlem, drgn_music, drgn_mute, drgn_nauseated, drgn_nervous, drgn_neutral, drgn_nom_blob_heart, drgn_nom_blob_nervous, drgn_nom_blob, drgn_nom_book, drgn_nom_bread, drgn_nom_bun_heart, drgn_nom_bun_nervous, drgn_nom_bun, drgn_nom_burger, drgn_nom_cat_heart, drgn_nom_cat_nervous, drgn_nom_cat, drgn_nom_chocolate, drgn_nom_cookie, drgn_nom_donut, drgn_nom_dragn_heart, drgn_nom_dragn_nervous, drgn_nom_dragn, drgn_nom_duck_heart, drgn_nom_duck_nervous, drgn_nom_duck, drgn_nom_egg, drgn_nom_fox_heart, drgn_nom_fox_nervous, drgn_nom_fox, drgn_nom_fries, drgn_nom_haj_heart, drgn_nom_haj_nervous, drgn_nom_haj, drgn_nom_hand, drgn_nom_melon, drgn_nom_pita, drgn_nom_pizza, drgn_nom_verified, drgn_nom_waffle, drgn_notice, drgn_nuzzle_heart, drgn_nuzzle, drgn_o_o, drgn_outage, drgn_owo_mlem, drgn_owo, drgn_paintbrush, drgn_pat_blush, drgn_pat_cry, drgn_pat_flat, drgn_pat, drgn_pat_sob, drgn_pat_up, drgn_pleading, drgn, drgn_pout, drgn_rainbow, drgn_reject, drgn_sad, drgn_santa, drgn_science, drgn_scream_angry, drgn_scream, drgn_scream_stare, drgn_shocked, drgn_sip_glare, drgn_sip_nervous, drgn_sip_owo, drgn_sip, drgn_sip_woozy, drgn_sleep, drgn_smart, drgn_smug2, drgn_smug, drgn_sneaky, drgn_sob, drgn_sparkle, drgn_tail, drgn_thief, drgn_think_confused, drgn_think_cool, drgn_think_evil, drgn_think_hyper, drgn_think_owo, drgn_think, drgn_think_smart, drgn_think_smug, drgn_think_woozy, drgn_think__w_, drgn_thumbsdown, drgn_thumbsup, drgn_tooth, drgn_up_blep, drgn_up_cup, drgn_up_cute, drgn_up_happy, drgn_up, drgn_uwu, drgn_verified, drgn_wave, drgn_weary, drgn_weary_sob, drgn_woozy, drgn__w_, drgn_wrench, drgn_x_x, drgn_yell, drgn_yoshi_end, drgn_yoshi_mid, drgn_yoshi_start, neocat_0_0, neocat_3c, neocat_amogus, neocat_angel_pleading, neocat_angel, neocat_angry, neocat_approve, neocat_astronaut_gun, neocat_astronaut, neocat_aww, neocat_baa, neocat_blank, neocat_blep, neocat_blush_hide, neocat_blush, neocat_bongo_down, neocat_bongo_up, neocat_book_owo, neocat_book, neocat_boop_blep, neocat_boop_blush, neocat_boop_cute, neocat_boop_googly, neocat_boop_happy, neocat_boop_nervous, neocat_boop_owo, neocat_boop, neocat_boop_woozy, neocat_bottom, neocat_box, neocat_catmode, neocat_cofe, neocat_comfy_happy, neocat_comfy_mug, neocat_comfy, neocat_comfy_sip, neocat_comfy__w_, neocat_confused, neocat_cool_fingerguns, neocat_cool, neocat_cry_loud, neocat_cry, neocat_cute, neocat_cute_reach, neocat_devil, neocat_dizzy, neocat_drowsy, neocat_evil_3c, neocat_evil, neocat_facepalm, neocat_fingerguns, neocat_flag_ace, neocat_flag_agender, neocat_flag_ambiamorous, neocat_flag_androgyne, neocat_flag_aroflux, neocat_flag_aro, neocat_flag_bigender, neocat_flag_bi, neocat_flag_demiace, neocat_flag_demiaro, neocat_flag_demiflux, neocat_flag_demigay, neocat_flag_demigirl, neocat_flag_demigiuy, neocat_flag_demiguy, neocat_flag_demilesbian, neocat_flag_deminb, neocat_flag_disabled, neocat_flag_finsexual, neocat_flag_gay, neocat_flag_genderfluid, neocat_flag_intersex, neocat_flag_lesbian, neocat_flag_nb, neocat_flag_pan, neocat_flag_plural, neocat_flag_polyam, neocat_flag_salmacian, neocat_flag_sapphic, neocat_flag_trans, neocat_floof_angel, neocat_floof_cute, neocat_floof_devil, neocat_floof_happy, neocat_floof_mug, neocat_floof_owo, neocat_floof, neocat_floof_reach, neocat_floof_sad, neocat_floof_sad_reach, neocat_floof__w_, neocat_flop_blep, neocat_flop_happy, neocat_flop, neocat_flop_sleep, neocat_flop__w_, neocat_flush, neocat_foxmask, neocat_glare, neocat_glare_sob, neocat_glasses, neocat_googly_blep, neocat_googly_drool, neocat_googly, neocat_googly_shocked, neocat_googly_woozy, neocat_gun, neocat_happy_blep, neocat_happy, neocat_heart, neocat_hug_blob_heart, neocat_hug_blob, neocat_hug_blob_sad, neocat_hug_bun_heart, neocat_hug_bun, neocat_hug_bun_sad, neocat_hug_dragn_alt, neocat_hug_dragn_heart, neocat_hug_dragn, neocat_hug_dragn_sad_alt, neocat_hug_dragn_sad, neocat_hug_duck_heart, neocat_hug_duck, neocat_hug_duck_sad, neocat_hug_fox_heart, neocat_hug_fox, neocat_hug_fox_sad, neocat_hug_haj_heart, neocat_hug_haj, neocat_hug_haj_sad, neocat_hug_heart, neocat_hug, neocat_hug_sad, neocat_hyper, neocat_kirby, neocat_kirby_succ, neocat_kisser, neocat_knife, neocat_knives, neocat_laptop_notice, neocat_laptop_owo, neocat_laptop, neocat_laugh_nervous, neocat_laugh, neocat_laugh_sweat, neocat_laugh_tears, neocat_lul, neocat_magnify, neocat_melt_2, neocat_melt_3, neocat_melt_blep, neocat_melt_blush, neocat_melt_happy, neocat_melt, neocat_melt_reach, neocat_melt_sob_heart, neocat_melt_sob, neocat_mug_drink, neocat_mug_owo, neocat_mug, neocat_mug__w_, neocat_nervous, neocat_nom_blob_nervous, neocat_nom_blob, neocat_nom_bread, neocat_nom_bun_nervous, neocat_nom_bun, neocat_nom_burger, neocat_nom_cat_nervous, neocat_nom_cat, neocat_nom_cookie, neocat_nom_donut, neocat_nom_dragn_nervous, neocat_nom_dragn, neocat_nom_egg, neocat_nom_fox_nervous, neocat_nom_fox, neocat_nom_haj_nervous, neocat_nom_haj, neocat_nom_melon, neocat_nom_pita, neocat_nom_pizza, neocat_nom_toblerone, neocat_nom_verified, neocat_nom_waffle, neocat_notice, neocat_o_o, neocat_owo_blep, neocat_owo, neocat_pat_floof, neocat_pat_flop, neocat_pat_googly, neocat_pat_happy, neocat_pat, neocat_pat_sad, neocat_pat_sob, neocat_pat_up, neocat_pat_woozy, neocat_peek_bread, neocat_peek_comfy, neocat_peek_knife, neocat_peek_owo, neocat_peek, neocat_pensive, neocat_phone, neocat_pleading, neocat_pleading_reach, neocat, neocat_police, neocat_pout, neocat_rainbow, neocat_reach_drool, neocat_reach, neocat_reject, neocat_sad, neocat_sad_reach, neocat_santa, neocat_science, neocat_scream_angry, neocat_scream, neocat_scream_scared, neocat_scream_stare, neocat_shocked, neocat_shy, neocat_sign_aaa, neocat_sign_no, neocat_sign_nya, neocat_sign_thx, neocat_sign_yes, neocat_sign_yip, neocat_sip_glare, neocat_sip_nervous, neocat_sip_owo, neocat_sip, neocat_smol, neocat_smug, neocat_snuggle_fox, neocat_snuggle, neocat_sob, neocat_solder_googly, neocat_solder, neocat_stretch_dl, neocat_stretch_down_end, neocat_stretch_down, neocat_stretch_dr, neocat_stretch_h, neocat_stretch_left, neocat_stretch_right, neocat_stretch_ul, neocat_stretch_up, neocat_stretch_ur, neocat_stretch_v, neocat_surprised_pika, neocat_surprised, neocat_sweat, neocat_thief, neocat_think_anime, neocat_think_cool, neocat_think_googly, neocat_thinking, neocat_think_owo, neocat_think, neocat_think_woozy, neocat_thonk, neocat_thumbsdown, neocat_thumbsup, neocat_up_paws, neocat_up, neocat_up_sleep, neocat_up__w_, neocat_uwu, neocat_verified, neocat_vr, neocat_what, neocat_wink_blep, neocat_wink, neocat_woozy, neocat__w_, neocat_x_x, neocat_yeet, neocat_yell, neofox_0_0, neofox_3c, neofox_amogus, neofox_angel_pleading, neofox_angel, neofox_angry, neofox_approve, neofox_astronaut_gun, neofox_astronaut, neofox_aww, neofox_baa, neofox_blank, neofox_blep, neofox_blush_hide, neofox_blush, neofox_bongo_down, neofox_bongo_up, neofox_book_owo, neofox_book, neofox_boop_blep, neofox_boop_blush, neofox_boop_cute, neofox_boop_googly, neofox_boop_happy, neofox_boop_nervous, neofox_boop_owo, neofox_boop, neofox_boop_woozy, neofox_bottom, neofox_box, neofox_catmask, neofox_catmode, neofox_cofe, neofox_comfy_happy, neofox_comfy_mug, neofox_comfy, neofox_comfy_sip, neofox_comfy__w_, neofox_confused, neofox_cool_fingerguns, neofox_cool, neofox_cry_loud, neofox_cry, neofox_cute, neofox_cute_reach, neofox_devil, neofox_dizzy, neofox_drowsy, neofox_evil_3c, neofox_evil, neofox_facepalm, neofox_fingerguns, neofox_flag_ace, neofox_flag_agender, neofox_flag_ambiamorous, neofox_flag_androgyne, neofox_flag_aroflux, neofox_flag_aro, neofox_flag_bigender, neofox_flag_bi, neofox_flag_demiace, neofox_flag_demiaro, neofox_flag_demiflux, neofox_flag_demigirl, neofox_flag_demiguy, neofox_flag_demilesbian, neofox_flag_deminb, neofox_flag_disabled, neofox_flag_finsexual, neofox_flag_gay, neofox_flag_genderfluid, neofox_flag_intersex, neofox_flag_lesbian, neofox_flag_nb, neofox_flag_pan, neofox_flag_plural, neofox_flag_polyam, neofox_flag_salmacian, neofox_flag_sapphic, neofox_flag_trans, neofox_floof_angel, neofox_floof_cute, neofox_floof_devil, neofox_floof_happy, neofox_floof_mug, neofox_floof_owo, neofox_floof, neofox_floof_reach, neofox_floof_sad, neofox_floof_sad_reach, neofox_floof__w_, neofox_flop_blep, neofox_flop_happy, neofox_flop, neofox_flop_sleep, neofox_flop__w_, neofox_flush, neofox_glare, neofox_glare_sob, neofox_glasses, neofox_googly_blep, neofox_googly_drool, neofox_googly, neofox_googly_shocked, neofox_googly_woozy, neofox_gun, neofox_happy_blep, neofox_happy, neofox_heart, neofox_hug_blob_heart, neofox_hug_blob, neofox_hug_blob_sad, neofox_hug_bun_heart, neofox_hug_bun, neofox_hug_bun_sad, neofox_hug_cat_heart, neofox_hug_cat, neofox_hug_cat_sad, neofox_hug_dragn_alt, neofox_hug_dragn_heart, neofox_hug_dragn, neofox_hug_dragn_sad_alt, neofox_hug_dragn_sad, neofox_hug_duck_heart, neofox_hug_duck, neofox_hug_duck_sad, neofox_hug_haj_heart, neofox_hug_haj, neofox_hug_haj_sad, neofox_hug_heart, neofox_hug, neofox_hug_sad, neofox_hyper, neofox_kirby, neofox_kirby_succ, neofox_kisser, neofox_knife, neofox_knives, neofox_laptop_notice, neofox_laptop_owo, neofox_laptop, neofox_laugh_nervous, neofox_laugh, neofox_laugh_sweat, neofox_laugh_tears, neofox_lul, neofox_magnify, neofox_melt_2, neofox_melt_3, neofox_melt_blep, neofox_melt_blush, neofox_melt_happy, neofox_melt, neofox_melt_reach, neofox_melt_sob_heart, neofox_melt_sob, neofox_mug_drink, neofox_mug_owo, neofox_mug, neofox_mug__w_, neofox_nervous, neofox_nom_blob_nervous, neofox_nom_blob, neofox_nom_bread, neofox_nom_bun_nervous, neofox_nom_bun, neofox_nom_burger, neofox_nom_cat_nervous, neofox_nom_cat, neofox_nom_cookie, neofox_nom_donut, neofox_nom_dragn_nervous, neofox_nom_dragn, neofox_nom_egg, neofox_nom_fox_nervous, neofox_nom_fox, neofox_nom_haj_nervous, neofox_nom_haj, neofox_nom_melon, neofox_nom_pita, neofox_nom_pizza, neofox_nom_toblerone, neofox_nom_verified, neofox_nom_waffle, neofox_notice, neofox_o_o, neofox_owo_blep, neofox_owo, neofox_pat_floof, neofox_pat_flop, neofox_pat_googly, neofox_pat_happy, neofox_pat, neofox_pat_sad, neofox_pat_snug, neofox_pat_sob, neofox_pat_up, neofox_pat_woozy, neofox_peek_bread, neofox_peek_comfy, neofox_peek_knife, neofox_peek_owo, neofox_peek, neofox_pensive, neofox_phone, neofox_pleading, neofox_pleading_reach, neofox, neofox_police, neofox_pout, neofox_rainbow, neofox_reach_drool, neofox_reach, neofox_reject, neofox_sad, neofox_sad_reach, neofox_santa, neofox_science, neofox_scream_angry, neofox_scream, neofox_scream_scared, neofox_scream_stare, neofox_shocked, neofox_shy, neofox_sign_aaa, neofox_sign_no, neofox_sign_nya, neofox_sign_thx, neofox_sign_yes, neofox_sign_yip, neofox_sip_glare, neofox_sip_nervous, neofox_sip_owo, neofox_sip, neofox_smol, neofox_smug, neofox_snug_glare, neofox_snuggle_cat, neofox_snuggle, neofox_snug_nervous, neofox_snug_owo, neofox_snug, neofox_sob, neofox_solder_googly, neofox_solder, neofox_stretch_dl, neofox_stretch_down_end, neofox_stretch_down, neofox_stretch_dr, neofox_stretch_h, neofox_stretch_left, neofox_stretch_right, neofox_stretch_ul, neofox_stretch_up, neofox_stretch_ur, neofox_stretch_v, neofox_surprised_pika, neofox_surprised, neofox_sweat, neofox_thief, neofox_think_anime, neofox_think_cool, neofox_think_googly, neofox_thinking, neofox_think_owo, neofox_think, neofox_think_woozy, neofox_thonk, neofox_thumbsdown, neofox_thumbsup, neofox_up_paws, neofox_up, neofox_up_sleep, neofox_up__w_, neofox_uwu, neofox_verified, neofox_vr, neofox_what, neofox_wink_blep, neofox_wink, neofox_woozy, neofox__w_, neofox_x_x, neofox_yeet, neofox_yell diff --git a/third_party/lix_forgejo/signin-redirect.patch b/third_party/lix_forgejo/signin-redirect.patch new file mode 100644 index 000000000..699ca420f --- /dev/null +++ b/third_party/lix_forgejo/signin-redirect.patch @@ -0,0 +1,30 @@ +From efba969f2ea6505417546e5f628066e3f10817d5 Mon Sep 17 00:00:00 2001 +From: Puck Meerburg +Date: Wed, 8 May 2024 19:28:34 +0000 +Subject: [PATCH] Auto-redirect to oauth2 if a provider is available. + +--- + routers/web/auth/auth.go | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/routers/web/auth/auth.go b/routers/web/auth/auth.go +index 50fd760d80..c6cb5c9075 100644 +--- a/routers/web/auth/auth.go ++++ b/routers/web/auth/auth.go +@@ -186,6 +186,13 @@ func SignIn(ctx *context.Context) { + ctx.ServerError("UserSignIn", err) + return + } ++ ++ if len(oauth2Providers) > 0 { ++ provider := oauth2Providers[0] ++ ctx.Redirect(setting.AppSubURL + "/user/oauth2/" + provider.DisplayName()) ++ return ++ } ++ + ctx.Data["OAuth2Providers"] = oauth2Providers + ctx.Data["Title"] = ctx.Tr("sign_in") + ctx.Data["SignInLink"] = setting.AppSubURL + "/user/login" +-- +2.44.0 + diff --git a/third_party/lix_forgejo/upstream-link.patch b/third_party/lix_forgejo/upstream-link.patch new file mode 100644 index 000000000..716151abd --- /dev/null +++ b/third_party/lix_forgejo/upstream-link.patch @@ -0,0 +1,14 @@ +diff --git a/templates/repo/issue/view_title.tmpl b/templates/repo/issue/view_title.tmpl +index c1dd265..9a573ce 100644 +--- a/templates/repo/issue/view_title.tmpl ++++ b/templates/repo/issue/view_title.tmpl +@@ -16,6 +16,9 @@ + {{if and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .Repository.IsArchived)}} + + {{end}} ++ {{if and (eq .Repository.Name "nix") (eq .Repository.OwnerName "NixOS")}} ++ {{svg "octicon-mark-github"}} Open upstream ++ {{end}} + {{if not .Issue.IsPull}} + {{.locale.Tr "repo.issues.new"}} + {{end}} diff --git a/third_party/nix-gerrit/default.nix b/third_party/nix-gerrit/default.nix new file mode 100644 index 000000000..58ce73a74 --- /dev/null +++ b/third_party/nix-gerrit/default.nix @@ -0,0 +1,12 @@ +# This file imports the pinned nix-gerrit. + +{ depot ? { } +, ... +}: + +let + nix-gerrit-src = depot.third_party.sources.nix-gerrit; +in +import nix-gerrit-src { + pkgs = depot.third_party.nixpkgs; +} diff --git a/third_party/overlays/tvl.nix b/third_party/overlays/tvl.nix index 4530cdab0..c5b03b8dd 100644 --- a/third_party/overlays/tvl.nix +++ b/third_party/overlays/tvl.nix @@ -8,6 +8,10 @@ self: super: depot.nix.readTree.drvTargets { + # Not available in nixpkgs. + # Raito: If you want this to disappear, please send the PR yourself. + alertmanager-irc-relay = super.callPackage depot.third_party.alertmanager-irc-relay.package { }; + # Avoid builds of mkShell derivations in CI. mkShell = super.lib.makeOverridable ( args: diff --git a/third_party/sources/sources.json b/third_party/sources/sources.json index 74ffff2a3..acb80be16 100644 --- a/third_party/sources/sources.json +++ b/third_party/sources/sources.json @@ -23,6 +23,18 @@ "url": "https://github.com/mlochbaum/bqn-libs/archive/405644fe7aeca7cd31304c05b95de1a6c197fff6.tar.gz", "url_template": "https://github.com///archive/.tar.gz" }, + "disko": { + "branch": "master", + "description": "Declarative disk partitioning and formatting using nix [maintainers=@Lassulus @Enzime @iFreilicht]", + "homepage": "", + "owner": "nix-community", + "repo": "disko", + "rev": "84a5b93637cc16cbfcc61b6e1684d626df61eb21", + "sha256": "0pg2gmr63wa8ywkwvmkwir38yp2hqmz2mya71rlzzkdxwyf7bnyr", + "type": "tarball", + "url": "https://github.com/nix-community/disko/archive/84a5b93637cc16cbfcc61b6e1684d626df61eb21.tar.gz", + "url_template": "https://github.com///archive/.tar.gz" + }, "gitignore.nix": { "branch": "master", "description": "Nix functions for filtering local git sources", @@ -60,6 +72,12 @@ "url": "https://github.com/nix-community/napalm/archive/e1babff744cd278b56abe8478008b4a9e23036cf.tar.gz", "url_template": "https://github.com///archive/.tar.gz" }, + "nix-gerrit": { + "branch": "main", + "repo": "https://git.lix.systems/the-distro/nix-gerrit.git", + "rev": "86d04ec2e075c8c548acc6cb03eba08d8931c681", + "type": "git" + }, "nixpkgs": { "branch": "nixos-unstable", "description": "Nix Packages collection", diff --git a/tools/depot-deps.nix b/tools/depot-deps.nix index 96e584001..02fb9c6d2 100644 --- a/tools/depot-deps.nix +++ b/tools/depot-deps.nix @@ -22,6 +22,21 @@ depot.nix.lazy-deps { cmd = "terraform"; }; + tf-dns = { + attr = "ops.dns.terraform"; + cmd = "terraform"; + }; + + tf-hcloud = { + attr = "ops.hcloud.terraform"; + cmd = "terraform"; + }; + + tf-hetzner-s3 = { + attr = "ops.hetzner-s3.terraform"; + cmd = "terraform"; + }; + tf-keycloak = { attr = "ops.keycloak.terraform"; cmd = "terraform"; diff --git a/users/raito/keys.nix b/users/raito/keys.nix new file mode 100644 index 000000000..57d137aba --- /dev/null +++ b/users/raito/keys.nix @@ -0,0 +1,8 @@ +{ ... }: + +{ + all = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICaw9ihTG7ucB8P38XdalEWev8+q96e2yNm4B+/I9IJp" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKiXXYkhRh+s7ixZ8rvG8ntIqd6FELQ9hh7HoaHQJRPU" + ]; +}