---
# Source: pyroscope/templates/deployments-statefulsets.yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: pyroscope
  namespace: default
  labels:
    helm.sh/chart: pyroscope-2.0.2
    app.kubernetes.io/name: pyroscope
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "2.0.2"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: "all"
spec:
  maxUnavailable: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: pyroscope
      app.kubernetes.io/instance: pyroscope
      app.kubernetes.io/component: "all"
---
# Source: pyroscope/charts/alloy/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
automountServiceAccountToken: true
metadata:
  name: pyroscope-alloy
  namespace: default
  labels:
    helm.sh/chart: alloy-1.5.2
    app.kubernetes.io/name: alloy
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "v1.12.2"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/part-of: alloy
    app.kubernetes.io/component: rbac
---
# Source: pyroscope/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: pyroscope
  namespace: default
  labels:
    helm.sh/chart: pyroscope-2.0.2
    app.kubernetes.io/name: pyroscope
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "2.0.2"
    app.kubernetes.io/managed-by: Helm
---
# Source: pyroscope/templates/configmap-alloy.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: alloy-config-pyroscope
  namespace: default
  labels:
    helm.sh/chart: pyroscope-2.0.2
    app.kubernetes.io/name: pyroscope
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "2.0.2"
    app.kubernetes.io/managed-by: Helm
