aboutsummaryrefslogtreecommitdiff
path: root/app/telemetry/deploy
diff options
context:
space:
mode:
Diffstat (limited to 'app/telemetry/deploy')
-rw-r--r--app/telemetry/deploy/docker-compose.yml69
-rw-r--r--app/telemetry/deploy/telemetry.hcl166
2 files changed, 235 insertions, 0 deletions
diff --git a/app/telemetry/deploy/docker-compose.yml b/app/telemetry/deploy/docker-compose.yml
new file mode 100644
index 0000000..576e0a9
--- /dev/null
+++ b/app/telemetry/deploy/docker-compose.yml
@@ -0,0 +1,69 @@
+version: "2"
+services:
+
+ otel:
+ image: otel/opentelemetry-collector-contrib:${OTEL_COLLECT_TAG}
+ command: [ "--config=/etc/otel-config.yaml" ]
+ volumes:
+ - ../config/otel-config.yaml:/etc/otel-config.yaml
+ network_mode: "host"
+
+ elastic:
+ image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_BUNDLE_TAG}
+ container_name: elastic
+ environment:
+ - "node.name=elastic"
+ - "http.port=9200"
+ - "cluster.name=es-docker-cluster"
+ - "discovery.type=single-node"
+ - "bootstrap.memory_lock=true"
+ - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
+ ulimits:
+ memlock:
+ soft: -1
+ hard: -1
+ nofile: 65536
+ volumes:
+ - "es_data:/usr/share/elasticsearch/data"
+ network_mode: "host"
+
+ # kibana instance and collectors
+ # see https://www.elastic.co/guide/en/elastic-stack-get-started/current/get-started-docker.html
+ kibana:
+ image: docker.elastic.co/kibana/kibana:${ELASTIC_BUNDLE_TAG}
+ container_name: kibana
+ environment:
+ SERVER_NAME: "kibana.local"
+ # ELASTICSEARCH_URL: "http://localhost:9700"
+ ELASTICSEARCH_HOSTS: "http://localhost:9200"
+ depends_on: [ 'elastic' ]
+ network_mode: "host"
+
+ apm:
+ image: docker.elastic.co/apm/apm-server:${ELASTIC_BUNDLE_TAG}
+ container_name: apm
+ volumes:
+ - "../config/apm-config.yaml:/usr/share/apm-server/apm-server.yml:ro"
+ depends_on: [ 'elastic' ]
+ network_mode: "host"
+
+ grafana:
+ # see https://grafana.com/docs/grafana/latest/installation/docker/
+ image: "grafana/grafana:8.3.5"
+ container_name: grafana
+ # restart: unless-stopped
+ environment:
+ - "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,grafana-piechart-panel,grafana-worldmap-panel,grafana-polystat-panel"
+ network_mode: "host"
+ volumes:
+ # chown 472:472 if needed
+ - grafana:/var/lib/grafana
+ - ../config/grafana/provisioning/:/etc/grafana/provisioning/
+
+volumes:
+ es_data:
+ driver: local
+ grafana:
+ driver: local
+ metricbeat:
+ driver: local
diff --git a/app/telemetry/deploy/telemetry.hcl b/app/telemetry/deploy/telemetry.hcl
new file mode 100644
index 0000000..bcfe3f6
--- /dev/null
+++ b/app/telemetry/deploy/telemetry.hcl
@@ -0,0 +1,166 @@
+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
+ }
+ }
+
+ }
+}