From bed3f81fc75f00f449caf4dcaf551456ea210837 Mon Sep 17 00:00:00 2001 From: Simon Pasquier Date: Tue, 9 Dec 2025 17:48:38 +0100 Subject: [PATCH] docs: update the dashboard user guide Signed-off-by: Simon Pasquier --- docs/user-guides/perses-dashboards.md | 142 +++++++++--------- .../perses-dashboards/assets/console.png | Bin 0 -> 79132 bytes .../dashboard/00-namespace.yaml | 5 + .../dashboard/01-datasource.yaml | 24 +++ .../dashboard/02-dashboard.yaml | 102 +++++++++++++ .../perses-dashboards/plugin/00-plugin.yaml | 9 ++ 6 files changed, 208 insertions(+), 74 deletions(-) create mode 100644 docs/user-guides/perses-dashboards/assets/console.png create mode 100644 docs/user-guides/perses-dashboards/dashboard/00-namespace.yaml create mode 100644 docs/user-guides/perses-dashboards/dashboard/01-datasource.yaml create mode 100644 docs/user-guides/perses-dashboards/dashboard/02-dashboard.yaml create mode 100644 docs/user-guides/perses-dashboards/plugin/00-plugin.yaml diff --git a/docs/user-guides/perses-dashboards.md b/docs/user-guides/perses-dashboards.md index 79655f47f..a15e8327f 100644 --- a/docs/user-guides/perses-dashboards.md +++ b/docs/user-guides/perses-dashboards.md @@ -1,90 +1,87 @@ # Perses Dashboards -In conjunction with the Monitoring UIPlugin, the Cluster Observability Operator (COO) allows you to add dashboards and datasources to the OpenShift Console using [Perses](https://perses.dev/). This feature is currently in Dev Preview. +In conjunction with the Monitoring UIPlugin, the Cluster Observability Operator (COO) allows you to add dashboards and datasources to the OpenShift Console leveraging [Perses](https://perses.dev/), the open dashboard tool for Prometheus and other data sources. This feature is currently in Dev Preview. -## Requirements to display Perses Dashboards in OpenShift Console +## Getting started -- OpenShift 4.15 or later. -- The Cluster Observability Operator 1.2 or later installed and running. -- The [Monitoring UIPlugin](https://github.com/rhobs/observability-operator/blob/main/docs/user-guides/observability-ui-plugins.md#plugin-creation-4) installed with the Perses feature enabled. - -## Adding a Perses Dashboard and Datasource +### Pre-requisites -COO embeds the [Perses Operator](https://github.com/perses/perses-operator), which is responsible for managing Perses dashboards and datasources. The COO provides directly the `PersesDashboard` and `PersesDatasource` custom resources (CRs) which are namespaced. This allows you to define RBAC policies for them using the standard Kubernetes RBAC model. +- OpenShift 4.15 or later. +- The Cluster Observability Operator (1.2 or later) installed and running. -### Add a Perses Dashboard and Datasource manually +### Installing the Monitoring UIPlugin -To add a Perses dashboard to the OpenShift Console, a `PersesDashboard` CR must be created. The Perses dashboard CR is namespaced, meaning it is scoped to a specific namespace in your OpenShift cluster. +Apply the following manifest ```yaml -apiVersion: perses.dev/v1alpha1 -kind: PersesDashboard +apiVersion: observability.openshift.io/v1alpha1 +kind: UIPlugin metadata: - name: my-dashboard - namespace: my-namespace + name: monitoring spec: - # Perses Dashboard specification goes here + type: Monitoring + monitoring: + perses: + enabled: true ``` -Found a complete dashboard example [here](https://github.com/perses/perses-operator/blob/main/config/samples/openshift/openshift-cluster-sample-dashboard.yaml) +Or run -The dashboard specification to create a Perses dashboard CR can be obtained in two ways: +```sh +kubectl apply -f docs/user-guides/perses-dashboards/plugin/ +``` -1. **Export from Perses UI**: Export the specification directly from an existing Perses dashboard through the Perses UI. -> [!NOTE] -> The Perses UI can now export the CR directly. -2. **Convert from Grafana**: Convert an existing Grafana dashboard definition to Perses format using the [`percli`](https://perses.dev/perses/docs/migration/). +To verify the installation +```sh +kubectl wait --for=condition=Available --timeout=10s uiplugins monitoring +``` -Similarly, to add a Perses datasource, a `PersesDatasource` CR must be created: +If you open the OpenShift console, you should see the new `Observe > Dashboards (Perses)` menu. Once `PersesDashboard` and `PersesDatasource` resources are created and the appropriate RBAC permissions are granted, a namespace selector will be available to show dashboards by the namespace(s) where the user has been granted RBAC permissions. -```yaml -apiVersion: perses.dev/v1alpha1 -kind: PersesDatasource -metadata: - name: my-datasource - namespace: my-namespace -spec: - config: - # Perses Datasource specification goes here +Once the Monitoring UI Plugin is installed with Perses enabled, the Cluster Observability Operator deploys the [Perses Operator](https://github.com/perses/perses-operator), which is responsible for managing Perses dashboards and datasources. The COO also installs the `PersesDashboard` and `PersesDatasource` Custom Resources Definitions (CRDs). These CRDs are namespaced-scoped which allows to setup RBAC policies for them using the standard Kubernetes RBAC model. + +Please refer to the [Monitoring UI Plugin](https://github.com/rhobs/observability-operator/blob/main/docs/user-guides/observability-ui-plugins.md#plugin-creation-4) documentation for more details. + +### Deploying an example dashboard + +Run the following command + +```sh +kubectl apply -f docs/user-guides/perses-dashboards/dashboard/ ``` -The Openshift Console monitors the cluster using the Cluster Monitoring Operator (CMO) and the Prometheus Operator. A Perses Datasource can be created to connect to the Prometheus instance in the cluster trough the thanos querier. The datasource CR can look like this: +It will create +1. The `perses-example` namespace. +2. The `openshift-monitoring` datasource which can query metrics from the in-cluster Thanos Querier. +3. The `cluster-overview` dashboard. -```yaml -apiVersion: perses.dev/v1alpha1 -kind: PersesDatasource -metadata: - name: thanos-querier-datasource - namespace: perses-dev -spec: - config: - display: - name: "Thanos Querier Datasource" - default: true - plugin: - kind: "PrometheusDatasource" - spec: - proxy: - kind: HTTPProxy - spec: - url: https://thanos-querier.openshift-monitoring.svc.cluster.local:9091 - secret: thanos-querier-datasource-secret - client: - tls: - enable: true - caCert: - type: file - certPath: /ca/service-ca.crt +To verify the installation + +```sh +kubectl wait --for=condition=Available --timeout=10s -n perses-example persesdashboards cluster-overview ``` -> [!IMPORTANT] -> The name `thanos-querier-datasource-secret` in the example isn't a Kubernetes secret. It's a reference to a Perses secret that the Perses Operator automatically generates from the datasource name and stores in the Perses backend. Therefore, the secret's name must match the datasource name, followed by the `-secret` suffix. -This will allow a dashboard in the `perses-dev` namespace to fetch cluster metrics. +Go to the `Observe > Dashboards (Perses)` menu in the OpenShift console and select the `perses-example` namespace to display the dashboard: -### Add a Perses Dashboard and Datasource from an operator +![Console](perses-dashboards/assets/console.png) -Similar to Prometheus ServiceMonitors, you can create Perses dashboards and datasources from an operator to define default dashboards and datasources based on the applications it deploys. Dashboards and datasources can be created programatically in the reconciliation loop. Either by creating the CR and definition directly from the [Perses Operator API](https://pkg.go.dev/github.com/perses/perses-operator/api/v1alpha1#Dashboard) or using the [Perses Go SDK](https://perses.dev/perses/docs/dac/go/dashboard/#example). For example: +Many other dashboards can be found either in the upstream [Perses operator](https://github.com/perses/perses-operator/blob/main/config/samples/openshift) repository or in the [Perses community mixins](github.com/perses/community-mixins) repository. + +## Developing new dashboards + +The dashboard specification to create a Perses dashboard CR can be obtained in two ways: + +1. **Export from the Perses UI**: Export the specification directly from an existing Perses dashboard through the Perses UI. +> [!NOTE] +> The Perses UI can now export the CR directly. +2. **Convert from Grafana**: Convert an existing Grafana dashboard definition to Perses format using the [`percli`](https://perses.dev/perses/docs/migration/). + +## Adding a Perses Dashboard and Datasource from an operator + +Operators can manage their own `PersesDashboard` and `PersesDatasource` resources to display metrics collected from the operator and/or operands. + +Dashboards and datasources can be created programatically either using the [Perses Operator API](https://pkg.go.dev/github.com/perses/perses-operator/api/v1alpha1#Dashboard) or using the [Perses Go SDK](https://perses.dev/perses/docs/dac/go/dashboard/#example). For example: ```go package dashboards @@ -206,21 +203,20 @@ func Reconcile(k8sClient client.Client) { } ``` -More examples can be found in the [community dashboards repository](https://github.com/perses/community-dashboards) +More examples can be found in the [community dashboards repository](https://github.com/perses/community-mixins) > [!IMPORTANT] > **Automatic Datasource Detection**: Notice that the above example does not set a specific datasource for the dashboard. This is because Perses will automatically detect the available datasources in the namespace and use the default one it finds. A specific datasource can be set by adding a `datasource` field in the panel query or by adding a datasource variable to the dashboard so users can select the datasource they want to use. -## Perses dashboards and datasources RBAC +## RBAC permissions -The Perses operator creates the following cluster roles for datasources and dashboards. +The Perses operator creates the following `ClusterRole`s for datasources and dashboards: +- `persesdashboard-editor-role` +- `persesdashboard-viewer-role` +- `persesdatasource-editor-role` +- `persesdatasource-viewer-role` -- persesdashboard-editor-role -- persesdashboard-viewer-role -- persesdatasource-editor-role -- persesdatasource-viewer-role - -The following role bindings illustrate how to add viewer permissions for `user1` in the `my-namespace` namespace: +The following `RoleBinding`s illustrate how to allow `user1` to view all dashboards in the `my-namespace` namespace: ```yaml kind: RoleBinding @@ -252,6 +248,4 @@ roleRef: name: persesdatasource-viewer-role ``` -## Viewing Perses Dashboards in OpenShift Console - -Once the `PersesDashboard` and `PersesDatasource` CRs are created and the appropriate RBAC permissions are granted, you can view the dashboards in the OpenShift Console under the "Observe -> Perses Dashboards" section. A namespace selector will be available to filter dashboards by the namespaces where the user has been granted Perses RBAC permissions. +Provided that `PersesDashboard` and `PersesDatasource` resources are created and that the appropriate RBAC permissions are granted, users can go to the `Observe > Dashboards (Perses)` menu and use the namespace selector to visualize dashboards to which they have access to. diff --git a/docs/user-guides/perses-dashboards/assets/console.png b/docs/user-guides/perses-dashboards/assets/console.png new file mode 100644 index 0000000000000000000000000000000000000000..35cafa759bf71823d0466e88309343b2ee6d350a GIT binary patch literal 79132 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 literal 0 HcmV?d00001 diff --git a/docs/user-guides/perses-dashboards/dashboard/00-namespace.yaml b/docs/user-guides/perses-dashboards/dashboard/00-namespace.yaml new file mode 100644 index 000000000..abd075808 --- /dev/null +++ b/docs/user-guides/perses-dashboards/dashboard/00-namespace.yaml @@ -0,0 +1,5 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: perses-example diff --git a/docs/user-guides/perses-dashboards/dashboard/01-datasource.yaml b/docs/user-guides/perses-dashboards/dashboard/01-datasource.yaml new file mode 100644 index 000000000..c5874ef58 --- /dev/null +++ b/docs/user-guides/perses-dashboards/dashboard/01-datasource.yaml @@ -0,0 +1,24 @@ +apiVersion: perses.dev/v1alpha1 +kind: PersesDatasource +metadata: + name: openshift-monitoring + namespace: perses-example +spec: + config: + display: + name: "OpenShift Monitoring Datasource" + default: true + plugin: + kind: "PrometheusDatasource" + spec: + proxy: + kind: HTTPProxy + spec: + url: https://thanos-querier.openshift-monitoring.svc.cluster.local:9091 + secret: openshift-monitoring-secret + client: + tls: + enable: true + caCert: + type: file + certPath: /ca/service-ca.crt diff --git a/docs/user-guides/perses-dashboards/dashboard/02-dashboard.yaml b/docs/user-guides/perses-dashboards/dashboard/02-dashboard.yaml new file mode 100644 index 000000000..998a0f7f9 --- /dev/null +++ b/docs/user-guides/perses-dashboards/dashboard/02-dashboard.yaml @@ -0,0 +1,102 @@ +apiVersion: perses.dev/v1alpha1 +kind: PersesDashboard +metadata: + name: cluster-overview + namespace: perses-example +spec: + display: + name: Cluster Overview + panels: + "0_0": + kind: Panel + spec: + display: + name: CPU + plugin: + kind: StatChart + spec: + calculation: mean + format: + unit: percent-decimal + thresholds: + steps: + - color: green + value: 0 + - color: red + value: 80 + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + datasource: + kind: PrometheusDatasource + query: cluster:node_cpu:ratio_rate5m{} + "0_1": + kind: Panel + spec: + display: + name: Memory + plugin: + kind: StatChart + spec: + calculation: mean + format: + unit: percent-decimal + thresholds: + steps: + - color: green + value: 0 + - color: red + value: 80 + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + datasource: + kind: PrometheusDatasource + query: 1 - sum(:node_memory_MemAvailable_bytes:sum) / sum(node_memory_MemTotal_bytes{job="node-exporter"}) + "0_2": + kind: Panel + spec: + display: + name: Welcome to Perses dashboards + plugin: + kind: Markdown + spec: + text: |- + This is a very simple dashboard which displays the overall + utilization of CPU and memory in the cluster based on the metrics + collected by the in-cluster monitoring stack. + + Check the [Observability Operator](https://github.com/rhobs/observability-operator) repository for more examples. + layouts: + - kind: Grid + spec: + display: + title: Overview + collapse: + open: true + items: + - x: 0 + "y": 1 + width: 8 + height: 6 + content: + $ref: "#/spec/panels/0_2" + - x: 8 + "y": 1 + width: 4 + height: 6 + content: + $ref: "#/spec/panels/0_0" + - x: 12 + "y": 1 + width: 4 + height: 6 + content: + $ref: "#/spec/panels/0_1" + duration: 1h diff --git a/docs/user-guides/perses-dashboards/plugin/00-plugin.yaml b/docs/user-guides/perses-dashboards/plugin/00-plugin.yaml new file mode 100644 index 000000000..6f3bb21a6 --- /dev/null +++ b/docs/user-guides/perses-dashboards/plugin/00-plugin.yaml @@ -0,0 +1,9 @@ +apiVersion: observability.openshift.io/v1alpha1 +kind: UIPlugin +metadata: + name: monitoring +spec: + type: Monitoring + monitoring: + perses: + enabled: true