[[configuration-instrumentation]]
== Configure APM instrumentation

++++
<titleabbrev>Instrumentation</titleabbrev>
++++

Libbeat uses the Elastic APM Go Agent to instrument its publishing pipeline.
Currently, only the Elasticsearch output is instrumented.
To gain insight into the performance of {beatname_uc}, you can enable this instrumentation and send trace data to the APM Integration.

Example configuration with instrumentation enabled:

["source","yaml"]
----
instrumentation:
  enabled: true
  environment: production
  hosts:
    - "http://localhost:8200"
  api_key: L5ER6FEvjkmlfalBealQ3f3fLqf03fazfOV
----

[float]
=== Configuration options

You can specify the following options in the `instrumentation` section of the +{beatname_lc}.yml+ config file:

[float]
==== `enabled`

Set to `true` to enable instrumentation of {beatname_uc}.
Defaults to `false`.

[float]
==== `environment`

Set the environment in which {beatname_uc} is running, for example, `staging`, `production`, `dev`, etc.
Environments can be filtered in the {kibana-ref}/xpack-apm.html[APM app].

[float]
==== `hosts`

The APM integration {apm-guide-ref}/input-apm.html[host] to report instrumentation data to.
Defaults to `http://localhost:8200`.

[float]
==== `api_key`

The {apm-guide-ref}/input-apm.html[API Key] used to secure communication with the APM Integration.
If `api_key` is set then `secret_token` will be ignored.

[float]
==== `secret_token`

The {apm-guide-ref}/input-apm.html[Secret token] used to secure communication with the APM Integration.

[float]
==== `profiling.cpu.enabled`

Set to `true` to enable CPU profiling, where profile samples are recorded as events.

This feature is experimental.

[float]
==== `profiling.cpu.interval`

Configure the CPU profiling interval. Defaults to `60s`.

This feature is experimental.

[float]
==== `profiling.cpu.duration`

Configure the CPU profiling duration. Defaults to `10s`.

This feature is experimental.

[float]
==== `profiling.heap.enabled`

Set to `true` to enable heap profiling.

This feature is experimental.

[float]
==== `profiling.heap.interval`

Configure the heap profiling interval. Defaults to `60s`.

This feature is experimental.