data:
  config.alloy: |
    logging {
    	level  = "info"
    	format = "logfmt"
    }

    discovery.kubernetes "pyroscope_kubernetes" {
    	role = "pod"
    }

    // The default scrape config allows to define annotations based scraping.
    //
    // For example the following annotations:
    //
    // ```
    // profiles.grafana.com/memory.scrape: "true"
    // profiles.grafana.com/memory.port: "8080"
    // profiles.grafana.com/cpu.scrape: "true"
    // profiles.grafana.com/cpu.port: "8080"
    // profiles.grafana.com/goroutine.scrape: "true"
    // profiles.grafana.com/goroutine.port: "8080"
    // ```
    //
    // will scrape the `memory`, `cpu` and `goroutine` profiles from the `8080` port of the pod.
    //
    // For more information see https://grafana.com/docs/pyroscope/latest/deploy-kubernetes/helm/#optional-scrape-your-own-workloads-profiles
    discovery.relabel "kubernetes_pods" {
    	targets = concat(discovery.kubernetes.pyroscope_kubernetes.targets)

    	rule {
    		action        = "drop"
    		source_labels = ["__meta_kubernetes_pod_phase"]
    		regex         = "Pending|Succeeded|Failed|Completed"
    	}

    	rule {
    		action = "labelmap"
    		regex  = "__meta_kubernetes_pod_label_(.+)"
    	}

    	rule {
    		action        = "replace"
    		source_labels = ["__meta_kubernetes_namespace"]
    		target_label  = "namespace"
    	}

    	rule {
    		action        = "replace"
    		source_labels = ["__meta_kubernetes_pod_name"]
    		target_label  = "pod"
    	}

    	rule {
    		action        = "replace"
    		source_labels = ["__meta_kubernetes_pod_container_name"]
    		target_label  = "container"
    	}

    	rule {
    		action        = "replace"
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_service_repository"]
    		target_label  = "service_repository"
    	}

    	rule {
    		action        = "replace"
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_service_git_ref"]
    		target_label  = "service_git_ref"
    	}

    	rule {
    		action        = "replace"
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_service_root_path"]
    		target_label  = "service_root_path"
    	}
    }

    discovery.relabel "kubernetes_pods_memory_default_name" {
    	targets = concat(discovery.relabel.kubernetes_pods.output)

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_memory_scrape"]
    		action        = "keep"
    		regex         = "true"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_memory_port_name"]
    		action        = "keep"
    		regex         = ""
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_container_port_number"]
    		target_label  = "__meta_kubernetes_pod_annotation_profiles_grafana_com_memory_port"
    		action        = "keepequal"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_memory_scheme"]
    		action        = "replace"
    		regex         = "(https?)"
    		target_label  = "__scheme__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_memory_path"]
    		action        = "replace"
    		regex         = "(.+)"
    		target_label  = "__profile_path__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__address__", "__meta_kubernetes_pod_annotation_profiles_grafana_com_memory_port"]
    		action        = "replace"
    		regex         = "(.+?)(?::\\d+)?;(\\d+)"
    		target_label  = "__address__"
    		replacement   = "$1:$2"
    	}
    }

    discovery.relabel "kubernetes_pods_memory_custom_name" {
    	targets = concat(discovery.relabel.kubernetes_pods.output)

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_memory_scrape"]
    		action        = "keep"
    		regex         = "true"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_memory_port_name"]
    		action        = "drop"
    		regex         = ""
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_container_port_name"]
    		target_label  = "__meta_kubernetes_pod_annotation_profiles_grafana_com_memory_port_name"
    		action        = "keepequal"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_memory_scheme"]
    		action        = "replace"
    		regex         = "(https?)"
    		target_label  = "__scheme__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_memory_path"]
    		action        = "replace"
    		regex         = "(.+)"
    		target_label  = "__profile_path__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__address__", "__meta_kubernetes_pod_annotation_profiles_grafana_com_memory_port"]
    		action        = "replace"
    		regex         = "(.+?)(?::\\d+)?;(\\d+)"
    		target_label  = "__address__"
    		replacement   = "$1:$2"
    	}
    }

    pyroscope.scrape "pyroscope_scrape_memory" {
    	clustering {
    		enabled = true
    	}

    	targets    = concat(discovery.relabel.kubernetes_pods_memory_default_name.output, discovery.relabel.kubernetes_pods_memory_custom_name.output)
    	forward_to = [pyroscope.write.pyroscope_write.receiver]

    	profiling_config {
    		profile.memory {
    			enabled = true
    		}

    		profile.process_cpu {
    			enabled = false
    		}

    		profile.goroutine {
    			enabled = false
    		}

    		profile.block {
    			enabled = false
    		}

    		profile.mutex {
    			enabled = false
    		}

    		profile.fgprof {
    			enabled = false
    		}
    	}
    }

    discovery.relabel "kubernetes_pods_cpu_default_name" {
    	targets = concat(discovery.relabel.kubernetes_pods.output)

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_cpu_scrape"]
    		action        = "keep"
    		regex         = "true"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_cpu_port_name"]
    		action        = "keep"
    		regex         = ""
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_container_port_number"]
    		target_label  = "__meta_kubernetes_pod_annotation_profiles_grafana_com_cpu_port"
    		action        = "keepequal"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_cpu_scheme"]
    		action        = "replace"
    		regex         = "(https?)"
    		target_label  = "__scheme__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_cpu_path"]
    		action        = "replace"
    		regex         = "(.+)"
    		target_label  = "__profile_path__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__address__", "__meta_kubernetes_pod_annotation_profiles_grafana_com_cpu_port"]
    		action        = "replace"
    		regex         = "(.+?)(?::\\d+)?;(\\d+)"
    		target_label  = "__address__"
    		replacement   = "$1:$2"
    	}
    }

    discovery.relabel "kubernetes_pods_cpu_custom_name" {
    	targets = concat(discovery.relabel.kubernetes_pods.output)

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_cpu_scrape"]
    		action        = "keep"
    		regex         = "true"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_cpu_port_name"]
    		action        = "drop"
    		regex         = ""
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_container_port_name"]
    		target_label  = "__meta_kubernetes_pod_annotation_profiles_grafana_com_cpu_port_name"
    		action        = "keepequal"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_cpu_scheme"]
    		action        = "replace"
    		regex         = "(https?)"
    		target_label  = "__scheme__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_cpu_path"]
    		action        = "replace"
    		regex         = "(.+)"
    		target_label  = "__profile_path__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__address__", "__meta_kubernetes_pod_annotation_profiles_grafana_com_cpu_port"]
    		action        = "replace"
    		regex         = "(.+?)(?::\\d+)?;(\\d+)"
    		target_label  = "__address__"
    		replacement   = "$1:$2"
    	}
    }

    pyroscope.scrape "pyroscope_scrape_cpu" {
    	clustering {
    		enabled = true
    	}

    	targets    = concat(discovery.relabel.kubernetes_pods_cpu_default_name.output, discovery.relabel.kubernetes_pods_cpu_custom_name.output)
    	forward_to = [pyroscope.write.pyroscope_write.receiver]

    	profiling_config {
    		profile.memory {
    			enabled = false
    		}

    		profile.process_cpu {
    			enabled = true
    		}

    		profile.goroutine {
    			enabled = false
    		}

    		profile.block {
    			enabled = false
    		}

    		profile.mutex {
    			enabled = false
    		}

    		profile.fgprof {
    			enabled = false
    		}
    	}
    }

    discovery.relabel "kubernetes_pods_goroutine_default_name" {
    	targets = concat(discovery.relabel.kubernetes_pods.output)

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_goroutine_scrape"]
    		action        = "keep"
    		regex         = "true"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_goroutine_port_name"]
    		action        = "keep"
    		regex         = ""
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_container_port_number"]
    		target_label  = "__meta_kubernetes_pod_annotation_profiles_grafana_com_goroutine_port"
    		action        = "keepequal"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_goroutine_scheme"]
    		action        = "replace"
    		regex         = "(https?)"
    		target_label  = "__scheme__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_goroutine_path"]
    		action        = "replace"
    		regex         = "(.+)"
    		target_label  = "__profile_path__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__address__", "__meta_kubernetes_pod_annotation_profiles_grafana_com_goroutine_port"]
    		action        = "replace"
    		regex         = "(.+?)(?::\\d+)?;(\\d+)"
    		target_label  = "__address__"
    		replacement   = "$1:$2"
    	}
    }

    discovery.relabel "kubernetes_pods_goroutine_custom_name" {
    	targets = concat(discovery.relabel.kubernetes_pods.output)

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_goroutine_scrape"]
    		action        = "keep"
    		regex         = "true"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_goroutine_port_name"]
    		action        = "drop"
    		regex         = ""
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_container_port_name"]
    		target_label  = "__meta_kubernetes_pod_annotation_profiles_grafana_com_goroutine_port_name"
    		action        = "keepequal"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_goroutine_scheme"]
    		action        = "replace"
    		regex         = "(https?)"
    		target_label  = "__scheme__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_goroutine_path"]
    		action        = "replace"
    		regex         = "(.+)"
    		target_label  = "__profile_path__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__address__", "__meta_kubernetes_pod_annotation_profiles_grafana_com_goroutine_port"]
    		action        = "replace"
    		regex         = "(.+?)(?::\\d+)?;(\\d+)"
    		target_label  = "__address__"
    		replacement   = "$1:$2"
    	}
    }

    pyroscope.scrape "pyroscope_scrape_goroutine" {
    	clustering {
    		enabled = true
    	}

    	targets    = concat(discovery.relabel.kubernetes_pods_goroutine_default_name.output, discovery.relabel.kubernetes_pods_goroutine_custom_name.output)
    	forward_to = [pyroscope.write.pyroscope_write.receiver]

    	profiling_config {
    		profile.memory {
    			enabled = false
    		}

    		profile.process_cpu {
    			enabled = false
    		}

    		profile.goroutine {
    			enabled = true
    		}

    		profile.block {
    			enabled = false
    		}

    		profile.mutex {
    			enabled = false
    		}

    		profile.fgprof {
    			enabled = false
    		}
    	}
    }

    discovery.relabel "kubernetes_pods_block_default_name" {
    	targets = concat(discovery.relabel.kubernetes_pods.output)

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_block_scrape"]
    		action        = "keep"
    		regex         = "true"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_block_port_name"]
    		action        = "keep"
    		regex         = ""
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_container_port_number"]
    		target_label  = "__meta_kubernetes_pod_annotation_profiles_grafana_com_block_port"
    		action        = "keepequal"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_block_scheme"]
    		action        = "replace"
    		regex         = "(https?)"
    		target_label  = "__scheme__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_block_path"]
    		action        = "replace"
    		regex         = "(.+)"
    		target_label  = "__profile_path__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__address__", "__meta_kubernetes_pod_annotation_profiles_grafana_com_block_port"]
    		action        = "replace"
    		regex         = "(.+?)(?::\\d+)?;(\\d+)"
    		target_label  = "__address__"
    		replacement   = "$1:$2"
    	}
    }

    discovery.relabel "kubernetes_pods_block_custom_name" {
    	targets = concat(discovery.relabel.kubernetes_pods.output)

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_block_scrape"]
    		action        = "keep"
    		regex         = "true"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_block_port_name"]
    		action        = "drop"
    		regex         = ""
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_container_port_name"]
    		target_label  = "__meta_kubernetes_pod_annotation_profiles_grafana_com_block_port_name"
    		action        = "keepequal"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_block_scheme"]
    		action        = "replace"
    		regex         = "(https?)"
    		target_label  = "__scheme__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_block_path"]
    		action        = "replace"
    		regex         = "(.+)"
    		target_label  = "__profile_path__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__address__", "__meta_kubernetes_pod_annotation_profiles_grafana_com_block_port"]
    		action        = "replace"
    		regex         = "(.+?)(?::\\d+)?;(\\d+)"
    		target_label  = "__address__"
    		replacement   = "$1:$2"
    	}
    }

    pyroscope.scrape "pyroscope_scrape_block" {
    	clustering {
    		enabled = true
    	}

    	targets    = concat(discovery.relabel.kubernetes_pods_block_default_name.output, discovery.relabel.kubernetes_pods_block_custom_name.output)
    	forward_to = [pyroscope.write.pyroscope_write.receiver]

    	profiling_config {
    		profile.memory {
    			enabled = false
    		}

    		profile.process_cpu {
    			enabled = false
    		}

    		profile.goroutine {
    			enabled = false
    		}

    		profile.block {
    			enabled = true
    		}

    		profile.mutex {
    			enabled = false
    		}

    		profile.fgprof {
    			enabled = false
    		}
    	}
    }

    discovery.relabel "kubernetes_pods_mutex_default_name" {
    	targets = concat(discovery.relabel.kubernetes_pods.output)

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_mutex_scrape"]
    		action        = "keep"
    		regex         = "true"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_mutex_port_name"]
    		action        = "keep"
    		regex         = ""
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_container_port_number"]
    		target_label  = "__meta_kubernetes_pod_annotation_profiles_grafana_com_mutex_port"
    		action        = "keepequal"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_mutex_scheme"]
    		action        = "replace"
    		regex         = "(https?)"
    		target_label  = "__scheme__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_mutex_path"]
    		action        = "replace"
    		regex         = "(.+)"
    		target_label  = "__profile_path__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__address__", "__meta_kubernetes_pod_annotation_profiles_grafana_com_mutex_port"]
    		action        = "replace"
    		regex         = "(.+?)(?::\\d+)?;(\\d+)"
    		target_label  = "__address__"
    		replacement   = "$1:$2"
    	}
    }

    discovery.relabel "kubernetes_pods_mutex_custom_name" {
    	targets = concat(discovery.relabel.kubernetes_pods.output)

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_mutex_scrape"]
    		action        = "keep"
    		regex         = "true"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_mutex_port_name"]
    		action        = "drop"
    		regex         = ""
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_container_port_name"]
    		target_label  = "__meta_kubernetes_pod_annotation_profiles_grafana_com_mutex_port_name"
    		action        = "keepequal"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_mutex_scheme"]
    		action        = "replace"
    		regex         = "(https?)"
    		target_label  = "__scheme__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_mutex_path"]
    		action        = "replace"
    		regex         = "(.+)"
    		target_label  = "__profile_path__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__address__", "__meta_kubernetes_pod_annotation_profiles_grafana_com_mutex_port"]
    		action        = "replace"
    		regex         = "(.+?)(?::\\d+)?;(\\d+)"
    		target_label  = "__address__"
    		replacement   = "$1:$2"
    	}
    }

    pyroscope.scrape "pyroscope_scrape_mutex" {
    	clustering {
    		enabled = true
    	}

    	targets    = concat(discovery.relabel.kubernetes_pods_mutex_default_name.output, discovery.relabel.kubernetes_pods_mutex_custom_name.output)
    	forward_to = [pyroscope.write.pyroscope_write.receiver]

    	profiling_config {
    		profile.memory {
    			enabled = false
    		}

    		profile.process_cpu {
    			enabled = false
    		}

    		profile.goroutine {
    			enabled = false
    		}

    		profile.block {
    			enabled = false
    		}

    		profile.mutex {
    			enabled = true
    		}

    		profile.fgprof {
    			enabled = false
    		}
    	}
    }

    discovery.relabel "kubernetes_pods_fgprof_default_name" {
    	targets = concat(discovery.relabel.kubernetes_pods.output)

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_fgprof_scrape"]
    		action        = "keep"
    		regex         = "true"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_fgprof_port_name"]
    		action        = "keep"
    		regex         = ""
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_container_port_number"]
    		target_label  = "__meta_kubernetes_pod_annotation_profiles_grafana_com_fgprof_port"
    		action        = "keepequal"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_fgprof_scheme"]
    		action        = "replace"
    		regex         = "(https?)"
    		target_label  = "__scheme__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_fgprof_path"]
    		action        = "replace"
    		regex         = "(.+)"
    		target_label  = "__profile_path__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__address__", "__meta_kubernetes_pod_annotation_profiles_grafana_com_fgprof_port"]
    		action        = "replace"
    		regex         = "(.+?)(?::\\d+)?;(\\d+)"
    		target_label  = "__address__"
    		replacement   = "$1:$2"
    	}
    }

    discovery.relabel "kubernetes_pods_fgprof_custom_name" {
    	targets = concat(discovery.relabel.kubernetes_pods.output)

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_fgprof_scrape"]
    		action        = "keep"
    		regex         = "true"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_fgprof_port_name"]
    		action        = "drop"
    		regex         = ""
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_container_port_name"]
    		target_label  = "__meta_kubernetes_pod_annotation_profiles_grafana_com_fgprof_port_name"
    		action        = "keepequal"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_fgprof_scheme"]
    		action        = "replace"
    		regex         = "(https?)"
    		target_label  = "__scheme__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__meta_kubernetes_pod_annotation_profiles_grafana_com_fgprof_path"]
    		action        = "replace"
    		regex         = "(.+)"
    		target_label  = "__profile_path__"
    		replacement   = "$1"
    	}

    	rule {
    		source_labels = ["__address__", "__meta_kubernetes_pod_annotation_profiles_grafana_com_fgprof_port"]
    		action        = "replace"
    		regex         = "(.+?)(?::\\d+)?;(\\d+)"
    		target_label  = "__address__"
    		replacement   = "$1:$2"
    	}
    }

    pyroscope.scrape "pyroscope_scrape_fgprof" {
    	clustering {
    		enabled = true
    	}

    	targets    = concat(discovery.relabel.kubernetes_pods_fgprof_default_name.output, discovery.relabel.kubernetes_pods_fgprof_custom_name.output)
    	forward_to = [pyroscope.write.pyroscope_write.receiver]

    	profiling_config {
    		profile.memory {
    			enabled = false
    		}

    		profile.process_cpu {
    			enabled = false
    		}

    		profile.goroutine {
    			enabled = false
    		}

    		profile.block {
    			enabled = false
    		}

    		profile.mutex {
    			enabled = false
    		}

    		profile.fgprof {
    			enabled = true
    		}
    	}
    }

    pyroscope.write "pyroscope_write" {
    	endpoint {
    		url = "http://pyroscope.default.svc.cluster.local.:4040"
    	}
    }
