The following guide describes how to setup the OpenTelemetry demo with Elastic Observability using Docker compose or Kubernetes. This fork introduces several changes to the agents used in the demo:
- The Java agent within the Ad, the Fraud Detection and the Kafka services have been replaced with the Elastic distribution of the OpenTelemetry Java Agent. You can find more information about the Elastic distribution in this blog post.
- The .NET agent within the Cart service has been replaced with the Elastic distribution of the OpenTelemetry .NET Agent. You can find more information about the Elastic distribution in this blog post.
- The Elastic distribution of the OpenTelemetry Node.js Agent has replaced the OpenTelemetry Node.js agent in the Payment service. Additional details about the Elastic distribution are available in this blog post.
- The Elastic distribution for OpenTelemetry Python has replaced the OpenTelemetry Python agent in the Recommendation service. Additional details about the Elastic distribution are available in this blog post.
Additionally, the OpenTelemetry Contrib collector has also been changed to the Elastic OpenTelemetry Collector distribution. This ensures a more integrated and optimized experience with Elastic Observability.
- Start a free trial on Elastic Cloud and copy the
endpoint
andsecretToken
from the Elastic APM setup instructions in your Kibana. - Open the file
src/otelcollector/otelcol-elastic-config-extras.yaml
in an editor and replace the following two placeholders:YOUR_APM_ENDPOINT_WITHOUT_HTTPS_PREFIX
: your Elastic APM endpoint (withouthttps://
prefix) that must also include the port (example:1234567.apm.us-west2.gcp.elastic-cloud.com:443
).YOUR_APM_SECRET_TOKEN
: your Elastic APM secret token.
- Start the demo with the following command from the repository's root directory:
make start
- Create a Kubernetes cluster. There are no specific requirements, so you can create a local one, or use a managed Kubernetes cluster, such as GKE, EKS, or AKS.
- Set up kubectl.
- Set up Helm.
- Setup Elastic Observability on Elastic Cloud.
- Create a secret in Kubernetes with the following command.
Don't forget to replace
kubectl create secret generic elastic-secret \ --from-literal=elastic_apm_endpoint='YOUR_APM_ENDPOINT_WITHOUT_HTTPS_PREFIX' \ --from-literal=elastic_apm_secret_token='YOUR_APM_SECRET_TOKEN'
YOUR_APM_ENDPOINT_WITHOUT_HTTPS_PREFIX
: your Elastic APM endpoint (withouthttps://
prefix) that must also include the port (example:1234567.apm.us-west2.gcp.elastic-cloud.com:443
).YOUR_APM_SECRET_TOKEN
: your Elastic APM secret token, include the Bearer or ApiKey but not the "Authorization=" part e.g. Bearer XXXXXX or ApiKey XXXXX below is an example:
kubectl create secret generic elastic-secret \ --from-literal=elastic_apm_endpoint='12345.apm.us-west2.gcp.elastic-cloud.com:443' \ --from-literal=elastic_apm_secret_token='Bearer 123456789123456YE2'
- Execute the following commands to deploy the OpenTelemetry demo to your Kubernetes cluster:
# clone this repository git clone https://github.com/elastic/opentelemetry-demo # switch to the kubernetes/elastic-helm directory cd opentelemetry-demo/kubernetes/elastic-helm # !(when running it for the first time) add the open-telemetry Helm repostiroy helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts # !(when an older helm open-telemetry repo exists) update the open-telemetry helm repo helm repo update open-telemetry # deploy the demo through helm install helm install -f deployment.yaml my-otel-demo open-telemetry/opentelemetry-demo
This demo already enables cluster level metrics collection with clusterMetrics
and
Kubernetes events collection with kubernetesEvents
.
In order to add Node level metrics collection we can run an additional Otel collector Daemonset with the following:
-
Create a secret in Kubernetes with the following command.
kubectl create secret generic elastic-secret-ds \ --from-literal=elastic_endpoint='YOUR_ELASTICSEARCH_ENDPOINT' \ --from-literal=elastic_api_key='YOUR_ELASTICSEARCH_API_KEY'
Don't forget to replace
YOUR_ELASTICSEARCH_ENDPOINT
: your Elasticsearch endpoint (withhttps://
prefix example:https://1234567.us-west2.gcp.elastic-cloud.com:443
).YOUR_ELASTICSEARCH_API_KEY
: your Elasticsearch API Key
-
Execute the following command to deploy the OpenTelemetry Collector to your Kubernetes cluster, in the same directory
kubernetes/elastic-helm
in this repository.
# deploy the Elastic OpenTelemetry collector distribution through helm install
helm install otel-daemonset open-telemetry/opentelemetry-collector --values daemonset.yaml