Skip to content

updates for ebpf / full host profiling #29270

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions config/_default/menus/main.en.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4061,6 +4061,11 @@ menu:
parent: profiler_enabling
identifier: profiler_enabling_linux
weight: 109
- name: eBPF
url: profiler/enabling/ebpf/
parent: profiler_enabling
identifier: profiler_enabling_ebpf
weight: 110
- name: Profile Types
url: profiler/profile_types/
parent: profiler
Expand Down Expand Up @@ -4126,6 +4131,11 @@ menu:
parent: profiler_troubleshooting
identifier: profiler_troubleshooting_linux
weight: 608
- name: eBPF
url: profiler/profiler_troubleshooting/ebpf/
parent: profiler_troubleshooting
identifier: profiler_troubleshooting_ebpf
weight: 609
- name: Guides
url: profiler/guide/
parent: profiler
Expand Down
1 change: 1 addition & 0 deletions config/_default/params.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ code_language_ids:
windows: Windows
opentelemetry: OpenTelemetry
ddprof: "Rust/C/C++"
ebpf: "eBPF"
serverless: "Serverless"
javascript: "JavaScript"
swift: "Swift"
Expand Down
107 changes: 107 additions & 0 deletions content/en/profiler/enabling/ebpf.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
---
title: Enabling the eBPF Profiler
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
title: Enabling the eBPF Profiler
title: Enabling the Full-Host Profiler

What do you think about framing this as this as the full host profiler instead of eBPF?

code_lang: ebpf
type: multi-code-lang
code_lang_weight: 90
aliases:
- /tracing/profiler/enabling/ebpf/
Comment on lines +3 to +7
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
code_lang: ebpf
type: multi-code-lang
code_lang_weight: 90
aliases:
- /tracing/profiler/enabling/ebpf/
private: true

Let's remove this for now so we can make the page private.

further_reading:
- link: 'getting_started/profiler'
tag: 'Documentation'
text: 'Getting Started with Profiler'
- link: 'profiler/profiler_troubleshooting/ebpf'
tag: 'Documentation'
text: 'Fix problems you encounter while using the profiler'
---

<div class="alert alert-warning">
<code>ebpf</code> is in beta. Datadog recommends evaluating the profiler in a non-sensitive environment before deploying in production.
</div>
Comment on lines +17 to +19
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<div class="alert alert-warning">
<code>ebpf</code> is in beta. Datadog recommends evaluating the profiler in a non-sensitive environment before deploying in production.
</div>
{{< callout url="" btn_hidden="true" header="Try the Full-Host Profiler Preview!">}}
The Full-Host Profiler is in Preview.
{{< /callout >}}


The eBPF profiler is our eBPF-based host profiler built on OpenTelemetry and designed to send profiling data to the Datadog backend via the Datadog Agent. It supports symbolication for compiled languages and is optimized for containerized environments like Docker and Kubernetes.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The eBPF profiler is our eBPF-based host profiler built on OpenTelemetry and designed to send profiling data to the Datadog backend via the Datadog Agent. It supports symbolication for compiled languages and is optimized for containerized environments like Docker and Kubernetes.
The Full-Host Profiler is an eBPF-based profiling solution built on OpenTelemetry that sends profiling data to Datadog using the Datadog Agent. It supports symbolication for compiled languages and is optimized for containerized environments such as Docker and Kubernetes.
### Use cases
The Full-Host Profiler is particularly valuable for:
- Profiling open-source software components that aren't instrumented with Datadog's tracing libraries.
- Analyzing performance across multi-language processes and runtimes.
- Identifying resource bottlenecks at the host level, including detection of noisy neighbor processes.

I think a use cases section would be helpful. What do you think?


## Requirements

For a summary of the minimum and recommended runtime and tracer versions across all languages, read [Supported Language and Tracer Versions][7].

Supported operating systems
: Linux

Supported architecture
: `amd64` or `arm64` processors

Serverless
: `ebpf` is not supported on serverless platforms, such as AWS Lambda.

OS Settings
: TBD
Comment on lines +36 to +37
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just noting so we don't forget to update or remove this.


Debugging information
: Symbols should be available locallly or can be uploaded in CI via `datadog-ci`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
: Symbols should be available locallly or can be uploaded in CI via `datadog-ci`
: Symbols should be available locallly or can be uploaded in CI with `datadog-ci`