---
# Source: pyroscope/templates/configmap-overrides.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: pyroscope-overrides-config
  namespace: default
  labels:
    helm.sh/chart: pyroscope-2.0.2
    app.kubernetes.io/name: pyroscope
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "2.0.2"
    app.kubernetes.io/managed-by: Helm
data:
  overrides.yaml: |
    overrides:
      {}
---
# Source: pyroscope/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: pyroscope-config
  namespace: default
  labels:
    helm.sh/chart: pyroscope-2.0.2
    app.kubernetes.io/name: pyroscope
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "2.0.2"
    app.kubernetes.io/managed-by: Helm
data:
  config.yaml: |
    {}
---
# Source: pyroscope/charts/alloy/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pyroscope-alloy
  labels:
    helm.sh/chart: alloy-1.5.2
    app.kubernetes.io/name: alloy
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "v1.12.2"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/part-of: alloy
    app.kubernetes.io/component: rbac
rules:
  - apiGroups:
    - ""
    - discovery.k8s.io
    - networking.k8s.io
    resources:
    - endpoints
    - endpointslices
    - ingresses
    - pods
    - services
    verbs:
    - get
    - list
    - watch
  - apiGroups:
    - ""
    resources:
    - pods
    - pods/log
    - namespaces
    verbs:
    - get
    - list
    - watch
  - apiGroups:
    - monitoring.grafana.com
    resources:
    - podlogs
    verbs:
    - get
    - list
    - watch
  - apiGroups:
    - monitoring.coreos.com
    resources:
    - prometheusrules
    verbs:
    - get
    - list
    - watch
  - apiGroups:
    - monitoring.coreos.com
    resources:
    - alertmanagerconfigs
    verbs:
    - get
    - list
    - watch
  - apiGroups:
    - monitoring.coreos.com
    resources:
    - podmonitors
    - servicemonitors
    - probes
    - scrapeconfigs
    verbs:
    - get
    - list
    - watch
  - apiGroups:
    - ""
    resources:
    - events
    verbs:
    - get
    - list
    - watch
  - apiGroups:
    - ""
    resources:
    - configmaps
    - secrets
    verbs:
    - get
    - list
    - watch
  - apiGroups:
    - apps
    - extensions
    resources:
    - replicasets
    verbs:
    - get
    - list
    - watch
  - apiGroups:
    - ""
    resources:
    - nodes
    - nodes/proxy
    - nodes/metrics
    verbs:
    - get
    - list
    - watch
  - nonResourceURLs:
    - /metrics
    verbs:
    - get
