dashboards.yaml
Dashboards are the source of truth for the Dashboards section in plural. They're very similar in structure to grafana dashboards, and you can actually scaffold them from existing grafana dashboards using the plural from-grafana command.
apiVersion: platform.plural.sh/v1alpha1
kind: Dashboard
metadata:
name: dashboard-name
spec:
name: postgres # name of the dashboard in the console UI
description: Monitoring for hasura's postgres db # short description
timeslices: [30m, 1h, 2h, 1d] # durations options to allow display for
defaultTime: 30m
labels: # global values to slice the dashboard further
- name: instance
query:
query: pg_stat_database_tup_fetched{namespace="{{ .Release.Namespace }}"}
label: instance
graphs:
- queries: # list of grouped prometheus queries per graph
- query: SUM(pg_stat_database_tup_fetched{instance=~"$instance"})
legend: tuples fetched
- query: SUM(pg_stat_database_tup_inserted{instance=~"$instance"})
legend: tuples inserted
- query: SUM(pg_stat_database_tup_updated{instance=~"$instance"})
legend: tuples updated
name: Storage Performance
- queries:
- query: pg_settings_max_connections{instance="$instance"}
legend: connections
name: Max Connections
- queries:
- query: avg(rate(process_cpu_seconds_total{instance="$instance"}[5m]) * 1000)
legend: seconds
name: CPU time
- queries:
- query: avg(rate(process_resident_memory_bytes{instance="$instance"}[5m]))
legend: resident mem
- query: avg(rate(process_virtual_memory_bytes{instance="$instance"}[5m]))
legend: process mem
format: bytes
name: Memory utilization
- queries:
- query: process_open_fds{instance="$instance"}
legend: fds
name: Open file descriptors
- queries:
- query: pg_settings_max_wal_size_bytes{instance="$instance"}
legend: WAL size
name: Max WAL size
- queries:
- query: irate(pg_stat_database_xact_commit{instance="$instance"}[5m])
legend: commits
- query: irate(pg_stat_database_xact_rollback{instance="$instance"}[5m])
legend: rollbacks
name: Transactions
- queries:
- query: pg_stat_database_blks_hit{instance="$instance"} / (pg_stat_database_blks_read{instance="$instance"} + pg_stat_database_blks_hit{instance="$instance"})
legend: hit rate
name: Cache hit raterunbook.yaml
Runbooks are dynamically generated web interfaces to provide guided experiences for operational interactions within Plural. A common one that's needed is managing the database for an application, shown here, but they're meant to be adaptable to a wide array of operational use-cases. The api is also naturally extensible if other datasources are needed.
apiVersion: platform.plural.sh/v1alpha1
kind: Runbook
metadata:
name: db-scaling
labels:
platform.plural.sh/pinned: 'true' # whether this runbook should be on the homepage
spec:
name: Postgres Scaling
description: overview of how to accurately scale hasura's postgres instance
alerts: # Alertmanager alerts to bind to this runbook
- name: HasuraPostgresCPU
- name: HasuraPostgresMEM
display: |- # xml template for the layout of the runbook
{{ .Files.Get "runbooks/db-scaling.xml" | indent 4 }}
datasources: # list of datasources to hydrate the runbook
- name: cpu
type: prometheus # prometheus query datasource
prometheus:
format: cpu
legend: $pod
query: sum(rate(container_cpu_usage_seconds_total{namespace="{{ .Release.Namespace }}",pod=~"plural-hasura-[0-9]+"}[5m])) by (pod)
- name: memory
type: prometheus
prometheus:
format: memory
legend: $pod
query: sum(container_memory_working_set_bytes{namespace="{{ .Release.Namespace }}",pod=~"plural-hasura-[0-9]+"}) by (pod)
- name: statefulset
type: kubernetes # kubernetes api call
kubernetes:
resource: statefulset
name: plural-hasura
- name: volume
type: prometheus
prometheus:
format: none
legend: $persistentvolumeclaim
query: (kubelet_volume_stats_capacity_bytes{namespace="{{ .Release.Namespace }}", persistentvolumeclaim=~"pgdata-plural-hasura-.*"} - kubelet_volume_stats_available_bytes{namespace="{{ .Release.Namespace }}", persistentvolumeclaim=~"pgdata-plural-hasura-.*"}) / kubelet_volume_stats_capacity_bytes{namespace="{{ .Release.Namespace }}", persistentvolumeclaim=~"pgdata-plural-hasura-.*"}
- name: nodes
type: nodes # nodes api call
actions: # actions to perform on form submits
- name: scale
action: config
redirectTo: '/'
configuration:
updates: # path update into helm values
- path:
- hasura
- postgres
- resources
- requests
- cpu
valueFrom: cpu
- path:
- hasura
- postgres
- resources
- requests
- memory
valueFrom: memory
- path:
- hasura
- postgres
- replicas
valueFrom: replicas
- path:
- hasura
- postgres
- storage
- size
valueFrom: volumeproxies.yaml
These drive the plural proxy connect command, and can be used to establish local connections to databases or private web interfaces running in your cluster.
apiVersion: platform.plural.sh/v1alpha1
kind: Proxy
metadata:
name: db
spec:
type: db # establishes a db shell
target: service/hasura-master
credentials:
secret: hasura.plural-hasura.credentials.postgresql.acid.zalan.do
key: password
user: hasura
dbConfig:
name: hasura
engine: postgres
port: 5432configurationOverlay.yaml
These drive form fields which can customize applications in the console's Configuration section. At the moment they resolve to a helm values update according to a yaml path.
{{- define "nocodb.config-overlay" -}}
apiVersion: platform.plural.sh/v1alpha1
kind: ConfigurationOverlay
metadata:
name: my-overlay
spec:
name: Airflow Registry
documentation: docker repository to use for airflow (default is dkr.plural.sh/airflow/apache/airflow)
updates: # a helm path update fo
- path: ['airflow', 'airflow', 'airflow', 'image', 'repository']