## Installation

The profiler can be used as a standalone executable.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The profiler can be used as a standalone executable.
The Full-Host Profiler is distributed as a standalone executable.


### Running the Profiler
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
### Running the Profiler
### Container environments

If the host is running workloads inside containers, it is recommended to run the profiler inside a container as well. A container image is [available][5].
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
If the host is running workloads inside containers, it is recommended to run the profiler inside a container as well. A container image is [available][5].
For hosts running containerized workloads, Datadog recommends running the profiler inside a container:


If you're using Kubernetes, follow the instruction for [running in Kubernetes][8].

If you're directly using Docker, follow the instrcutins for [running in Docker][9].
Comment on lines +49 to +51
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
If you're using Kubernetes, follow the instruction for [running in Kubernetes][8].
If you're directly using Docker, follow the instrcutins for [running in Docker][9].
- **Kubernetes**: Follow the [running in Kubernetes][8] instructions.
- **Docker**: Follow the [running in Docker][9] instructions.
- **Container image**: Available from the [container registry][5].

Just a note, when we GA this, I think we should include these instructions on this page.


If you're not using a container runtime, follow the instructions for running [directly on the host][10]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
If you're not using a container runtime, follow the instructions for running [directly on the host][10]
### Non-container environments
For hosts without container runtimes, follow the instructions for [running directly on the host][10].


### Configuring the Profiler
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
### Configuring the Profiler
### Configuration

#### Local symbol upload (Experimental)
For compiled languages (C/C++/Rust/Go/...), the profiler can upload local symbols (when available) to Datadog for symbolication. Symbols need to be available locally (unstripped binaries).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
For compiled languages (C/C++/Rust/Go/...), the profiler can upload local symbols (when available) to Datadog for symbolication. Symbols need to be available locally (unstripped binaries).
For compiled languages (C/C++/Rust/Go), the profiler can upload local symbols to Datadog for symbolication when unstripped binaries are available.


To enable local symbol upload:

1. Set the `DD_HOST_PROFILING_EXPERIMENTAL_UPLOAD_SYMBOLS` environment variable to true.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
1. Set the `DD_HOST_PROFILING_EXPERIMENTAL_UPLOAD_SYMBOLS` environment variable to true.
1. Set the `DD_HOST_PROFILING_EXPERIMENTAL_UPLOAD_SYMBOLS=true`.

2. Provide a Datadog API key through the `DD_API_KEY` environment variable.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
2. Provide a Datadog API key through the `DD_API_KEY` environment variable.
2. Provide a [Datadog API key][11] through the `DD_API_KEY` environment variable.

3. Provide a Datadog APP key through the `DD_APP_KEY` environment variable.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
3. Provide a Datadog APP key through the `DD_APP_KEY` environment variable.
3. Provide a [Datadog application key][13] through the `DD_APP_KEY` environment variable.

4. Set the `DD_SITE environment` variable to your Datadog site (e.g. datadoghq.com, datadoghq.eu, us5.datadoghq.com, ...).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
4. Set the `DD_SITE environment` variable to your Datadog site (e.g. datadoghq.com, datadoghq.eu, us5.datadoghq.com, ...).
4. Set the `DD_SITE environment` variable to your [Datadog site][12]. Your site is: {{< region-param key="dd_site" code="true" >}}

Note this will auto-populate based on the site they have selected.


### Build
You must first ensure you have the correct version of go installed. In order to build the profiler directly on your machine, you can simply run:

```shell
make
```
Comment on lines +67 to +71
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
You must first ensure you have the correct version of go installed. In order to build the profiler directly on your machine, you can simply run:
```shell
make
```
To build the Full-Host Profiler directly on your machine:
1. Ensure you have the required version of Go installed:
```shell
go version
```
2. Run:
```shell
make
```

We should note what the required version of Go is in the Requirements section. Do we know that yet?


### Library
TBD

### Deploying the shared library

TBD

#### Installing the library

TBD
#### Appending a search directory

TBD

## Configuration

TBD
Comment on lines +73 to +89
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
### Library
TBD
### Deploying the shared library
TBD
#### Installing the library
TBD
#### Appending a search directory
TBD
## Configuration
TBD

