diff --git a/collections/requirements.yaml b/collections/requirements.yaml
index a24c121..cec061f 100644
--- a/collections/requirements.yaml
+++ b/collections/requirements.yaml
@@ -1,3 +1,4 @@
 ---
 collections:
  - community.general
+ - grafana.grafana.alloy
diff --git a/inventories/chaosknoten/host_vars/grafana.yaml b/inventories/chaosknoten/host_vars/grafana.yaml
index 2e8cb71..c0f2ad9 100644
--- a/inventories/chaosknoten/host_vars/grafana.yaml
+++ b/inventories/chaosknoten/host_vars/grafana.yaml
@@ -20,6 +20,7 @@ certbot__acme_account_email_address: le-admin@hamburg.ccc.de
 certbot__certificate_domains:
   - "grafana.hamburg.ccc.de"
   - "loki.hamburg.ccc.de"
+  - "metrics.hamburg.ccc.de"
 
 certbot__new_cert_commands:
   - "systemctl reload nginx.service"
@@ -30,6 +31,8 @@ nginx__deploy_htpasswds: true
 nginx__htpasswds:
   - name: loki
     content: "{{ lookup('ansible.builtin.template', 'resources/chaosknoten/grafana/nginx/loki.htpasswd.j2') }}"
+  - name: metrics
+    content: "{{ lookup('ansible.builtin.template', 'resources/chaosknoten/grafana/nginx/metrics.htpasswd.j2') }}"
 nginx__configurations:
   - name: redirectv6
     content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/grafana/nginx/redirect.conf') }}"
@@ -37,3 +40,81 @@ nginx__configurations:
     content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/grafana/nginx/grafana.hamburg.ccc.de.conf') }}"
   - name: loki.hamburg.ccc.de
     content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/grafana/nginx/loki.hamburg.ccc.de.conf') }}"
+  - name: metrics.hamburg.ccc.de
+    content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/grafana/nginx/metrics.hamburg.ccc.de.conf') }}"
+
+
+alloy_config: |
+  prometheus.remote_write "default" {
+    endpoint {
+      url = "https://metrics.hamburg.ccc.de/api/v1/write"
+      basic_auth {
+        username = "chaos"
+        password = "{{ lookup('community.general.passwordstore', 'noc/vm-secrets/chaosknoten/grafana/metrics_chaos', create=false, missing='error') }}"
+      }
+    }
+  }
+  loki.write "default" {
+    endpoint {
+      url = "https://loki.hamburg.ccc.de/loki/api/v1/push"
+      basic_auth {
+        username = "chaos"
+        password = "{{ lookup('community.general.passwordstore', 'noc/vm-secrets/chaosknoten/grafana/loki_chaos', create=false, missing='error') }}"
+      }
+    }
+  }
+
+  loki.relabel "journal" {
+    forward_to = []
+
+    rule {
+      source_labels = ["__journal__systemd_unit"]
+      target_label  = "systemd_unit"
+    }
+    rule {
+      source_labels = ["__journal__hostname"]
+      target_label = "instance"
+    }
+    rule {
+      source_labels = ["__journal__transport"]
+      target_label = "systemd_transport"
+    }
+    rule {
+      source_labels = ["__journal_syslog_identifier"]
+      target_label = "syslog_identifier"
+    }
+    rule {
+      source_labels = ["__journal_priority_keyword"]
+      target_label  = "level"
+    }
+  }
+
+  loki.source.journal "read_journal"  {
+    forward_to    = [loki.write.default.receiver]
+    relabel_rules = loki.relabel.journal.rules
+    format_as_json = true
+    labels        = {component = "loki.source.journal", host = "grafana", org = "ccchh"}
+  }
+
+  logging {
+    level = "info"
+  }
+  prometheus.exporter.unix "local_system" { }
+
+  prometheus.relabel "default" {
+    forward_to = [prometheus.remote_write.default.receiver]
+    rule {
+      replacement = "org"
+      target_label = "ccchh"
+    }
+    rule {
+      target_label = "host"
+      replacement = "grafana"
+    }
+  }
+
+  prometheus.scrape "scrape_metrics" {
+    targets         = prometheus.exporter.unix.local_system.targets
+    forward_to      = [prometheus.relabel.default.receiver]
+    scrape_interval = "15s"
+  }
diff --git a/inventories/chaosknoten/hosts.yaml b/inventories/chaosknoten/hosts.yaml
index 92185ed..ed0d042 100644
--- a/inventories/chaosknoten/hosts.yaml
+++ b/inventories/chaosknoten/hosts.yaml
@@ -177,3 +177,6 @@ proxmox_vm_template_hosts:
 ansible_pull_hosts:
   hosts:
     netbox:
