job "telemetry-service" { datacenters = ["neptune", "jupiter", "corrin", "bespin"] type = "service" group "prometheus" { count = 2 network { port "prometheus" { static = 9090 } } constraint { attribute = "${attr.unique.hostname}" operator = "set_contains_any" value = "carcajou,origan" } task "prometheus" { driver = "nix2" config { nixpkgs = "github:nixos/nixpkgs/nixos-22.11" packages = [ "#prometheus", "#coreutils", "#findutils", "#bash" ] command = "prometheus" args = [ "--config.file=/etc/prom/prometheus.yml", "--storage.tsdb.path=/data", "--storage.tsdb.retention.size=5GB", ] bind = { "/mnt/ssd/prometheus" = "/data" } } template { data = file("../config/prometheus.yml") destination = "etc/prom/prometheus.yml" } template { data = "{{ key \"secrets/consul/consul.crt\" }}" destination = "etc/prom/consul.crt" } template { data = "{{ key \"secrets/consul/consul-client.crt\" }}" destination = "etc/prom/consul-client.crt" } template { data = "{{ key \"secrets/consul/consul-client.key\" }}" destination = "etc/prom/consul-client.key" } resources { memory = 500 cpu = 200 } service { port = "prometheus" name = "prometheus" check { type = "http" path = "/" interval = "60s" timeout = "5s" check_restart { limit = 3 grace = "90s" ignore_warnings = false } } } } } group "grafana" { count = 1 network { port "grafana" { static = 3719 } } task "restore-db" { lifecycle { hook = "prestart" sidecar = false } driver = "nix2" config { packages = [ "#litestream" ] command = "litestream" args = [ "restore", "-config", "/etc/litestream.yml", "/ephemeral/grafana.db" ] bind = { "../alloc/data" = "/ephemeral", } } template { data = file("../config/grafana-litestream.yml") destination = "etc/litestream.yml" } resources { memory = 100 memory_max = 1000 cpu = 100 } } task "grafana" { driver = "nix2" config { nixpkgs = "github:nixos/nixpkgs/nixos-22.11" packages = [ "#grafana" ] command = "grafana-server" args = [ "-homepath", "/share/grafana", "cfg:default.paths.data=/grafana", "cfg:default.paths.provisioning=/grafana-provisioning" ] bind = { "../alloc/data" = "/grafana", } } template { data = file("../config/grafana-datasource-prometheus.yaml") destination = "grafana-provisioning/datasources/prometheus.yaml" } template { data = <