diff --git a/hosts/monitoring-3/prometheus.nix b/hosts/monitoring-3/prometheus.nix
index 73abc9f..dd7533b 100644
--- a/hosts/monitoring-3/prometheus.nix
+++ b/hosts/monitoring-3/prometheus.nix
@@ -419,6 +419,19 @@ in {
           relabelAddressToInstance
         ];
       }
+      {
+        job_name = "clerie_keys";
+        scrape_interval = "5m";
+        scheme = "https";
+        metrics_path = "/gpg/clerie@clerie.de.metrics.txt";
+        static_configs = [
+          {
+            targets = [
+              "clerie.de"
+            ];
+          }
+        ];
+      }
     ];
     alertmanagers = [
       {
diff --git a/hosts/monitoring-3/rules.yml b/hosts/monitoring-3/rules.yml
index 9a4a160..034f244 100644
--- a/hosts/monitoring-3/rules.yml
+++ b/hosts/monitoring-3/rules.yml
@@ -73,3 +73,17 @@ groups:
     annotations:
       summary: "Synapse of {{ $labels.target }} unavailable"
       description: "The Synapse backend of {{ $labels.target }} is unreachable or returns garbage"
+  - alert: ClerieKeysExpire
+    expr: last_over_time(clerie_keys_gpg_key_expire_time[15m]) - time() < 1209600
+    labels:
+      severity: critical
+    annotations:
+      summary: "GPG {{ $labels.fingerprint }} is expiring"
+      description: "GPG with fingerprint {{ $labels.fingerprint }} is expiring in less then two weeks"
+  - alert: ClerieKeysAlmostExpire
+    expr: last_over_time(clerie_keys_gpg_key_expire_time[15m]) - time() < 3628800
+    labels:
+      severity: warning
+    annotations:
+      summary: "GPG {{ $labels.fingerprint }} is expiring soon"
+      description: "GPG with fingerprint {{ $labels.fingerprint }} is expiring in less then six weeks"
diff --git a/pkgs/clerie-keys/default.nix b/pkgs/clerie-keys/default.nix
index bca481f..de84c35 100644
--- a/pkgs/clerie-keys/default.nix
+++ b/pkgs/clerie-keys/default.nix
@@ -10,5 +10,8 @@ runCommand "clerie-keys" {
 
   gpg --import-options import-export --armor -o $out/gpg/clerie@clerie.de.asc --import ${../../users/clerie/gpg.asc}
   gpg --import-options import-export -o $out/gpg/clerie@clerie.de --import ${../../users/clerie/gpg.asc}
-  gpg --import-options show-only --with-colons --fingerprint --import ${../../users/clerie/gpg.asc} | awk -F: '$1 == "fpr" {print $10;}' | head -1 > $out/gpg/clerie@clerie.de.fingerprint.txt
+  gpg --import-options show-only --with-colons --fingerprint --import ${../../users/clerie/gpg.asc} > colons.txt
+  cat colons.txt | awk -F: '$1 == "fpr" {print $10;}' | head -1 > $out/gpg/clerie@clerie.de.fingerprint.txt
+  cat colons.txt | awk -F: '$1 == "pub" {print "@", $7;}' | date -f - -Iseconds > $out/gpg/clerie@clerie.de.expires.txt
+  cat colons.txt | awk '{printf "%s:%s", $0, ($0 ~ /^(pub|sub)/) ? ":" : "\n" }' | awk '$0 ~ /^(pub|sub)/ { print $0}' | awk -F: '{if ($1 == "pub") { fingerprint=$32; keyid=$5 }}  {printf "clerie_keys_gpg_key_expire_time{fingerprint=\"%s\", keyid=\"%s\", subkeyfingerprint=\"%s\", subkeykeyid=\"%s\", type=\"%s\"} %s\n", fingerprint, keyid, ($1 == "sub") ? $30 : "", ($1 == "sub") ? $5 : "", $1, $7}' > $out/gpg/clerie@clerie.de.metrics.txt
 ''