summaryrefslogtreecommitdiff
path: root/modules/loki.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/loki.nix')
-rw-r--r--modules/loki.nix124
1 files changed, 124 insertions, 0 deletions
diff --git a/modules/loki.nix b/modules/loki.nix
new file mode 100644
index 0000000..c446848
--- /dev/null
+++ b/modules/loki.nix
@@ -0,0 +1,124 @@
+{
+ config,
+ lib,
+ libNginx,
+ ...
+}:
+with lib;
+let
+ cfg = config.nixfiles.modules.loki;
+in
+{
+ options.nixfiles.modules.loki = {
+ enable = mkEnableOption "Loki";
+
+ port = mkOption {
+ description = "Port.";
+ type = with types; port;
+ default = 30171;
+ };
+
+ domain = mkOption {
+ description = "Domain name sans protocol scheme.";
+ type = with types; str;
+ default = "loki.${config.networking.domain}";
+ };
+ };
+
+ config = mkIf cfg.enable {
+ ark.directories = [ config.services.loki.configuration.common.path_prefix ];
+
+ nixfiles.modules.nginx = with cfg; {
+ enable = true;
+ upstreams.loki.servers."127.0.0.1:${toString cfg.port}" = { };
+ virtualHosts.${domain} = {
+ locations."/".proxyPass = "http://loki";
+ extraConfig = libNginx.config.internalOnly;
+ };
+ };
+
+ services.loki = {
+ enable = true;
+
+ configuration = rec {
+ auth_enabled = false;
+
+ server = {
+ http_listen_address = "127.0.0.1";
+ http_listen_port = cfg.port;
+
+ grpc_listen_address = "127.0.0.1";
+ grpc_listen_port = server.http_listen_port + 1;
+
+ log_level = "warn";
+ };
+
+ common = {
+ path_prefix = config.services.loki.dataDir;
+ storage.filesystem = {
+ chunks_directory = "${common.path_prefix}/chunks";
+ rules_directory = "${common.path_prefix}/rules";
+ };
+ replication_factor = 1;
+ ring = {
+ instance_addr = "127.0.0.1";
+ kvstore.store = "inmemory";
+ };
+ };
+
+ ingester = {
+ chunk_idle_period = "15m";
+ max_chunk_age = "15m";
+ };
+
+ compactor = {
+ working_directory = "${common.path_prefix}/compactor";
+ retention_enabled = true;
+ retention_delete_delay = "1h";
+ retention_delete_worker_count = 64;
+ };
+
+ ruler = {
+ enable_api = true;
+ storage = {
+ type = "local";
+ local.directory = common.storage.filesystem.rules_directory;
+ };
+ };
+
+ limits_config = {
+ max_streams_per_user = 0;
+ max_global_streams_per_user = 0;
+ max_query_series = 4096;
+ retention_period = "720h";
+ deletion_mode = "filter-and-delete";
+ };
+
+ schema_config.configs = [
+ {
+ from = "2024-01-01";
+ store = "tsdb";
+ object_store = "filesystem";
+ schema = "v12";
+ index = {
+ prefix = "index_";
+ period = "24h";
+ };
+ chunks = {
+ prefix = "chunks_";
+ period = "24h";
+ };
+ }
+ ];
+
+ analytics.reporting_enabled = false;
+ };
+ };
+
+ systemd.tmpfiles.rules = with config.services.loki.configuration.common; [
+ "d ${path_prefix} 0700 loki loki - -"
+ "d ${storage.filesystem.chunks_directory} 0700 loki loki - -"
+ "d ${storage.filesystem.rules_directory} 0700 loki loki - -"
+ ];
+ };
+}