---
# Source: pyroscope/charts/alloy/templates/rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: pyroscope-alloy
  labels:
    helm.sh/chart: alloy-1.5.2
    app.kubernetes.io/name: alloy
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "v1.12.2"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/part-of: alloy
    app.kubernetes.io/component: rbac
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: pyroscope-alloy
subjects:
  - kind: ServiceAccount
    name: pyroscope-alloy
    namespace: default
---
# Source: pyroscope/templates/rbac-discovery.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pyroscope-discovery
  labels:
    helm.sh/chart: pyroscope-2.0.2
    app.kubernetes.io/name: pyroscope
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "2.0.2"
    app.kubernetes.io/managed-by: Helm
rules:
- apiGroups:
  - ""
  - discovery.k8s.io
  resources:
  - endpointslices
  - endpoints
  - services
  - pods
  verbs:
  - get
  - watch
  - list
---
# Source: pyroscope/templates/rbac-discovery.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: pyroscope-discovery
  labels:
    helm.sh/chart: pyroscope-2.0.2
    app.kubernetes.io/name: pyroscope
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "2.0.2"
    app.kubernetes.io/managed-by: Helm
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: pyroscope-discovery
subjects:
- kind: ServiceAccount
  name: pyroscope
  namespace: default
---
# Source: pyroscope/charts/alloy/templates/cluster_service.yaml
apiVersion: v1
kind: Service
metadata:
  name: pyroscope-alloy-cluster
  namespace: default
  labels:
    helm.sh/chart: alloy-1.5.2
    app.kubernetes.io/name: alloy
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "v1.12.2"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/part-of: alloy
    app.kubernetes.io/component: networking
