From 29f28ee52f6f1c3f78a5163d5fa8eafd41e3c7fd Mon Sep 17 00:00:00 2001
From: Varac <varac@varac.net>
Date: Tue, 1 Jun 2021 13:43:45 +0200
Subject: [PATCH] Install loki + promtail seperatly

---
 .gitlab-ci.yml                                | 44 ++++++---
 .../issue_templates/update_all_components.md  |  3 +-
 ansible/group_vars/all/settings.yml.example   |  3 +-
 .../apps/tasks/{loki-stack.yml => loki.yml}   |  8 +-
 ansible/roles/apps/tasks/main.yml             |  7 +-
 ansible/roles/apps/tasks/promtail.yml         | 16 ++++
 .../apps/templates/settings/loki-stack.yaml   | 90 -------------------
 .../roles/apps/templates/settings/loki.yaml   |  9 ++
 .../apps/templates/settings/promtail.yaml     | 38 ++++++++
 docs/upgrading.md                             |  3 +-
 flux/oas/{loki-stack_hr.yaml => loki_hr.yaml} | 12 +--
 flux/oas/promtail_hr.yaml                     | 19 ++++
 test/pytest/test_app_deployments.py           |  8 +-
 13 files changed, 143 insertions(+), 117 deletions(-)
 rename ansible/roles/apps/tasks/{loki-stack.yml => loki.yml} (59%)
 create mode 100644 ansible/roles/apps/tasks/promtail.yml
 delete mode 100644 ansible/roles/apps/templates/settings/loki-stack.yaml
 create mode 100644 ansible/roles/apps/templates/settings/loki.yaml
 create mode 100644 ansible/roles/apps/templates/settings/promtail.yaml
 rename flux/oas/{loki-stack_hr.yaml => loki_hr.yaml} (71%)
 create mode 100644 flux/oas/promtail_hr.yaml

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index caa161ebf..16ceeb9bd 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -305,12 +305,19 @@ enable-eventrouter:
     - .enable_app_template
     - .eventrouter_rules
 
-enable-loki-stack:
+enable-loki:
   variables:
-    APP: "loki-stack"
+    APP: "loki"
   extends:
     - .enable_app_template
-    - .loki_stack_rules
+    - .loki_rules
+
+enable-promtail:
+  variables:
+    APP: "promtail"
+  extends:
+    - .enable_app_template
+    - .promtail_rules
 
 enable-nextcloud:
   variables:
@@ -429,12 +436,19 @@ local-path-provisioner-helm-release:
     - .helm-release
     - .local_path_provisioner_rules
 
-loki-stack-helm-release:
+loki-helm-release:
+  variables:
+    APP: "loki"
+  extends:
+    - .helm-release
+    - .loki_rules
+
+promtail-helm-release:
   variables:
-    APP: "loki-stack"
+    APP: "promtail"
   extends:
     - .helm-release
-    - .loki_stack_rules
+    - .promtail_rules
 
 nextcloud-helm-release:
   variables:
@@ -519,15 +533,25 @@ local-path-provisioner-ready:
     - .apps-ready
     - .local_path_provisioner_rules
 
-loki-stack-ready:
+loki-ready:
+  variables:
+    APP: "loki"
+  needs:
+    - job: loki-helm-release
+    - job: setup-openappstack
+  extends:
+    - .apps-ready
+    - .loki_rules
+
+promtail-ready:
   variables:
-    APP: "loki-stack"
+    APP: "promtail"
   needs:
-    - job: loki-stack-helm-release
+    - job: promtail-helm-release
     - job: setup-openappstack
   extends:
     - .apps-ready
-    - .loki_stack_rules
+    - .promtail_rules
 
 nextcloud-ready:
   variables:
diff --git a/.gitlab/issue_templates/update_all_components.md b/.gitlab/issue_templates/update_all_components.md
index 0d0e10520..430f37656 100644
--- a/.gitlab/issue_templates/update_all_components.md
+++ b/.gitlab/issue_templates/update_all_components.md
@@ -21,7 +21,8 @@ Installed by flux:
 * [ ] ./oas/prometheus.yaml
 * [ ] ./oas/letsencrypt-staging.yaml
 * [ ] ./oas/ingress.yaml
