Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Luca Wintergerst committed Aug 7, 2023
1 parent ddfa285 commit bee3a3b
Show file tree
Hide file tree
Showing 275 changed files with 138,564 additions and 2 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
**/.idea
8 changes: 8 additions & 0 deletions Elastiflix/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
ELASTIC_APM_SERVER_URL="https://foobar.apm.us-central1.gcp.cloud.es.io:443"
ELASTIC_APM_SECRET_TOKEN="lkjhg34567hvj3v456"
ELASTICSEARCH_USERNAME="elastic"
ELASTICSEARCH_PASSWORD="3kj4hg56lhgh3l4vb5j6"
ELASTICSEARCH_URL="https://foobar.es.us-central1.gcp.cloud.es.io"

BUILD_NUMBER="1"
ELASTIC_VERSION="8.9.0"
10 changes: 10 additions & 0 deletions Elastiflix/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
src/streaming-ui/scripts/.env-debug
src/data-loader/env-debug
node_modules/
**/.venv
*/bin/Debug
**__pycache__
#.env
**/.idea
dotnet*/obj
.idea
63 changes: 63 additions & 0 deletions Elastiflix/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
BUILD_NUM=$(shell cat ./properties.json | jq -r ".build_num")
ES_VERSION=$(shell cat ./properties.json | jq -r ".es_version")
APP_NAME=$(shell cat ./properties.json | jq -r ".app_name")

# elastiflix-dotnet-login and elastiflix-dotnet-login-elastic-auto are built with docker buildx

CONTAINERS = python-favorite javascript-client node-server movie-data-loader go-favorite redis java-favorite
CONTAINERS_ELASTIC = python-favorite-elastic-manual javascript-client-elastic-manual node-server-elastic-manual go-favorite-elastic-manual java-favorite-elastic-manual java-favorite-elastic-auto
CONTAINERS_OTEL = python-favorite-otel-auto python-favorite-otel-manual node-server-otel-auto node-server-otel-manual go-favorite-otel-manual java-favorite-otel-manual java-favorite-otel-auto

docker_build: check-docker-env
echo "Building docker images"
for container in ${CONTAINERS}; do\
echo Building container: docker.elastic.co/demos/workshop/observability/$(APP_NAME)-$$container:$(ES_VERSION)-$(BUILD_NUM); \
docker build --platform linux/amd64 --build-arg ES_VERSION=$(VERSION) ./$$container -t docker.elastic.co/demos/workshop/observability/$(APP_NAME)-$$container:$(ES_VERSION)-$(BUILD_NUM);\
done\

docker buildx build --push --platform linux/arm64/v8,linux/amd64 -t docker.elastic.co/demos/workshop/observability/elastiflix-dotnet-login:$(ES_VERSION)-$(BUILD_NUM) ./dotnet-login

docker_build_elastic: check-docker-env
echo "Building docker images"
for container in ${CONTAINERS_ELASTIC}; do\
echo Building container: docker.elastic.co/demos/workshop/observability/$(APP_NAME)-$$container:$(ES_VERSION)-$(BUILD_NUM); \
docker build --platform linux/amd64 --build-arg ES_VERSION=$(VERSION) ./$$container -t docker.elastic.co/demos/workshop/observability/$(APP_NAME)-$$container:$(ES_VERSION)-$(BUILD_NUM);\
done\

docker buildx build --push --platform linux/arm64/v8,linux/amd64 -t docker.elastic.co/demos/workshop/observability/elastiflix-dotnet-login-elastic-auto:$(ES_VERSION)-$(BUILD_NUM) ./dotnet-login-elastic-auto


docker_build_otel: check-docker-env
echo "Building docker images"
for container in ${CONTAINERS_OTEL}; do\
echo Building container: docker.elastic.co/demos/workshop/observability/$(APP_NAME)-$$container:$(ES_VERSION)-$(BUILD_NUM); \
docker build --platform linux/amd64 --build-arg ES_VERSION=$(VERSION) ./$$container -t docker.elastic.co/demos/workshop/observability/$(APP_NAME)-$$container:$(ES_VERSION)-$(BUILD_NUM);\
done\

docker buildx build --push --platform linux/arm64/v8,linux/amd64 -t docker.elastic.co/demos/workshop/observability/elastiflix-dotnet-login-otel-auto:$(ES_VERSION)-$(BUILD_NUM) ./dotnet-login-otel-auto