spec:
  type: ClusterIP
  clusterIP: 'None'
  publishNotReadyAddresses: true
  selector:
    app.kubernetes.io/name: alloy
    app.kubernetes.io/instance: pyroscope
  ports:
    # Do not include the -metrics suffix in the port name, otherwise metrics
    # can be double-collected with the non-headless Service if it's also
    # enabled.
    #
    # This service should only be used for clustering, and not metric
    # collection.
    - name: http
      port: 12345
      targetPort: 12345
      protocol: "TCP"
---
# Source: pyroscope/charts/alloy/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: pyroscope-alloy
  namespace: default
  labels:
    helm.sh/chart: alloy-1.5.2
    app.kubernetes.io/name: alloy
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "v1.12.2"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/part-of: alloy
    app.kubernetes.io/component: networking
spec:
  type: ClusterIP
  selector:
    app.kubernetes.io/name: alloy
    app.kubernetes.io/instance: pyroscope
  internalTrafficPolicy: Cluster
  ports:
    - name: http-metrics
      port: 12345
      targetPort: 12345
      protocol: "TCP"
---
# Source: pyroscope/templates/memberlist-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: pyroscope-memberlist
  namespace: default
  labels:
    helm.sh/chart: pyroscope-2.0.2
    app.kubernetes.io/name: pyroscope
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "2.0.2"
    app.kubernetes.io/managed-by: Helm
