diff --git a/PulumiWebServer/Nix/grafana/node.json b/PulumiWebServer/Nix/grafana/node.json index cb48b58..18441c1 100644 --- a/PulumiWebServer/Nix/grafana/node.json +++ b/PulumiWebServer/Nix/grafana/node.json @@ -18,7 +18,6 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, - "id": 1, "links": [], "liveNow": false, "panels": [ @@ -27,7 +26,6 @@ "type": "prometheus", "uid": "P40645DF18AF953B4" }, - "description": "", "fieldConfig": { "defaults": { "color": { @@ -76,7 +74,8 @@ "value": 80 } ] - } + }, + "unit": "d" }, "overrides": [] }, @@ -86,7 +85,7 @@ "x": 0, "y": 0 }, - "id": 5, + "id": 10, "options": { "legend": { "calcs": [], @@ -106,15 +105,13 @@ "uid": "P40645DF18AF953B4" }, "editorMode": "builder", - "exemplar": false, - "expr": "rate(node_cpu_seconds_total{mode!=\"idle\"}[5m])", - "hide": false, - "legendFormat": "{{mode}}", + "expr": "domain_expiry_days", + "legendFormat": "{{domain}}", "range": true, "refId": "A" } ], - "title": "CPU usage", + "title": "Domain expiry time", "type": "timeseries" }, { @@ -263,8 +260,6 @@ } }, "mappings": [], - "max": 1, - "min": 0, "thresholds": { "mode": "absolute", "steps": [ @@ -278,7 +273,7 @@ } ] }, - "unit": "percentunit" + "unit": "none" }, "overrides": [] }, @@ -288,7 +283,7 @@ "x": 0, "y": 8 }, - "id": 7, + "id": 9, "options": { "legend": { "calcs": [], @@ -308,26 +303,13 @@ "uid": "P40645DF18AF953B4" }, "editorMode": "builder", - "expr": "node_filesystem_free_bytes / node_filesystem_size_bytes{job=\"node\"}", - "hide": false, - "legendFormat": "{{mountpoint}} ({{device}})", + "expr": "rate(nginx_http_requests_total[5m])", + "legendFormat": "{{instance}}", "range": true, "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "P40645DF18AF953B4" - }, - "editorMode": "builder", - "expr": "node_filesystem_size_bytes{job=\"node\"}", - "hide": true, - "legendFormat": "{{mountpoint}} ({{device}})", - "range": true, - "refId": "B" } ], - "title": "Free disk", + "title": "Nginx HTTP requests/5min", "type": "timeseries" }, { @@ -422,6 +404,209 @@ "title": "Disk I/O", "type": "timeseries" }, + { + "datasource": { + "type": "prometheus", + "uid": "P40645DF18AF953B4" + }, + "description": "", + "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": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 16 + }, + "id": 5, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P40645DF18AF953B4" + }, + "editorMode": "builder", + "exemplar": false, + "expr": "rate(node_cpu_seconds_total{mode!=\"idle\"}[5m])", + "hide": false, + "legendFormat": "{{mode}}", + "range": true, + "refId": "A" + } + ], + "title": "CPU usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P40645DF18AF953B4" + }, + "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": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 7, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P40645DF18AF953B4" + }, + "editorMode": "builder", + "expr": "node_filesystem_free_bytes / node_filesystem_size_bytes{job=\"node\"}", + "hide": false, + "legendFormat": "{{mountpoint}} ({{device}})", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P40645DF18AF953B4" + }, + "editorMode": "builder", + "expr": "node_filesystem_size_bytes{job=\"node\"}", + "hide": true, + "legendFormat": "{{mountpoint}} ({{device}})", + "range": true, + "refId": "B" + } + ], + "title": "Free disk", + "type": "timeseries" + }, { "datasource": { "type": "datasource", @@ -431,7 +616,7 @@ "h": 3, "w": 24, "x": 0, - "y": 16 + "y": 24 }, "id": 1, "targets": [ @@ -454,7 +639,7 @@ "h": 15, "w": 12, "x": 0, - "y": 19 + "y": 27 }, "id": 3, "links": [], @@ -491,7 +676,7 @@ "h": 15, "w": 12, "x": 12, - "y": 19 + "y": 27 }, "id": 4, "links": [], @@ -512,7 +697,7 @@ "type": "news" } ], - "refresh": "", + "refresh": false, "schemaVersion": 38, "style": "dark", "tags": [], @@ -520,8 +705,8 @@ "list": [] }, "time": { - "from": "now-12h", - "to": "now" + "from": "2023-07-22T01:55:10.667Z", + "to": "2023-07-23T01:55:10.667Z" }, "timepicker": { "hidden": true, @@ -553,6 +738,6 @@ "timezone": "browser", "title": "Node", "uid": "d872af8a-0e64-4b22-8d97-7db77958960b", - "version": 3, + "version": 1, "weekStart": "" } diff --git a/PulumiWebServer/Nix/nginx/nginx-config.nix b/PulumiWebServer/Nix/nginx/nginx-config.nix index b79a3c7..8eef2b5 100644 --- a/PulumiWebServer/Nix/nginx/nginx-config.nix +++ b/PulumiWebServer/Nix/nginx/nginx-config.nix @@ -55,6 +55,9 @@ recommendedGzipSettings = true; recommendedProxySettings = true; + # For Prometheus exporter + statusPage = true; + virtualHosts."${config.services.nginx-config.domain}" = { globalRedirect = "${config.services.nginx-config.webrootSubdomain}.${config.services.nginx-config.domain}"; addSSL = true; diff --git a/PulumiWebServer/Nix/prometheus/domains.yaml b/PulumiWebServer/Nix/prometheus/domains.yaml new file mode 100644 index 0000000..ce2d616 --- /dev/null +++ b/PulumiWebServer/Nix/prometheus/domains.yaml @@ -0,0 +1,3 @@ +{ + "domains": ["%%DOMAINS%%"] +} diff --git a/PulumiWebServer/Nix/prometheus/prometheus.nix b/PulumiWebServer/Nix/prometheus/prometheus.nix index c681d6b..f588a6a 100644 --- a/PulumiWebServer/Nix/prometheus/prometheus.nix +++ b/PulumiWebServer/Nix/prometheus/prometheus.nix @@ -20,6 +20,11 @@ }; config = { + # For the domain exporter + environment.etc."domain-exporter/domains.yaml" = { + source = builtins.replaceStrings ["%%DOMAINS%%"] ["patrickstevens.co.uk"] ./domains.yaml; + }; + services.prometheus = { enable = true; port = config.services.prometheus-config.port; @@ -29,6 +34,13 @@ enabledCollectors = ["systemd"]; port = config.services.prometheus-config.node-exporter-port; }; + nginx = { + enable = true; + }; + domain = { + enable = true; + extraFlags = ["--config=/etc/domain-exporter/domains.yaml"]; + }; }; scrapeConfigs = [ @@ -40,6 +52,24 @@ } ]; } + { + job_name = "nginx"; + static_configs = [ + { + # Non-configurable magic port used for nginx status + targets = ["localhost:9113"]; + } + ]; + } + { + job_name = "domain"; + static_configs = [ + { + # Non-configurable magic port used for domain exporter + targets = ["localhost:9222"]; + } + ]; + } ]; }; }; diff --git a/PulumiWebServer/PulumiWebServer.fsproj b/PulumiWebServer/PulumiWebServer.fsproj index 7605faf..ea76e35 100644 --- a/PulumiWebServer/PulumiWebServer.fsproj +++ b/PulumiWebServer/PulumiWebServer.fsproj @@ -49,6 +49,7 @@ +