diff --git a/.github/workflows/helm-ci.yml b/.github/workflows/helm-ci.yml index bee5585017..3f4a8e7089 100644 --- a/.github/workflows/helm-ci.yml +++ b/.github/workflows/helm-ci.yml @@ -6,11 +6,11 @@ jobs: call-lint: uses: grafana/helm-charts/.github/workflows/linter.yml@main with: - filter_regex_include: .*operations/phlare/helm/.* + filter_regex_include: .*operations/pyroscope/helm/.* call-lint-test: uses: grafana/helm-charts/.github/workflows/lint-test.yaml@main with: - ct_configfile: operations/phlare/helm/ct.yaml + ct_configfile: operations/pyroscope/helm/ct.yaml ct_check_version_increment: false helm_version: v3.8.2 diff --git a/.github/workflows/helm-release.yml b/.github/workflows/helm-release.yml index f86d95fe66..25c1c9d02b 100644 --- a/.github/workflows/helm-release.yml +++ b/.github/workflows/helm-release.yml @@ -11,8 +11,8 @@ jobs: call-update-helm-repo: uses: grafana/helm-charts/.github/workflows/update-helm-repo.yaml@main with: - charts_dir: operations/phlare/helm/ - cr_configfile: operations/phlare/helm/cr.yaml - ct_configfile: operations/phlare/helm/ct.yaml + charts_dir: operations/pyroscope/helm/ + cr_configfile: operations/pyroscope/helm/cr.yaml + ct_configfile: operations/pyroscope/helm/ct.yaml secrets: helm_repo_token: ${{ secrets.GH_BOT_ACCESS_TOKEN }} diff --git a/Makefile b/Makefile index 72eb7ce525..0bdffded69 100644 --- a/Makefile +++ b/Makefile @@ -141,7 +141,7 @@ fmt: $(BIN)/golangci-lint $(BIN)/buf $(BIN)/tk ## Automatically fix some lint er $(BIN)/golangci-lint run --fix cd api/ && $(BIN)/buf format -w . cd pkg && $(BIN)/buf format -w . - $(BIN)/tk fmt ./operations/phlare/jsonnet/ tools/monitoring/ + $(BIN)/tk fmt ./operations/pyroscope/jsonnet/ tools/monitoring/ .PHONY: check/unstaged-changes check/unstaged-changes: @@ -161,16 +161,16 @@ define deploy # Load image into nodes $(BIN)/kind load docker-image --name $(KIND_CLUSTER) $(IMAGE_PREFIX)pyroscope:$(IMAGE_TAG) kubectl get pods - $(BIN)/helm upgrade --install $(1) ./operations/phlare/helm/phlare $(2) \ - --set phlare.image.tag=$(IMAGE_TAG) \ - --set phlare.image.repository=$(IMAGE_PREFIX)pyroscope \ - --set phlare.podAnnotations.image-id=$(shell cat .docker-image-id-pyroscope) \ - --set phlare.service.port_name=http-metrics \ - --set phlare.podAnnotations."profiles\.grafana\.com\/memory\.port_name"=http-metrics \ - --set phlare.podAnnotations."profiles\.grafana\.com\/cpu\.port_name"=http-metrics \ - --set phlare.podAnnotations."profiles\.grafana\.com\/goroutine\.port_name"=http-metrics \ - --set phlare.extraEnvVars.JAEGER_AGENT_HOST=jaeger.monitoring.svc.cluster.local. \ - --set phlare.extraArgs."phlaredb\.max-block-duration"=5m + $(BIN)/helm upgrade --install $(1) ./operations/pyroscope/helm/pyroscope $(2) \ + --set pyroscope.image.tag=$(IMAGE_TAG) \ + --set pyroscope.image.repository=$(IMAGE_PREFIX)pyroscope \ + --set pyroscope.podAnnotations.image-id=$(shell cat .docker-image-id-pyroscope) \ + --set pyroscope.service.port_name=http-metrics \ + --set pyroscope.podAnnotations."profiles\.grafana\.com\/memory\.port_name"=http-metrics \ + --set pyroscope.podAnnotations."profiles\.grafana\.com\/cpu\.port_name"=http-metrics \ + --set pyroscope.podAnnotations."profiles\.grafana\.com\/goroutine\.port_name"=http-metrics \ + --set pyroscope.extraEnvVars.JAEGER_AGENT_HOST=jaeger.monitoring.svc.cluster.local. \ + --set pyroscope.extraArgs."phlaredb\.max-block-duration"=5m endef .PHONY: docker-image/pyroscope/build-debug @@ -203,21 +203,21 @@ define UPDATER_CONFIG_JSON "destination_branch": "master", "update_jsonnet_attribute_configs": [ { - "file_path": "ksonnet/lib/phlare/releases/dev/images.libsonnet", - "jsonnet_key": "phlare", + "file_path": "ksonnet/lib/pyroscope/releases/dev/images.libsonnet", + "jsonnet_key": "pyroscope", "jsonnet_value": "$(IMAGE_PREFIX)pyroscope:$(IMAGE_TAG)" } ], "update_jsonnet_lib_configs": [ { - "jsonnet_dir": "ksonnet/lib/phlare/releases/dev", + "jsonnet_dir": "ksonnet/lib/pyroscope/releases/dev", "dependencies": [ { "owner": "grafana", "name": "pyroscope", "version": "$(GIT_REVISION)", "sub_dirs": [ - "operations/phlare" + "operations/pyroscope" ] } ] @@ -337,10 +337,10 @@ KIND_CLUSTER = pyroscope-dev .PHONY: helm/lint helm/lint: $(BIN)/helm - $(BIN)/helm lint ./operations/phlare/helm/phlare/ + $(BIN)/helm lint ./operations/pyroscope/helm/pyroscope/ helm/docs: $(BIN)/helm - docker run --rm --volume "$(CURDIR)/operations/phlare/helm:/helm-docs" -u "$(shell id -u)" jnorwood/helm-docs:v1.8.1 + docker run --rm --volume "$(CURDIR)/operations/pyroscope/helm:/helm-docs" -u "$(shell id -u)" jnorwood/helm-docs:v1.8.1 .PHONY: goreleaser/lint goreleaser/lint: $(BIN)/goreleaser @@ -357,30 +357,30 @@ trunk/fmt: $(BIN)/trunk .PHONY: helm/check helm/check: $(BIN)/kubeconform $(BIN)/helm $(BIN)/helm repo add --force-update minio https://charts.min.io/ - $(BIN)/helm dependency build ./operations/phlare/helm/phlare/ - mkdir -p ./operations/phlare/helm/phlare/rendered/ - $(BIN)/helm template phlare-dev ./operations/phlare/helm/phlare/ \ - | tee ./operations/phlare/helm/phlare/rendered/single-binary.yaml \ + $(BIN)/helm dependency build ./operations/pyroscope/helm/pyroscope/ + mkdir -p ./operations/pyroscope/helm/pyroscope/rendered/ + $(BIN)/helm template pyroscope-dev ./operations/pyroscope/helm/pyroscope/ \ + | tee ./operations/pyroscope/helm/pyroscope/rendered/single-binary.yaml \ | $(BIN)/kubeconform --summary --strict --kubernetes-version 1.21.0 - $(BIN)/helm template phlare-dev ./operations/phlare/helm/phlare/ --values operations/phlare/helm/phlare/values-micro-services.yaml \ - | tee ./operations/phlare/helm/phlare/rendered/micro-services.yaml \ + $(BIN)/helm template pyroscope-dev ./operations/pyroscope/helm/pyroscope/ --values operations/pyroscope/helm/pyroscope/values-micro-services.yaml \ + | tee ./operations/pyroscope/helm/pyroscope/rendered/micro-services.yaml \ | $(BIN)/kubeconform --summary --strict --kubernetes-version 1.21.0 - cat operations/phlare/helm/phlare/values-micro-services.yaml \ + cat operations/pyroscope/helm/pyroscope/values-micro-services.yaml \ | go run ./tools/yaml-to-json \ - > ./operations/phlare/jsonnet/values-micro-services.json - cat operations/phlare/helm/phlare/values.yaml \ + > ./operations/pyroscope/jsonnet/values-micro-services.json + cat operations/pyroscope/helm/pyroscope/values.yaml \ | go run ./tools/yaml-to-json \ - > ./operations/phlare/jsonnet/values.json + > ./operations/pyroscope/jsonnet/values.json .PHONY: deploy deploy: $(BIN)/kind $(BIN)/helm docker-image/pyroscope/build - $(call deploy,phlare-dev,) + $(call deploy,pyroscope-dev,) # Create a service to provide the same endpoint as micro-services - echo '{"kind":"Service","apiVersion":"v1","metadata":{"name":"phlare-micro-services-query-frontend"},"spec":{"ports":[{"name":"phlare","port":4100,"targetPort":4100}],"selector":{"app.kubernetes.io/component":"all","app.kubernetes.io/instance":"phlare-dev"},"type":"ClusterIP"}}' | kubectl apply -f - + echo '{"kind":"Service","apiVersion":"v1","metadata":{"name":"phlare-micro-services-query-frontend"},"spec":{"ports":[{"name":"phlare","port":4100,"targetPort":4100}],"selector":{"app.kubernetes.io/component":"all","app.kubernetes.io/instance":"pyroscope-dev"},"type":"ClusterIP"}}' | kubectl apply -f - .PHONY: deploy-micro-services deploy-micro-services: $(BIN)/kind $(BIN)/helm docker-image/pyroscope/build - $(call deploy,phlare-micro-services,--values=operations/phlare/helm/phlare/values-micro-services.yaml --set phlare.components.querier.resources=null --set phlare.components.distributor.resources=null --set phlare.components.ingester.resources=null --set phlare.components.store-gateway.resources=null) + $(call deploy,phlare-micro-services,--values=operations/pyroscope/helm/pyroscope/values-micro-services.yaml --set phlare.components.querier.resources=null --set phlare.components.distributor.resources=null --set phlare.components.ingester.resources=null --set phlare.components.store-gateway.resources=null) .PHONY: deploy-monitoring deploy-monitoring: $(BIN)/tk $(BIN)/kind tools/monitoring/environments/default/spec.json @@ -392,7 +392,7 @@ tools/monitoring/environments/default/spec.json: $(BIN)/tk $(BIN)/kind $(BIN)/kind export kubeconfig --name $(KIND_CLUSTER) || $(BIN)/kind create cluster --name $(KIND_CLUSTER) pushd tools/monitoring/ && rm -Rf vendor/ lib/ environments/default/spec.json && PATH=$(BIN):$(PATH) $(BIN)/tk init -f echo "import 'monitoring.libsonnet'" > tools/monitoring/environments/default/main.jsonnet - $(BIN)/tk env set tools/monitoring/environments/default --server=$(shell $(BIN)/kind get kubeconfig --name phlare-dev | grep server: | sed 's/server://g' | xargs) --namespace=monitoring + $(BIN)/tk env set tools/monitoring/environments/default --server=$(shell $(BIN)/kind get kubeconfig --name pyroscope-dev | grep server: | sed 's/server://g' | xargs) --namespace=monitoring .PHONY: deploy-demo deploy-demo: $(BIN)/kind diff --git a/docs/sources/deploy-kubernetes/tanka-jsonnet.md b/docs/sources/deploy-kubernetes/tanka-jsonnet.md index 257bd1f977..7d8437c2ed 100644 --- a/docs/sources/deploy-kubernetes/tanka-jsonnet.md +++ b/docs/sources/deploy-kubernetes/tanka-jsonnet.md @@ -58,7 +58,7 @@ You can use [Tanka](https://tanka.dev/) and [jsonnet-bundler](https://github.com - Option A) For monolithic mode the file `environments/default/main.jsonnet`, should look like; ```jsonnet - local phlare = import 'phlare/jsonnet/phlare/phlare.libsonnet'; + local phlare = import 'phlare/jsonnet/pyroscope/pyroscope.libsonnet'; local tk = import 'tk'; phlare.new(overrides={ @@ -69,7 +69,7 @@ You can use [Tanka](https://tanka.dev/) and [jsonnet-bundler](https://github.com - Option B) For micro services mode the file `environments/default/main.jsonnet`, should look like; ```jsonnet - local phlare = import 'phlare/jsonnet/phlare/phlare.libsonnet'; + local phlare = import 'phlare/jsonnet/pyroscope/pyroscope.libsonnet'; local valuesMicroServices = import 'phlare/jsonnet/values-micro-services.json'; local tk = import 'tk'; diff --git a/operations/phlare/helm/phlare/README.md b/operations/phlare/helm/phlare/README.md deleted file mode 100644 index 130cc9e0d1..0000000000 --- a/operations/phlare/helm/phlare/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# phlare - -![Version: 0.5.4](https://img.shields.io/badge/Version-0.5.4-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.5.1](https://img.shields.io/badge/AppVersion-0.5.1-informational?style=flat-square) - -🔥 horizontally-scalable, highly-available, multi-tenant continuous profiling aggregation system - -## Requirements - -| Repository | Name | Version | -|------------|------|---------| -| https://charts.min.io/ | minio(minio) | 4.0.12 | - -## Values - -| Key | Type | Default | Description | -|-----|------|---------|-------------| -| ingress.enabled | bool | `false` | | -| minio | object | `{"buckets":[{"name":"grafana-phlare-data","policy":"none","purge":false}],"drivesPerNode":2,"enabled":false,"persistence":{"size":"5Gi"},"podAnnotations":{"phlare.grafana.com/port":"9000","phlare.grafana.com/scrape":"true"},"replicas":1,"resources":{"requests":{"cpu":"100m","memory":"128Mi"}},"rootPassword":"supersecret","rootUser":"grafana-phlare"}` | ----------------------------------- | -| phlare.affinity | object | `{}` | | -| phlare.components | object | `{}` | | -| phlare.config | string | The config depends on other values been set, details can be found in [`values.yaml`](./values.yaml) | Contains Phlare's configuration as a string. | -| phlare.extraArgs."log.level" | string | `"debug"` | | -| phlare.extraEnvFrom | list | `[]` | Environment variables from secrets or configmaps to add to the pods | -| phlare.extraEnvVars | object | `{}` | | -| phlare.extraLabels | object | `{}` | | -| phlare.extraVolumeMounts | list | `[]` | | -| phlare.extraVolumes | list | `[]` | | -| phlare.fullnameOverride | string | `""` | | -| phlare.image.pullPolicy | string | `"IfNotPresent"` | | -| phlare.image.repository | string | `"grafana/phlare"` | | -| phlare.image.tag | string | `"0.5.1"` | | -| phlare.imagePullSecrets | list | `[]` | | -| phlare.memberlist.port | int | `7946` | | -| phlare.memberlist.port_name | string | `"memberlist"` | | -| phlare.nameOverride | string | `""` | | -| phlare.nodeSelector | object | `{}` | | -| phlare.persistence.accessModes[0] | string | `"ReadWriteOnce"` | | -| phlare.persistence.annotations | object | `{}` | | -| phlare.persistence.enabled | bool | `false` | | -| phlare.persistence.size | string | `"10Gi"` | | -| phlare.podAnnotations."profiles.grafana.com/cpu.port_name" | string | `"http2"` | | -| phlare.podAnnotations."profiles.grafana.com/cpu.scrape" | string | `"true"` | | -| phlare.podAnnotations."profiles.grafana.com/goroutine.port_name" | string | `"http2"` | | -| phlare.podAnnotations."profiles.grafana.com/goroutine.scrape" | string | `"true"` | | -| phlare.podAnnotations."profiles.grafana.com/memory.port_name" | string | `"http2"` | | -| phlare.podAnnotations."profiles.grafana.com/memory.scrape" | string | `"true"` | | -| phlare.podSecurityContext.fsGroup | int | `10001` | | -| phlare.podSecurityContext.runAsNonRoot | bool | `true` | | -| phlare.podSecurityContext.runAsUser | int | `10001` | | -| phlare.replicaCount | int | `1` | | -| phlare.resources | object | `{}` | | -| phlare.securityContext | object | `{}` | | -| phlare.service.port | int | `4100` | | -| phlare.service.port_name | string | `"http2"` | | -| phlare.service.type | string | `"ClusterIP"` | | -| phlare.serviceAccount.annotations | object | `{}` | | -| phlare.serviceAccount.create | bool | `true` | | -| phlare.serviceAccount.name | string | `""` | | -| phlare.structuredConfig | object | `{}` | Allows to override Phlare's configuration using structured format. | -| phlare.tenantOverrides | object | `{}` | Allows to add tenant specific overrides to the default limit configuration. | -| phlare.tolerations | list | `[]` | | - ----------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.8.1](https://github.com/norwoodj/helm-docs/releases/v1.8.1) diff --git a/operations/phlare/helm/phlare/templates/NOTES.txt b/operations/phlare/helm/phlare/templates/NOTES.txt deleted file mode 100644 index c531352f99..0000000000 --- a/operations/phlare/helm/phlare/templates/NOTES.txt +++ /dev/null @@ -1,19 +0,0 @@ -Thanks for deploying Grafana Phlare. - -In order to configure Grafana to use the Phlare datasource, you need to add the Phlare datasource to your Grafana instance. - -The in-cluster query URL is: - -{{- if hasKey .Values.phlare.components "query-frontend" }} -http://{{ include "phlare.fullname" . }}-query-frontend.{{ .Release.Namespace }}.svc.cluster.local.:{{ .Values.phlare.service.port }} -{{- else }} -http://{{ include "phlare.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local.:{{ .Values.phlare.service.port }} -{{- end }} - -To forward the query API to your localhost you can use: - -{{- if hasKey .Values.phlare.components "query-frontend" }} -kubectl --namespace {{ .Release.Namespace }} port-forward svc/{{ include "phlare.fullname" . }}-query-frontend {{ .Values.phlare.service.port }}:{{ .Values.phlare.service.port }} -{{- else }} -kubectl --namespace {{ .Release.Namespace }} port-forward svc/{{ include "phlare.fullname" . }} {{ .Values.phlare.service.port }}:{{ .Values.phlare.service.port }} -{{- end }} diff --git a/operations/phlare/helm/phlare/templates/clusterrolebinding.yaml b/operations/phlare/helm/phlare/templates/clusterrolebinding.yaml deleted file mode 100644 index 9c58073f4d..0000000000 --- a/operations/phlare/helm/phlare/templates/clusterrolebinding.yaml +++ /dev/null @@ -1,15 +0,0 @@ ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: {{ .Release.Namespace }}-{{ include "phlare.fullname" . }} - labels: - {{- include "phlare.labels" . | nindent 4 }} -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: {{ .Release.Namespace }}-{{ include "phlare.fullname" . }} -subjects: -- kind: ServiceAccount - name: {{ include "phlare.serviceAccountName" . }} - namespace: {{ .Release.Namespace }} diff --git a/operations/phlare/helm/phlare/templates/configmap-overrides.yaml b/operations/phlare/helm/phlare/templates/configmap-overrides.yaml deleted file mode 100644 index 521ced50d5..0000000000 --- a/operations/phlare/helm/phlare/templates/configmap-overrides.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ include "phlare.fullname" . }}-overrides-config - labels: - {{- include "phlare.labels" . | nindent 4 }} -data: - overrides.yaml: | - overrides: - {{- toYaml .Values.phlare.tenantOverrides | nindent 6 }} diff --git a/operations/phlare/helm/phlare/templates/configmap.yaml b/operations/phlare/helm/phlare/templates/configmap.yaml deleted file mode 100644 index e659ef4011..0000000000 --- a/operations/phlare/helm/phlare/templates/configmap.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ include "phlare.fullname" . }}-config - labels: - {{- include "phlare.labels" . | nindent 4 }} -data: - config.yaml: | - {{- tpl (mergeOverwrite (tpl .Values.phlare.config . | fromYaml) .Values.phlare.structuredConfig | toYaml) . | nindent 4 }} diff --git a/operations/phlare/helm/phlare/templates/memberlist-service.yaml b/operations/phlare/helm/phlare/templates/memberlist-service.yaml deleted file mode 100644 index 94202d897a..0000000000 --- a/operations/phlare/helm/phlare/templates/memberlist-service.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ template "phlare.fullname" . }}-memberlist - labels: - {{- include "phlare.labels" . | nindent 4 }} -spec: - type: ClusterIP - clusterIP: None - ports: - - name: {{ .Values.phlare.memberlist.port_name }} - port: {{ .Values.phlare.memberlist.port }} - protocol: TCP - targetPort: {{ .Values.phlare.memberlist.port }} - publishNotReadyAddresses: true - selector: - {{- include "phlare.selectorLabels" . | nindent 4 }} - # TODO: Ensure only services that offer memberlist register - # phlare.grafana.com/memberlist: "true" diff --git a/operations/phlare/helm/phlare/templates/serviceaccount.yaml b/operations/phlare/helm/phlare/templates/serviceaccount.yaml deleted file mode 100644 index 7e62c3959f..0000000000 --- a/operations/phlare/helm/phlare/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.phlare.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "phlare.serviceAccountName" . }} - labels: - {{- include "phlare.labels" . | nindent 4 }} - {{- with .Values.phlare.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/operations/phlare/helm/phlare/templates/services.yaml b/operations/phlare/helm/phlare/templates/services.yaml deleted file mode 100644 index 2fc04d7410..0000000000 --- a/operations/phlare/helm/phlare/templates/services.yaml +++ /dev/null @@ -1,42 +0,0 @@ -{{- $global := . }} -{{- range $component, $cfg := (fromYaml (include "phlare.components" .)) }} -{{- with $global }} ---- -apiVersion: v1 -kind: Service -metadata: - name: {{ $cfg.name }} - labels: - {{- include "phlare.labels" . | nindent 4 }} - app.kubernetes.io/component: {{ $component | quote }} -spec: - type: {{ .Values.phlare.service.type }} - ports: - - port: {{ .Values.phlare.service.port }} - targetPort: {{ .Values.phlare.service.port_name }} - protocol: TCP - name: {{ .Values.phlare.service.port_name }} - selector: - {{- include "phlare.selectorLabels" . | nindent 4 }} - app.kubernetes.io/component: {{ $component | quote }} ---- -apiVersion: v1 -kind: Service -metadata: - name: {{ $cfg.name }}-headless - labels: - {{- include "phlare.labels" . | nindent 4 }} - app.kubernetes.io/component: {{ $component | quote }} -spec: - type: {{ .Values.phlare.service.type }} - clusterIP: None - ports: - - port: {{ .Values.phlare.service.port }} - targetPort: {{ .Values.phlare.service.port_name }} - protocol: TCP - name: {{ .Values.phlare.service.port_name }} - selector: - {{- include "phlare.selectorLabels" . | nindent 4 }} - app.kubernetes.io/component: {{ $component | quote }} -{{- end }} -{{- end }} diff --git a/operations/phlare/jsonnet/test-jsonnet.sh b/operations/phlare/jsonnet/test-jsonnet.sh deleted file mode 100755 index 907c47153c..0000000000 --- a/operations/phlare/jsonnet/test-jsonnet.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -REPO_ROOT="$(git rev-parse --show-toplevel)" -declare -r REPO_ROOT -cd "${REPO_ROOT}" - -# create temporary directory -TMP_DIR="$(mktemp -d)" -declare -r TMP_DIR -on_exit() { - rm -rf "${TMP_DIR}" -} -trap on_exit EXIT - -cd "${TMP_DIR}" -tk init - -jb install github.com/grafana/jsonnet-libs/tanka-util@master -jb install github.com/grafana/phlare/operations/phlare@main - -# link latest -rm -rf vendor/github.com/grafana/phlare/operations/phlare -ln -fs "${REPO_ROOT}/operations/phlare" vendor/github.com/grafana/phlare/operations/phlare - -# create a monolithic environment -tk env add --namespace phlare-mono --server https://localhost:6443 environments/phlare-mono -cat > environments/phlare-mono/main.jsonnet < environments/phlare-micro/main.jsonnet < environments/pyroscope-mono/main.jsonnet < environments/pyroscope-micro/main.jsonnet <