-* [ ] ./oas/loki-stack.yaml
+* [ ] ./oas/loki.yaml
+* [ ] ./oas/promtail.yaml
 * [ ] ./velero/velero.yaml
 * [ ] ./oas-custom/flux-custom.yaml
 * [ ] ./cert-manager/cert-manager.yaml
diff --git a/ansible/group_vars/all/settings.yml.example b/ansible/group_vars/all/settings.yml.example
index ac71430f4..379dae021 100644
--- a/ansible/group_vars/all/settings.yml.example
+++ b/ansible/group_vars/all/settings.yml.example
@@ -95,7 +95,8 @@ enabled_applications:
   #
   # Monitoring components (auto-enabled by GitLab CI)
   # - 'prometheus-stack'
-  # - 'loki-stack'
+  # - 'loki'
+  # - 'promtail'
   # - 'eventrouter'
   #
   # The backup system Velero is disabled by default, see settings under `backup` above.
diff --git a/ansible/roles/apps/tasks/loki-stack.yml b/ansible/roles/apps/tasks/loki.yml
similarity index 59%
rename from ansible/roles/apps/tasks/loki-stack.yml
rename to ansible/roles/apps/tasks/loki.yml
index 9933761b6..eaac7c223 100644
--- a/ansible/roles/apps/tasks/loki-stack.yml
+++ b/ansible/roles/apps/tasks/loki.yml
@@ -1,11 +1,11 @@
-- name: Create Kubernetes secret with loki-stack settings
+- name: Create Kubernetes secret with loki settings
   tags:
     - config
     - flux
-    - loki-stack
+    - loki
   vars:
     flux_secret:
-      name: "loki-stack"
+      name: "loki"
       namespace: "oas"
   include_tasks:
     file: flux_secret.yml
@@ -13,4 +13,4 @@
       tags:
         - config
         - flux
-        - loki-stack
+        - loki
diff --git a/ansible/roles/apps/tasks/main.yml b/ansible/roles/apps/tasks/main.yml
index b1a6f9e32..3d0b0eff9 100644
--- a/ansible/roles/apps/tasks/main.yml
+++ b/ansible/roles/apps/tasks/main.yml
@@ -12,8 +12,11 @@
 - name: Tasks pertaining to prometheus and grafana
   import_tasks: prometheus-stack.yml
 
-- name: Tasks pertaining to loki-stack
-  import_tasks: loki-stack.yml
+- name: Tasks pertaining to loki
+  import_tasks: loki.yml
+
+- name: Tasks pertaining to promtail
+  import_tasks: promtail.yml
 
 - name: Tasks pertaining to eventrouter
   import_tasks: eventrouter.yml
