LogoLogo
  • Welcome to Release
  • Getting started
    • Quickstart
    • Create an account
    • Prepare to use Release
    • Create an application
      • Create custom application
      • Create from template
      • Servers vs runnables
    • Create an environment
  • Guides and examples
    • Domains and DNS
      • Manage domains
      • DNS and nameservers
        • Configure GoDaddy
        • Configure Cloudflare
        • Configure Namecheap
        • Other DNS hosts
      • Routing traffic
    • Example applications
      • Full stack voting app
      • Flask and RDS counter app
      • Static site with Gatsby
      • Golang with Postgres and Nginx
      • WordPress with MySQL
      • Spring and PostgreSQL
      • Terraform and Flask
      • OpenTelemetry demo
      • Load balancer with hostname
      • Static JavaScript service
      • SSH bastion access to services
      • ngrok and OAuth for private tunnels
      • Using OAuth Proxy
      • Hybrid Docker and static site
      • App Imports: Connecting two applications
      • Example library
    • Running instances
      • Cron jobs
      • Jobs
      • Using Helm charts
      • Using terminal
      • Viewing logs
      • Troubleshooting
        • ImagePullBackoff error
        • CrashLoopBackoff error
        • Exit codes
        • OOM: out of memory
    • Advanced guides
      • Containers guide
      • Application guide
      • Kubernetes guide
      • Create a cluster
      • Upgrade a cluster
      • Managing node groups
      • Patch node groups
      • Hostnames and rules
      • Serve traffic on multiple ports
      • Configure access to your K8s cluster
      • Designing for multiple environments
      • Microservices architecture
      • Monitoring your clusters
      • Performance tuning
      • Visibility and monitoring
      • Working with data
        • Container-based data
        • Seeding and migration
        • Cloud-provided data
        • Golden images
        • Third party
      • Pausing Instant Datasets
        • Application pausing schedules
        • Pause/resume environments
      • Infrastructure as code
        • Terraform
  • Reference documentation
    • Account settings
      • Account info
      • Managing users
      • Build settings
        • Build arguments
        • Build SSH keys
      • Add integrations
      • View clusters and cloud integrations
      • Add datasets
      • Environment handles
    • Workflows in Release
      • Stages of workflows
      • Serial deployments
      • Parallel deployments
      • Rolling deployments
      • Rainbow deployments
    • Networking
      • Network architecture (AWS)
      • Network architecture (GCP)
      • Ingresses
      • IP addresses
      • Cloud-provided services
      • Third-party services
    • Release environment versioning
    • Application settings
      • Application Template
        • Schema definition
      • Default environment variables
      • GitHub
      • Pull requests
      • GitOps
      • Just-in-time file mounts
      • Primary App Link
      • Create application FAQ
      • App-level build arguments
      • Parameters
      • Workspaces
    • End-to-end testing
    • Environment settings
      • Environment configuration
      • Environment variables
        • Environment variable mappings
        • Secrets vaults
        • Using Secrets with GitOps
        • Kubernetes Secrets as environment variables
        • Managing legacy Release Secrets
    • Environment expiration
    • Environment presets
    • Instant datasets on AWS
    • Instant datasets on GCP
    • Instant dataset tasks
      • Tonic Cloud
      • Tonic On-Premise
    • Cloud resources
    • Static service deployment
    • Helm
      • Getting started
      • Version-controlled Helm charts
      • Open-source charts
      • Building Docker images
      • Ingress and networking
      • Configuration
    • GitOps
    • The .release.yaml file
    • Docker Compose conversion support
    • Reference examples
      • Adding and removing services
      • Managing service resources
      • Adding database containers to the Application Template
      • Stock Off-The-Shelf Examples
    • Release API
      • Account Authentication
      • Environments API
        • Create
        • Get
        • Setup
        • Patch
      • User Authentication
      • Environment Presets API
        • Get Environment Preset List
        • Get Environment Preset
        • Put Environment Preset
  • Background concepts
    • How Release works
  • Frequently asked questions
    • Release FAQ
    • AWS FAQ
    • Docker FAQ
    • JavaScript FAQ
  • Integrations
    • Integrations overview
      • Artifactory integration
      • Cloud integrations (AWS)
        • AWS guides
        • Grant access to AWS resources
        • AWS how to increase EIP quota
        • Control your EKS fleet with systems manager
        • Managing STS access
        • AWS Permissions Boundaries
        • Private ECR Repositories
        • Using an Existing AWS VPC
        • Using an Existing EKS Cluster
      • Docker Hub integration
      • LaunchDarkly integration
      • Private registries
      • Slack integration
      • Cloud integrations (GCP)
        • GCP Permissions Boundary
      • Datadog Agent
      • Doppler Secrets Manager
      • AWS Secrets Management
    • Source control integrations
      • GitHub
        • Pull request comments
        • Pull request labels
        • GitHub deployments
        • GitHub statuses
        • Remove GitHub integration
      • Bitbucket
      • GitLab
    • Monitoring and logging add-ons
      • Datadog
      • New Relic
      • ELK (Elasticsearch, Logstash, and Kibana)
  • Release Delivery
    • Create new customer integration
    • Delivery guide
    • Release to customer account access controls
    • Delivery FAQs
  • Release Instant Datasets
    • Introduction
    • Quickstart
    • Security
      • AWS Instant Dataset security
    • FAQ
    • API
  • CLI
    • Getting started
    • Installation
    • Configuration
    • CLI usage example
    • Remote development environments
    • Command reference
      • release accounts
        • release accounts list
        • release accounts select
      • release ai
        • release ai chat
        • release ai config-delete
        • release ai config-init
        • release ai config-select
        • release ai config-upsert
      • release apps
        • release apps list
        • release apps select
      • release auth
        • release auth login
        • release auth logout
      • release builds
        • release builds create
      • release clusters
        • release clusters exec
        • release clusters kubeconfig
        • release clusters shell
      • release datasets
        • release datasets list
        • release datasets refresh
      • release deploys
        • release deploys create
        • release deploys list
      • release development
        • release development logs
        • release development start
      • release environments
        • release environments config-get
        • release environments config-set
        • release environments create
        • release environments delete
        • release environments get
        • release environments list
        • release environments vars-get
      • release gitops
        • release gitops init
        • release gitops validate
      • release instances
        • release instances exec
        • release instances logs
        • release instances terminal
  • Release.ai
    • Release.ai Introduction
    • Getting Started
    • Release.ai Templates
    • Template Configuration Basics
    • Using GPU Resources
    • Custom Workflows
    • Fine Tuning LlamaX
    • Serving Inference
