Add a pod template annotation to each pod you want to auto-instrument
editAdd a pod template annotation to each pod you want to auto-instrument
editTo auto-instrument a deployment, update its spec.template.metadata.annotations
to include the
co.elastic.apm/attach
key. The webhook matches the value of this key to the webhookConfig.agents
value defined in your Helm values file.
For example, if your Webhook values file includes the following:
... webhookConfig: agents: java: ...
Then your co.elastic.apm/attach
value should be java
:
apiVersion: apps/v1 kind: Deployment metadata: # ... spec: replicas: 1 template: metadata: annotations: co.elastic.apm/attach: java labels: # ... spec: #...
The APM attacher configuration |
The spec.template.metadata.annotations
value allows you to set custom environment variables and images per deployment.
For example, your Helm values file might configure a number of deployments: java-dev
might have a different APM environment from java-prod
, and backend2
use a different APM agent than other deployments.
agents: java-dev: image: docker.elastic.co/observability/apm-agent-java:latest artifact: "/usr/agent/elastic-apm-agent.jar" environment: ELASTIC_APM_SERVER_URL: "http://192.168.1.10:8200" ELASTIC_APM_ENVIRONMENT: "dev" ELASTIC_APM_LOG_LEVEL: "debug" ELASTIC_APM_PROFILING_INFERRED_SPANS_ENABLED: "true" JAVA_TOOL_OPTIONS: "-javaagent:/elastic/apm/agent/elastic-apm-agent.jar" java-prod: image: docker.elastic.co/observability/apm-agent-java:1.44.0 artifact: "/usr/agent/elastic-apm-agent.jar" environment: ELASTIC_APM_SERVER_URL: "http://192.168.1.11:8200" ELASTIC_APM_ENVIRONMENT: "prod" ELASTIC_APM_LOG_LEVEL: "info" ELASTIC_APM_PROFILING_INFERRED_SPANS_ENABLED: "true" JAVA_TOOL_OPTIONS: "-javaagent:/elastic/apm/agent/elastic-apm-agent.jar" backend2: image: docker.elastic.co/observability/apm-agent-nodejs:latest artifact: "/opt/nodejs/node_modules/elastic-apm-node" environment: NODE_OPTIONS: "-r /elastic/apm/agent/elastic-apm-node/start" ELASTIC_APM_SERVER_URL: "http://192.168.1.11:8200" ELASTIC_APM_SERVICE_NAME: "petclinic" ELASTIC_APM_LOG_LEVEL: "info"
The example here shows a |
The only webhookConfig.agents
values defined in values.yaml
are java
and nodejs
. When using other values,
you must explicitly specify image
, artifact
, and *OPTIONS
values.
The environment variables defined in the webhook and here take precedence - overwrite - the values defined in the Kubernetes deployments. For example if your image uses JAVA_TOOL_OPTIONS, the value
your image sets will be ignored in favour of the value set here or in the values.yaml
.