diff --git a/ansible/roles/apps/tasks/promtail.yml b/ansible/roles/apps/tasks/promtail.yml
new file mode 100644
index 000000000..7e2bf955e
--- /dev/null
+++ b/ansible/roles/apps/tasks/promtail.yml
@@ -0,0 +1,16 @@
+- name: Create Kubernetes secret with promtail settings
+  tags:
+    - config
+    - flux
+    - promtail
+  vars:
+    flux_secret:
+      name: "promtail"
+      namespace: "oas"
+  include_tasks:
+    file: flux_secret.yml
+    apply:
+      tags:
+        - config
+        - flux
+        - promtail
diff --git a/ansible/roles/apps/templates/settings/loki-stack.yaml b/ansible/roles/apps/templates/settings/loki-stack.yaml
deleted file mode 100644
index 2d5bba2a6..000000000
--- a/ansible/roles/apps/templates/settings/loki-stack.yaml
+++ /dev/null
@@ -1,90 +0,0 @@
----
-# https://github.com/grafana/helm-charts/blob/main/charts/loki-stack/values.yaml
-loki:
-  # https://github.com/grafana/helm-charts/blob/main/charts/loki/values.yaml
-  enabled: true
-  resources:
-    limits:
-      cpu: 400m
-      memory: 180Mi
-    requests:
-      cpu: 200m
-      memory: 90Mi
-  persistence:
-    enabled: true
-    accessModes:
-    - ReadWriteOnce
-    size: 10Gi
-    annotations: {}
-    # existingClaim:
-  config:
-    # https://github.com/grafana/loki/blob/main/cmd/loki/loki-local-config.yaml
-    # https://grafana.com/docs/loki/latest/operations/storage/retention
-    schema_config:
-      configs:
-      - from: 2021-05-31
-        store: boltdb-shipper
-        object_store: filesystem
-        schema: v11
-        index:
-          prefix: index_
-          period: 24h
-    storage_config:
-      boltdb_shipper:
-        active_index_directory: /data/loki/boltdb-shipper-active
-        cache_location: /data/loki/boltdb-shipper-cache
-        cache_ttl: 24h         # Can be increased for faster performance over longer query periods, uses more disk space
-        shared_store: filesystem
-      filesystem:
-        directory: /data/loki/chunks
-    compactor:
-      working_directory: /data/loki/boltdb-shipper-compactor
-      shared_store: filesystem
-    limits_config:
-      reject_old_samples: true
-      reject_old_samples_max_age: 168h  # 7 days
-    chunk_store_config:
-      max_look_back_period: 672h # 28 days
-    table_manager:
-      retention_deletes_enabled: true
-      retention_period: 672h  # 28 days
-
-promtail:
-  # https://github.com/grafana/helm-charts/blob/main/charts/promtail/values.yaml
-  enabled: true
-  initContainer:
-    enabled: true
-    fsInotifyMaxUserInstances: 512
-  resources:
-    limits:
-      cpu: 400m
-      memory: 256Mi
-    requests:
-      cpu: 300m
-      memory: 128Mi
-  config:
-    # https://github.com/grafana/helm-charts/blob/main/charts/promtail/values.yaml#L217
-    snippets:
-      # https://grafana.com/docs/loki/latest/clients/promtail/pipelines/
-      pipelineStages:
-        - cri: {}
-        - match:
-            selector: '{app="eventrouter"}'
-            stages:
-              - json:
-                  expressions:
-                    event_verb: verb
-                    event_kind: event.involvedObject.kind
-                    event_reason: event.reason
-                    event_namespace: event.involvedObject.namespace
-                    event_name: event.metadata.name
-                    event_source_host: event.source.host
-                    event_source_component: event.source.component
-              - labels:
-                  event_verb:
-                  event_kind:
-                  event_reason:
-                  event_namespace:
-                  event_name:
-                  event_source_host:
-                  event_source_component:
diff --git a/ansible/roles/apps/templates/settings/loki.yaml b/ansible/roles/apps/templates/settings/loki.yaml
new file mode 100644
index 000000000..0983a57b9
--- /dev/null
+++ b/ansible/roles/apps/templates/settings/loki.yaml
@@ -0,0 +1,9 @@
+---
+enabled: true
+resources:
+  limits:
+    cpu: 400m
+    memory: 180Mi
+  requests:
+    cpu: 200m
+    memory: 90Mi
diff --git a/ansible/roles/apps/templates/settings/promtail.yaml b/ansible/roles/apps/templates/settings/promtail.yaml
new file mode 100644
index 000000000..e66b7cdcc
--- /dev/null
+++ b/ansible/roles/apps/templates/settings/promtail.yaml
@@ -0,0 +1,38 @@
+---
+enabled: true
+initContainer:
+  enabled: true
+  fsInotifyMaxUserInstances: 512
+resources:
+  limits:
+    cpu: 400m
+    memory: 256Mi
+  requests:
+    cpu: 300m
+    memory: 128Mi
+config:
+  # https://github.com/grafana/helm-charts/blob/main/charts/promtail/values.yaml#L217
+  snippets:
+    # https://grafana.com/docs/loki/latest/clients/promtail/pipelines/
+    pipelineStages:
+      - cri: {}
+      - match:
+          selector: '{app="eventrouter"}'
+          stages:
+            - json:
+                expressions:
+                  event_verb: verb
+                  event_kind: event.involvedObject.kind
+                  event_reason: event.reason
+                  event_namespace: event.involvedObject.namespace
+                  event_name: event.metadata.name
+                  event_source_host: event.source.host
+                  event_source_component: event.source.component
+            - labels:
+                event_verb:
+                event_kind:
+                event_reason:
+                event_namespace:
+                event_name:
+                event_source_host:
+                event_source_component:
diff --git a/docs/upgrading.md b/docs/upgrading.md
index db7f96163..2cb191fb8 100644
--- a/docs/upgrading.md
+++ b/docs/upgrading.md
@@ -81,7 +81,8 @@ enabled_applications:
   # - 'velero'
   # Applications.
   - 'grafana'
