From f484633f2dcbac3b85e90ea6fcbc417b7a41b9f5 Mon Sep 17 00:00:00 2001 From: Gabriel Fontes Date: Fri, 28 Apr 2023 11:03:26 -0300 Subject: [PATCH] sitespeedio: cleanup aggregation metrics --- hosts/alcyone/services/prometheus/default.nix | 53 ++++++++++++++----- hosts/celaeno/services/sitespeedio.nix | 23 +++----- 2 files changed, 45 insertions(+), 31 deletions(-) diff --git a/hosts/alcyone/services/prometheus/default.nix b/hosts/alcyone/services/prometheus/default.nix index d71fd70b..ea8f6211 100644 --- a/hosts/alcyone/services/prometheus/default.nix +++ b/hosts/alcyone/services/prometheus/default.nix @@ -1,22 +1,46 @@ { config, ... }: -let - mkStatic = job_name: targets: { - inherit job_name; - scheme = "https"; - static_configs = [{ inherit targets; }]; - metrics_path = "/metrics"; - }; -in { +{ services = { prometheus = { enable = true; + globalConfig = { + # Scrape a bit more frequently + scrape_interval = "30s"; + }; scrapeConfigs = [ - (mkStatic "hydra" ["hydra.m7.rs"]) - (mkStatic "sitespeed" ["sitespeed.m7.rs"]) - (mkStatic "nginx" ["alcyone.m7.rs" "celaeno.m7.rs" "merope.m7.rs"]) + { + job_name = "hydra"; + static_configs = [{ + targets = [ "hydra.m7.rs" ]; + }]; + } + { + job_name = "nginx"; + static_configs =[{ + targets = [ "alcyone.m7.rs" "celaeno.m7.rs" "merope.m7.rs" ]; + }]; + } + { + job_name = "sitespeed"; + static_configs = [{ + targets = [ "sitespeed.m7.rs" ]; + }]; + metric_relabel_configs = [ + # Only keep metrics that are not aggregations or are medians + { + source_labels = [ "aggr_kind" ]; + regex = "(median|)"; + action = "keep"; + } + # Then remove the aggregation label + { + regex = "aggr_kind"; + action = "labeldrop"; + } + ]; + } ]; - extraFlags = let - prometheus = config.services.prometheus.package; + extraFlags = let prometheus = config.services.prometheus.package; in [ # Custom consoles "--web.console.templates=${prometheus}/etc/prometheus/consoles" @@ -27,7 +51,8 @@ in { "metrics.m7.rs" = { forceSSL = true; enableACME = true; - locations."/".proxyPass = "http://localhost:${toString config.services.prometheus.port}"; + locations."/".proxyPass = + "http://localhost:${toString config.services.prometheus.port}"; }; }; }; diff --git a/hosts/celaeno/services/sitespeedio.nix b/hosts/celaeno/services/sitespeedio.nix index 85b99a07..fe89d1b3 100644 --- a/hosts/celaeno/services/sitespeedio.nix +++ b/hosts/celaeno/services/sitespeedio.nix @@ -18,33 +18,22 @@ prometheus.exporters.graphite = { enable = true; + extraFlags = [ "--graphite.mapping-strict-match" ]; # Drop non-matched metrics mappingSettings.mappings = [ # Page summaries { - match = ''sitespeed_io\.([^.]+)\.([^.]+)\.pageSummary\.([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)\.(.*)''; + match = ''^sitespeed_io\.([^.]+)\.([^.]+)\.pageSummary\.([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)\.(.+?)(?:\.(mean|max|median|min|p90|p99|p10|rsd|mdev|stddev|total|values))?$''; match_type = "regex"; name = "sitespeedio_$7"; labels = { - sitespeed_profile = "$1"; - sitespeed_job = "$2"; + profile = "$1"; + site = "$2"; domain = "$3"; page = "$4"; browser = "$5"; platform = "$6"; - }; - } - # Site summaries - { - match = ''sitespeed_io\.([^.]+)\.([^.]+)\.summary\.([^.]+)\.([^.]+)\.([^.]+)\.(.*)''; - match_type = "regex"; - name = "sitespeedio_$6"; - labels = { - sitespeed_profile = "$1"; - sitespeed_job = "$2"; - domain = "$3"; - page = "*"; - browser = "$4"; - platform = "$5"; + # We save this so that we can drop specific aggregate metrics + aggr_kind = "$8"; }; } ];