about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--hosts/tahoe/default.nix1
-rw-r--r--hosts/tahoe/services.nix4
-rw-r--r--modules/services/monitoring/default.nix1
-rw-r--r--modules/services/monitoring/loki.nix112
-rw-r--r--profiles/monitoring/loki.nix103
-rw-r--r--profiles/monitoring/promtail.nix2
6 files changed, 105 insertions, 118 deletions
diff --git a/hosts/tahoe/default.nix b/hosts/tahoe/default.nix
index a23c7c8..2cefdb7 100644
--- a/hosts/tahoe/default.nix
+++ b/hosts/tahoe/default.nix
@@ -19,6 +19,7 @@ in
     "${self}/profiles/hardware/amd.nix"
     "${self}/profiles/monitoring/exporter.nix"
     "${self}/profiles/monitoring/promtail.nix"
+    "${self}/profiles/monitoring/loki.nix"
   ];
 
   # Use systemd-networkd for networking
diff --git a/hosts/tahoe/services.nix b/hosts/tahoe/services.nix
index a8b80b8..7e42a1f 100644
--- a/hosts/tahoe/services.nix
+++ b/hosts/tahoe/services.nix
@@ -12,10 +12,6 @@ in
         enable = true;
         listenAddress = "192.168.6.40";
       };