spec:
  type: ClusterIP
  clusterIP: None
  ports:
    - name: memberlist
      port: 7946
      protocol: TCP
      targetPort: 7946
  publishNotReadyAddresses: true
  selector:
    app.kubernetes.io/name: pyroscope
    app.kubernetes.io/instance: pyroscope
    # TODO: Ensure only services that offer memberlist register
    # pyroscope.grafana.com/memberlist: "true"
---
# Source: pyroscope/templates/services.yaml
apiVersion: v1
kind: Service
metadata:
  name: pyroscope
  namespace: default
  labels:
    helm.sh/chart: pyroscope-2.0.2
    app.kubernetes.io/name: pyroscope
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "2.0.2"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: "all"
spec:
  type: ClusterIP
  ports:
    - port: 4040
      targetPort: http2
      protocol: TCP
      name: http2
    - port: 9095
      targetPort: grpc
      protocol: TCP
      name: grpc
    - port: 9099
      targetPort: raft
      protocol: TCP
      name: raft
  selector:
    app.kubernetes.io/name: pyroscope
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/component: "all"
---
# Source: pyroscope/templates/services.yaml
apiVersion: v1
kind: Service
metadata:
  name: pyroscope-headless
  namespace: default
  labels:
    helm.sh/chart: pyroscope-2.0.2
    app.kubernetes.io/name: pyroscope
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "2.0.2"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: "all"
spec:
  type: ClusterIP
  clusterIP: None
  ports:
    - port: 4040
      targetPort: http2
      protocol: TCP
      name: http2
    - port: 9095
      targetPort: grpc
      protocol: TCP
      name: grpc
    - port: 9099
      targetPort: raft
      protocol: TCP
      name: raft
  publishNotReadyAddresses: true
  selector:
    app.kubernetes.io/name: pyroscope
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/component: "all"
---
# Source: pyroscope/charts/alloy/templates/controllers/statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: pyroscope-alloy
  namespace: default
  labels:
    helm.sh/chart: alloy-1.5.2
    app.kubernetes.io/name: alloy
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "v1.12.2"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/part-of: alloy
spec:
  replicas: 1
  podManagementPolicy: Parallel
  minReadySeconds: 10
  serviceName: pyroscope-alloy
  selector:
    matchLabels:
      app.kubernetes.io/name: alloy
      app.kubernetes.io/instance: pyroscope
  template:
    metadata:
      annotations:
        kubectl.kubernetes.io/default-container: alloy
        profiles.grafana.com/cpu.port_name: http-metrics
        profiles.grafana.com/cpu.scrape: "true"
        profiles.grafana.com/goroutine.port_name: http-metrics
        profiles.grafana.com/goroutine.scrape: "true"
        profiles.grafana.com/memory.port_name: http-metrics
        profiles.grafana.com/memory.scrape: "true"
        profiles.grafana.com/service_git_ref: v1.8.1
        profiles.grafana.com/service_repository: https://github.com/grafana/alloy
      labels:
        app.kubernetes.io/name: alloy
        app.kubernetes.io/instance: pyroscope
    spec:
      serviceAccountName: pyroscope-alloy
      containers:
        - name: alloy
          image: docker.io/grafana/alloy:v1.12.2
          imagePullPolicy: IfNotPresent
          args:
            - run
            - /etc/alloy/config.alloy
            - --storage.path=/tmp/alloy
            - --server.http.listen-addr=0.0.0.0:12345
            - --server.http.ui-path-prefix=/
            - --cluster.enabled=true
            - --cluster.join-addresses=pyroscope-alloy-cluster
            - --stability.level=public-preview
          env:
            - name: ALLOY_DEPLOY_MODE
              value: "helm"
            - name: HOSTNAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
          ports:
            - containerPort: 12345
              name: http-metrics
          readinessProbe:
            httpGet:
              path: /-/ready
              port: 12345
              scheme: HTTP
            initialDelaySeconds: 10
            timeoutSeconds: 1
          volumeMounts:
            - name: config
              mountPath: /etc/alloy
        - name: config-reloader
          image: quay.io/prometheus-operator/prometheus-config-reloader:v0.81.0
          args:
            - --watched-dir=/etc/alloy
            - --reload-url=http://localhost:12345/-/reload
          volumeMounts:
            - name: config
              mountPath: /etc/alloy
          resources:
            requests:
              cpu: 10m
              memory: 50Mi
      dnsPolicy: ClusterFirst
      volumes:
        - name: config
          configMap:
            name: alloy-config-pyroscope
