aboutsummaryrefslogblamecommitdiff
path: root/app/telemetry/deploy/telemetry.hcl
blob: bcfe3f68e14af0920be85b142cecfb05db24dd3b (plain) (tree)





































































































































































                                                                                                                                          
job "telemetry" {
  datacenters = ["neptune"]
  type = "service"
  
  group "grafana" {
    count = 1

    constraint {
      attribute = "${attr.unique.hostname}"
      operator = "="
      value = "cariacou"
    }

    network {
      port "otel_grpc" {
        static = 4317
      }
      port "elastic" {
        static = 9200
      }
      port "kibana" {
        static = 5601
      }
      port "apm" {
        static = 8200
      }
      port "grafana" {
        static = 3333
      }
    }

    task "otel" {
      driver = "docker"
      config {
        image = "otel/opentelemetry-collector-contrib:0.44.0"
        args = [
          "--config=/etc/otel-config.yaml",
        ]
        network_mode = "host"
        ports= [ "otel_grpc" ]
        volumes = [
          "secrets/otel-config.yaml:/etc/otel-config.yaml"
        ]
      }

      template {
        data = file("../config/otel-config.yaml")
        destination = "secrets/otel-config.yaml"
      }

      resources {
        memory = 200
        cpu = 100
      }
    }

    task "elastic" {
      driver = "docker"
      config {
        image = "docker.elastic.co/elasticsearch/elasticsearch:7.17.0"
        network_mode = "host"
        volumes = [
          "/mnt/ssd/telemetry/es_data:/usr/share/elasticsearch/data",
        ]
        ports = [ "elastic" ]
      }

      resources {
        memory = 2500
        cpu = 500
      }

      template {
        data = <<EOH
node.name=elastic
http.port=9200
cluster.name=es-docker-cluster
discovery.type=single-node
bootstrap.memory_lock=true
ES_JAVA_OPTS=-Xms512m -Xmx512m
EOH
        destination = "secrets/env"
        env = true
      }
    }

    task "kibana" {
      driver = "docker"
      config {
        image = "docker.elastic.co/kibana/kibana:7.17.0"
        network_mode = "host"
        ports = [ "kibana" ]
      }

      template {
        data = <<EOH
SERVER_NAME=kibana.local
ELASTICSEARCH_HOSTS=http://localhost:9200
EOH
        destination = "secrets/env"
        env = true
      }

      resources {
        memory = 1500
        cpu = 500
      }
    }

    task "apm" {
      driver = "docker"
      config {
        image = "docker.elastic.co/apm/apm-server:7.17.0"
        network_mode = "host"
        ports = [ "apm" ]
        args = [ "--strict.perms=false" ]
        volumes = [
          "secrets/apm-config.yaml:/usr/share/apm-server/apm-server.yml:ro"
        ]
      }

      template {
        data = file("../config/apm-config.yaml")
        destination = "secrets/apm-config.yaml"
      }

      resources {
        memory = 200
        cpu = 100
      }
    }

    task "grafana" {
      driver = "docker"
      config {
        image = "grafana/grafana:8.3.5"
        network_mode = "host"
        ports = [ "grafana" ]
        volumes = [
          "/mnt/ssd/telemetry/grafana:/var/lib/grafana",
          "secrets/elastic.yaml:/etc/grafana/provisioning/datasources/elastic.yaml"
        ]
      }

      template {
        data = file("../config/grafana/provisioning/datasources/elastic.yaml")
        destination = "secrets/elastic.yaml"
      }

      template {
        data = <<EOH
GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,grafana-piechart-panel,grafana-worldmap-panel,grafana-polystat-panel
GF_SERVER_HTTP_PORT=3333
EOH
        destination = "secrets/env"
        env = true
      }

      resources {
        memory = 500
        cpu = 100
      }
    }

  }
}