-      loki = {
-        enable = true;
-        listenAddress = "192.168.6.40";
-      };
       grafana = {
         enable = true;
         vhostName = "dash.${config.homelab.domain}";
diff --git a/modules/services/monitoring/default.nix b/modules/services/monitoring/default.nix
index 32866cb..9c75aa8 100644
--- a/modules/services/monitoring/default.nix
+++ b/modules/services/monitoring/default.nix
@@ -5,7 +5,6 @@ in
 {
   imports = [
     ./grafana.nix
-    ./loki.nix
     ./prometheus.nix
   ];
 }
diff --git a/modules/services/monitoring/loki.nix b/modules/services/monitoring/loki.nix
deleted file mode 100644
index 65c4bdd..0000000
--- a/modules/services/monitoring/loki.nix
+++ /dev/null
@@ -1,112 +0,0 @@
-{ config, lib, pkgs, ... }:
-let
-  cfg = config.my.services.monitoring.loki;
-in
-{
-  options.my.services.monitoring.loki = with lib; {
-    enable = mkEnableOption "loki observability stack";
-    listenAddress = mkOption {
-      type = types.str;
-      default = "0.0.0.0";
-      description = lib.mdDoc ''
-        Address to listen on.
-      '';
-    };
-    listenPort = mkOption {
-      type = types.port;
-      default = 3100;
-      description = lib.mdDoc ''
-        Port to listen on.
-      '';
-    };
-  };
-
-  config = lib.mkIf cfg.enable {
-    services.loki = {
-      enable = true;
-      configuration = {
-        # no need for authentication, since we're binding on the
-        # wireguard interface, we can trust the connections.
-        auth_enabled = false;
-
-        server = {
-          http_listen_port = 3100;
-          http_listen_address = cfg.listenAddress;
-        };
-
-        ingester = {
-          lifecycler = {
-            address = cfg.listenAddress;
-            ring = {
-              kvstore = { store = "inmemory"; };
-              replication_factor = 1;
-            };
-            final_sleep = "0s";
-          };
-
-          # Any chunk not receiving new logs in this time will be flushed
-          chunk_idle_period = "1h";
-
-          # All chunks will be flushed when they hit this age, default is 1h
-          max_chunk_age = "1h";
-
-          # Loki will attempt to build chunks up to 1.5MB, flushing first if
-          # chunk_idle_period or max_chunk_age is reached first
-          chunk_target_size = 1048576;
-
-          # Must be greater than index read cache TTL if using an index cache (Default
-          # index read cache TTL is 5m)
-          chunk_retain_period = "30s";
-
-          # Chunk transfers disabled
-          max_transfer_retries = 0;
-        };
-
-        schema_config = {
-          configs = [{
-            from = "2020-10-24";
-            store = "boltdb-shipper";
-            object_store = "filesystem";
-            schema = "v11";
-            index = {
-              prefix = "index_";
-              period = "24h";
-            };
-          }];
-        };
-
-        storage_config = {
-          boltdb_shipper = {
-            active_index_directory = "/var/lib/loki/boltdb-shipper-active";
-            cache_location = "/var/lib/loki/boltdb-shipper-cache";
-
-            # Can be increased for faster performance over longer query periods,
-            # uses more disk space
-            cache_ttl = "24h";
-
-            shared_store = "filesystem";
-          };
-
-          filesystem = { directory = "/var/lib/loki/chunks"; };
-        };
-
-        limits_config = {
-          reject_old_samples = true;
-          reject_old_samples_max_age = "168h";
-        };
-
-        chunk_store_config = { max_look_back_period = "0s"; };
-
-        table_manager = {
-          retention_deletes_enabled = false;
-          retention_period = "0s";
-        };
-
-        compactor = {
-          working_directory = "/var/lib/loki/boltdb-shipper-compactor";
-          shared_store = "filesystem";
-        };
-      };
-    };
-  };
-}
diff --git a/profiles/monitoring/loki.nix b/profiles/monitoring/loki.nix
new file mode 100644
index 0000000..1200846
--- /dev/null
+++ b/profiles/monitoring/loki.nix
@@ -0,0 +1,103 @@
+{ config, lib, pkgs, ... }:
+{
+  services.loki.enable = true;
+  services.loki.configuration = {
+    # no need for authentication, since we're binding on the
+    # wireguard interface, we can trust the connections.
+    auth_enabled = false;
+
+    server = {
+      http_listen_port = 3100;
+      http_listen_address = "127.0.0.1";
+    };
+
+    ingester = {
+      lifecycler = {
+        address = cfg.listenAddress;
+        ring = {
+          kvstore = { store = "inmemory"; };
+          replication_factor = 1;
+        };
+        final_sleep = "0s";
+      };
+
+      # Any chunk not receiving new logs in this time will be flushed
+      chunk_idle_period = "1h";
+
+      # All chunks will be flushed when they hit this age, default is 1h
+      max_chunk_age = "1h";
+
+      # Loki will attempt to build chunks up to 1.5MB, flushing first if
+      # chunk_idle_period or max_chunk_age is reached first
+      chunk_target_size = 1048576;
+
+      # Must be greater than index read cache TTL if using an index cache (Default
+      # index read cache TTL is 5m)
+      chunk_retain_period = "30s";
+
+      # Chunk transfers disabled
+      max_transfer_retries = 0;
+    };
+
+    schema_config = {
+      configs = [{
+        from = "2020-10-24";
+        store = "boltdb-shipper";
+        object_store = "filesystem";
+        schema = "v11";
+        index = {
+          prefix = "index_";
+          period = "24h";
+        };
+      }];
+    };
+
+    storage_config = {
+      boltdb_shipper = {
+        active_index_directory = "/var/lib/loki/boltdb-shipper-active";
+        cache_location = "/var/lib/loki/boltdb-shipper-cache";
+
+        # Can be increased for faster performance over longer query periods,
+        # uses more disk space
+        cache_ttl = "24h";
+
+        shared_store = "filesystem";
+      };
+
+      filesystem = { directory = "/var/lib/loki/chunks"; };
+    };
+
+    limits_config = {
+      reject_old_samples = true;
+      reject_old_samples_max_age = "168h";
+    };
+
+    chunk_store_config = { max_look_back_period = "0s"; };
+
+    table_manager = {
+      retention_deletes_enabled = false;
+      retention_period = "0s";
+    };
+
+    compactor = {
+      working_directory = "/var/lib/loki/boltdb-shipper-compactor";
+      shared_store = "filesystem";
+    };
+  };
+
+  services.nginx.virtualHosts."loki.${config.homelab.domain}" = {
+    default = true;
+    forceSSL = true;
+    enableACME = true;
+    listen = [
+      {
+        addr = "192.168.6.40";
+        port = 443;
+        ssl = true;
+      }
+    ];
+    locations."/" = {
+      proxyPass = "http://127.0.0.1::${toString services.loki.configuration.server.http_listen_port}";
+    };
+  };
+}
diff --git a/profiles/monitoring/promtail.nix b/profiles/monitoring/promtail.nix
index 23b6669..a3b95c2 100644
--- a/profiles/monitoring/promtail.nix
+++ b/profiles/monitoring/promtail.nix
@@ -2,7 +2,7 @@
 {
   services.promtail.enable = true;
   services.promtail.configuration = {
-    clients = [{ url = "https://loki.${config.homelab.domain}:3100/loki/api/v1/push"; }];
+    clients = [{ url = "https://loki.${config.homelab.domain}/loki/api/v1/push"; }];
     scrape_configs = [
       {
         job_name = "journal";