From c9e9b3c6f9f7cb9ad2908e831a32f238db47119e Mon Sep 17 00:00:00 2001
From: Kristian Klausen <kristian@klausen.dk>
Date: Sun, 18 Aug 2024 16:50:55 +0200
Subject: [PATCH] loki/prometheus: Add plumbing for using loki recording
 rules[1]

The plan is to use this for creating metrics from the nginx log lines
(e.g. requests per second).

[1] https://grafana.com/docs/loki/latest/alert/#recording-rules
---
 roles/loki/files/loki.yaml                    | 12 +++++++++++-
 roles/loki/files/rules.yaml                   |  1 +
 roles/loki/tasks/main.yml                     | 10 ++++++++++
 roles/prometheus/templates/prometheus.conf.j2 |  2 +-
 4 files changed, 23 insertions(+), 2 deletions(-)
 create mode 100644 roles/loki/files/rules.yaml

diff --git a/roles/loki/files/loki.yaml b/roles/loki/files/loki.yaml
index a4349046a..d9e604a8c 100644
--- a/roles/loki/files/loki.yaml
+++ b/roles/loki/files/loki.yaml
@@ -12,7 +12,7 @@ common:
   storage:
     filesystem:
       chunks_directory: /var/lib/loki/chunks
-      rules_directory: /var/lib/loki/rules
+      rules_directory: /etc/loki/rules
   replication_factor: 1
   instance_addr: 127.0.0.1
   ring:
@@ -25,6 +25,16 @@ ingester:
     replay_memory_ceiling: 200MB
   chunk_encoding: zstd
 
+ruler:
+  rule_path: /var/lib/loki/rules-tmp
+  wal:
+    dir: /var/lib/loki/ruler-wal
+  remote_write:
+    enabled: true
+    clients:
+      local:
+        url: http://127.0.0.1:9090/api/v1/write
+
 schema_config:
   configs:
     - from: 2022-06-07
diff --git a/roles/loki/files/rules.yaml b/roles/loki/files/rules.yaml
new file mode 100644
index 000000000..2ae22208b
--- /dev/null
+++ b/roles/loki/files/rules.yaml
@@ -0,0 +1 @@
+groups: []
diff --git a/roles/loki/tasks/main.yml b/roles/loki/tasks/main.yml
index 0eaa79c39..7bbbfca93 100644
--- a/roles/loki/tasks/main.yml
+++ b/roles/loki/tasks/main.yml
@@ -5,6 +5,16 @@
   copy: src=loki.yaml dest=/etc/loki/ owner=root group=root mode=0644
   notify: Restart loki
 
+- name: Create directories for loki recording rules
+  file: path={{ item }} state=directory owner=root group=root mode=0755
+  loop:
+    - /etc/loki/rules
+    - /etc/loki/rules/fake
+
+- name: Install loki recording rules
+  copy: src=rules.yaml dest=/etc/loki/rules/fake/ owner=root group=root mode=0644
+  notify: Restart loki
+
 - name: Make nginx log dir
   file: path=/var/log/nginx/loki state=directory owner=root group=root mode=0755
 
diff --git a/roles/prometheus/templates/prometheus.conf.j2 b/roles/prometheus/templates/prometheus.conf.j2
index 22b419160..0bc042bb2 100644
--- a/roles/prometheus/templates/prometheus.conf.j2
+++ b/roles/prometheus/templates/prometheus.conf.j2
@@ -1,5 +1,5 @@
 {% if prometheus_receive_only %}
 PROMETHEUS_ARGS="--storage.tsdb.retention.time=365d --web.enable-remote-write-receiver --web.config.file=/etc/prometheus/web-config.yml --web.listen-address={{ wireguard_address }}:9090"
 {% else %}
-PROMETHEUS_ARGS="--storage.tsdb.retention.time=365d"
+PROMETHEUS_ARGS="--storage.tsdb.retention.time=365d --web.enable-remote-write-receiver"
 {% endif %}
-- 
GitLab