+alloy_hosts:
+  hosts:
+    grafana:
diff --git a/playbooks/deploy.yaml b/playbooks/deploy.yaml
index d7dcdac..952aeec 100644
--- a/playbooks/deploy.yaml
+++ b/playbooks/deploy.yaml
@@ -70,5 +70,13 @@
           - "o=Docker,n=${distro_codename}"
           - "o=nginx,n=${distro_codename}"
 
+- name: Ensure Alloy is installed and Setup on alloy_hosts
+  hosts: alloy_hosts
+  become: true
+  tasks:
+    - name: Setup Alloy
+      ansible.builtin.include_role:
+        name: grafana.grafana.alloy
+
 - name: Run ensure_eh22_styleguide_dir Playbook
   ansible.builtin.import_playbook: ensure_eh22_styleguide_dir.yaml
diff --git a/resources/chaosknoten/grafana/docker_compose/compose.yaml.j2 b/resources/chaosknoten/grafana/docker_compose/compose.yaml.j2
index cbe6e81..3ef0a0c 100644
--- a/resources/chaosknoten/grafana/docker_compose/compose.yaml.j2
+++ b/resources/chaosknoten/grafana/docker_compose/compose.yaml.j2
@@ -6,6 +6,7 @@ services:
     container_name: prometheus
     command:
       - '--config.file=/etc/prometheus/prometheus.yml'
+      - '--web.enable-remote-write-receiver'
     ports:
       - 9090:9090
     restart: unless-stopped
@@ -54,7 +55,6 @@ services:
     volumes:
       - /dev/null:/etc/prometheus/pve.yml
 
-
   loki:
     image: grafana/loki:3
     container_name: loki
@@ -71,3 +71,4 @@ volumes:
   prom_data: {}
   alertmanager_data: {}
   loki_data: {}
+  mimir_data: {}
diff --git a/resources/chaosknoten/grafana/nginx/loki.hamburg.ccc.de.conf b/resources/chaosknoten/grafana/nginx/loki.hamburg.ccc.de.conf
index f62dc4e..cb51782 100644
--- a/resources/chaosknoten/grafana/nginx/loki.hamburg.ccc.de.conf
+++ b/resources/chaosknoten/grafana/nginx/loki.hamburg.ccc.de.conf
@@ -3,13 +3,16 @@ server {
     allow 172.31.17.128/25;
     allow 212.12.51.128/28;
     allow 2a00:14b0:42:100::/56;
+    allow 2a00:14b0:4200:3380::/64;
     # Z9
     allow 2a07:c480:0:100::/56;
     allow 2a07:c481:1::/48;
+    
     deny all;
 
-    listen [2a00:14b0:4200:3380:0000:5a5f:1dbc:6a39]:9099 ssl http2;
-    listen 172.31.17.145:9099 ssl http2;
+    listen [2a00:14b0:4200:3380:0000:5a5f:1dbc:6a39]:50051 ssl;
+    listen 172.31.17.145:50051 ssl;
+    http2 on;
 
     server_name loki.hamburg.ccc.de;
 
@@ -27,7 +30,7 @@ server {
         # This is https in any case.
         proxy_set_header X-Forwarded-Proto https;
         proxy_set_header X-Scope-OrgID $remote_user;
-        grpc_pass grpc://localhost:19009;
+        grpc_pass grpc://localhost:19099;
     }
 }
 
