From e6ed60548397627bf10f561f9438201dbba0a36e Mon Sep 17 00:00:00 2001 From: Azat Bahawi Date: Sun, 21 Apr 2024 02:15:42 +0300 Subject: 2024-04-21 --- modules/loki.nix | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 modules/loki.nix (limited to 'modules/loki.nix') 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 - -" + ]; + }; +} -- cgit v1.2.3