Let's delete this unless you anticipate us having content to fill it in with before publishing?


## Not sure what to do next?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Not sure what to do next?
## What's next?


The [Getting Started with Profiler][6] guide takes a sample service with a performance problem and shows you how to use Continuous Profiler to understand and fix the problem.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The [Getting Started with Profiler][6] guide takes a sample service with a performance problem and shows you how to use Continuous Profiler to understand and fix the problem.
After installing the Full-Host Profiler, see the [Getting Started with Profiler][6] to learn how to use Continuous Profiler to identify and fix performance problems.


## Further Reading
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Further Reading
## Further reading


{{< partial name="whats-next/whats-next.html" >}}

[2]: shttps://github.com/DataDog/dd-otel-host-profiler/releases/
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[2]: shttps://github.com/DataDog/dd-otel-host-profiler/releases/
[2]: https://github.com/DataDog/dd-otel-host-profiler/releases/

[3]: https://app.datadoghq.com/profiling
[4]: /getting_started/tagging/unified_service_tagging
[5]: https://github.com/DataDog/dd-otel-host-profiler/pkgs/container/dd-otel-host-profiler/.
[6]: /getting_started/profiler/
[7]: /profiler/enabling/supported_versions/
[8]: https://github.com/DataDog/dd-otel-host-profiler/blob/main/doc/running-in-kubernetes.md
[9]: https://github.com/DataDog/dd-otel-host-profiler/blob/main/doc/running-in-docker.md
[10]: https://github.com/DataDog/dd-otel-host-profiler/blob/main/doc/running-on-host.md
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[10]: https://github.com/DataDog/dd-otel-host-profiler/blob/main/doc/running-on-host.md
[10]: https://github.com/DataDog/dd-otel-host-profiler/blob/main/doc/running-on-host.md
[11]: https://app.datadoghq.com/organization-settings/api-keys
[12]: /getting_started/site/
[13]: https://app.datadoghq.com/access/application-keys

Adding links for suggested changes in Configuration section.

16 changes: 8 additions & 8 deletions content/en/profiler/enabling/supported_versions.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ The following tables summarize the features available for each language runtime.