Powered by GitBook
On this page
  • The Release fork of the OpenTelemetry Astronomy Shop Demo
  • Adding the demo app using template files
  • Detailed steps: How to prepare a Release Application Template from scratch
  • Use the Docker Compose file to create an application in Release
  • View your running application

Was this helpful?

  1. Guides and examples
  2. Example applications

OpenTelemetry demo

PreviousTerraform and FlaskNextLoad balancer with hostname

Last updated 2 years ago

Was this helpful?

Observability is an essential part of any microservice architecture. But when services are built using many divergent technologies, consistent observability becomes a challenge.

OpenTelemetry is a collection of tools that enables developers and DevOps to simplify and standardize the collection of telemetry data.

To demonstrate how OpenTelemetry works for a complex microservices-based application, the OpenTelemetry developers maintain an example application called the .

The demo is in constant development, with contributors regularly adding more services. This may seem overengineered, but this is the point: To provide a realistic demonstration of how to improve observability of a complex distributed system.

In this tutorial, we'll look at how to host a snapshot of this application on Release.

The Release fork of the OpenTelemetry Astronomy Shop Demo

We created a , hosted in our GitHub organization.

We modified this fork by including the following files to simplify adding the demo as a Release application:

Filename
Purpose

.release/application_template.yaml

A complete application template, generated by Release

.release/environment_variables.yaml

Default environment variables, generated by Release

.release.yaml

This file indicates where to find the templates above

Adding the demo app using template files

The simplest way to add this demo application to Release is to use the pre-generated application template and corresponding default environment variables.

You'll need an existing with a and a .

Follow the steps below to deploy the demo application:

  1. Add a new Release application.

  1. Under Analyze your repository, skip to the Next Step.

  1. Select .release/application_template.yaml from the Select release template file dropdown.

  1. Double-check your context and domain values, then click Next Step.

  2. Select .release/environment_variables.yaml from the Select release env template file dropdown, then click Next Step.

  1. Click Next Step again to skip over the build arguments form.

  2. Click Deploy your app!

  1. Release will now build and deploy your OpenTelemetry demo. This could take up to 20 minutes the first time.

  2. Visit the environment detail page.

  3. Click the frontend proxy URL to see the demo shop.