docker_push: check-docker-env
@echo "Pushing docker images"
@for container in ${CONTAINERS}; do\
echo Pushing container: docker.elastic.co/demos/workshop/observability/$(APP_NAME)-$$container:$(ES_VERSION)-$(BUILD_NUM); \
docker push docker.elastic.co/demos/workshop/observability/$(APP_NAME)-$$container:$(ES_VERSION)-$(BUILD_NUM);\
done\

docker_push_elastic: check-docker-env
@echo "Pushing docker images"
@for container in ${CONTAINERS_ELASTIC}; do\
echo Pushing container: docker.elastic.co/demos/workshop/observability/$(APP_NAME)-$$container:$(ES_VERSION)-$(BUILD_NUM); \
docker push docker.elastic.co/demos/workshop/observability/$(APP_NAME)-$$container:$(ES_VERSION)-$(BUILD_NUM);\
done\

docker_push_otel: check-docker-env
@echo "Pushing docker images"
@for container in ${CONTAINERS_OTEL}; do\
echo Pushing container: docker.elastic.co/demos/workshop/observability/$(APP_NAME)-$$container:$(ES_VERSION)-$(BUILD_NUM); \
docker push docker.elastic.co/demos/workshop/observability/$(APP_NAME)-$$container:$(ES_VERSION)-$(BUILD_NUM);\
done\

