job "telemetry" { datacenters = ["neptune"] type = "service" group "prometheus" { count = 2 network { port "prometheus" { static = 9090 } } constraint { attribute = "${attr.unique.hostname}" operator = "set_contains_any" value = "cariacou,carcajou" } 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 = "docker" config { image = "litestream/litestream:0.3.7" args = [ "restore", "-config", "/etc/litestream.yml", "/ephemeral/grafana.db" ] volumes = [ "../alloc/data:/ephemeral", "secrets/litestream.yml:/etc/litestream.yml" ] } user = "472" template { data = file("../config/grafana-litestream.yml") destination = "secrets/litestream.yml" } resources { memory = 100 memory_max = 1000 cpu = 100 } } task "grafana" { driver = "docker" config { image = "grafana/grafana:9.2.3" network_mode = "host" ports = [ "grafana" ] volumes = [ "../alloc/data:/var/lib/grafana", "secrets/prometheus.yaml:/etc/grafana/provisioning/datasources/prometheus.yaml" ] } template { data = file("../config/grafana-datasource-prometheus.yaml") destination = "secrets/prometheus.yaml" } template { data = <