Reach the demo's public services by visiting the URLs below (substitute your frontend proxy hostname):

  • Webstore: https://your-frontend-proxy-hostename.tld/

  • Grafana: https://your-frontend-proxy-hostename.tld/grafana/

  • Feature Flags UI: https://your-frontend-proxy-hostename.tld/feature/

  • Load Generator UI: https://your-frontend-proxy-hostename.tld/loadgen/

  • Jaeger UI: https://your-frontend-proxy-hostename.tld/jaeger/ui/

Detailed steps: How to prepare a Release Application Template from scratch

We provide the steps we used to generate a new application_template.yaml file for this application as reference.

Release can create an application based on an existing Docker Compose file. At the time of writing, Release can import the OpenTelemetry app file, requiring only a few minor changes to the resulting application template:

  1. Service names should not contain underscores.

  2. Service names are used by Release to create service-specific environment variables. These variables sometimes clash with expected variables from existing apps.

Use the Docker Compose file to create an application in Release

  1. In Release, create a new application.

  2. Select your repository and the branch containing your new compose.yaml file. Click Next Step.

  1. From the Select files dropdown, pick only docker-compose.yaml.

  1. Click Start Analysis. Release will read the docker-compose.yaml file and show a list of services.

  2. Add otelcol as a dependency to the kafka service, then click Next Step.

  1. Release will create a complete Application Template. Double-check the context and domain values for your account.

  1. Change kafka to kafkaservice for each occurrence, except the image name.

  2. Change all occurrences of ffs_postgres to ffspostgres.

  3. Add container port 5432 to the ffspostgres service:

    ports:
    - type: container_port
      port: '5432'
      loadbalancer: false
  4. Add container ports 9092 and 9093 to the kafkaservice service:

    ports:
    - type: container_port
      port: '9092'
      loadbalancer: false
    - type: container_port
      port: '9093'
      loadbalancer: false
  5. Fix the kafkaservice health check by changing kafkaservce hostname to localhost:

    command:
    - nc
    - "-z"
    - kafka
    - localhost
    - '9092'
  6. Remove the extra current directory selector (./) from configmap repo paths.

  7. Mount extra Grafana configuration files:

    - mount_path: "/etc/grafana/provisioning/dashboards/general.yaml"
    repo_path: "./src/grafana/provisioning/dashboards/general.yaml"
    name: grafana-general-yaml
    - mount_path: "/etc/grafana/provisioning/dashboards/general/demo-dashboard.json"
    repo_path: "./src/grafana/provisioning/dashboards/general/demo-dashboard.json"
    name: grafana-general-demo-dashboard-json
    - mount_path: "/etc/grafana/provisioning/dashboards/general/opentelemetry-collector.json"
    repo_path: "./src/grafana/provisioning/dashboards/general/opentelemetry-collector.json"
    name: grafana-general-otel-collector-json
    - mount_path: "/etc/grafana/provisioning/datasources/default.yaml"
    repo_path: "./src/grafana/provisioning/datasources/default.yaml"
    name: grafana-datasources-default-yaml
    - mount_path: "/etc/grafana/provisioning/datasources/jaeger.yaml"
    repo_path: "./src/grafana/provisioning/datasources/jaeger.yaml"
    name: grafana-datasources-jaeger-yaml
  8. Click Next Step.

  9. Edit the generated environment variables file, by removing PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT key and value from the frontend service.

  10. Add a new entry for PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT under the mapping key:

    mapping:
      PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: "${OTELCOL_INGRESS_URL}/v1/traces"
  11. Change the value of FEATURE_FLAG_SERVICE_HOST to featureflagservice.

  12. Click Next Step.

  1. Skip the build arguments form by clicking Next Step again.

  2. Click Deploy your app!

Release will now build and deploy your demo application.

View your running application

Reach the demo's public services by visiting the URLs below (substitute your frontend proxy hostname):

  • Webstore: https://your-frontend-proxy-hostename.tld/

  • Grafana: https://your-frontend-proxy-hostename.tld/grafana/

  • Feature Flags UI: https://your-frontend-proxy-hostename.tld/feature/

  • Load Generator UI: https://your-frontend-proxy-hostename.tld/loadgen/

  • Jaeger UI: https://your-frontend-proxy-hostename.tld/jaeger/ui/

OpenTelemetry Astronomy Shop Demo
fork of the OpenTelemetry Astronomy Shop Demo
Awesome Release
Release account
cluster
domain
Select your repo and branch
Skip the analysis function
Select the application template
Select environment variables template
Deploy your application
Select your repo and branch
Select docker-compose.yaml
Select services
Generated application template
Generated environment variables
Deploy your application