job "telemetry" { datacenters = ["neptune"] type = "service" group "prometheus" { count = 1 network { port "prometheus" { static = 9090 } } task "prometheus" { driver = "docker" config { image = "prom/prometheus:v2.38.0" network_mode = "host" ports = [ "prometheus" ] volumes = [ "secrets:/etc/prometheus" ] } template { data = file("../config/prometheus.yml") destination = "secrets/prometheus.yml" } template { data = "{{ key \"secrets/consul/consul.crt\" }}" destination = "secrets/consul.crt" } template { data = "{{ key \"secrets/consul/consul-client.crt\" }}" destination = "secrets/consul-client.crt" } template { data = "{{ key \"secrets/consul/consul-client.key\" }}" destination = "secrets/consul-client.key" } resources { memory = 500 cpu = 200 } service { port = 9090 address_mode = "driver" name = "prometheus" check { type = "http" path = "/" port = 9090 address_mode = "driver" 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 cpu = 100 } } task "grafana" { driver = "docker" config { image = "grafana/grafana:8.4.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 = <