check-docker-env:
ifeq (, $(shell which docker))
$(error "No docker installed")
endif
225 changes: 225 additions & 0 deletions Elastiflix/docker-compose-elastic-otel.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
version: "3"
services:
locust:
image: locustio/locust:2.15.1
ports:
- "8089:8089"
volumes:
- ./locustfile.py:/mnt/locust/locustfile.py
command: -f /mnt/locust/locustfile.py --host http://node-server:3001 --autostart
networks:
- app-network
movie-data-loader:
build: movie-data-loader/.
image: docker.elastic.co/demos/workshop/observability/elastiflix-movie-data-loader:${ELASTIC_VERSION}-${BUILD_NUMBER}
networks:
- app-network
environment:
- ELASTICSEARCH_URL=${ELASTICSEARCH_URL}
- ELASTICSEARCH_USERNAME=${ELASTICSEARCH_USERNAME}
- ELASTICSEARCH_PASSWORD=${ELASTICSEARCH_PASSWORD}
redis:
build: redis/.
image: docker.elastic.co/demos/workshop/observability/elastiflix-redis:${ELASTIC_VERSION}-${BUILD_NUMBER}
ports:
- 6379
networks:
- app-network
environment:
- TOGGLE_CLIENT_PAUSE=${TOGGLE_CLIENT_PAUSE}
favorite-python-otel-manual:
build: python-favorite-otel-manual/.
image: docker.elastic.co/demos/workshop/observability/elastiflix-python-favorite-otel-manual:${ELASTIC_VERSION}-${BUILD_NUMBER}
depends_on:
- redis
networks:
- app-network
ports:
- "5002:5000"
environment:
- OTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer%20${ELASTIC_APM_SECRET_TOKEN}
- OTEL_EXPORTER_OTLP_ENDPOINT=${ELASTIC_APM_SERVER_URL}
- OTEL_METRICS_EXPORTER=otlp
- OTEL_RESOURCE_ATTRIBUTES=service.version=1.0,deployment.environment=production
- OTEL_SERVICE_NAME=python-favorite-otel-manual
- OTEL_TRACES_EXPORTER=otlp
- REDIS_HOST=redis
- TOGGLE_SERVICE_DELAY=${TOGGLE_SERVICE_DELAY}
- TOGGLE_CANARY_DELAY=${TOGGLE_CANARY_DELAY}
- TOGGLE_CANARY_FAILURE=${TOGGLE_CANARY_FAILURE}
favorite-python-otel-auto:
build: python-favorite-otel-auto/.
image: docker.elastic.co/demos/workshop/observability/elastiflix-python-favorite-otel-auto:${ELASTIC_VERSION}-${BUILD_NUMBER}
depends_on:
- redis
networks:
- app-network
ports:
- "5010:5000"
environment:
- OTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer%20${ELASTIC_APM_SECRET_TOKEN}
- OTEL_EXPORTER_OTLP_ENDPOINT=${ELASTIC_APM_SERVER_URL}
- OTEL_METRICS_EXPORTER=otlp
- OTEL_RESOURCE_ATTRIBUTES=service.version=1.0,deployment.environment=production
- OTEL_SERVICE_NAME=python-favorite-otel-auto
- OTEL_TRACES_EXPORTER=otlp
- REDIS_HOST=redis
- TOGGLE_SERVICE_DELAY=${TOGGLE_SERVICE_DELAY}
- TOGGLE_CANARY_DELAY=${TOGGLE_CANARY_DELAY}
- TOGGLE_CANARY_FAILURE=${TOGGLE_CANARY_FAILURE}
favorite-go-otel-manual:
build: go-favorite-otel-manual/.
image: docker.elastic.co/demos/workshop/observability/elastiflix-go-favorite-otel-manual:${ELASTIC_VERSION}-${BUILD_NUMBER}
depends_on:
- redis
networks:
- app-network
ports:
- "5001:5000"
environment:
- ELASTIC_APM_SECRET_TOKEN=${ELASTIC_APM_SECRET_TOKEN}
- OTEL_EXPORTER_OTLP_ENDPOINT=${ELASTIC_APM_SERVER_URL}
- OTEL_METRICS_EXPORTER=otlp
- OTEL_RESOURCE_ATTRIBUTES=service.version=1.0,deployment.environment=production
- OTEL_SERVICE_NAME=go-favorite-otel-manual
- OTEL_TRACES_EXPORTER=otlp
- REDIS_HOST=redis
- TOGGLE_SERVICE_DELAY=${TOGGLE_SERVICE_DELAY}
- TOGGLE_CANARY_DELAY=${TOGGLE_CANARY_DELAY}
- TOGGLE_CANARY_FAILURE=${TOGGLE_CANARY_FAILURE}
favorite-java-otel-manual:
build: java-favorite-otel-manual/.
image: docker.elastic.co/demos/workshop/observability/elastiflix-java-favorite-otel-manual:${ELASTIC_VERSION}-${BUILD_NUMBER}
depends_on:
- redis
networks:
- app-network
ports:
- "5003:5000"
environment:
- OTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer%20${ELASTIC_APM_SECRET_TOKEN}
- ELASTIC_APM_SECRET_TOKEN=${ELASTIC_APM_SECRET_TOKEN}
- OTEL_EXPORTER_OTLP_ENDPOINT=${ELASTIC_APM_SERVER_URL}
- OTEL_METRICS_EXPORTER=otlp
- OTEL_RESOURCE_ATTRIBUTES=service.version=1.0,deployment.environment=production
- OTEL_SERVICE_NAME=java-favorite-otel-manual
- OTEL_TRACES_EXPORTER=otlp
- REDIS_HOST=redis
- TOGGLE_SERVICE_DELAY=${TOGGLE_SERVICE_DELAY}
- TOGGLE_CANARY_DELAY=${TOGGLE_CANARY_DELAY}
- TOGGLE_CANARY_FAILURE=${TOGGLE_CANARY_FAILURE}
favorite-java-otel-auto:
build: java-favorite-otel-auto/.
image: docker.elastic.co/demos/workshop/observability/elastiflix-java-favorite-otel-auto:${ELASTIC_VERSION}-${BUILD_NUMBER}
depends_on:
- redis
networks:
- app-network
ports:
- "5004:5000"
environment:
- ELASTIC_APM_SECRET_TOKEN=${ELASTIC_APM_SECRET_TOKEN}
- OTEL_EXPORTER_OTLP_ENDPOINT=${ELASTIC_APM_SERVER_URL}
- OTEL_METRICS_EXPORTER=otlp
- OTEL_RESOURCE_ATTRIBUTES=service.version=1.0,deployment.environment=production
- OTEL_SERVICE_NAME=java-favorite-otel-auto
- OTEL_TRACES_EXPORTER=otlp
- REDIS_HOST=redis
- TOGGLE_SERVICE_DELAY=${TOGGLE_SERVICE_DELAY}
- TOGGLE_CANARY_DELAY=${TOGGLE_CANARY_DELAY}
- TOGGLE_CANARY_FAILURE=${TOGGLE_CANARY_FAILURE}
login:
build: dotnet-login-otel-auto/.
image: docker.elastic.co/demos/workshop/observability/elastiflix-dotnet-login-otel-auto:${ELASTIC_VERSION}-${BUILD_NUMBER}
networks:
- app-network
ports:
- "127.0.0.1:8000:80"
environment:
- OTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer ${ELASTIC_APM_SECRET_TOKEN}
- OTEL_EXPORTER_OTLP_ENDPOINT=${ELASTIC_APM_SERVER_URL}
- OTEL_METRICS_EXPORTER=otlp
- OTEL_RESOURCE_ATTRIBUTES=service.version=1.0,deployment.environment=production
- OTEL_SERVICE_NAME=dotnet-login-otel-auto
- OTEL_TRACES_EXPORTER=otlp
- REDIS_HOST=redis
# node-server:
# build: node-server-otel-auto/.
# image: docker.elastic.co/demos/workshop/observability/elastiflix-node-server-otel-auto:${ELASTIC_VERSION}-${BUILD_NUMBER}
# depends_on:
# - redis
# - login
# networks:
# - app-network
# ports:
# - "3001:3001"
# environment:
# environment:
# - API_ENDPOINT_FAVORITES=favorite-java-otel-auto:5000,favorite-java-otel-manual:5000,favorite-python-otel-auto:5000,favorite-go-otel-manual:5000,favorite-python-otel-manual:5000
# - API_ENDPOINT_LOGIN=login:80
# - ELASTICSEARCH_PASSWORD=${ELASTICSEARCH_PASSWORD}
# - ELASTICSEARCH_URL=${ELASTICSEARCH_URL}
# - ELASTICSEARCH_USERNAME=${ELASTICSEARCH_USERNAME}
# - OTEL_EXPORTER_OTLP_ENDPOINT=${ELASTIC_APM_SERVER_URL}
# - OTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer ${ELASTIC_APM_SECRET_TOKEN}
# - OTEL_LOG_LEVEL=info
# - OTEL_METRICS_EXPORTER=otlp
# - OTEL_RESOURCE_ATTRIBUTES=service.version=1.0,deployment.environment=production
# - OTEL_SERVICE_NAME=node-server-otel-auto
# - OTEL_TRACES_EXPORTER=otlp
# - THROW_NOT_A_FUNCTION_ERROR=${THROW_NOT_A_FUNCTION_ERROR}
node-server:
build: node-server-otel-manual/.
image: docker.elastic.co/demos/workshop/observability/elastiflix-node-server-otel-manual:${ELASTIC_VERSION}-${BUILD_NUMBER}
depends_on:
- redis
- login
networks:
- app-network
ports:
- "3001:3001"
environment:
- API_ENDPOINT_FAVORITES=favorite-java-otel-auto:5000,favorite-java-otel-manual:5000,favorite-python-otel-auto:5000,favorite-go-otel-manual:5000,favorite-python-otel-manual:5000
- API_ENDPOINT_LOGIN=login:80
- ELASTICSEARCH_PASSWORD=${ELASTICSEARCH_PASSWORD}
- ELASTICSEARCH_URL=${ELASTICSEARCH_URL}
- ELASTICSEARCH_USERNAME=${ELASTICSEARCH_USERNAME}
- OTEL_EXPORTER_OTLP_ENDPOINT=${ELASTIC_APM_SERVER_URL}
- OTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer ${ELASTIC_APM_SECRET_TOKEN}
- OTEL_LOG_LEVEL=info
- OTEL_METRICS_EXPORTER=otlp
- OTEL_RESOURCE_ATTRIBUTES=service.version=1.0,deployment.environment=production,service.name=node-server-otel-manual
- OTEL_SERVICE_NAME=node-server-otel-manual
- OTEL_TRACES_EXPORTER=otlp
- THROW_NOT_A_FUNCTION_ERROR=${THROW_NOT_A_FUNCTION_ERROR}
frontend:
build: javascript-client-elastic-manual/.
image: docker.elastic.co/demos/workshop/observability/elastiflix-javascript-client-elastic-manual:${ELASTIC_VERSION}-${BUILD_NUMBER}
depends_on:
- redis
- node-server
networks:
- app-network
ports:
- "9000:9000"
environment:
- ELASTIC_APM_ENVIRONMENT=production
- ELASTIC_APM_SERVER_URL=${ELASTIC_APM_SERVER_URL}
- ELASTIC_APM_SERVICE_NAME=javascript-client-elastic-manual
# optional, can be used instead of sending data directly to APM Server
# otel-collector:
# image: otel/opentelemetry-collector-contrib
# command: [ "--config=/etc/otelcol-config.yml", "--config=/etc/otelcol-config-extras.yml" ]
# volumes:
# - ./otel-config.yml:/etc/otelcol-config.yml
# - ./otel-config-extras.yml:/etc/otelcol-config-extras.yml
# ports:
# - 1888:1888 # pprof extension
# - 8888:8888 # Prometheus metrics exposed by the collector
# - 8889:8889 # Prometheus exporter metrics
# - 13133:13133 # health_check extension
# - 4317:4317 # OTLP gRPC receiver
# - 4318:4318 # OTLP http receiver
networks:
app-network:
driver: bridge
Loading

0 comments on commit bee3a3b

Please sign in to comment.