summaryrefslogtreecommitdiff
path: root/modules/nixos/loki.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/nixos/loki.nix')
-rw-r--r--modules/nixos/loki.nix102
1 files changed, 102 insertions, 0 deletions
diff --git a/modules/nixos/loki.nix b/modules/nixos/loki.nix
new file mode 100644
index 0000000..1582164
--- /dev/null
+++ b/modules/nixos/loki.nix
@@ -0,0 +1,102 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+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 {
+ nixfiles.modules.nginx = with cfg; {
+ enable = true;
+ upstreams.loki.servers."127.0.0.1:${toString cfg.port}" = {};
+ virtualHosts.${domain} = {
+ locations."/".proxyPass = "http://loki";
+ extraConfig = nginxInternalOnly;
+ };
+ };
+
+ services.loki = {
+ enable = true;
+
+ configuration = rec {
+ auth_enabled = false;
+
+ server = rec {
+ http_listen_address = "127.0.0.1";
+ http_listen_port = cfg.port;
+
+ grpc_listen_address = "127.0.0.1";
+ grpc_listen_port = http_listen_port + 1;
+
+ log_level = "warn";
+ };
+
+ common = rec {
+ path_prefix = "/var/lib/loki";
+ storage.filesystem = {
+ chunks_directory = "${path_prefix}/chunker";
+ rules_directory = "${path_prefix}/ruler";
+ };
+ replication_factor = 1;
+ instance_interface_names = ["lo"];
+ ring = {
+ instance_addr = "127.0.0.1";
+ kvstore.store = "inmemory";
+ };
+ };
+
+ ruler = {
+ rule_path = "${common.path_prefix}/ruler";
+ storage = {
+ type = "local";
+ local.directory =
+ pkgs.writeTextDir "ruler/ruler.yml"
+ (generators.toJSON {} {groups = [{name = "default";}];});
+ };
+ };
+
+ schema_config.configs = [
+ {
+ from = "2020-01-01";
+ store = "boltdb-shipper";
+ object_store = "filesystem";
+ schema = "v11";
+ index = {
+ prefix = "index_";
+ period = "24h";
+ };
+ chunks = {
+ prefix = "chunks_";
+ period = "24h";
+ };
+ }
+ ];
+
+ analytics.reporting_enabled = false;
+ };
+ };
+
+ systemd.tmpfiles.rules = [
+ "d /var/lib/loki 0700 loki loki - -"
+ "d /var/lib/loki/ruler 0700 loki loki - -"
+ ];
+ };
+}