---
# Source: pyroscope/templates/deployments-statefulsets.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: pyroscope
  namespace: default
  labels:
    helm.sh/chart: pyroscope-2.0.2
    app.kubernetes.io/name: pyroscope
    app.kubernetes.io/instance: pyroscope
    app.kubernetes.io/version: "2.0.2"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: "all"
spec:
  serviceName: pyroscope-headless
  podManagementPolicy: Parallel
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: pyroscope
      app.kubernetes.io/instance: pyroscope
      app.kubernetes.io/component: "all"
  template:
    metadata:
      annotations:
        checksum/config: 8a4f819897979ed0bc3d732a2380b919c0688ecafd39ceb238856b74223db8ab
        profiles.grafana.com/service_repository: "https://github.com/grafana/pyroscope"
        profiles.grafana.com/service_git_ref: "v2.0.2"
        profiles.grafana.com/cpu.port_name: http2
        profiles.grafana.com/cpu.scrape: "true"
        profiles.grafana.com/goroutine.port_name: http2
        profiles.grafana.com/goroutine.scrape: "true"
        profiles.grafana.com/memory.port_name: http2
        profiles.grafana.com/memory.scrape: "true"
      labels:
        app.kubernetes.io/name: pyroscope
        app.kubernetes.io/instance: pyroscope
        app.kubernetes.io/component: "all"
        name: "pyroscope"
    spec:
      serviceAccountName: pyroscope
      securityContext:
        fsGroup: 10001
        runAsNonRoot: true
        runAsUser: 10001
      dnsPolicy: ClusterFirst
      containers:
        - name: "pyroscope"
          securityContext:
            {}
          image: "grafana/pyroscope:2.0.2"
          imagePullPolicy: IfNotPresent
          args:
            - "-target=all"
            - "-self-profiling.disable-push=true"
            - "-server.http-listen-port=4040"
            - "-memberlist.cluster-label=default-pyroscope"
            - "-memberlist.join=dns+pyroscope-memberlist.default.svc.cluster.local.:7946"
            - "-config.file=/etc/pyroscope/config.yaml"
            - "-runtime-config.file=/etc/pyroscope/overrides/overrides.yaml"
            - "-log.level=debug"
            - "-query-backend.address=dns:///_grpc._tcp.pyroscope-headless.$(NAMESPACE_FQDN):9095"
            - "-metastore.address=kubernetes:///pyroscope-headless.$(NAMESPACE_FQDN):9095"
            - "-metastore.data-dir=./data-metastore/data"
            - "-metastore.raft.dir=./data-metastore/raft"
            - "-metastore.raft.snapshots-dir=./data-metastore/raft"
            - "-metastore.raft.bind-address=:9099"
            - "-metastore.raft.server-id=$(POD_NAME).$(PYROSCOPE_METASTORE_SERVICE)"
            - "-metastore.raft.advertise-address=$(POD_NAME).$(PYROSCOPE_METASTORE_SERVICE)"
            - "-metastore.raft.bootstrap-peers=dnssrvnoa+_raft._tcp.$(PYROSCOPE_METASTORE_SERVICE)"
            - "-architecture.storage=v2"
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: NAMESPACE_FQDN
              value: "default.svc.cluster.local."
            - name: PYROSCOPE_METASTORE_SERVICE
              value: "pyroscope-headless.default.svc.cluster.local.:9099"
          ports:
            - name: http2
              containerPort: 4040
              protocol: TCP
            - name: memberlist
              containerPort: 7946
              protocol: TCP
            - name: grpc
              containerPort: 9095
              protocol: TCP
            - name: raft
              containerPort: 9099
              protocol: TCP
          readinessProbe:
            httpGet:
              path: /ready
              port: http2
              scheme: HTTP
          volumeMounts:
            - name: config
              mountPath: /etc/pyroscope/config.yaml
              subPath: config.yaml
            - name: overrides-config
              mountPath: /etc/pyroscope/overrides/
            - name: data
              mountPath: /data
            - name: data
              mountPath: /data-metastore
              subPath: .metastore
          resources:
            {}
      volumes:
        - name: config
          configMap:
            name: pyroscope-config
        - name: overrides-config
          configMap:
            name: pyroscope-overrides-config
        - name: data
          emptyDir: {}