@@ -36,13 +39,15 @@ server {
     allow 172.31.17.128/25;
     allow 212.12.51.128/28;
     allow 2a00:14b0:42:100::/56;
+    allow 2a00:14b0:4200:3380::/64;
     # Z9
     allow 2a07:c480:0:100::/56;
     allow 2a07:c481:1::/48;
     deny all;
 
-    listen [2a00:14b0:4200:3380:0000:5a5f:1dbc:6a39]:3100 ssl http2;
-    listen 172.31.17.145:3100 ssl http2;
+    listen [2a00:14b0:4200:3380:0000:5a5f:1dbc:6a39]:443 ssl;
+    listen 172.31.17.145:443 ssl;
+    http2 on;
 
     server_name loki.hamburg.ccc.de;
 
@@ -62,7 +67,6 @@ server {
         proxy_set_header X-Forwarded-Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-        proxy_set_header X-Forwarded-Port 3100;
         # This is https in any case.
         proxy_set_header X-Forwarded-Proto https;
         proxy_set_header X-Scope-OrgID $remote_user;
diff --git a/resources/chaosknoten/grafana/nginx/metrics.hamburg.ccc.de.conf b/resources/chaosknoten/grafana/nginx/metrics.hamburg.ccc.de.conf
new file mode 100644
index 0000000..a431821
--- /dev/null
+++ b/resources/chaosknoten/grafana/nginx/metrics.hamburg.ccc.de.conf
@@ -0,0 +1,55 @@
+server {
+    # Wieske
+    allow 172.31.17.128/25;
+    allow 212.12.51.128/28;
+    allow 2a00:14b0:42:100::/56;
+    allow 2a00:14b0:4200:3380::/64;
+    # Z9
+    allow 2a07:c480:0:100::/56;
+    allow 2a07:c481:1::/48;
+    deny all;
+
+    listen [2a00:14b0:4200:3380:0000:5a5f:1dbc:6a39]:443 ssl;
+    listen 172.31.17.145:443 ssl;
+    http2 on;
+
+    server_name metrics.hamburg.ccc.de;
+
+    client_body_buffer_size 32k;
+
+    ssl_certificate /etc/letsencrypt/live/metrics.hamburg.ccc.de/fullchain.pem;
+    ssl_certificate_key /etc/letsencrypt/live/metrics.hamburg.ccc.de/privkey.pem;
+    # verify chain of trust of OCSP response using Root CA and Intermediate certs
+    ssl_trusted_certificate /etc/letsencrypt/live/metrics.hamburg.ccc.de/chain.pem;
+
+    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
+    add_header Strict-Transport-Security "max-age=63072000" always;
+
+    auth_basic  "metrics";
+    auth_basic_user_file metrics.htpasswd;
+
+    location /api/v1/write {
+        proxy_set_header Host $host;
+        proxy_set_header X-Forwarded-Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header X-Forwarded-Port 3100;
+        # This is https in any case.
+        proxy_set_header X-Forwarded-Proto https;
+
+        proxy_pass http://127.0.0.1:9090;
+    }
+
+    location /ready {
+        rewrite ^ /-/ready break;
+
+        proxy_set_header Host $host;
+        proxy_set_header X-Forwarded-Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        # This is https in any case.
+        proxy_set_header X-Forwarded-Proto https;
+
+        proxy_pass http://127.0.0.1:9090;
+    }
+}
diff --git a/resources/chaosknoten/grafana/nginx/metrics.htpasswd.j2 b/resources/chaosknoten/grafana/nginx/metrics.htpasswd.j2
new file mode 100644
index 0000000..1dfcd6c
--- /dev/null
+++ b/resources/chaosknoten/grafana/nginx/metrics.htpasswd.j2
@@ -0,0 +1 @@
+chaos:{{ lookup("community.general.passwordstore", "noc/vm-secrets/chaosknoten/grafana/metrics_chaos_basic_auth", create=false, missing="error") }}