Dashboards
Dashboards are defined via the Dashboard Custom Resource Definition. Dashboards are used to add additional information for applications, users and teams via all the configured plugins.
Specification
| Field | Type | Description | Required |
|---|---|---|---|
| description | string | Provide a descriptions for the dashboard with additional details. | No |
| hideToolbar | boolean | If this is true the toolbar will be hidden in the dashboard. |
No |
| placeholders | []Placeholder | A list of placeholders, which can be directly set by the user. | No |
| variables | []Variable | A list of variables, where the values are loaded by the specified plugin. | No |
| rows | []Row | A list of rows for the dashboard. | Yes |
Placeholder
| Field | Type | Description | Required |
|---|---|---|---|
| name | string | The name for the placeholder, which can be used in the dashboard via {% .<placeholder-name> %}. |
Yes |
| description | string | An optional description, to provide more information how the placeholder is used. | No |
Variable
| Field | Type | Description | Required |
|---|---|---|---|
| name | string | The name of the variable, which can be used in the dashboard via {% .<variable-name> %}. |
Yes |
| label | string | An optional label, which is shown in the UI instead of the variable name. | No |
| hide | boolean | Hide the variable in the UI. | No |
| plugin | Plugin | The plugin, which should be used to get the values for the variable. | Yes |
Note
Dashboards are also supporting some special variables, which always can be used and must not be defined by a users. These variables are:
__timeStart: The start time of the selected time range in seconds. This variable can be used via{% .__timeStart %}in a dashboard.__timeEnd: The end time of the selected time range in seconds. This variable can be used via{% .__timeEnd %}in a dashboard.
Row
| Field | Type | Description | Required |
|---|---|---|---|
| title | string | The title for a row. | No |
| description | string | The description for the row, to provide additional details about the content of the row. | No |
| size | number | The size of the row. This must be a value between 1 and 12. The default value is 2. You can also use the special value -1 to not limit the height of the row. Note: When a dashboard makes use of the -1 value the Intersection Observer API is disabled, so that all dashboard panels are loaded at once. |
No |
| panels | []Panel | A list of panels for the row. | Yes |
Panel
| Field | Type | Description | Required |
|---|---|---|---|
| title | string | The title of the panel. | Yes |
| description | string | An optional description with additional information about the panel. | No |
| colSpan | number | The number of columns, which should be used by the panel. This must be a number between 1 and 12. The default value is 12. |
No |
| rowSpan | number | The number of rows, which should be used by the panel. This must be a number between 1 and 12. The default value is 1. |
No |
| plugin | Plugin | The plugin which should be displayed in the panel. | Yes |
Example
The following dashboard can be used to display the resource usage of the containers in a pod. It can be used within an application and can be customized via the namespace and pod placeholders.
---
apiVersion: kobs.io/v1
kind: Dashboard
metadata:
name: resource-usage
namespace: kobs
spec:
description: Resources Usage of Pods
placeholders:
- name: namespace
description: Namespace for the Pods
- name: pod
description: Pod selector
variables:
- name: var_pod
label: Pod
plugin:
name: prometheus
type: prometheus
options:
type: labelValues
label: pod
query: container_cpu_usage_seconds_total{namespace="{% .namespace %}", image!="", pod=~"{% .pod %}", container!="POD", container!=""}
allowAll: false
rows:
- size: 1
panels:
- title: CPU Usage
colSpan: 4
plugin:
name: prometheus
type: prometheus
options:
type: sparkline
unit: Cores
queries:
- query: sum(rate(container_cpu_usage_seconds_total{namespace="{% .namespace %}", image!="", pod=~"{% .var_pod %}", container!="POD", container!=""}[2m]))
- title: Memory Usage
colSpan: 4
plugin:
name: prometheus
type: prometheus
options:
type: sparkline
unit: MiB
queries:
- query: sum(container_memory_working_set_bytes{namespace="{% .namespace %}", pod=~"{% .var_pod %}", container!="POD", container!=""}) / 1024 / 1024
- title: Restarts
colSpan: 4
plugin:
name: prometheus
type: prometheus
options:
type: sparkline
queries:
- query: kube_pod_container_status_restarts_total{namespace="{% .namespace %}", pod=~"{% .var_pod %}"}
- size: 3
panels:
- title: CPU Usage
colSpan: 6
plugin:
name: prometheus
type: prometheus
options:
type: line
unit: Cores
legend: table
queries:
- label: "Usage: {% .container %}"
query: sum(rate(container_cpu_usage_seconds_total{namespace="{% .namespace %}", image!="", pod=~"{% .var_pod %}", container!="POD", container!=""}[2m])) by (container)
- label: "Request: {% .container %}"
query: sum(kube_pod_container_resource_requests{namespace="{% .namespace %}", resource="cpu", pod=~"{% .var_pod %}", container!="POD", container!=""}) by (container)
- label: "Limits: {% .container %}"
query: sum(kube_pod_container_resource_limits{namespace="{% .namespace %}", resource="cpu", pod=~"{% .var_pod %}", container!="POD", container!=""}) by (container)
- title: Memory Usage
colSpan: 6
plugin:
name: prometheus
type: prometheus
options:
type: line
unit: MiB
legend: table
queries:
- label: "Usage: {% .container %}"
query: sum(container_memory_working_set_bytes{namespace="{% .namespace %}", pod=~"{% .var_pod %}", container!="POD", container!=""}) by (container) / 1024 / 1024
- label: "Request: {% .container %}"
query: sum(kube_pod_container_resource_requests{namespace="{% .namespace %}", resource="memory", pod=~"{% .var_pod %}", container!="POD", container!=""}) by (container) / 1024 / 1024
- label: "Limits: {% .container %}"
query: sum(kube_pod_container_resource_limits{namespace="{% .namespace %}", resource="memory", pod=~"{% .var_pod %}", container!="POD", container!=""}) by (container) / 1024 / 1024
- title: Network
size: 3
panels:
- title: Bandwidth
colSpan: 12
plugin:
name: prometheus
type: prometheus
options:
type: area
unit: bytes/s
queries:
- label: Received
query: sum(irate(container_network_receive_bytes_total{namespace="{% .namespace %}", pod="{% .var_pod %}"}[2m])) by (pod)
- label: Transmitted
query: -sum(irate(container_network_transmit_bytes_total{namespace="{% .namespace %}", pod="{% .var_pod %}"}[2m])) by (pod)
- title: Rate of Packets
colSpan: 6
plugin:
name: prometheus
type: prometheus
options:
type: area
unit: bytes/s
queries:
- label: Received
query: sum(irate(container_network_receive_packets_total{namespace=~"{% .namespace %}", pod=~"{% .var_pod %}"}[2m])) by (pod)
- label: Transmitted
query: -sum(irate(container_network_transmit_packets_total{namespace=~"{% .namespace %}", pod=~"{% .var_pod %}"}[2m])) by (pod)
- title: Rate of Packets Dropped
colSpan: 6
plugin:
name: prometheus
type: prometheus
options:
type: area
unit: bytes/s
queries:
- label: Received
query: sum(irate(container_network_receive_packets_dropped_total{namespace=~"{% .namespace %}", pod=~"{% .var_pod %}"}[2m])) by (pod)
- label: Transmitted
query: -sum(irate(container_network_transmit_packets_dropped_total{namespace=~"{% .namespace %}", pod=~"{% .var_pod %}"}[2m])) by (pod)
- title: "Resource Usage for all Pods"
panels:
- title: Table
plugin:
name: prometheus
type: prometheus
options:
type: table
queries:
- label: "{% .pod %}"
query: sum(rate(container_cpu_usage_seconds_total{namespace="{% .namespace %}", image!="", pod=~"{% .pod %}", container!="POD", container!=""}[2m])) by (pod)
- label: "{% .pod %}"
query: sum(kube_pod_container_resource_requests{namespace="{% .namespace %}", resource="cpu", pod=~"{% .pod %}", container!="POD", container!=""}) by (pod)
- label: "{% .pod %}"
query: sum(kube_pod_container_resource_limits{namespace="{% .namespace %}", resource="cpu", pod=~"{% .pod %}", container!="POD", container!=""}) by (pod)
- label: "{% .pod %}"
query: sum(container_memory_working_set_bytes{namespace="{% .namespace %}", pod=~"{% .pod %}", container!="POD", container!=""}) by (pod) / 1024 / 1024
- label: "{% .pod %}"
query: sum(kube_pod_container_resource_requests{namespace="{% .namespace %}", resource="memory", pod=~"{% .pod %}", container!="POD", container!=""}) by (pod) / 1024 / 1024
- label: "{% .pod %}"
query: sum(kube_pod_container_resource_limits{namespace="{% .namespace %}", resource="memory", pod=~"{% .pod %}", container!="POD", container!=""}) by (pod) / 1024 / 1024
columns:
- name: pod
title: Pod
- name: value-1
title: CPU Usage
unit: Cores
- name: value-2
title: CPU Requests
unit: Cores
- name: value-3
title: CPU Limits
unit: Cores
- name: value-4
title: Memory Usage
unit: MiB
- name: value-5
title: Memory Requests
unit: MiB
- name: value-6
title: Memory Limits
unit: MiB