-  - 'loki-stack'
+  - 'loki'
+  - 'promtail'
   - 'nextcloud'
   - 'prometheus'
   - 'rocketchat'
diff --git a/flux/oas/loki-stack_hr.yaml b/flux/oas/loki_hr.yaml
similarity index 71%
rename from flux/oas/loki-stack_hr.yaml
rename to flux/oas/loki_hr.yaml
index 481921694..b973dcf8b 100644
--- a/flux/oas/loki-stack_hr.yaml
+++ b/flux/oas/loki_hr.yaml
@@ -2,18 +2,18 @@
 apiVersion: helm.fluxcd.io/v1
 kind: HelmRelease
 metadata:
-  name: loki-stack
+  name: loki
   namespace: oas
   annotations:
     flux.weave.works/automated: "false"
 spec:
-  releaseName: loki-stack
+  releaseName: loki
   chart:
-    # https://github.com/grafana/helm-charts/tree/main/charts/loki-stack
+    # https://github.com/grafana/helm-charts/tree/main/charts/loki
     repository: https://grafana.github.io/helm-charts
-    name: loki-stack
-    version: 2.4.1
+    name: loki
+    version: 2.5.0
   valuesFrom:
   - secretKeyRef:
-      name: loki-stack-settings
+      name: loki-settings
       key: values.yaml
diff --git a/flux/oas/promtail_hr.yaml b/flux/oas/promtail_hr.yaml
new file mode 100644
index 000000000..2fb7a68f2
--- /dev/null
+++ b/flux/oas/promtail_hr.yaml
@@ -0,0 +1,19 @@
+---
+apiVersion: helm.fluxcd.io/v1
+kind: HelmRelease
+metadata:
+  name: promtail
+  namespace: oas
+  annotations:
+    flux.weave.works/automated: "false"
+spec:
+  releaseName: promtail
+  chart:
+    # https://github.com/grafana/helm-charts/tree/main/charts/promtail
+    repository: https://grafana.github.io/helm-charts
+    name: promtail
+    version: 3.5.1
+  valuesFrom:
+  - secretKeyRef:
+      name: promtail-settings
+      key: values.yaml
diff --git a/test/pytest/test_app_deployments.py b/test/pytest/test_app_deployments.py
index 362eb221c..0f94a38e4 100644
--- a/test/pytest/test_app_deployments.py
+++ b/test/pytest/test_app_deployments.py
@@ -17,7 +17,8 @@ EXPECTED_RELEASES = {
     'oas': [
         'ingress',
         'prometheus-stack',
-        'loki-stack',
+        'loki',
+        'promtail',
         'eventrouter',
         'single-sign-on'
     ],
@@ -35,9 +36,12 @@ EXPECTED_APP_LABELS = {
     'local-path-provisioner': {
         'namespace': 'kube-system',
         'label_selector': 'app.kubernetes.io/instance=local-path-provisioner'},
-    'loki-stack': {
+    'loki': {
         'namespace': 'oas',
         'label_selector': 'app=loki'},
+    'promtail': {
+        'namespace': 'oas',
+        'label_selector': 'app=promtail'},
     'nextcloud': {
         'namespace': 'oas-apps',
         'label_selector': 'app.kubernetes.io/instance=nc'},
-- 
GitLab