To use the Datadog Profiler, use at least the minimum versions summarized in the following table. For specific profile type availability by version, see [Profile types](#profile-types).

| | [Java][1] | [Python][2] | [Go][3] | [Ruby][4] | [Node.js][5] | [.NET][6] | [PHP][7] | [Rust/C/C++][8] |
|-----------------------------------|:------------:|:----------------:|:-------------:|:--------------:|:-------------:|:-----------------------------------------------------------------------:|:-------------:|:---------------:|
| | [Java][1] | [Python][2] | [Go][3] | [Ruby][4] | [Node.js][5] | [.NET][6] | [PHP][7] | [Rust/C/C++][8] | [eBPF][9] |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we want to make this page private, we should note that this is in Preview here or remove it for now.

|-----------------------------------|:------------:|:----------------:|:-------------:|:--------------:|:-------------:|:-----------------------------------------------------------------------:|:-------------:|:---------------:|:---------------:|
| <strong>Minimum&nbsp;runtime&nbsp;version</strong> | [JDK&nbsp;8+][17] | Python&nbsp;2.7+ | [previous major Go release][21] | Ruby&nbsp;2.5+ | Node&nbsp;14+ | .NET&nbsp;Core&nbsp;2.1+, .NET&nbsp;5+, .NET&nbsp;Framework&nbsp;4.6.1+ | PHP&nbsp;7.1+ | |
| <strong>Feature-complete runtime version</strong> | [JDK&nbsp;11+][17] | Python&nbsp;3.6+ | [latest major Go release][21] | Ruby&nbsp;3.2+ | Node&nbsp;18+ | .NET&nbsp;7+ | PHP&nbsp;8.0+ | |
| <strong>Feature-complete tracing library version</strong> | [latest][9] | [latest][10] | [latest][11] | [latest][12] | [latest][13] | [latest][14] | [latest][15] | [latest][16] |
Expand All @@ -28,9 +28,9 @@ To use the Datadog Profiler, use at least the minimum versions summarized in the
The following table shows profile type availability by language. For optimal performance and access to all features, Datadog recommends using the latest version of the tracing library for your language. If a specific runtime version isn't indicated, the profile type is available with the minimum runtime version listed in the [Runtime and tracing library versions](#runtime-and-tracing-library-versions).


| <div style="width:150px"><div> | [Java][1] | [Python][2] | [Go][3] | [Ruby][4] | [Node.js][5] | [.NET][6] | [PHP][7] | [Rust/C/C++][8] |
|-----------------------------------|:-------------------------------------------------:|:-------:|:------------:|:------:|:---------:|:-------:|:------:|:----------:|
| {{< ci-details title="CPU" >}}The time each function/method spent running on the CPU.{{< /ci-details >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< tooltip glossary="preview" case="title" >}} |
| <div style="width:150px"><div> | [Java][1] | [Python][2] | [Go][3] | [Ruby][4] | [Node.js][5] | [.NET][6] | [PHP][7] | [Rust/C/C++][8] |[eBPF][9] |
|-----------------------------------|:-------------------------------------------------:|:-------:|:------------:|:------:|:---------:|:-------:|:------:|:----------:|:----------:|
| {{< ci-details title="CPU" >}}The time each function/method spent running on the CPU.{{< /ci-details >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< tooltip glossary="preview" case="title" >}} | {{< tooltip glossary="preview" case="title" >}} |
| {{< ci-details title="Exceptions" >}}The number of exceptions raised, including those caught.{{< /ci-details >}} | {{< X >}} | Python 3.7+ | | | | .NET 5+ | {{< X >}} | |
| {{< ci-details title="Allocation" >}}Number and sizes of memory allocations made by each function/method, including allocations which were subsequently freed.{{< /ci-details >}} | [JDK 11+][17] | Python 3.6+ | {{< X >}} | {{< X >}} | | {{< tooltip glossary="preview" case="title" >}}<br>.NET 6+ | {{< X >}} | {{< tooltip glossary="preview" case="title" >}} |
| {{< ci-details title="Heap" >}}The amount of heap memory allocated that remains in use.{{< /ci-details >}} | [JDK 11+][17] | Python 3.6+ | {{< X >}} | alpha<br>Ruby 3.1+ | {{< X >}} | {{< tooltip glossary="preview" case="title" >}}<br>.NET 7+ | | {{< tooltip glossary="preview" case="title" >}} |
Expand All @@ -42,9 +42,9 @@ The following table shows profile type availability by language. For optimal per

The following table outlines additional profiling features by language. For full functionality and best performance, Datadog recommends using the latest version of your language's tracing library. If a specific runtime version isn't indicated, the feature is available with the minimum runtime version listed in the [Runtime and tracing library versions](#runtime-and-tracing-library-versions).

| | [Java][1] | [Python][2] | [Go][3] | [Ruby][4] | [Node.js][5] | [.NET][6] | [PHP][7] | [Rust/C/C++][8] |
|-----------------------------------|:-------:|:-------:|:------------:|:------:|:---------:|:-------:|:------:|:----------:|
| {{< ci-details title="Trace to Profiling integration" >}}Find specific lines of code related to performance issues. <a href="/profiler/connect_traces_and_profiles/#identify-code-hotspots-in-slow-traces">Learn more</a>{{< /ci-details >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | |
| | [Java][1] | [Python][2] | [Go][3] | [Ruby][4] | [Node.js][5] | [.NET][6] | [PHP][7] | [Rust/C/C++][8] | [eBPF][9] |
|-----------------------------------|:-------:|:-------:|:------------:|:------:|:---------:|:-------:|:------:|:----------:|:----------:|
| {{< ci-details title="Trace to Profiling integration" >}}Find specific lines of code related to performance issues. <a href="/profiler/connect_traces_and_profiles/#identify-code-hotspots-in-slow-traces">Learn more</a>{{< /ci-details >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | | {{< X >}} |
| {{< ci-details title="Endpoint Profiling" >}}Identify endpoints that are bottlenecks or responsible for heavy resource consumption. <a href="/profiler/connect_traces_and_profiles/#endpoint-profiling">Learn more</a>{{< /ci-details >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | |
| {{< ci-details title="Timeline View" >}}Surface time-based patterns and work distribution over the period of a span. <a href="/profiler/connect_traces_and_profiles/#span-execution-timeline-view">Learn more</a>{{< /ci-details >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | |
| {{< ci-details title="Memory Leaks" >}}A guided workflow to assist in investigating memory leaks. <a href="/profiler/guide/solve-memory-leaks/">Learn more</a>{{< /ci-details >}} | {{< X >}} | | {{< X >}} | | | | | |
Expand Down
13 changes: 12 additions & 1 deletion content/en/profiler/profile_types.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ further_reading:

In the **Profiles** tab, you can see all profile types available for a given language. Depending on the language and version, the information collected about your profile differs.

{{< programming-lang-wrapper langs="java,python,go,ruby,nodejs,dotnet,php,ddprof" >}}
{{< programming-lang-wrapper langs="java,python,go,ruby,nodejs,dotnet,php,ddprof,ebpf" >}}
{{< programming-lang lang="java" >}}

Once profiling is enabled, the following profile types are collected for [supported Java versions][1]:
Expand Down Expand Up @@ -265,9 +265,20 @@ Allocated memory

[1]: /profiler/enabling/ddprof/
{{< /programming-lang >}}
{{< programming-lang lang="ebpf" >}}

Once profiling is enabled, the following profile types are collected for [supported languages and versions][1]:

CPU
: Time each method or function spent running on the CPU. In multi-threaded programs, CPU time can be greater than elapsed time: if 2 threads are running during 45s each, you'd see "eBPF CPU Time, 1m 30s per minute".

[1]: /profiler/enabling/ebpf/
{{< /programming-lang >}}
{{< /programming-lang-wrapper >}}




## Further Reading

{{< partial name="whats-next/whats-next.html" >}}
Expand Down
6 changes: 5 additions & 1 deletion content/en/profiler/profile_visualizations.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ To access the timeline view:

Depending on the runtime and language, the timeline lanes vary:

{{< programming-lang-wrapper langs="java,python,go,ruby,nodejs,dotnet,php" >}}
{{< programming-lang-wrapper langs="java,python,go,ruby,nodejs,dotnet,php,ebpf" >}}
{{< programming-lang lang="java" >}}
Each lane represents a **thread**. Threads from a common pool are grouped together. You can expand the pool to view details for each thread.

Expand Down Expand Up @@ -181,6 +181,10 @@ Lanes on the top are runtime activities that may add extra latency to your reque

[1]: /profiler/connect_traces_and_profiles/#prerequisites
{{< /programming-lang >}}

{{< programming-lang lang="ebpf" >}}
Timeline view is currently not supported for eBPF profiling
{{< /programming-lang >}}
{{< /programming-lang-wrapper >}}

## Further Reading
Expand Down
21 changes: 21 additions & 0 deletions content/en/profiler/profiler_troubleshooting/ebpf.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
title: Troubleshooting the eBPF Profiler
code_lang: ebpf
type: multi-code-lang
code_lang_weight: 90
further_reading:
- link: '/tracing/troubleshooting'
tag: 'Documentation'
text: 'APM Troubleshooting'
---

<div class="alert alert-warning">
<code>eBPF</code> is in Preview. Datadog recommends evaluating the profiler in a non-sensitive environment before deploying in production.
</div>


## Further Reading

{{< partial name="whats-next/whats-next.html" >}}

[1]: /help/
7 changes: 7 additions & 0 deletions layouts/partials/profiling/profiling-languages.html
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,13 @@
</div>
</a>
</div>
<div class="col">
<a class="card h-100" href="{{ "profiler/enabling/ebpf" | absLangURL }}">
<div class="card-body text-center py-2 px-1">
{{ partial "img.html" (dict "root" . "src" "integrations_logos/ebpf-icon.png" "class" "img-fluid" "alt" "ebpf" "width" "400") }}
</div>
</a>
</div>
</div>
</br>
</div>
Expand Down
7 changes: 7 additions & 0 deletions layouts/partials/profiling/profiling-troubleshooting.html
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,13 @@
</div>
</a>
</div>
<div class="col">
<a class="card h-100" href="ebpf">
<div class="card-body text-center py-2 px-1">
{{ partial "img.html" (dict "root" . "src" "integrations_logos/ebpf-icon.png" "class" "img-fluid" "alt" "eBPF" "width" "400") }}
</div>
</a>
</div>
</div>
</br>
</div>
Expand Down
Binary file added static/images/integrations_logos/ebpf-icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading