diff options
| author | seth <[email protected]> | 2023-05-19 11:19:55 -0400 |
|---|---|---|
| committer | seth <[email protected]> | 2023-05-19 11:19:55 -0400 |
| commit | 8e5ce33b09eafb2b477d7b10f7a745b6189e0464 (patch) | |
| tree | 033108059b9d263d0e8d8df7d3e0e58199eb12be | |
| parent | 44fef05d2e39060a32b61c0e2346b45803cddc77 (diff) | |
p-body: add grafana, loki, and prometheus
| -rw-r--r-- | hosts/p-body/default.nix | 4 | ||||
| -rw-r--r-- | hosts/p-body/grafana.nix | 14 | ||||
| -rw-r--r-- | hosts/p-body/loki.nix | 78 | ||||
| -rw-r--r-- | hosts/p-body/nginx.nix | 11 | ||||
| -rw-r--r-- | hosts/p-body/prometheus.nix | 27 | ||||
| -rw-r--r-- | hosts/p-body/promtail.nix | 37 |
6 files changed, 170 insertions, 1 deletions
diff --git a/hosts/p-body/default.nix b/hosts/p-body/default.nix index 1a92889..569480c 100644 --- a/hosts/p-body/default.nix +++ b/hosts/p-body/default.nix @@ -9,7 +9,11 @@ imports = [ (modulesPath + "/virtualisation/digital-ocean-image.nix") ./forgejo.nix + ./grafana.nix + ./loki.nix ./nginx.nix + ./prometheus.nix + ./promtail.nix ]; _module.args.nixinate = { diff --git a/hosts/p-body/grafana.nix b/hosts/p-body/grafana.nix new file mode 100644 index 0000000..e557070 --- /dev/null +++ b/hosts/p-body/grafana.nix @@ -0,0 +1,14 @@ +{config, ...}: let + inherit (config.networking) domain; +in { + services.grafana = { + enable = true; + settings = { + server = { + http_addr = "127.0.0.1"; + http_port = 4000; + domain = "grafana.${domain}"; + }; + }; + }; +} diff --git a/hosts/p-body/loki.nix b/hosts/p-body/loki.nix new file mode 100644 index 0000000..5b0541e --- /dev/null +++ b/hosts/p-body/loki.nix @@ -0,0 +1,78 @@ +_: { + services.loki = { + enable = true; + configuration = { + server.http_listen_port = 3030; + auth_enabled = false; + + ingester = { + lifecycler = { + address = "127.0.0.1"; + ring = { + kvstore = { + store = "inmemory"; + }; + replication_factor = 1; + }; + }; + chunk_idle_period = "1h"; + max_chunk_age = "1h"; + chunk_target_size = 999999; + chunk_retain_period = "30s"; + max_transfer_retries = 0; + }; + + schema_config = { + configs = [ + { + from = "2022-06-06"; + 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"; + 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"; + shared_store = "filesystem"; + compactor_ring = { + kvstore = { + store = "inmemory"; + }; + }; + }; + }; + }; +} diff --git a/hosts/p-body/nginx.nix b/hosts/p-body/nginx.nix index ae1f251..3edd7b4 100644 --- a/hosts/p-body/nginx.nix +++ b/hosts/p-body/nginx.nix @@ -28,7 +28,10 @@ in { virtualHosts = let mkProxy = endpoint: port: { - "${endpoint}".proxyPass = "http://127.0.0.1:${port}"; + "${endpoint}" = { + proxyPass = "http://127.0.0.1:${port}"; + proxyWebsockets = true; + }; }; in { "${domain}" = { @@ -69,6 +72,12 @@ in { tryFiles = "$uri =404"; }; }; + + "grafana.${domain}" = { + enableACME = true; + serverAliases = ["www.grafana.${domain}"]; + locations = mkProxy "/" "4000"; + }; }; }; } diff --git a/hosts/p-body/prometheus.nix b/hosts/p-body/prometheus.nix new file mode 100644 index 0000000..a0d272d --- /dev/null +++ b/hosts/p-body/prometheus.nix @@ -0,0 +1,27 @@ +{config, ...}: let + scrapeExporter = name: exporter: { + job_name = "${name}"; + static_configs = [ + { + targets = [ + "127.0.0.1:${toString config.services.prometheus.exporters.${exporter}.port}" + ]; + } + ]; + }; +in { + services.prometheus = { + enable = true; + port = 5000; + exporters = { + node = { + enable = true; + enabledCollectors = ["systemd"]; + port = 5001; + }; + }; + scrapeConfigs = [ + (scrapeExporter "p-body" "node") + ]; + }; +} diff --git a/hosts/p-body/promtail.nix b/hosts/p-body/promtail.nix new file mode 100644 index 0000000..1fa7f35 --- /dev/null +++ b/hosts/p-body/promtail.nix @@ -0,0 +1,37 @@ +{config, ...}: { + services.promtail = { + enable = true; + configuration = { + server = { + http_listen_port = 3031; + grpc_listen_port = 0; + }; + positions = { + filename = "/tmp/positions.yaml"; + }; + clients = [ + { + url = "http://127.0.0.1:${toString config.services.loki.configuration.server.http_listen_port}/loki/api/v1/push"; + } + ]; + scrape_configs = [ + { + job_name = "journal"; + journal = { + max_age = "12h"; + labels = { + job = "systemd-journal"; + host = "pihole"; + }; + }; + relabel_configs = [ + { + source_labels = ["__journal__systemd_unit"]; + target_label = "unit"; + } + ]; + } + ]; + }; + }; +} |
