This repository contains the files utilized during the tutorial presented in the dedicated IsItObservable episode related to Nginx Instrumentation.
this tutorial will also utilize the OpenTelemetry Operator with:
-
the OpenTelemetry Demo
-
the hipster-shop
-
nginx
-
All the observability data generated by the environment would be sent to Dynatrace.
The following tools need to be install on your machine :
- jq
- kubectl
- git
- gcloud ( if you are using GKE)
- Helm
PROJECT_ID="<your-project-id>"
gcloud services enable container.googleapis.com --project ${PROJECT_ID}
gcloud services enable monitoring.googleapis.com \
cloudtrace.googleapis.com \
clouddebugger.googleapis.com \
cloudprofiler.googleapis.com \
--project ${PROJECT_ID}
ZONE=europe-west3-a
NAME=isitobservable-nginx-instrumentation
gcloud container clusters create ${NAME} --zone=${ZONE} --machine-type=e2-standard-4 --num-nodes=2
git clone https://github.com/isitobservable/nginx-instrumentation
cd nginx-instrumentation
If you don't have any Dynatrace tenant , then I suggest to create a trial using the following link : Dynatrace Trial
Once you have your Tenant save the Dynatrace tenant url in the variable DT_TENANT_URL
(for example : https://dedededfrf.live.dynatrace.com)
DT_TENANT_URL=<YOUR TENANT Host>
The dynatrace operator will require to have several tokens:
- Token to deploy and configure the various components
- Token to ingest metrics and Traces
One for the operator having the following scope:
- Create ActiveGate tokens
- Read entities
- Read Settings
- Write Settings
- Access problem and event feed, metrics and topology
- Read configuration
- Write configuration
- Paas integration - installer downloader
Save the value of the token . We will use it later to store in a k8S secret
API_TOKEN=<YOUR TOKEN VALUE>
Create a Dynatrace token with the following scope:
- Ingest metrics (metrics.ingest)
- Ingest logs (logs.ingest)
- Ingest events (events.ingest)
- Ingest OpenTelemetry
- Read metrics
DATA_INGEST_TOKEN=<YOUR TOKEN VALUE>
The application will deploy the entire environment:
chmod 777 deployment.sh
./deployment.sh --clustername "${NAME}" --dturl "${DT_TENANT_URL}" --dtingesttoken "${DATA_INGEST_TOKEN}" --dtoperatortoken "${API_TOKEN}"
The deployment script of this tutorial has already:
- enabled the tracing on the ingress
- added the right annotations to the ingress rules
If you open your Dynatrace Tenant, and open The Services
application , you should find a dedicated service for our ingress controller
And if you open this service you will find all the various application using this ingress:
You can select one of the distributes traces, in my case I clicked on the Checkout transaction
Now let's instrument a traditionnal nginx webserver. To do so we will first need to create a specific namespace:
kubectl create ns nginx-example
kubectl label namespace nginx-example oneagent=false
Then we want to configure the instrumentation that would be applied on our future nginx deployment:
kubect apply -f opentelemetry/Instrumentation.yaml -n nginx-example
Once the instrumentation object is deployed you can deploy your nginx deployments:
kubect apply -f nginx/basic_web1.yaml -n nginx-example
kubect apply -f nginx/nginx_deploy.yaml -n nginx-example
IP=$(kubectl get svc ingress-nginx-controller -n ingress-nginx -ojson | jq -j '.status.loadBalancer.ingress[].ip')
if now you open your browser on the url : http://nginx1.$IP.nip.io
and wait few seconds
You can open your Dynatrace Tenant, and open The Services
application , you should find a dedicated service for our nginx1 webserver
And if you open this service you will find all the various application using this ingress:
You can select one of the distributes traces available in this screen you will see the trace produced by the auto-instrumentation :