From f9b116c0bfac83602d00876218456e772c8f6711 Mon Sep 17 00:00:00 2001 From: Kim Nylander <104772500+knylander-grafana@users.noreply.github.com> Date: Tue, 7 Jan 2025 11:21:42 -0500 Subject: [PATCH] [DOC] Restructure Pyroscope documentation and share content (#3798) * Restructure Pyroscope documentation and share content * Fix typo * Fix heading match for profile types * Restructure for configure server * Apply suggestions from code review Co-authored-by: Taylor C <41653732+tacole02@users.noreply.github.com> * Apply suggestions from code review * Apply suggestions from code review Co-authored-by: Aleksandar Petrov <8142643+aleks-p@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Aleksandar Petrov <8142643+aleks-p@users.noreply.github.com> --------- Co-authored-by: Taylor C <41653732+tacole02@users.noreply.github.com> Co-authored-by: Aleksandar Petrov <8142643+aleks-p@users.noreply.github.com> --- .../configure-client/grafana-alloy/_index.md | 2 +- .../opentelemetry/ebpf-profiler.md | 2 +- .../trace-span-profiles/go-span-profiles.md | 2 +- docs/sources/configure-server/_index.md | 2 +- .../configure-server/about-configurations.md | 23 ++++-- .../about-ip-address-logging.md | 10 +-- .../configure-server/about-tenant-ids.md | 19 ++--- .../configure-shuffle-sharding/index.md | 2 +- .../configuring-memberlist.md | 8 +- .../index.md | 26 +++---- .../index.template | 2 +- .../configure-server/storage/_index.md | 12 +++ .../{ => storage}/configure-disk-storage.md | 38 +++++---- .../configure-object-storage-backend.md | 22 +++--- .../continuous-profiling/_index.md | 72 +++-------------- docs/sources/introduction/flamegraphs.md | 19 +++++ .../profile-tracing/_index.md | 3 +- .../introduction/profiling-types/_index.md | 77 +++---------------- .../introduction/pyroscope-in-grafana.md | 12 +-- .../sources/introduction/what-is-profiling.md | 19 +++++ .../index.md | 2 +- .../index.md} | 33 ++++---- .../shared/intro/continuous-profiling.md | 74 ++++++++++++++++++ docs/sources/shared/intro/flame-graphs.md | 56 ++++++++++++++ .../intro/profile-types-descriptions.md | 75 ++++++++++++++++++ .../intro/what-is-profiling.md} | 55 ++++++------- docs/sources/shared/use-explore-profiles.md | 59 ++++++++++++++ .../view-and-analyze-profile-data/_index.md | 6 +- .../explore-profiles.md | 17 ++++ .../flamegraphs.md | 44 ----------- .../profile-cli.md | 2 +- .../pyroscope-ui.md | 5 +- .../self-vs-total.md | 2 +- .../traces-to-profiles.md | 8 +- 34 files changed, 507 insertions(+), 303 deletions(-) create mode 100644 docs/sources/configure-server/storage/_index.md rename docs/sources/configure-server/{ => storage}/configure-disk-storage.md (53%) rename docs/sources/configure-server/{ => storage}/configure-object-storage-backend.md (79%) create mode 100644 docs/sources/introduction/flamegraphs.md rename docs/sources/{view-and-analyze-profile-data => introduction}/profile-tracing/_index.md (77%) create mode 100644 docs/sources/introduction/what-is-profiling.md rename docs/sources/{configure-server/about-server-api.md => reference-server-api/index.md} (92%) create mode 100644 docs/sources/shared/intro/continuous-profiling.md create mode 100644 docs/sources/shared/intro/flame-graphs.md create mode 100644 docs/sources/shared/intro/profile-types-descriptions.md rename docs/sources/{introduction/profiling.md => shared/intro/what-is-profiling.md} (53%) create mode 100644 docs/sources/shared/use-explore-profiles.md create mode 100644 docs/sources/view-and-analyze-profile-data/explore-profiles.md delete mode 100644 docs/sources/view-and-analyze-profile-data/flamegraphs.md rename docs/sources/view-and-analyze-profile-data/{profile-tracing => }/traces-to-profiles.md (52%) diff --git a/docs/sources/configure-client/grafana-alloy/_index.md b/docs/sources/configure-client/grafana-alloy/_index.md index 6195cf47f2..2c11d6a2c3 100644 --- a/docs/sources/configure-client/grafana-alloy/_index.md +++ b/docs/sources/configure-client/grafana-alloy/_index.md @@ -92,7 +92,7 @@ This capability is not available in the legacy Grafana Agent. ### Set up profile receiving -1. Configure your application with a Pyroscope SDK pointing to receive endpoint for Alloy. +1. Configure your application with a Pyroscope SDK pointing to the `pyroscope.receive_http` Alloy component. 2. For step-by-step instructions, refer to the [Receive profiles from Pyroscope SDKs](https://grafana.com/docs/pyroscope//configure-client/grafana-alloy/receive_profiles) documentation. ## Next steps diff --git a/docs/sources/configure-client/opentelemetry/ebpf-profiler.md b/docs/sources/configure-client/opentelemetry/ebpf-profiler.md index 94606af2d6..854c6b467b 100644 --- a/docs/sources/configure-client/opentelemetry/ebpf-profiler.md +++ b/docs/sources/configure-client/opentelemetry/ebpf-profiler.md @@ -2,7 +2,7 @@ title: OpenTelemetry profiling support menuTitle: OpenTelemetry profiling description: OpenTelemetry profiling support in Pyroscope -weight: 10 +weight: 150 --- # OpenTelemetry profiling support diff --git a/docs/sources/configure-client/trace-span-profiles/go-span-profiles.md b/docs/sources/configure-client/trace-span-profiles/go-span-profiles.md index a072f9a632..75b4360535 100644 --- a/docs/sources/configure-client/trace-span-profiles/go-span-profiles.md +++ b/docs/sources/configure-client/trace-span-profiles/go-span-profiles.md @@ -92,7 +92,7 @@ defer span.End() To view the span profiles in Grafana Tempo, you need to have a Grafana instance with a Tempo data source configured to link trace spans and profiles. Refer to the configuration documentation for [Grafana](/docs/grafana//datasources/tempo/configure-tempo-data-source) or [Grafana Cloud](/docs/grafana-cloud/connect-externally-hosted/data-sources/tempo/configure-tempo-data-source). -To learn how to set up Traces to profiles and view the span profiles, refer to [Traces to profiles]({{< relref "../../view-and-analyze-profile-data/profile-tracing/traces-to-profiles" >}}). +To learn how to set up Traces to profiles and view the span profiles, refer to [Traces to profiles]({{< relref "../../view-and-analyze-profile-data/traces-to-profiles" >}}). ## Examples diff --git a/docs/sources/configure-server/_index.md b/docs/sources/configure-server/_index.md index bf421fd89e..0535358891 100644 --- a/docs/sources/configure-server/_index.md +++ b/docs/sources/configure-server/_index.md @@ -15,4 +15,4 @@ weight: 500 The Pyroscope server is built to be horizontally scalable and to support organizations of all sizes. -{{< section menuTitle="true" >}} +{{< section withDescriptions="true">}} diff --git a/docs/sources/configure-server/about-configurations.md b/docs/sources/configure-server/about-configurations.md index f22ca2746b..6b8468ca34 100644 --- a/docs/sources/configure-server/about-configurations.md +++ b/docs/sources/configure-server/about-configurations.md @@ -5,12 +5,16 @@ aliases: description: Learn about Pyroscope configuration and key guidelines to consider. menuTitle: About configurations title: About Pyroscope configurations -weight: 10 +weight: 100 --- # About Pyroscope configurations -You can configure Pyroscope via a ([YAML](https://en.wikipedia.org/wiki/YAML)-based) configuration file or CLI (command-line-interface) flags. It is best to specify your configuration via the configuration file rather than CLI flags. Every parameter that is set in the configuration file can also be set via a corresponding CLI flag. If you specify both CLI flags and configuration parameters, CLI flags take precedence over corresponding values in a configuration file. You can specify the configuration file by using the `-config.file` CLI flag. +You can configure Grafana Pyroscope using a ([YAML](https://en.wikipedia.org/wiki/YAML)-based) configuration file or CLI (command-line-interface) flags. +You should specify your configuration using the configuration file rather than CLI flags. +Every parameter that is set in the configuration file can also be set via a corresponding CLI flag. +If you specify both CLI flags and configuration parameters, CLI flags take precedence over corresponding values in a configuration file. +You can specify the configuration file by using the `-config.file` CLI flag. To see the CLI flags that you need to get started with Pyroscope, run the `pyroscope -help` command. @@ -18,13 +22,18 @@ To see the current configuration state of any component, use the `/api/v1/status ## Operational considerations -It is recommended to use a single configuration file and either pass it to all replicas of Pyroscope (if you are running multiple single-process Pyroscope replicas) or to all components of Pyroscope (if you are running Pyroscope as microservices). If you are running Pyroscope on Kubernetes, you can achieve this by storing the configuration file in a [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) and mounting it in each Pyroscope container. +You should use a single configuration file and either pass it to all replicas of Pyroscope (if you are running multiple single-process Pyroscope replicas) or to all components of Pyroscope (if you are running Pyroscope as microservices). +If you are running Pyroscope on Kubernetes, you can achieve this by storing the configuration file in a [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) and mounting it in each Pyroscope container. -This helps avoid a common misconfiguration pitfall: while certain configuration parameters might look like they’re only needed by one type of component, they might in fact be used by multiple components. For example, the `-distributor.replication-factor` CLI flag is not only required by ingesters, but also by distributors and queriers. +This helps avoid a common misconfiguration pitfall: while certain configuration parameters might look like they’re only needed by one type of component, they might in fact be used by multiple components. +For example, the `-distributor.replication-factor` CLI flag is not only required by ingesters, but also by distributors and queriers. By using a single configuration file, you ensure that each component gets all the configuration that it needs without needing to track which parameter belongs to which component. -There is no harm in passing a configuration that is specific to one component (such as an ingester) to another component (such as a querier). In such case, the configuration is simply ignored. +There is no harm in passing a configuration that is specific to one component (such as an ingester) to another component (such as a querier). +In such a case, the configuration is simply ignored. -If necessary, you can use advanced CLI flags to override specific values on a particular Pyroscope component or replica. This can be helpful if you want to change a parameter that is specific to a certain component, without having to do a full restart of all other components. +If necessary, you can use advanced CLI flags to override specific values on a particular Pyroscope component or replica. +This is helpful if you want to change a parameter that's specific to a certain component, without having to do a full restart of all other components. -The most common use case for CLI flags is to use the `-target` flag to run Pyroscope as microservices. By setting the `-target` CLI flag, all Pyroscope components share the same configuration file, but you can make them behave as a given component by specifying a `-target` command-line value, such as `-target=ingester` or `-target=querier`. +The most common use case for CLI flags is to use the `-target` flag to run Pyroscope as microservices. +By setting the `-target` CLI flag, all Pyroscope components share the same configuration file, but you can make them behave as a given component by specifying a `-target` command-line value, such as `-target=ingester` or `-target=querier`. diff --git a/docs/sources/configure-server/about-ip-address-logging.md b/docs/sources/configure-server/about-ip-address-logging.md index d394d65dd2..18e9c4b626 100644 --- a/docs/sources/configure-server/about-ip-address-logging.md +++ b/docs/sources/configure-server/about-ip-address-logging.md @@ -3,14 +3,14 @@ aliases: - /docs/phlare/latest/operators-guide/configuring/about-ip-address-logging/ - /docs/pyroscope/latest/configure-server/about-ip-address-logging/ description: Troubleshoot errors by logging IP addresses of reverse proxies. -menuTitle: About IP address logging of a reverse proxy -title: About Grafana Pyroscope IP address logging of a reverse proxy -weight: 60 +menuTitle: IP address logging of a reverse proxy +title: IP address logging of a reverse proxy +weight: 600 --- -# About Grafana Pyroscope IP address logging of a reverse proxy +# IP address logging of a reverse proxy -If a reverse proxy is used in front of Pyroscope, it might be difficult to troubleshoot errors. +Note that using a reverse proxy in front of Grafana Pyroscope can make it difficult to troubleshoot errors. You can use the following settings to log the IP address passed along by the reverse proxy in headers such as `X-Forwarded-For`. - `-server.log-source-ips-enabled` diff --git a/docs/sources/configure-server/about-tenant-ids.md b/docs/sources/configure-server/about-tenant-ids.md index 3ef4e11562..357df67b70 100644 --- a/docs/sources/configure-server/about-tenant-ids.md +++ b/docs/sources/configure-server/about-tenant-ids.md @@ -3,18 +3,18 @@ aliases: - /docs/phlare/latest/operators-guide/configuring/about-tenant-ids/ - /docs/phlare/latest/configure-server/about-tenant-ids/ description: Learn about tenant ID restrictions. -menuTitle: About tenant IDs -title: About Grafana Pyroscope tenant IDs -weight: 40 +menuTitle: Tenant IDs +title: Tenant IDs +weight: 200 --- -# About Grafana Pyroscope tenant IDs +# Tenant IDs Grafana Pyroscope is a multi-tenant system where tenants can query profiles that include their tenant ID. Within a Grafana Pyroscope cluster, the tenant ID is the unique identifier of a tenant. The query takes the tenant ID from the `X-Scope-OrgID` parameter that exists in the HTTP header of each request, for example `X-Scope-OrgID: `. -To push profiles to Grafana Pyroscope for a specific tenant, refer to [Configure the Agent]({{< relref "../configure-client" >}}). +To push profiles to Pyroscope for a specific tenant, refer to [Configure the Client](https://grafana.com/docs/pyroscope//configure-client/). > By default, multi-tenancy is disabled, the tenant ID is ignored and all profiles are stored and retrieved with the same tenant (`anonymous`). > @@ -22,7 +22,7 @@ To push profiles to Grafana Pyroscope for a specific tenant, refer to [Configure ## Restrictions -Tenant IDs cannot be longer than 150 bytes or characters in length and can only include the following supported characters: +Tenant IDs can't be longer than 150 bytes or characters in length and can only include the following supported characters: - Alphanumeric characters - `0-9` @@ -38,6 +38,7 @@ Tenant IDs cannot be longer than 150 bytes or characters in length and can only - Open parenthesis (`(`) - Close parenthesis (`)`) -> **Note:** For security reasons, `.` and `..` are not valid tenant IDs. - -All other characters, including slashes and whitespace, are not supported. +{{< admonition type="note" >}} +For security reasons, `.` and `..` aren't valid tenant IDs. +All other characters, including slashes and whitespace, aren't supported. +{{< /admonition >}} diff --git a/docs/sources/configure-server/configure-shuffle-sharding/index.md b/docs/sources/configure-server/configure-shuffle-sharding/index.md index c0f7ef5949..7aa9d3422e 100644 --- a/docs/sources/configure-server/configure-shuffle-sharding/index.md +++ b/docs/sources/configure-server/configure-shuffle-sharding/index.md @@ -2,7 +2,7 @@ description: Learn how to configure shuffle sharding. menuTitle: Shuffle sharding title: Configure Grafana Pyroscope shuffle sharding -weight: 80 +weight: 800 --- # Configure Grafana Pyroscope shuffle sharding diff --git a/docs/sources/configure-server/configuring-memberlist.md b/docs/sources/configure-server/configuring-memberlist.md index 961877f4fa..37d1fd16cc 100644 --- a/docs/sources/configure-server/configuring-memberlist.md +++ b/docs/sources/configure-server/configuring-memberlist.md @@ -1,14 +1,14 @@ --- description: Learn how to configure Pyroscope memberlist. -menuTitle: Configuring memberlist -title: Configuring Pyroscope memberlist -weight: 50 +menuTitle: Configure memberlist +title: Configure Pyroscope memberlist +weight: 500 aliases: - /docs/phlare/latest/operators-guide/configuring/configuring-memberlist/ - /docs/phlare/latest/configure-server/configuring-memberlist/ --- -# Configuring Pyroscope memberlist +# Configure Pyroscope memberlist [Hash rings]({{< relref "../reference-pyroscope-architecture/hash-ring/index.md" >}}) are a distributed consistent hashing scheme and are widely used by Pyroscope for sharding and replication. Pyroscope only supports hash ring via the memberlist protocol. diff --git a/docs/sources/configure-server/reference-configuration-parameters/index.md b/docs/sources/configure-server/reference-configuration-parameters/index.md index fc17433c9c..d517bda309 100644 --- a/docs/sources/configure-server/reference-configuration-parameters/index.md +++ b/docs/sources/configure-server/reference-configuration-parameters/index.md @@ -2,7 +2,7 @@ description: Describes parameters used to configure Pyroscope. menuTitle: Configuration parameters title: Pyroscope configuration parameters -weight: 70 +weight: 300 aliases: - /docs/phlare/latest/operators-guide/configuring/reference-configuration-parameters/ - /docs/phlare/latest/configure-server/reference-configuration-parameters/ @@ -629,7 +629,7 @@ ring: # Override the default cipher suite list (separated by commas). Allowed # values: - # + # # Secure Ciphers: # - TLS_AES_128_GCM_SHA256 # - TLS_AES_256_GCM_SHA384 @@ -644,7 +644,7 @@ ring: # - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 # - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 # - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 - # + # # Insecure Ciphers: # - TLS_RSA_WITH_RC4_128_SHA # - TLS_RSA_WITH_3DES_EDE_CBC_SHA @@ -812,7 +812,7 @@ lifecycler: # Override the default cipher suite list (separated by commas). Allowed # values: - # + # # Secure Ciphers: # - TLS_AES_128_GCM_SHA256 # - TLS_AES_256_GCM_SHA384 @@ -827,7 +827,7 @@ lifecycler: # - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 # - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 # - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 - # + # # Insecure Ciphers: # - TLS_RSA_WITH_RC4_128_SHA # - TLS_RSA_WITH_3DES_EDE_CBC_SHA @@ -1178,7 +1178,7 @@ sharding_ring: # Override the default cipher suite list (separated by commas). Allowed # values: - # + # # Secure Ciphers: # - TLS_AES_128_GCM_SHA256 # - TLS_AES_256_GCM_SHA384 @@ -1193,7 +1193,7 @@ sharding_ring: # - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 # - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 # - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 - # + # # Insecure Ciphers: # - TLS_RSA_WITH_RC4_128_SHA # - TLS_RSA_WITH_3DES_EDE_CBC_SHA @@ -1527,7 +1527,7 @@ sharding_ring: # Override the default cipher suite list (separated by commas). Allowed # values: - # + # # Secure Ciphers: # - TLS_AES_128_GCM_SHA256 # - TLS_AES_256_GCM_SHA384 @@ -1542,7 +1542,7 @@ sharding_ring: # - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 # - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 # - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 - # + # # Insecure Ciphers: # - TLS_RSA_WITH_RC4_128_SHA # - TLS_RSA_WITH_3DES_EDE_CBC_SHA @@ -1735,7 +1735,7 @@ backoff_config: [tls_insecure_skip_verify: | default = false] # Override the default cipher suite list (separated by commas). Allowed values: -# +# # Secure Ciphers: # - TLS_AES_128_GCM_SHA256 # - TLS_AES_256_GCM_SHA384 @@ -1750,7 +1750,7 @@ backoff_config: # - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 # - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 # - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 -# +# # Insecure Ciphers: # - TLS_RSA_WITH_RC4_128_SHA # - TLS_RSA_WITH_3DES_EDE_CBC_SHA @@ -1948,7 +1948,7 @@ The `memberlist` block configures the Gossip memberlist. [tls_insecure_skip_verify: | default = false] # Override the default cipher suite list (separated by commas). Allowed values: -# +# # Secure Ciphers: # - TLS_AES_128_GCM_SHA256 # - TLS_AES_256_GCM_SHA384 @@ -1963,7 +1963,7 @@ The `memberlist` block configures the Gossip memberlist. # - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 # - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 # - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 -# +# # Insecure Ciphers: # - TLS_RSA_WITH_RC4_128_SHA # - TLS_RSA_WITH_3DES_EDE_CBC_SHA diff --git a/docs/sources/configure-server/reference-configuration-parameters/index.template b/docs/sources/configure-server/reference-configuration-parameters/index.template index 504687558d..72262feec8 100644 --- a/docs/sources/configure-server/reference-configuration-parameters/index.template +++ b/docs/sources/configure-server/reference-configuration-parameters/index.template @@ -2,7 +2,7 @@ description: Describes parameters used to configure Pyroscope. menuTitle: Configuration parameters title: Pyroscope configuration parameters -weight: 70 +weight: 300 aliases: - /docs/phlare/latest/operators-guide/configuring/reference-configuration-parameters/ - /docs/phlare/latest/configure-server/reference-configuration-parameters/ diff --git a/docs/sources/configure-server/storage/_index.md b/docs/sources/configure-server/storage/_index.md new file mode 100644 index 0000000000..303f6c1c36 --- /dev/null +++ b/docs/sources/configure-server/storage/_index.md @@ -0,0 +1,12 @@ +--- +title: Configure storage +menuTitle: Configure storage +description: Learn about available storage options and how to configure them. +weight: 400 +--- + +# Configure storage + +Grafana Pyroscope provides storage configuration options for local and object storage. + +{{< section withDescriptions="true">}} \ No newline at end of file diff --git a/docs/sources/configure-server/configure-disk-storage.md b/docs/sources/configure-server/storage/configure-disk-storage.md similarity index 53% rename from docs/sources/configure-server/configure-disk-storage.md rename to docs/sources/configure-server/storage/configure-disk-storage.md index 37990b96b6..ba8fe743ac 100644 --- a/docs/sources/configure-server/configure-disk-storage.md +++ b/docs/sources/configure-server/storage/configure-disk-storage.md @@ -1,22 +1,25 @@ --- -title: "Configure Pyroscope disk storage" +title: "Configure disk storage" menuTitle: "Configure disk storage" -description: "" -weight: 30 +description: "Learn about the ingester component and how to configure disk storage for Pyroscope." aliases: - /docs/phlare/latest/configure-server/configure-disk-storage/ + - ../configure-disk-storage/ # https://grafana.com/docs/pyroscope/latest/configure-server/configure-disk-storage/ --- -# Configure Pyroscope disk storage +# Configure disk storage -Pyroscope's [ingester] component processes the received profiling data. -First it keeps the data organized in memory, in the so-called "head block". Once -the size of the head block exceeds a threshold or the head block is older than -`-pyroscopedb.max-block-duration` (by default 3 hours), the ingester will write -the block to the local persistent disk (see [block format] for more detail about -the block's layout). Each of those blocks are identified by an [ULID] and stored -within Grafana Pyroscope's data path `-pyroscopedb.data-path=` (by default -`./data`). This directory is organized by the following: +The [ingester] component in Grafana Pyroscope processes the received profiling data. +First it keeps the data organized in memory, in the so-called "head block". +Once the size of the head block exceeds a threshold or the head block is older than +`-pyroscopedb.max-block-duration` (by default 3 hours), the ingester writes +the block to the local persistent disk. +Refer to [block format] for more detail about the block's layout. + +Each of those blocks are identified by an [ULID] and stored +within Pyroscope's data path `-pyroscopedb.data-path=` (by default +`./data`). +This directory is organized by the following: * `./`: Each tenant has its own subdirectory with the following subdirectories: * `head/`: Contains the current data still being written. @@ -29,21 +32,22 @@ uploaded to the object store bucket. ## High disk utilization -To avoid losing the most recent data, Pyroscope will remove the oldest blocks +To avoid losing the most recent data, Pyroscope removes the oldest blocks when it detects that the volume on which the data path is located is close to -running out of disk. This high utilization mode will be active every +running out of disk space. +The check for high disk utilization runs every `-pyroscopedb.retention-policy-enforcement-interval` when: * less than `-pyroscopedb.retention-policy-min-disk-available-percentage=0.05` of the total size of the volume is available and * the available disk space smaller then `-pyroscopedb.retention-policy-min-free-disk-gb=10`. -The deletion will be logged like this: +The deletion is logged like this: ``` level=warn caller=pyroscopedb.go:231 ts=2022-10-05T13:19:09.770693308Z msg="disk utilization is high, deleted oldest block" path=data/anonymous/local/01GDZYHKKKY2ANY6PCJJZGT1N8 ``` -[block format]: {{< relref "../reference-pyroscope-architecture/block-format/" >}} +[block format]: {{< relref "../../reference-pyroscope-architecture/block-format/" >}} [object-store]: {{< relref "./configure-object-storage-backend.md" >}} [ULID]: https://github.com/ulid/spec -[ingester]: {{< relref "../reference-pyroscope-architecture/components/ingester.md" >}} +[ingester]: {{< relref "../../reference-pyroscope-architecture/components/ingester.md" >}} diff --git a/docs/sources/configure-server/configure-object-storage-backend.md b/docs/sources/configure-server/storage/configure-object-storage-backend.md similarity index 79% rename from docs/sources/configure-server/configure-object-storage-backend.md rename to docs/sources/configure-server/storage/configure-object-storage-backend.md index c9fc3f29ee..f8d8761fde 100644 --- a/docs/sources/configure-server/configure-object-storage-backend.md +++ b/docs/sources/configure-server/storage/configure-object-storage-backend.md @@ -1,20 +1,20 @@ --- -title: "Configure Pyroscope object storage backend" +title: "Configure object storage backend" menuTitle: "Configure object storage" description: "Learn how to configure Pyroscope to use different object storage backend implementations." -weight: 40 aliases: - /docs/phlare/latest/configure-server/configure-object-storage-backend/ + - ../configure-object-storage-backend/ # https://grafana.com/docs/pyroscope/latest/configure-server/configure-object-storage-backend/ --- -# Configure Pyroscope object storage backend +# Configure object storage backend -Pyroscope can use different object storage services to persist blocks containing the profiles data. -Blocks are flushed by ingesters [on disk]({{< relref "./configure-disk-storage" >}}) first then are uploaded to the object store. +Grafana Pyroscope can use different object storage services to persist blocks containing the profiles data. +Blocks are flushed by ingesters [on disk](https://grafana.com/docs/pyroscope//configure-server/storage/configure-disk-storage/) first then are uploaded to the object store. The supported backends are: -- [Amazon S3](https://aws.amazon.com/s3/) (and compatible implementations like [MinIO](https://min.io/)) +- [Amazon S3](https://aws.amazon.com/s3/) and compatible implementations like [MinIO](https://min.io/) - [Google Cloud Storage](https://cloud.google.com/storage) - [Azure Blob Storage](https://azure.microsoft.com/es-es/services/storage/blobs/) - [Swift (OpenStack Object Storage)](https://wiki.openstack.org/wiki/Swift) @@ -27,9 +27,9 @@ The supported backends are: To use an AWS S3 or S3-compatible bucket for long term storage, you can find Pyroscope's configuration parameters [in the reference config][aws_ref]. Apart from those parameters, it is also possible to supply configuration parameters using [the well-known environment variables][aws_enf] of the AWS SDK. -At a minimum, you will need to provide a values for the `bucket_name`, `endpoint`, `access_key_id`, and `secret_access_key` keys. +At a minimum, you will need to provide values for the `bucket_name`, `endpoint`, `access_key_id`, and `secret_access_key` keys. -[aws_ref]: {{< relref "./reference-configuration-parameters/#s3_storage_backend" >}} +[aws_ref]: {{< relref "../reference-configuration-parameters/#s3_storage_backend" >}} [aws_enf]: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html ### Example using an AWS Bucket @@ -68,7 +68,7 @@ storage: To use a Google Cloud Storage (GCS) bucket for long term storage, you can find Pyroscope's configuration parameters [in the reference config][gcs_ref]. -[gcs_ref]: {{< relref "./reference-configuration-parameters#gcs_storage_backend" >}} +[gcs_ref]: {{< relref "../reference-configuration-parameters#gcs_storage_backend" >}} At a minimum, you will need to provide a values for the `bucket_name` and a service account. To supply the service account there are two ways: @@ -103,7 +103,7 @@ storage: To use an Azure Blob Storage bucket for long term storage, you can find Pyroscope's configuration parameters [in the reference config][azure_ref]. -[azure_ref]: {{< relref "./reference-configuration-parameters#azure_storage_backend" >}} +[azure_ref]: {{< relref "../reference-configuration-parameters#azure_storage_backend" >}} If `user_assigned_id` is used, authentication is done via user-assigned managed identity. @@ -113,7 +113,7 @@ If `user_assigned_id` is used, authentication is done via user-assigned managed To use a Swift (OpenStack Object Storage) bucket for long term storage, you can find Pyroscope's configuration parameters [in the reference config][swift_ref]. -[swift_ref]: {{< relref "./reference-configuration-parameters#swift_storage_backend" >}} +[swift_ref]: {{< relref "../reference-configuration-parameters#swift_storage_backend" >}} >If the `name` of a user, project or tenant is used one must also specify its domain by ID or name. Various examples for OpenStack authentication can be found in the [official documentation](https://developer.openstack.org/api-ref/identity/v3/index.html?expanded=password-authentication-with-scoped-authorization-detail#password-authentication-with-unscoped-authorization). diff --git a/docs/sources/introduction/continuous-profiling/_index.md b/docs/sources/introduction/continuous-profiling/_index.md index 3036098af0..90210477ca 100644 --- a/docs/sources/introduction/continuous-profiling/_index.md +++ b/docs/sources/introduction/continuous-profiling/_index.md @@ -1,72 +1,20 @@ --- -title: When to use continuous profiling -menuTitle: When to use continuous profiling +title: What is continuous profiling? +menuTitle: Continuous profiling description: Discover the benefits of continuous profiling and its role in modern application performance analysis. weight: 200 keywords: - - pyroscope - - phlare - continuous profiling - flame graphs +refs: + flame-graphs: + - pattern: /docs/pyroscope/ + destination: https://grafana.com/docs/pyroscope//introduction/flamegraphs/ --- -## When to use continuous profiling +# What is continuous profiling? -Continuous profiling is a systematic method of collecting and analyzing performance data from production systems. +[//]: # 'Shared content for the when to use continuous profiling.' +[//]: # 'This content is located in /pyroscope/docs/sources/shared/intro/continuous-profiling.md' -Traditionally, profiling is used as an ad-hoc debugging tool in languages like Go and Java. -You are probably used to running a benchmark tool locally and getting a pprof file in Go or maybe connecting into a misbehaving prod instance and pulling a flame graph from a JFR file in Java. -This is great for debugging but not so great for production. - -![example flame graph](https://grafana.com/static/img/pyroscope/pyroscope-ui-single-2023-11-30.png) - -{{% admonition type="note" %}} -To learn more about flame graphs, refer to [Flame graphs: Visualizing performance data]({{< relref "../../view-and-analyze-profile-data/flamegraphs" >}}). -{{% /admonition %}} - -Continuous profiling is a modern approach which is safer and more scalable for production environments. -It uses low-overhead sampling to collect profiles from production systems and stores the profiles in a database for later analysis. -Using continuous profiling gives you a more holistic view of your application and how it behaves in production. - -## Benefits - -![Diagram showing 3 benefits of continuous profiling](https://grafana.com/static/img/pyroscope/profiling-use-cases-diagram.png) - -Why prioritize continuous profiling? - -1. **In-depth code insights:** It provides granular, line-level insights into how application code utilizes resources, offering the most detailed view of application performance. -2. **Complements other observability tools:** Continuous profiling fills critical gaps left by metrics, logs, and tracing, creating a more comprehensive observability strategy. -3. **Proactive performance optimization:** Regular profiling enables teams to proactively identify and resolve performance bottlenecks, leading to more efficient and reliable applications. - -## Use cases - -![Infographic illustrating key business benefits](https://grafana.com/static/img/pyroscope/cost-cutting-diagram.png) - -Adopting continuous profiling with tools like Pyroscope can lead to significant business advantages: - -1. **Reduced operational costs:** Optimization of resource usage can significantly cut down cloud and infrastructure expenses -2. **Reduced latency:** Identifying and addressing performance bottlenecks leads to faster and more efficient applications -3. **Enhanced incident management:** Faster problem identification and resolution, reducing Mean Time to Resolution (MTTR) and improving end-user experience - -### Reduce operational costs - -Pyroscope's low-overhead profiling enables precise optimization of resource usage, directly impacting various cost centers in technology infrastructure. -By providing in-depth insights into application performance, Pyroscope allows teams to identify and eliminate inefficiencies, leading to significant savings in areas like observability, incident management, messaging/queuing, deployment tools, and infrastructure. - -By using sampling profilers, Pyroscope is able to collect data with minimal overhead (~2-5% depending on a few factors). -The [custom storage engine]({{< relref "../../reference-pyroscope-architecture/about-grafana-pyroscope-architecture" >}}) compresses and stores the data efficiently. -Some advantages of this are: - -- Low CPU overhead thanks to sampling profiler technology -- Control over profiling data granularity (10s to multiple years) -- Efficient compression, low disk space requirements and cost - -### Reduced latency - -Pyroscope plays a pivotal role in reducing application latency by identifying performance bottlenecks at the code level. -This granular insight allows for targeted optimization, leading to faster application response times, improved user experience, and consequently, better business outcomes like increased customer satisfaction and revenue. - -### Enhanced incident management - -Pyroscope streamlines incident management by offering immediate, actionable insights into application performance issues. -With continuous profiling, teams can quickly pinpoint the root cause of an incident, reducing the mean time to resolution (MTTR) and enhancing overall system reliability and user satisfaction. +{{< docs/shared source="pyroscope" lookup="intro/continuous-profiling.md" version="" >}} diff --git a/docs/sources/introduction/flamegraphs.md b/docs/sources/introduction/flamegraphs.md new file mode 100644 index 0000000000..ab3e679eb4 --- /dev/null +++ b/docs/sources/introduction/flamegraphs.md @@ -0,0 +1,19 @@ +--- +title: Flame graphs +menuTitle: Flame graphs +description: Learn about flame graphs to help visualize performance data. +weight: 400 +aliases: + - ../view-and-analyze-profile-data/flamegraphs # https://grafana.com/docs/pyroscope//view-and-analyze-profile-data/flamegraphs/ + - +keywords: + - Pyroscope + - flame graph +--- + +# Flame graphs + +[//]: # 'Shared content for intro to flame graphs.' +[//]: # 'This content is located in /pyroscope/docs/sources/shared/intro/flame-graphs.md' + +{{< docs/shared source="pyroscope" lookup="intro/flame-graphs.md" version="" >}} diff --git a/docs/sources/view-and-analyze-profile-data/profile-tracing/_index.md b/docs/sources/introduction/profile-tracing/_index.md similarity index 77% rename from docs/sources/view-and-analyze-profile-data/profile-tracing/_index.md rename to docs/sources/introduction/profile-tracing/_index.md index d166dc2c0e..22a6b4df97 100644 --- a/docs/sources/view-and-analyze-profile-data/profile-tracing/_index.md +++ b/docs/sources/introduction/profile-tracing/_index.md @@ -2,10 +2,11 @@ title: Profiling and tracing integration menuTitle: Profiling and tracing description: Learning about how profiling and tracing work together. -weight: 50 +weight: 400 aliases: - ../introduction/traces-to-profiles/ - ../introduction/profile-tracing/ + - ../view-and-analyze-profile-data/profile-tracing/ # https://grafana.com/docs/pyroscope/latest/view-and-analyze-profile-data/profile-tracing/ keywords: - pyroscope - continuous profiling diff --git a/docs/sources/introduction/profiling-types/_index.md b/docs/sources/introduction/profiling-types/_index.md index 8f01e31470..8b54f2cf94 100644 --- a/docs/sources/introduction/profiling-types/_index.md +++ b/docs/sources/introduction/profiling-types/_index.md @@ -1,6 +1,6 @@ --- -title: Understand profiling types and their uses in Pyroscope -menuTitle: Understand profiling types +title: Profiling types and their uses +menuTitle: Profiling types description: Learn about the different profiling types available in Pyroscope and how to effectively use them in your application performance analysis. weight: 300 keywords: @@ -10,81 +10,28 @@ keywords: - flame graphs --- -# Understand profiling types and their uses in Pyroscope +# Profiling types and their uses -Profiling is an essential tool for understanding and optimizing application performance. In Pyroscope, various profiling types allow for an in-depth analysis of different aspects of your application. This guide explores these types and explain their impact on your program. +Profiling is an essential tool for understanding and optimizing application performance. +In Grafana Pyroscope, various profiling types allow for an in-depth analysis of different aspects of your application. ## Profiling types -In Pyroscope, profiling types refer to different dimensions of application performance analysis, focusing on specific aspects like CPU usage, memory allocation, or thread synchronization. +Profiling types refer to different dimensions of application performance analysis, focusing on specific aspects like CPU usage, memory allocation, or thread synchronization. [//]: # 'Shared content for available profile types' [//]: # 'This content is located in /pyroscope/docs/sources/shared/available-profile-types.md' {{< docs/shared source="pyroscope" lookup="available-profile-types.md" version="latest" >}} -Refer to the Profile types tables for information on supported profile types based on instrumentation method. +Refer to the [Profile types tables](https://grafana.com/docs/pyroscope//configure-client/profile-types/) for information on supported profile types based on instrumentation method. -For information on auto-instrumentation and supported language SDKs, refer to [Configure the client](https://grafana.com/docs/pyroscope/latest/configure-client/). +For information on auto-instrumentation and supported language SDKs, refer to [Configure the client](https://grafana.com/docs/pyroscope//configure-client/). -## CPU profiling + -CPU profiling measures the amount of CPU time consumed by different parts of your application code. -High CPU usage can indicate inefficient code, leading to poor performance and increased operational costs. -It's used to identify and optimize CPU-intensive functions in your application. +[//]: # 'Shared content for profile type explanations.' +[//]: # 'This content is located in /pyroscope/docs/sources/shared/intro/profile-types-descriptions.md' -- **When to use**: To identify and optimize CPU-intensive functions -- **Flame graph insight**: The width of blocks indicates the CPU time consumed by each function +{{< docs/shared source="pyroscope" lookup="intro/profile-types-descriptions.md" version="latest" >}} -As you can see here, the UI shows a spike in CPU along with the flame graph associated with that spike. -Often times without profiling you may get similar insights from metrics, but with profiling you have more details into the specific cause of a spike in CPU usage at the line level - -![example flame graph](https://grafana.com/static/img/pyroscope/pyroscope-ui-single-2023-11-30.png) - - - -## Memory allocation profiling - -Memory allocation profiling tracks the amount and frequency of memory allocations by the application. -Excessive or inefficient memory allocation can lead to memory leaks and high garbage collection overhead, impacting application efficiency. - -- **Types**: Alloc Objects, Alloc Space -- **When to use**: For identifying and optimizing memory usage patterns -- **Flame graph insight**: Highlights functions where memory allocation is high - -The timeline shows memory allocations over time and is great for debugging memory related issues. -A common example is when a memory leak is created due to improper handling of memory in a function. -This can be identified by looking at the timeline and seeing a gradual increase in memory allocations that never goes down. -This is a clear indicator of a memory leak. - -![memory leak example](https://grafana.com/static/img/pyroscope/pyroscope-memory-leak-2023-11-30.png) - -Without profiling, this may be something that's exhibited in metrics or out-of-memory errors (OOM) logs but with profiling you have more details into the specific function that's allocating the memory which is causing the leak at the line level. - -## Goroutine profiling - -Goroutines are lightweight threads in Go, used for concurrent operations. -Goroutine profiling measures the usage and performance of these threads. -Poor management can lead to issues like deadlocks and excessive resource usage. - -- **When to use**: Especially useful in Go applications for concurrency management -- **Flame graph insight**: Provides a view of goroutine distribution and issues - -## Mutex profiling - -Mutex profiling involves analyzing mutex (mutual exclusion) locks, used to prevent simultaneous access to shared resources. -Excessive or long-duration mutex locks can cause delays and reduced application throughput. - -- **Types**: Mutex Count, Mutex Duration -- **When to use**: To optimize thread synchronization and reduce lock contention -- **Flame graph insight**: Shows frequency and duration of mutex operations - -## Block profiling - -Block profiling measures the frequency and duration of blocking operations, where a thread is paused or delayed. -Blocking can significantly slow down application processes, leading to performance bottlenecks. - -- **Types**: Block Count, Block Duration -- **When to use**: To identify and reduce blocking delays -- **Flame graph insight**: Identifies where and how long threads are blocked diff --git a/docs/sources/introduction/pyroscope-in-grafana.md b/docs/sources/introduction/pyroscope-in-grafana.md index 3e59d0c0cc..5f10c1b909 100644 --- a/docs/sources/introduction/pyroscope-in-grafana.md +++ b/docs/sources/introduction/pyroscope-in-grafana.md @@ -2,7 +2,7 @@ title: Pyroscope and profiling in Grafana menuTitle: Pyroscope in Grafana description: Learn about how you can use profile data in Grafana. -weight: 400 +weight: 500 keywords: - Pyroscope - Profiling @@ -13,15 +13,15 @@ keywords: # Pyroscope and profiling in Grafana -Pyroscope can be used alongside the other Grafana tools such as Loki, Tempo, Mimir, and k6. -You can use Pyroscope to get the most granular insight into your application and how you can use it to fix issues that you may have identified via metrics, logs, traces, or anything else. +Grafana Pyroscope can be used alongside other Grafana products such as Loki, Tempo, Mimir, and k6. +You can use Pyroscope to get the most granular insight into your application and how you can use it to fix issues that you may have identified using metrics, logs, traces, or anything else. -You can use Pyroscope within Grafana by using the [Pyroscope data source plugin](https://grafana.com/docs/grafana//datasources/grafana-pyroscope/). -This plugin lets you query Pyroscope data from within Grafana and visualize it alongside your other Grafana data. +Within Grafana and Grafana Cloud, you can use the [Pyroscope data source](https://grafana.com/docs/grafana//datasources/grafana-pyroscope/) to query and visualize profile data from within Grafana. ## Visualize traces and profiles data -Here is a screenshot of the **Explore** page where combined traces and profiles to be able to see granular line-level detail when available for a trace span. This allows you to see the exact function that's causing a bottleneck in your application as well as a specific request. +Here is a screenshot of the **Explore** page that combines traces and profiles to be able to see granular line-level detail when available for a trace span. +This lets you see the exact function that's causing a bottleneck in your application as well as a specific request. ![trace-profiler-view](https://grafana.com/static/img/pyroscope/pyroscope-trace-profiler-view-2023-11-30.png) diff --git a/docs/sources/introduction/what-is-profiling.md b/docs/sources/introduction/what-is-profiling.md new file mode 100644 index 0000000000..4dae810f81 --- /dev/null +++ b/docs/sources/introduction/what-is-profiling.md @@ -0,0 +1,19 @@ +--- +title: What is profiling? +menuTitle: What is profiling? +description: Discover the types of profiling and how to apply each profiling method. +weight: 100 +keywords: + - pyroscope + - continuous profiling + - flame graphs +aliases: + - ./profiling-fundamentals/ # https://grafana.com/docs/pyroscope//introduction/profiling-fundamentals/ +--- + +# What is profiling? + +[//]: # 'Shared content for What is profiling?' +[//]: # 'This content is located in /pyroscope/docs/sources/shared/intro/what-is-profiling.md' + +{{< docs/shared source="pyroscope" lookup="intro/what-is-profiling.md" version="" >}} diff --git a/docs/sources/reference-pyroscope-architecture/about-grafana-pyroscope-architecture/index.md b/docs/sources/reference-pyroscope-architecture/about-grafana-pyroscope-architecture/index.md index e15a24c4bc..89d3823ec8 100644 --- a/docs/sources/reference-pyroscope-architecture/about-grafana-pyroscope-architecture/index.md +++ b/docs/sources/reference-pyroscope-architecture/about-grafana-pyroscope-architecture/index.md @@ -78,4 +78,4 @@ Pyroscope requires any of the following object stores for the block files: - [OpenStack Swift](https://wiki.openstack.org/wiki/Swift) - Local Filesystem (single node only) -For more information, refer to [configure object storage]({{< relref "../../configure-server/configure-object-storage-backend.md" >}}) and [configure disk storage]({{< relref "../../configure-server/configure-disk-storage.md" >}}). +For more information, refer to [configure object storage](https://grafana.com/docs/pyroscope//configure-server/storage/configure-object-storage-backend/) and [configure disk storage](https://grafana.com/docs/pyroscope//configure-server/storage/configure-disk-storage/). diff --git a/docs/sources/configure-server/about-server-api.md b/docs/sources/reference-server-api/index.md similarity index 92% rename from docs/sources/configure-server/about-server-api.md rename to docs/sources/reference-server-api/index.md index 0179ef9e26..a879b47518 100644 --- a/docs/sources/configure-server/about-server-api.md +++ b/docs/sources/reference-server-api/index.md @@ -1,23 +1,27 @@ --- description: Learn about the Pyrocope server API -menuTitle: Server HTTP API -title: Pyroscope server HTTP API -weight: 20 +menuTitle: "Reference: Server HTTP API" +title: Server HTTP API +aliases: + - ../configure-server/about-server-api/ # https://grafana.com/docs/pyroscope/latest/configure-server/about-server-api/ +weight: 650 --- -# Pyroscope server HTTP API +# Server HTTP API -Pyroscope server exposes an HTTP API for querying profiling data and ingesting profiling data from other sources. +Grafana Pyroscope exposes an HTTP API for querying profiling data and ingesting profiling data from other sources. ## Authentication -Grafana Pyroscope doesn't include an authentication layer. Operators should use an authenticating reverse proxy for security. +Pyroscope doesn't include an authentication layer. Operators should use an authenticating reverse proxy for security. -In multi-tenant mode, Pyroscope requires the X-Scope-OrgID HTTP header set to a string identifying the tenant. This responsibility should be handled by the authenticating reverse proxy. For more information, refer to the [multi-tenancy documentation]({{< relref "./about-tenant-ids" >}}). +In multi-tenant mode, Pyroscope requires the X-Scope-OrgID HTTP header set to a string identifying the tenant. +The authenticating reverse proxy handles this responsibility. For more information, refer to the [multi-tenancy documentation](https://grafana.com/docs/pyroscope//configure-server/about-tenant-ids/). ## Ingestion -There is one primary endpoint: POST /ingest. It accepts profile data in the request body and metadata as query parameters. +There is one primary endpoint: `POST /ingest`. +It accepts profile data in the request body and metadata as query parameters. The following query parameters are accepted: @@ -44,7 +48,8 @@ Some of the query parameters depend on the format of profiling data. Pyroscope c ### Text formats -These formats handle simple ingestion of profiling data, such as `cpu` samples, and typically don't support metadata (e.g., labels) within the format. All necessary metadata is derived from query parameters, and the format is specified by the `format` query parameter. +These formats handle simple ingestion of profiling data, such as `cpu` samples, and typically don't support metadata (for example, labels) within the format. +All necessary metadata is derived from query parameters, and the format is specified by the `format` query parameter. **Supported formats:** @@ -69,7 +74,7 @@ The `pprof` format is a widely used binary profiling data format, particularly p When using this format, certain query parameters have specific behaviors: - **format**: This should be set to `pprof`. -- **name**: This parameter contains the _prefix_ of the application name. Since a single request might include multiple profile types, the complete application name is formed by concatenating this prefix with the profile type. For instance, if you send CPU profiling data and set `name` to `my-app{}`, it will be displayed in pyroscope as `my-app.cpu{}`. +- **name**: This parameter contains the _prefix_ of the application name. Since a single request might include multiple profile types, the complete application name is formed by concatenating this prefix with the profile type. For instance, if you send CPU profiling data and set `name` to `my-app{}`, it is displayed in Pyroscope as `my-app.cpu{}`. - **units**, **aggregationType**, and **sampleRate**: These parameters are ignored. The actual values are determined based on the profile types present in the data (refer to the "Sample Type Configuration" section for more details). #### Sample type configuration @@ -285,7 +290,7 @@ Note that a single offset has to be provided, values such as `now-3h30m` will no **Validation** The `from` and `until` parameters are subject to validation rules related to `max_query_lookback` and `max_query_length` server parameters. -You can find more details on these parameters in the [limits section]({{< relref "./reference-configuration-parameters#limits" >}}) of the server configuration docs. +You can find more details on these parameters in the [limits section](https://grafana.com/docs/pyroscope//configure-server/reference-configuration-parameters#limits) of the server configuration docs. - If `max_query_lookback` is configured and`from` is before `now - max_query_lookback`, `from` will be set to `now - max_query_lookback`. - If `max_query_lookback` is configured and `until` is before `now - max_query_lookback` the query will not be executed. @@ -312,9 +317,9 @@ When a value is provided, it is capped to the `max_flamegraph_nodes_max` configu The `groupBy` parameter impacts the output for the time series portion of the response. When a valid label is provided, the response contains as many series as there are label values for the given label. -{{% admonition type="note" %}} +{{< admonition type="note" >}} Pyroscope supports a single label for the group by functionality. -{{% /admonition %}} +{{< /admonition >}} ### Query output @@ -419,4 +424,4 @@ See [this Python script](https://github.com/grafana/pyroscope/tree/main/examples The `profilecli` tool can also be used to interact with the Pyroscope server API. The tool supports operations such as ingesting profiles, querying for existing profiles, and more. -Refer to the [Profile CLI]({{< relref "../view-and-analyze-profile-data/profile-cli" >}}) page for more information. +Refer to the [Profile CLI](https://grafana.com/docs/pyroscope//view-and-analyze-profile-data/profile-cli/) page for more information. diff --git a/docs/sources/shared/intro/continuous-profiling.md b/docs/sources/shared/intro/continuous-profiling.md new file mode 100644 index 0000000000..1b04d7e562 --- /dev/null +++ b/docs/sources/shared/intro/continuous-profiling.md @@ -0,0 +1,74 @@ +--- +headless: true +description: Shared file for intro to continuous profiling. +--- + +[//]: # 'When to use continuous profiling.' +[//]: # 'This shared file is included in these locations:' +[//]: # '/pyroscope/docs/sources/introduction/continuous-profiling.md' +[//]: # '/website/content/grafana-cloud/monitor-applications/profiles/introduction/continuous-profiling.md' +[//]: # +[//]: # 'If you make changes to this file, verify that the meaning and content are not changed in any place where the file is included.' +[//]: # 'Any links should be fully qualified and not relative: /docs/grafana/ instead of ../grafana/.' + + + +Continuous profiling is a systematic method of collecting and analyzing performance data from production systems. + +Traditionally, profiling is used to debug applications on an as-needed basis. +For example, you can run a benchmark tool locally and get a `pprof` file in Go or connect to a misbehaving prod instance and pull a flame graph from a `JFR` file in Java. +This method is good for debugging, but not robust enough for production. + +![example flame graph](https://grafana.com/static/img/pyroscope/pyroscope-ui-single-2023-11-30.png) + +Refer to [Flame graphs](ref:flame-graphs) to learn more. + +Continuous profiling is a modern approach which is safer and more scalable for production environments. +It uses low-overhead sampling to collect profiles from production systems and stores the profiles in a database for later analysis. +Using continuous profiling gives you a more holistic view of your application and how it behaves in production. + +Grafana offers Grafana Pyroscope and Grafana Cloud Profiles (powered by Pyroscope) to collect and store your profiling data. +You can use Grafana Explore Profiles to inspect profile data and investigate issues. + +## Benefits + +Why prioritize continuous profiling? + +1. **In-depth code insights:** It provides granular, line-level insights into how application code utilizes resources, offering the most detailed view of application performance. +2. **Complements other observability tools:** Continuous profiling fills critical gaps left by metrics, logs, and tracing, creating a more comprehensive observability strategy. +3. **Proactive performance optimization:** Regular profiling enables teams to proactively identify and resolve performance bottlenecks, leading to more efficient and reliable applications. +![Diagram showing 3 benefits of continuous profiling](https://grafana.com/static/img/pyroscope/profiling-use-cases-diagram.png) + +## Use cases + +Adopting continuous profiling with tools like Grafana Pyroscope and Explore Profiles can lead to significant business advantages: + +1. **Reduced operational costs:** Optimization of resource usage can significantly cut down cloud and infrastructure expenses +2. **Reduced latency:** Identifying and addressing performance bottlenecks leads to faster and more efficient applications +3. **Enhanced incident management:** Faster problem identification and resolution, reducing Mean Time to Resolution (MTTR) and improving end-user experience + +![Infographic illustrating key business benefits](https://grafana.com/static/img/pyroscope/cost-cutting-diagram.png) + +### Reduced operational costs + +By providing in-depth insights into application performance, profiling empowers teams to identify and eliminate inefficiencies, leading to significant savings in areas like observability, incident management, messaging/queuing, deployment tools, and infrastructure. + + +By using sampling profilers, Pyroscope and Cloud Profiles can collect data with minimal overhead (~2-5% depending on a few factors). +The [custom storage engine](https://grafana.com/docs/pyroscope//reference-pyroscope-architecture/about-grafana-pyroscope-architecture/) compresses and stores the data efficiently. +Some advantages of this are: + +- Low CPU overhead thanks to sampling profiler technology + +- Control over profiling data granularity (10s to multiple years) +- Efficient compression, low disk space requirements and cost + +### Reduced latency + +Profiles play a pivotal role in reducing application latency by identifying performance bottlenecks at the code level. +This granular insight allows for targeted optimization, leading to faster application response times, improved user experience, and consequently, better business outcomes like increased customer satisfaction and revenue. + +### Enhanced incident management + +Pyroscope and Explore Profiles streamline incident management by offering immediate, actionable insights into application performance issues. +With continuous profiling, teams can quickly pinpoint the root cause of an incident, reducing the mean time to resolution (MTTR) and enhancing overall system reliability and user satisfaction. \ No newline at end of file diff --git a/docs/sources/shared/intro/flame-graphs.md b/docs/sources/shared/intro/flame-graphs.md new file mode 100644 index 0000000000..ba50e13b2e --- /dev/null +++ b/docs/sources/shared/intro/flame-graphs.md @@ -0,0 +1,56 @@ +--- +headless: true +description: Shared file for intro to flame graphs. +--- + +[//]: # 'Learn about flame graphs.' +[//]: # 'This shared file is included in these locations:' +[//]: # '/pyroscope/docs/sources/introduction/flamegraphs.md' +[//]: # '/website/content/grafana-cloud/monitor-applications/profiles/introduction/flamegraphs.md' +[//]: # '/explore-profiles/docs/sources/introduction/flame-graphs.md' +[//]: # 'If you make changes to this file, verify that the meaning and content are not changed in any place where the file is included.' +[//]: # 'Any links should be fully qualified and not relative: /docs/grafana/ instead of ../grafana/.' + + + +Flame graphs provide a visual summary of your profile data. +A flame graph is a complete visualization of hierarchical data, for example stack trace and, file system contents, with a metric, typically resource usage, attached to the data. + +A fundamental aspect of continuous profiling is the flame graph, a convenient way to visualize performance data. +These graphs provide a clear, intuitive understanding of resource allocation and bottlenecks within the application. + + + +[Brendan Gregg](https://www.brendangregg.com/flamegraphs.html), the creator of flame graphs, was inspired by the inability to view, read, and understand stack traces using the regular profilers to debug performance issues. + + + +## How Pyroscope creates flame graphs + +This diagram shows how code is turned into a flame graph. +In this case, Pyroscope samples the stacktrace of your application to understand how many CPU cycles are spent in each function. +It then aggregates this data and turns it into a flame graph. + +![code to flame graph diagram](https://grafana.com/static/img/pyroscope/code-to-flamegraph-animation.gif) + +## What does a flame graph represent? + +Horizontally, the flame graph represents 100% of the time that this application was running. +The width of each node represents the amount of time spent in that function. +The wider the node, the more time spent in that function. The narrower the node, the less time spent in that function. + +Vertically, the nodes in the flame graph represent the hierarchy of functions called and time spent in each function. +The top node is the root node and represents the total amount of time spent in the application. +The nodes below it represent the functions called and time spent in each function. +The nodes below those represent the functions called from those functions and time spent in each function. +This continues until you reach the bottom of the flame graph. + +This is a CPU profile, but profiles can represent many other types of resource such as memory, network, disk, etc. + +![flame graph](https://grafana.com/static/img/pyroscope/pyroscope-flamegraph-2023-11-30.png) + +## Flame graph visualization panel UI + +To learn more about the flame graph user interface in Grafana, Grafana Cloud, and Explore Profiles, refer to [Flame graph visualization panel](https://grafana.com/docs/grafana-cloud/visualizations/panels-visualizations/visualizations/flame-graph). + +To learn more about the flame graph in the Pyroscope UI, refer to [Pyroscope UI](https://grafana.com/docs/pyroscope//view-and-analyze-profile-data/pyroscope-ui/). \ No newline at end of file diff --git a/docs/sources/shared/intro/profile-types-descriptions.md b/docs/sources/shared/intro/profile-types-descriptions.md new file mode 100644 index 0000000000..6979836dc4 --- /dev/null +++ b/docs/sources/shared/intro/profile-types-descriptions.md @@ -0,0 +1,75 @@ +--- +headless: true +description: Shared file for profile types. +--- + +[//]: # 'Profile types descriptions.' +[//]: # 'This shared file is included in these locations:' +[//]: # '/pyroscope/docs/sources/introduction/profiling-types.md' +[//]: # '/website/content/grafana-cloud/monitor-applications/profiles/introduction/profiling-types.md' +[//]: # +[//]: # 'If you make changes to this file, verify that the meaning and content are not changed in any place where the file is included.' +[//]: # 'Any links should be fully qualified and not relative: /docs/grafana/ instead of ../grafana/.' + + + +## CPU profiling + +CPU profiling measures the amount of CPU time consumed by different parts of your application code. +High CPU usage can indicate inefficient code, leading to poor performance and increased operational costs. +It's used to identify and optimize CPU-intensive functions in your application. + +- **When to use**: To identify and optimize CPU-intensive functions +- **Flame graph insight**: The width of blocks indicates the CPU time consumed by each function + +The UI shows a spike in CPU along with the flame graph associated with that spike. +You may get similar insights from metrics, however, with profiling, you have more details into the specific cause of a spike in CPU usage at the line level. + +![Example flame graph](https://grafana.com/static/img/pyroscope/pyroscope-ui-single-2023-11-30.png) + +## Memory allocation profiling + +Memory allocation profiling tracks the amount and frequency of memory allocations by the application. +Excessive or inefficient memory allocation can lead to memory leaks and high garbage collection overhead, impacting application efficiency. + + +- **Types**: Alloc Objects, Alloc Space + +- **When to use**: For identifying and optimizing memory usage patterns +- **Flame graph insight**: Highlights functions where memory allocation is high + +The timeline shows memory allocations over time and is great for debugging memory related issues. +A common example is when a memory leak is created due to improper handling of memory in a function. +This can be identified by looking at the timeline and seeing a gradual increase in memory allocations that never goes down. +This is a clear indicator of a memory leak. + +![memory leak example](https://grafana.com/static/img/pyroscope/pyroscope-memory-leak-2023-11-30.png) + +Without profiling, this may be something that's exhibited in metrics or out-of-memory errors (OOM) logs but with profiling you have more details into the specific function that's allocating the memory which is causing the leak at the line level. + +## Goroutine profiling + +Goroutines are lightweight threads in Go, used for concurrent operations. +Goroutine profiling measures the usage and performance of these threads. +Poor management can lead to issues like deadlocks and excessive resource usage. + +- **When to use**: Especially useful in Go applications for concurrency management +- **Flame graph insight**: Provides a view of goroutine distribution and issues + +## Mutex profiling + +Mutex profiling involves analyzing mutex (mutual exclusion) locks, used to prevent simultaneous access to shared resources. +Excessive or long-duration mutex locks can cause delays and reduced application throughput. + +- **Types**: Mutex Count, Mutex Duration +- **When to use**: To optimize thread synchronization and reduce lock contention +- **Flame graph insight**: Shows frequency and duration of mutex operations + +## Block profiling + +Block profiling measures the frequency and duration of blocking operations, where a thread is paused or delayed. +Blocking can significantly slow down application processes, leading to performance bottlenecks. + +- **Types**: Block Count, Block Duration +- **When to use**: To identify and reduce blocking delays +- **Flame graph insight**: Identifies where and how long threads are blocked diff --git a/docs/sources/introduction/profiling.md b/docs/sources/shared/intro/what-is-profiling.md similarity index 53% rename from docs/sources/introduction/profiling.md rename to docs/sources/shared/intro/what-is-profiling.md index 1479dcd177..feb6dfa759 100644 --- a/docs/sources/introduction/profiling.md +++ b/docs/sources/shared/intro/what-is-profiling.md @@ -1,29 +1,34 @@ --- -title: Profiling fundamentals -menuTitle: Profiling fundamentals -description: Discover the benefits of continuous profiling and its role in modern application performance analysis. -weight: 100 -keywords: - - pyroscope - - continuous profiling - - flame graphs +headless: true +description: Shared file for intro to profiling. --- -# Profiling fundamentals +[//]: # 'What is profiling? Traditional vs continuous profiling.' +[//]: # 'This shared file is included in these locations:' +[//]: # '/pyroscope/docs/sources/introduction/continuous-profiling.md' +[//]: # '/website/content/grafana-cloud/monitor-applications/profiles/introduction/continuous-profiling.md' +[//]: # +[//]: # 'If you make changes to this file, verify that the meaning and content are not changed in any place where the file is included.' +[//]: # 'Any links should be fully qualified and not relative: /docs/grafana/ instead of ../grafana/.' + + Profiling is a technique used in software development to measure and analyze the runtime behavior of a program. By profiling a program, developers can identify which parts of the program consume the most resources, such as CPU time, memory, or I/O operations. -This information can then be used to optimize the program, making it run faster or use fewer resources. +You can use this information to optimize the program, making it run faster or use fewer resources. Pyroscope can be used for both traditional and continuous profiling. ## Traditional profiling (non-continuous) -Traditional profiling, often referred to as "sample-based" or "instrumentation-based" profiling, has its roots in the early days of computing. Back then, the primary challenge was understanding how a program utilized the limited computational resources available. +Traditional profiling, often referred to as __sample-based__ or __instrumentation-based__ profiling, has its roots in the early days of computing. +Back then, the primary challenge was understanding how a program utilized the limited computational resources available. -- **Sample-based profiling**: In this method, the profiler interrupts the program at regular intervals, capturing the program's state each time. By analyzing these snapshots, developers can deduce the frequency at which parts of the code execute. +With sample-based profiling, the profiler interrupts the program at regular intervals, capturing the program's state each time. +By analyzing these snapshots, developers can deduce the frequency at which parts of the code execute. -- **Instrumentation-based profiling**: Here, developers insert additional code into the program that records information about its execution. This approach provides detailed insights but can alter the program's behavior due to the added code overhead. +With instrumentation-based profiling, developers insert additional code into the program that records information about its execution. +This approach provides detailed insights but can alter the program's behavior due to the added code overhead. ### Benefits @@ -35,9 +40,11 @@ Traditional profiling provides: ## Continuous profiling -As software systems grew in complexity and scale, the limitations of traditional profiling became evident. Issues could arise in production that weren't apparent during limited profiling sessions in the development or staging environments. +As software systems grew in complexity and scale, the limitations of traditional profiling became evident. +Issues could arise in production that weren't apparent during limited profiling sessions in the development or staging environments. -This led to the development of continuous profiling, a method where the profiling data is continuously collected in the background with minimal overhead. By doing so, developers gain a more comprehensive view of a program's behavior over time, helping to identify sporadic or long-term performance issues. +This led to the development of continuous profiling, a method where the profiling data is continuously collected in the background with minimal overhead. +By doing so, developers gain a more comprehensive view of a program's behavior over time, helping to identify sporadic or long-term performance issues. ### Benefits @@ -56,18 +63,12 @@ Continuous profiling provides: - **Non-intrusive operation**: Specifically designed to work quietly in the background, continuous profiling doesn't compromise the performance of live environments. - **Real-time response**: It equips teams with the ability to act instantly, addressing issues as they arise rather than post-occurrence, which is crucial for maintaining high system availability. -## How to choose between traditional and continuous profiling +## Choose between traditional and continuous profiling In many modern development workflows, both methods are useful. -### Traditional profiling - - - **When**: During development or testing phases. - - **Advantages**: Offers detailed insights that can target specific parts of code. - - **Disadvantages**: Higher overhead provides only a snapshot in time. - -### Continuous profiling - - - **When**: In production environments or during extended performance tests. - - **Advantages**: Provides a continuous view of system performance, often with minimal overhead, making it suitable for live environments. - - **Disadvantages**: It might be less detailed than traditional profiling due to the need to minimize impact on the running system. +| | **Traditional profiling** | **Continuous profiling** | +|---|---|---| +| When to use | During development or testing phases | In production environments or during extended performance tests. | +| Advantages | Offers detailed insights that can target specific parts of code. | Provides a continuous view of system performance, often with minimal overhead, making it suitable for live environments. | +| Disadvantages | Higher overhead provides only a snapshot in time. | It might be less detailed than traditional profiling due to the need to minimize impact on the running system. | \ No newline at end of file diff --git a/docs/sources/shared/use-explore-profiles.md b/docs/sources/shared/use-explore-profiles.md new file mode 100644 index 0000000000..d27f18e194 --- /dev/null +++ b/docs/sources/shared/use-explore-profiles.md @@ -0,0 +1,59 @@ +--- +headless: true +description: Shared file for Explore Profiles overview. +--- + +[//]: # 'This file documents an introduction to Explore Profiles.' +[//]: # 'This shared file is included in these locations:' +[//]: # '/pyroscope/docs/sources/configure-client/profile-types.md' +[//]: # '/pyroscope/docs/sources/introduction/profiling-types.md' +[//]: # +[//]: # 'If you make changes to this file, verify that the meaning and content are not changed in any place where the file is included.' +[//]: # 'Any links should be fully qualified and not relative: /docs/grafana/ instead of ../grafana/.' + + +{{< docs/public-preview product="Explore Profiles" >}} + +[Explore Profiles](https://grafana.com/docs/grafana-cloud/visualizations/simplified-exploration/profiles/) is designed to make it easy to visualize and analyze profiling data. +There are several different modes for viewing, analyzing, and comparing profiling data. + +The main use cases are the following: + +- Proactive: Cutting costs, addressing latency issues, or optimizing memory usage for applications +- Reactive: Resolving incidents with line-level accuracy or debugging active latency/memory issues + +Explore Profiles provides an intuitive interface to specifically support these use cases. +You get a holistic view of all of your services and how they're functioning, but also the ability to drill down for more targeted root cause analysis. + +![Explore Profiles home screen](/media/docs/explore-profiles/explore-profiles-homescreen-v0.1.17.png) + +Explore Profiles offers a convenient platform to analyze profiles and get insights that are impossible to get from using other traditional signals like logs, metrics, or tracing. + +{{< youtube id="x9aPw_CbIQc" >}} + +{{< docs/play title="the Grafana Play site" url="https://play.grafana.org/a/grafana-pyroscope-app/profiles-explorer" >}} + +## Continuous profiling + +While code profiling has been a long-standing practice, continuous profiling represents a modern and more advanced approach to performance monitoring. + +This technique adds two critical dimensions to traditional profiles: + +Time +: Profiling data is collected _continuously_, providing a time-centric view that allows querying performance data from any point in the past. + +Metadata +: Metadata enriches profiling data, adding contextual depth to the performance data. + +These dimensions, coupled with the detailed nature of performance profiles, make continuous profiling a uniquely valuable tool. + +## Flame graphs + + + +Flame graphs help you visualize resource allocation and performance bottlenecks, and you even get suggested recommendations and performance fixes via AI-driven flame graph analysis, as well as line-level insights from our GitHub integration. + + + +On views with a flame graph, you can use **Explain flame graph** to provide an AI flame graph analysis that explains the performance bottleneck, root cause, and recommended fix. +For more information, refer to [Flame graph AI](https://grafana.com/docs/grafana-cloud/monitor-applications/profiles/flamegraph-ai/). \ No newline at end of file diff --git a/docs/sources/view-and-analyze-profile-data/_index.md b/docs/sources/view-and-analyze-profile-data/_index.md index 352d4805e8..283b21551d 100644 --- a/docs/sources/view-and-analyze-profile-data/_index.md +++ b/docs/sources/view-and-analyze-profile-data/_index.md @@ -32,12 +32,8 @@ Integrating Pyroscope with Grafana is a common and recommended approach for visu Options for visualizing data in Grafana: -- **Pyroscope App Plugin**: This plugin is specifically designed for Pyroscope data. It allows for easy browsing, analysis, and comparison of multiple profiles across different labels or time periods. This is particularly useful for a comprehensive overview of your application's performance. +- **Explore Profiles app**: This app is specifically designed for Pyroscope data. It allows for easy browsing, analysis, and comparison of multiple profiles across different labels or time periods. This is particularly useful for a comprehensive overview of your application's performance. - **Explore tab**: In Grafana, **Explore** is suited for making targeted queries on your profiling data. This is useful for in-depth analysis of specific aspects of your application's performance. - **Dashboard**: Grafana dashboards are excellent for integrating profiling data with other metrics. You can display Pyroscope data alongside other dashboard items, creating a unified view of your application’s overall health and performance. -For more information on using profiles in Grafana, refer to [Pyroscope and profiles in Grafana]({{< relref "../introduction/pyroscope-in-grafana#pyroscope-and-profiling-in-grafana" >}}). - -The Pyroscope app plugin works for Grafana Cloud. - For more information on configuring these data sources, refer to the Pyroscope data source documentation in [Grafana Cloud](/docs/grafana-cloud/connect-externally-hosted/data-sources/pyroscope/) and [Grafana](/docs/grafana//datasources/pyroscope/). diff --git a/docs/sources/view-and-analyze-profile-data/explore-profiles.md b/docs/sources/view-and-analyze-profile-data/explore-profiles.md new file mode 100644 index 0000000000..4500e586e9 --- /dev/null +++ b/docs/sources/view-and-analyze-profile-data/explore-profiles.md @@ -0,0 +1,17 @@ +--- +title: Use Explore Profiles to investigate issues +menuTitle: Use Explore Profiles +description: Learn about Explore Profiles app to investigate issues using your profiling data. +weight: 100 +keywords: + - profiles + - performance analysis + - Explore Profiles +--- + +# Use Explore Profiles to investigate issues + +[//]: # 'Introduction to Explore Profiles.' +[//]: # 'This content is located in /pyroscope/docs/sources/shared/intro/use-explore-profiles.md' + +{{< docs/shared source="pyroscope" lookup="use-explore-profiles.md" version="" >}} \ No newline at end of file diff --git a/docs/sources/view-and-analyze-profile-data/flamegraphs.md b/docs/sources/view-and-analyze-profile-data/flamegraphs.md deleted file mode 100644 index 6ef8d7f748..0000000000 --- a/docs/sources/view-and-analyze-profile-data/flamegraphs.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: "Flame graphs: Visualizing performance data" -menuTitle: Flame graphs -description: Learn about flame graphs to help visualize performance data. -weight: 33 -aliases: - - ../introduction/flamegraphs/ -keywords: - - Pyroscope - - Profiling ---- - -# Flame graphs: Visualizing performance data - -A fundamental aspect of continuous profiling is the flame graph, a convenient way to visualize performance data. -These graphs provide a clear, intuitive understanding of resource allocation and bottlenecks within the application. Pyroscope extends this functionality with additional visualization formats like tree graphs and top lists. - -## How is a flame graph created? - -![code to flame graph diagram](https://grafana.com/static/img/pyroscope/code-to-flamegraph-animation.gif) - -This diagram shows how code is turned into a flame graph. In this case Pyroscope would sample the stacktrace of your application to understand how many CPU cycles are being spent in each function. It would then aggregate this data and turn it into a flame graph. This is a very simplified example but it gives you an idea of how Pyroscope works. - -## What does a flame graph represent? - -![flame graph](https://grafana.com/static/img/pyroscope/pyroscope-flamegraph-2023-11-30.png) - -Horizontally, the flame graph represents 100% of the time that this application was running. -The width of each node represents the amount of time spent in that function. -The wider the node, the more time spent in that function. The narrower the node, the less time spent in that function. - -Vertically, the nodes in the flame graph represent the hierarchy of which functions were called and how much time was spent in each function. -The top node is the root node and represents the total amount of time spent in the application. -The nodes below it represent the functions that were called and how much time was spent in each function. -The nodes below those represent the functions that were called from those functions and how much time was spent in each function. -This continues until you reach the bottom of the flame graph. - -This is a CPU profile, but profiles can represent many other types of resource such as memory, network, disk, etc. - -## Flame graph visualization panel UI - -To learn more about the flame graph in the Pyroscope UI, refer to [Pyroscope UI]({{< relref "./pyroscope-ui" >}}). - -To learn more about the flame graph user interface in Grafana, refer to [Flame graph visualization panel](https://grafana.com/docs/grafana-cloud/visualizations/panels-visualizations/visualizations/flame-graph). diff --git a/docs/sources/view-and-analyze-profile-data/profile-cli.md b/docs/sources/view-and-analyze-profile-data/profile-cli.md index ee76ceb215..4d61a3e6ff 100644 --- a/docs/sources/view-and-analyze-profile-data/profile-cli.md +++ b/docs/sources/view-and-analyze-profile-data/profile-cli.md @@ -7,7 +7,7 @@ aliases: description: Getting started with the profile CLI tool. menuTitle: Profile CLI title: Profile CLI -weight: 60 +weight: 500 --- # Profile CLI diff --git a/docs/sources/view-and-analyze-profile-data/pyroscope-ui.md b/docs/sources/view-and-analyze-profile-data/pyroscope-ui.md index 4aae7f2ffc..b36f8a9b0b 100644 --- a/docs/sources/view-and-analyze-profile-data/pyroscope-ui.md +++ b/docs/sources/view-and-analyze-profile-data/pyroscope-ui.md @@ -2,7 +2,7 @@ title: Use the Pyroscope UI to explore profiling data menuTitle: Use the Pyroscope UI description: How to use the Pyroscope UI to explore profile data. -weight: 40 +weight: 200 aliases: - ../ingest-and-analyze-profile-data/profile-ui/ keywords: @@ -16,6 +16,9 @@ keywords: Pyroscope's UI is designed to make it easy to visualize and analyze profiling data. There are several different modes for viewing, analyzing, uploading, and comparing profiling data. +The Pyroscope UI is only available with Pyroscope open source. +In Grafana and Grafana Cloud, you can use [Explore Profiles](https://grafana.com/docs/grafana//explore/simplified-exploration/profiles/) to inspect your profiling data. + ![Screenshot of Pyroscope UI](/media/docs/pyroscope/screenshot-pyroscope-comparison-view.png) While code profiling has been a long-standing practice, continuous profiling represents a modern and more advanced approach to performance monitoring. This technique adds two critical dimensions to traditional profiles: diff --git a/docs/sources/view-and-analyze-profile-data/self-vs-total.md b/docs/sources/view-and-analyze-profile-data/self-vs-total.md index 23fbb60769..6f6d7b6d9a 100644 --- a/docs/sources/view-and-analyze-profile-data/self-vs-total.md +++ b/docs/sources/view-and-analyze-profile-data/self-vs-total.md @@ -2,7 +2,7 @@ title: Understand 'self' vs. 'total' metrics in profiling with Pyroscope menuTitle: Understand 'self' vs. 'total' metrics description: Learn the differences between 'self' and 'total' metrics in profiling and their specific applications in CPU and Memory profiling with Pyroscope. -weight: 42 +weight: 300 aliases: - ../ingest-and-analyze-profile-data/self-vs-total/ keywords: diff --git a/docs/sources/view-and-analyze-profile-data/profile-tracing/traces-to-profiles.md b/docs/sources/view-and-analyze-profile-data/traces-to-profiles.md similarity index 52% rename from docs/sources/view-and-analyze-profile-data/profile-tracing/traces-to-profiles.md rename to docs/sources/view-and-analyze-profile-data/traces-to-profiles.md index 2669b61a6c..a948103cb8 100644 --- a/docs/sources/view-and-analyze-profile-data/profile-tracing/traces-to-profiles.md +++ b/docs/sources/view-and-analyze-profile-data/traces-to-profiles.md @@ -1,19 +1,21 @@ --- title: Traces to profiles menuTitle: Traces to profiles -description: Learning about traces to profiles integration in Grafana and Grafana Cloud. -weight: 150 +description: Learn about traces to profiles integration in Grafana and Grafana Cloud. +weight: 500 keywords: - pyroscope - continuous profiling - tracing +aliases: + - ./profile-tracing/traces-to-profiles/ # https://grafana.com/docs/pyroscope/latest/view-and-analyze-profile-data/profile-tracing/traces-to-profiles/ --- # Traces to profiles {{< admonition type="note" >}} -Your application must be instrumented for profiles and traces. For more information, refer to [Span profiles for Traces to profiles]({{< relref "../../configure-client/trace-span-profiles" >}}). +Your application must be instrumented for profiles and traces. For more information, refer to [Link traces to profiles](https://grafana.com/docs/pyroscope//configure-client/trace-span-profiles/). {{< /admonition >}}