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 @@
+