# Application Performance Monitoring (APM)

### Overview

The groundcover platform collects data all across your stack using the power of eBPF instrumentation. Our [proprietary eBPF sensor](https://docs.groundcover.com/getting-started/requirements/kernel-requirements-for-ebpf-sensor) is installed in seconds and provides 100% coverage into application metrics and traces with zero code changes or configurations.

**Resolve faster -** By seamlessly correlating traces with application metrics, logs, and infrastructure events, groundcover’s APM enables you to detect and resolve root issues faster.

**Improve user experience -** Optimize your application performance and resource utilization faster than ever before, avoid downtimes and make poor end-user experience a thing of the past.

### Collection

Our revolutionary eBPF sensor, [Flora](https://www.groundcover.com/blog/ebpf-observability-agent), is deployed as a DaemonSet in your Kubernetes cluster. This approach allows us to inspect every packet that each service is sending or receiving, achieving 100% coverage. No sampling rates or relying on statistical luck - all requests and responses are observed.

This approach would not be feasible without a resource-efficient eBPF-powered sensor. eBPF not only extends the ability to pinpoint issues - it does so with much less overhead than any other method. eBPF can be used to analyze traffic originating from every programming language and SDK - even for encrypted connections!

{% hint style="info" %}
Click [here](https://docs.groundcover.com/capabilities/application-performance-monitoring-apm/supported-technologies) for a full list of supported technologies
{% endhint %}

### Reconstruction

After being collected by our eBPF code, the traffic is then classified according to its protocol - which is identified directly from the underlying traffic, or the library from which it originated. Connections are reconstructed, and we can generate transactions - HTTP requests and responses, SQL queries and responses etc.

### Enrichment

In order to give as much context as possible each transaction is enriched with as much metadata as possible. Some examples might include the pods that took part in this transaction (both client and server), the nodes on which these pods are scheduled, and the state of container at the time of the request.

It is important to emphasize the impressive granularity level with which this process takes place - every single transaction observed is fully enriched. This allows us to perform more advanced aggregations.

### Aggregation

After being enriched by as much context as possible, the transactions as grouped together into meaningful aggregations. These could be defined by the workloads involved, the protocols detected and the resources that were accessed in the operations. These aggregations will mostly come into play when displaying [golden signals](https://docs.groundcover.com/capabilities/application-metrics#golden-signals).

### Exporting

After collecting the data, contextualizing it and putting it together in meaningful aggregations - we can now create [metrics](https://docs.groundcover.com/capabilities/application-performance-monitoring-apm/application-metrics) and [traces](https://docs.groundcover.com/capabilities/application-performance-monitoring-apm/traces) to provide meaningful insights into the services' behaviors.

### Metrics

Learn how groundcover's application metrics work:

{% content-ref url="application-performance-monitoring-apm/application-metrics" %}
[application-metrics](https://docs.groundcover.com/capabilities/application-performance-monitoring-apm/application-metrics)
{% endcontent-ref %}

### Traces

Learn how groundcover's application traces work:

{% content-ref url="application-performance-monitoring-apm/traces" %}
[traces](https://docs.groundcover.com/capabilities/application-performance-monitoring-apm/traces)
{% endcontent-ref %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.groundcover.com/capabilities/application-performance-monitoring-apm.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
