Adding OSM Monitoring dashboards to Grafana charm 35/10235/1
authorsousaedu <eduardo.sousa@canonical.com>
Thu, 28 Jan 2021 12:21:54 +0000 (13:21 +0100)
committersousaedu <eduardo.sousa@canonical.com>
Thu, 28 Jan 2021 12:21:54 +0000 (13:21 +0100)
Change-Id: Idb9b552d799181623aa48110a083439d808fd0b3
Signed-off-by: sousaedu <eduardo.sousa@canonical.com>
installers/charm/grafana/config.yaml
installers/charm/grafana/files/default_dashboards.yaml [new file with mode: 0644]
installers/charm/grafana/files/default_datasources.yaml [new file with mode: 0644]
installers/charm/grafana/files/kafka_exporter_dashboard.yaml [new file with mode: 0644]
installers/charm/grafana/files/mongodb_exporter_dashboard.yaml [new file with mode: 0644]
installers/charm/grafana/files/mysql_exporter_dashboard.yaml [new file with mode: 0644]
installers/charm/grafana/files/nodes_exporter_dashboard.yaml [new file with mode: 0644]
installers/charm/grafana/files/summary_dashboard.yaml [new file with mode: 0644]
installers/charm/grafana/src/pod_spec.py

index 4131949..37509dc 100644 (file)
@@ -44,3 +44,7 @@ options:
     type: string
     description: Ingress URL
     default: ""
+  osm_dashboards:
+    type: boolean
+    description: Enable OSM System monitoring dashboards
+    default: false
diff --git a/installers/charm/grafana/files/default_dashboards.yaml b/installers/charm/grafana/files/default_dashboards.yaml
new file mode 100644 (file)
index 0000000..a56ea5f
--- /dev/null
@@ -0,0 +1,30 @@
+# Copyright 2021 Canonical Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact: legal@canonical.com
+#
+# To get in touch with the maintainers, please contact:
+# osm-charmers@lists.launchpad.net
+##
+
+---
+apiVersion: 1
+providers:
+  - name: 'osm'
+    orgId: 1
+    folder: ''
+    type: file
+    options:
+      path: /etc/grafana/provisioning/dashboards/
diff --git a/installers/charm/grafana/files/default_datasources.yaml b/installers/charm/grafana/files/default_datasources.yaml
new file mode 100644 (file)
index 0000000..9dc0b8f
--- /dev/null
@@ -0,0 +1,31 @@
+# Copyright 2021 Canonical Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact: legal@canonical.com
+#
+# To get in touch with the maintainers, please contact:
+# osm-charmers@lists.launchpad.net
+##
+
+---
+datasources:
+  - access: proxy
+    editable: true
+    is_default: true
+    name: osm_prometheus
+    orgId: 1
+    type: prometheus
+    version: 1
+    url: http://$prometheus_host:$prometheus_port
diff --git a/installers/charm/grafana/files/kafka_exporter_dashboard.yaml b/installers/charm/grafana/files/kafka_exporter_dashboard.yaml
new file mode 100644 (file)
index 0000000..afcb7e3
--- /dev/null
@@ -0,0 +1,543 @@
+# Copyright 2021 Canonical Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact: legal@canonical.com
+#
+# To get in touch with the maintainers, please contact:
+# osm-charmers@lists.launchpad.net
+##
+
+---
+annotations:
+  list:
+    - builtIn: 1
+      datasource: '-- Grafana --'
+      enable: true
+      hide: true
+      iconColor: 'rgba(0, 211, 255, 1)'
+      name: Annotations & Alerts
+      type: dashboard
+description: Kafka resource usage and throughput
+editable: true
+gnetId: 7589
+graphTooltip: 0
+id: 10
+iteration: 1578848023483
+links: []
+panels:
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 0
+    fillGradient: 0
+    gridPos:
+      h: 10
+      w: 10
+      x: 0
+      'y': 0
+    id: 14
+    legend:
+      alignAsTable: true
+      avg: false
+      current: true
+      max: true
+      min: false
+      rightSide: false
+      show: true
+      sideWidth: 480
+      sort: max
+      sortDesc: true
+      total: false
+      values: true
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: connected
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: >-
+          sum(kafka_topic_partition_current_offset -
+          kafka_topic_partition_oldest_offset{instance="$instance",
+          topic=~"$topic"}) by (topic)
+        format: time_series
+        intervalFactor: 1
+        legendFormat: '{{topic}}'
+        refId: B
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Messages stored per topic
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: '0'
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 0
+    fillGradient: 0
+    gridPos:
+      h: 10
+      w: 10
+      x: 10
+      'y': 0
+    id: 12
+    legend:
+      alignAsTable: true
+      avg: false
+      current: true
+      max: true
+      min: false
+      rightSide: false
+      show: true
+      sideWidth: 480
+      sort: max
+      sortDesc: true
+      total: false
+      values: true
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: connected
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: >-
+          sum(kafka_consumergroup_lag{instance="$instance",topic=~"$topic"}) by
+          (consumergroup, topic)
+        format: time_series
+        instant: false
+        interval: ''
+        intervalFactor: 1
+        legendFormat: ' {{topic}} ({{consumergroup}})'
+        refId: A
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Lag by  Consumer Group
+    tooltip:
+      shared: true
+      sort: 2
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: short
+        label: ''
+        logBase: 1
+        max: null
+        min: '0'
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 0
+    fillGradient: 0
+    gridPos:
+      h: 10
+      w: 10
+      x: 0
+      'y': 10
+    id: 16
+    legend:
+      alignAsTable: true
+      avg: false
+      current: true
+      max: true
+      min: false
+      rightSide: false
+      show: true
+      sideWidth: 480
+      total: false
+      values: true
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: connected
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: >-
+          sum(delta(kafka_topic_partition_current_offset{instance=~'$instance',
+          topic=~"$topic"}[5m])/5) by (topic)
+        format: time_series
+        intervalFactor: 1
+        legendFormat: '{{topic}}'
+        refId: A
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Messages produced per minute
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 0
+    fillGradient: 0
+    gridPos:
+      h: 10
+      w: 10
+      x: 10
+      'y': 10
+    id: 18
+    legend:
+      alignAsTable: true
+      avg: false
+      current: true
+      max: true
+      min: false
+      rightSide: false
+      show: true
+      sideWidth: 480
+      sort: current
+      sortDesc: true
+      total: false
+      values: true
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: connected
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: >-
+          sum(delta(kafka_consumergroup_current_offset{instance=~'$instance',topic=~"$topic"}[5m])/5)
+          by (consumergroup, topic)
+        format: time_series
+        intervalFactor: 1
+        legendFormat: ' {{topic}} ({{consumergroup}})'
+        refId: A
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Messages consumed per minute
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - aliasColors: {}
+    bars: true
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 1
+    fillGradient: 0
+    gridPos:
+      h: 7
+      w: 20
+      x: 0
+      'y': 20
+    id: 8
+    legend:
+      alignAsTable: true
+      avg: false
+      current: true
+      max: false
+      min: false
+      rightSide: true
+      show: true
+      sideWidth: 420
+      total: false
+      values: true
+    lines: false
+    linewidth: 1
+    links: []
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: >-
+          sum by(topic)
+          (kafka_topic_partitions{instance="$instance",topic=~"$topic"})
+        format: time_series
+        intervalFactor: 1
+        legendFormat: '{{topic}}'
+        refId: A
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Partitions per Topic
+    tooltip:
+      shared: false
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: series
+      name: null
+      show: false
+      values:
+        - current
+    yaxes:
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+refresh: 5s
+schemaVersion: 19
+style: dark
+tags: []
+templating:
+  list:
+    - allValue: null
+      current:
+        text: osm-kafka-exporter-service
+        value: osm-kafka-exporter-service
+      datasource: Prometheus
+      definition: ''
+      hide: 0
+      includeAll: false
+      label: Job
+      multi: false
+      name: job
+      options: []
+      query: 'label_values(kafka_consumergroup_current_offset, job)'
+      refresh: 1
+      regex: ''
+      skipUrlSync: false
+      sort: 0
+      tagValuesQuery: ''
+      tags: []
+      tagsQuery: ''
+      type: query
+      useTags: false
+    - allValue: null
+      datasource: Prometheus
+      definition: ''
+      hide: 0
+      includeAll: false
+      label: Instance
+      multi: false
+      name: instance
+      options: []
+      query: >-
+        'label_values(kafka_consumergroup_current_offset{job=~"$job"},'
+        'instance)'
+      refresh: 1
+      regex: ''
+      skipUrlSync: false
+      sort: 0
+      tagValuesQuery: ''
+      tags: []
+      tagsQuery: ''
+      type: query
+      useTags: false
+    - allValue: null
+      current:
+        tags: []
+        text: All
+        value:
+          - $__all
+      datasource: Prometheus
+      definition: ''
+      hide: 0
+      includeAll: true
+      label: Topic
+      multi: true
+      name: topic
+      options: []
+      query: >-
+        label_values(kafka_topic_partition_current_offset{instance='$instance',topic!='__consumer_offsets',topic!='--kafka'},
+        topic)
+      refresh: 1
+      regex: ''
+      skipUrlSync: false
+      sort: 1
+      tagValuesQuery: ''
+      tags: []
+      tagsQuery: topic
+      type: query
+      useTags: false
+time:
+  from: now-1h
+  to: now
+timepicker:
+  refresh_intervals:
+    - 5s
+    - 10s
+    - 30s
+    - 1m
+    - 5m
+    - 15m
+    - 30m
+    - 1h
+    - 2h
+    - 1d
+  time_options:
+    - 5m
+    - 15m
+    - 1h
+    - 6h
+    - 12h
+    - 24h
+    - 2d
+    - 7d
+    - 30d
+timezone: browser
+title: Kafka
+uid: jwPKIsniz
+version: 2
diff --git a/installers/charm/grafana/files/mongodb_exporter_dashboard.yaml b/installers/charm/grafana/files/mongodb_exporter_dashboard.yaml
new file mode 100644 (file)
index 0000000..b2489f4
--- /dev/null
@@ -0,0 +1,691 @@
+# Copyright 2021 Canonical Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact: legal@canonical.com
+#
+# To get in touch with the maintainers, please contact:
+# osm-charmers@lists.launchpad.net
+##
+
+---
+annotations:
+  list:
+    - builtIn: 1
+      datasource: '-- Grafana --'
+      enable: true
+      hide: true
+      iconColor: 'rgba(0, 211, 255, 1)'
+      name: Annotations & Alerts
+      type: dashboard
+description: MongoDB Prometheus Exporter Dashboard.
+editable: true
+gnetId: 2583
+graphTooltip: 1
+id: 9
+iteration: 1577555358996
+links: []
+panels:
+  - collapsed: false
+    gridPos:
+      h: 1
+      w: 24
+      x: 0
+      'y': 0
+    id: 22
+    panels: []
+    repeat: env
+    title: Health
+    type: row
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: true
+    colors:
+      - 'rgba(245, 54, 54, 0.9)'
+      - 'rgba(237, 129, 40, 0.89)'
+      - 'rgba(50, 172, 45, 0.97)'
+    datasource: Prometheus
+    decimals: null
+    format: s
+    gauge:
+      maxValue: 100
+      minValue: 0
+      show: false
+      thresholdLabels: false
+      thresholdMarkers: true
+    gridPos:
+      h: 4
+      w: 12
+      x: 0
+      'y': 1
+    id: 10
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+    tableColumn: ''
+    targets:
+      - expr: 'mongodb_instance_uptime_seconds{instance=~"$instance"}'
+        format: time_series
+        intervalFactor: 2
+        legendFormat: ''
+        refId: A
+        step: 1800
+    thresholds: '0,360'
+    title: Uptime
+    type: singlestat
+    valueFontSize: 80%
+    valueMaps:
+      - op: '='
+        text: N/A
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - 'rgba(245, 54, 54, 0.9)'
+      - 'rgba(237, 129, 40, 0.89)'
+      - 'rgba(50, 172, 45, 0.97)'
+    datasource: Prometheus
+    format: none
+    gauge:
+      maxValue: 100
+      minValue: 0
+      show: false
+      thresholdLabels: false
+      thresholdMarkers: true
+    gridPos:
+      h: 4
+      w: 12
+      x: 12
+      'y': 1
+    id: 1
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: true
+      lineColor: 'rgb(31, 120, 193)'
+      show: true
+    tableColumn: ''
+    targets:
+      - expr: 'mongodb_connections{instance=~"$instance",state="current"}'
+        format: time_series
+        intervalFactor: 2
+        legendFormat: ''
+        metric: mongodb_connections
+        refId: A
+        step: 1800
+    thresholds: ''
+    title: Open Connections
+    type: singlestat
+    valueFontSize: 80%
+    valueMaps:
+      - op: '='
+        text: N/A
+        value: 'null'
+    valueName: avg
+  - collapsed: false
+    gridPos:
+      h: 1
+      w: 24
+      x: 0
+      'y': 5
+    id: 20
+    panels: []
+    repeat: env
+    title: Operations
+    type: row
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 1
+    fillGradient: 0
+    gridPos:
+      h: 6
+      w: 10
+      x: 0
+      'y': 6
+    id: 7
+    legend:
+      avg: false
+      current: false
+      max: false
+      min: false
+      show: true
+      total: false
+      values: false
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: >-
+          'rate(mongodb_op_counters_total{instance=~"$instance"}[$interval])'
+        format: time_series
+        interval: ''
+        intervalFactor: 2
+        legendFormat: '{{type}}'
+        refId: A
+        step: 240
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Query Operations
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: ops
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 1
+    fillGradient: 0
+    gridPos:
+      h: 6
+      w: 8
+      x: 10
+      'y': 6
+    id: 9
+    legend:
+      avg: false
+      current: false
+      max: false
+      min: false
+      show: true
+      total: false
+      values: false
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides:
+      - alias: returned
+        yaxis: 1
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: >-
+          rate(mongodb_mongod_metrics_document_total{instance=~"$instance"}[$interval])
+        format: time_series
+        interval: ''
+        intervalFactor: 2
+        legendFormat: '{{state}}'
+        refId: A
+        step: 240
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Document Operations
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 1
+    fillGradient: 0
+    gridPos:
+      h: 6
+      w: 6
+      x: 18
+      'y': 6
+    id: 8
+    legend:
+      avg: false
+      current: false
+      max: false
+      min: false
+      show: true
+      total: false
+      values: false
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: >-
+          rate(mongodb_mongod_metrics_query_executor_total{instance=~"$instance"}[$interval])
+        format: time_series
+        interval: ''
+        intervalFactor: 2
+        legendFormat: '{{state}}'
+        refId: A
+        step: 600
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Document Query Executor
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - collapsed: false
+    gridPos:
+      h: 1
+      w: 24
+      x: 0
+      'y': 12
+    id: 23
+    panels: []
+    repeat: null
+    title: Resources
+    type: row
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 1
+    fillGradient: 0
+    gridPos:
+      h: 6
+      w: 12
+      x: 0
+      'y': 13
+    id: 4
+    legend:
+      alignAsTable: false
+      avg: false
+      current: true
+      hideEmpty: false
+      hideZero: false
+      max: false
+      min: false
+      rightSide: false
+      show: true
+      total: false
+      values: true
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: 'mongodb_memory{instance=~"$instance",type=~"resident|virtual"}'
+        format: time_series
+        interval: ''
+        intervalFactor: 2
+        legendFormat: '{{type}}'
+        refId: A
+        step: 240
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Memory
+    tooltip:
+      shared: false
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values:
+        - total
+    yaxes:
+      - format: decmbytes
+        label: MB
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 1
+    fillGradient: 0
+    gridPos:
+      h: 6
+      w: 12
+      x: 12
+      'y': 13
+    id: 5
+    legend:
+      avg: false
+      current: false
+      max: false
+      min: false
+      show: true
+      total: false
+      values: false
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: >-
+          'rate(mongodb_network_bytes_total{instance=~"$instance"}[$interval])'
+        format: time_series
+        interval: ''
+        intervalFactor: 2
+        legendFormat: '{{state}}'
+        metric: mongodb_metrics_operation_total
+        refId: A
+        step: 240
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Network I/O
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: decbytes
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+refresh: 5s
+schemaVersion: 19
+style: dark
+tags: []
+templating:
+  list:
+    - allValue: null
+      current:
+        text: All
+        value: $__all
+      datasource: Prometheus
+      definition: ''
+      hide: 0
+      includeAll: true
+      label: instance
+      multi: true
+      name: instance
+      options: []
+      query: 'label_values(mongodb_connections, instance)'
+      refresh: 1
+      regex: ''
+      skipUrlSync: false
+      sort: 1
+      tagValuesQuery: /.*-(.*?)-.*/
+      tags: []
+      tagsQuery: 'label_values(mongodb_connections, instance)'
+      type: query
+      useTags: false
+    - auto: true
+      auto_count: 30
+      auto_min: 10s
+      current:
+        text: auto
+        value: $__auto_interval_interval
+      hide: 0
+      label: null
+      name: interval
+      options:
+        - selected: true
+          text: auto
+          value: $__auto_interval_interval
+        - selected: false
+          text: 1m
+          value: 1m
+        - selected: false
+          text: 10m
+          value: 10m
+        - selected: false
+          text: 30m
+          value: 30m
+        - selected: false
+          text: 1h
+          value: 1h
+        - selected: false
+          text: 6h
+          value: 6h
+        - selected: false
+          text: 12h
+          value: 12h
+        - selected: false
+          text: 1d
+          value: 1d
+        - selected: false
+          text: 7d
+          value: 7d
+        - selected: false
+          text: 14d
+          value: 14d
+        - selected: false
+          text: 30d
+          value: 30d
+      query: '1m,10m,30m,1h,6h,12h,1d,7d,14d,30d'
+      refresh: 2
+      skipUrlSync: false
+      type: interval
+time:
+  from: now/d
+  to: now
+timepicker:
+  refresh_intervals:
+    - 5s
+    - 10s
+    - 30s
+    - 1m
+    - 5m
+    - 15m
+    - 30m
+    - 1h
+    - 2h
+    - 1d
+  time_options:
+    - 5m
+    - 15m
+    - 1h
+    - 6h
+    - 12h
+    - 24h
+    - 2d
+    - 7d
+    - 30d
+timezone: browser
+title: MongoDB
+uid: HEK4NbtZk
+version: 2
diff --git a/installers/charm/grafana/files/mysql_exporter_dashboard.yaml b/installers/charm/grafana/files/mysql_exporter_dashboard.yaml
new file mode 100644 (file)
index 0000000..a1e3ded
--- /dev/null
@@ -0,0 +1,949 @@
+# Copyright 2021 Canonical Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact: legal@canonical.com
+#
+# To get in touch with the maintainers, please contact:
+# osm-charmers@lists.launchpad.net
+##
+
+---
+annotations:
+  list:
+    - builtIn: 1
+      datasource: '-- Grafana --'
+      enable: true
+      hide: true
+      iconColor: 'rgba(0, 211, 255, 1)'
+      name: Annotations & Alerts
+      type: dashboard
+description: Mysql dashboard
+editable: true
+gnetId: 6239
+graphTooltip: 0
+id: 34
+iteration: 1569307668513
+links: []
+panels:
+  - collapsed: false
+    gridPos:
+      h: 1
+      w: 24
+      x: 0
+      'y': 0
+    id: 17
+    panels: []
+    title: Global status
+    type: row
+  - cacheTimeout: null
+    colorBackground: true
+    colorValue: false
+    colors:
+      - '#bf1b00'
+      - '#508642'
+      - '#ef843c'
+    datasource: Prometheus
+    format: none
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: false
+      thresholdLabels: false
+      thresholdMarkers: true
+    gridPos:
+      h: 7
+      w: 6
+      x: 0
+      'y': 1
+    id: 11
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: true
+      lineColor: 'rgb(31, 120, 193)'
+      show: true
+    tableColumn: ''
+    targets:
+      - expr: 'mysql_up{release="$release"}'
+        format: time_series
+        intervalFactor: 1
+        refId: A
+    thresholds: '1,2'
+    title: Instance Up
+    type: singlestat
+    valueFontSize: 80%
+    valueMaps:
+      - op: '='
+        text: N/A
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: true
+    colorValue: false
+    colors:
+      - '#d44a3a'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#508642'
+    datasource: Prometheus
+    format: s
+    gauge:
+      maxValue: 100
+      minValue: 0
+      show: false
+      thresholdLabels: false
+      thresholdMarkers: true
+    gridPos:
+      h: 7
+      w: 6
+      x: 6
+      'y': 1
+    id: 15
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: true
+    tableColumn: ''
+    targets:
+      - expr: 'mysql_global_status_uptime{release="$release"}'
+        format: time_series
+        intervalFactor: 1
+        refId: A
+    thresholds: '25200,32400'
+    title: Uptime
+    type: singlestat
+    valueFontSize: 80%
+    valueMaps:
+      - op: '='
+        text: N/A
+        value: 'null'
+    valueName: current
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 1
+    fillGradient: 0
+    gridPos:
+      h: 7
+      w: 12
+      x: 12
+      'y': 1
+    id: 29
+    legend:
+      avg: false
+      current: false
+      max: false
+      min: false
+      show: false
+      total: false
+      values: false
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: 'mysql_global_status_max_used_connections{release="$release"}'
+        format: time_series
+        intervalFactor: 1
+        legendFormat: current
+        refId: A
+      - expr: 'mysql_global_variables_max_connections{release="$release"}'
+        format: time_series
+        intervalFactor: 1
+        legendFormat: Max
+        refId: B
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Mysql Connections
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - collapsed: false
+    gridPos:
+      h: 1
+      w: 24
+      x: 0
+      'y': 8
+    id: 19
+    panels: []
+    title: I/O
+    type: row
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 1
+    fillGradient: 0
+    gridPos:
+      h: 9
+      w: 12
+      x: 0
+      'y': 9
+    id: 5
+    legend:
+      avg: false
+      current: false
+      max: false
+      min: false
+      show: true
+      total: false
+      values: false
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides:
+      - alias: write
+        transform: negative-Y
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: >-
+          'irate(mysql_global_status_innodb_data_reads{release="$release"}[10m])'
+        format: time_series
+        intervalFactor: 1
+        legendFormat: reads
+        refId: A
+      - expr: >-
+          'irate(mysql_global_status_innodb_data_writes{release="$release"}[10m])'
+        format: time_series
+        intervalFactor: 1
+        legendFormat: write
+        refId: B
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: mysql  disk reads vs writes
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 1
+    fillGradient: 0
+    gridPos:
+      h: 9
+      w: 12
+      x: 12
+      'y': 9
+    id: 9
+    legend:
+      avg: false
+      current: false
+      max: false
+      min: false
+      show: false
+      total: false
+      values: false
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides:
+      - alias: /sent/
+        transform: negative-Y
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: >-
+          'irate(mysql_global_status_bytes_received{release="$release"}[5m])'
+        format: time_series
+        intervalFactor: 1
+        legendFormat: received
+        refId: A
+      - expr: 'irate(mysql_global_status_bytes_sent{release="$release"}[5m])'
+        format: time_series
+        intervalFactor: 1
+        legendFormat: sent
+        refId: B
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: mysql network received vs sent
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 1
+    fillGradient: 0
+    gridPos:
+      h: 7
+      w: 12
+      x: 0
+      'y': 18
+    id: 2
+    legend:
+      avg: false
+      current: false
+      max: false
+      min: false
+      show: false
+      total: false
+      values: false
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: >-
+          'irate(mysql_global_status_commands_total{release="$release"}[5m]) >'
+          '0'
+        format: time_series
+        intervalFactor: 1
+        legendFormat: '{{ command }} - {{ release }}'
+        refId: A
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Query rates
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 1
+    fillGradient: 0
+    gridPos:
+      h: 7
+      w: 12
+      x: 12
+      'y': 18
+    id: 25
+    legend:
+      avg: false
+      current: false
+      max: false
+      min: false
+      show: false
+      total: false
+      values: false
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: 'mysql_global_status_threads_running{release="$release"} '
+        format: time_series
+        intervalFactor: 1
+        refId: A
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Running Threads
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - decimals: null
+        format: short
+        label: null
+        logBase: 1
+        max: '15'
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - collapsed: false
+    gridPos:
+      h: 1
+      w: 24
+      x: 0
+      'y': 25
+    id: 21
+    panels: []
+    title: Errors
+    type: row
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    description: >-
+      The number of connections that were aborted because the client died
+      without closing the connection properly.
+    fill: 1
+    fillGradient: 0
+    gridPos:
+      h: 9
+      w: 12
+      x: 0
+      'y': 26
+    id: 13
+    legend:
+      avg: false
+      current: false
+      max: false
+      min: false
+      show: false
+      total: false
+      values: false
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: 'mysql_global_status_aborted_clients{release="$release"}'
+        format: time_series
+        intervalFactor: 1
+        refId: B
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Aborted clients
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    description: The number of failed attempts to connect to the MySQL server.
+    fill: 1
+    fillGradient: 0
+    gridPos:
+      h: 9
+      w: 12
+      x: 12
+      'y': 26
+    id: 4
+    legend:
+      avg: false
+      current: false
+      max: false
+      min: false
+      show: false
+      total: false
+      values: false
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: 'mysql_global_status_aborted_connects{release="$release"}'
+        format: time_series
+        intervalFactor: 1
+        legendFormat: ''
+        refId: A
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: mysql aborted Connects
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - collapsed: false
+    gridPos:
+      h: 1
+      w: 24
+      x: 0
+      'y': 35
+    id: 23
+    panels: []
+    title: Disk usage
+    type: row
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 1
+    fillGradient: 0
+    gridPos:
+      h: 9
+      w: 12
+      x: 0
+      'y': 36
+    id: 27
+    legend:
+      avg: false
+      current: false
+      max: false
+      min: false
+      show: true
+      total: false
+      values: false
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: >-
+          sum(mysql_info_schema_table_size{component="data_length",release="$release"})
+        format: time_series
+        intervalFactor: 1
+        legendFormat: Tables
+        refId: A
+      - expr: >-
+          sum(mysql_info_schema_table_size{component="index_length",release="$release"})
+        format: time_series
+        intervalFactor: 1
+        legendFormat: Indexes
+        refId: B
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Disk usage tables / indexes
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: decbytes
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    datasource: Prometheus
+    fill: 1
+    fillGradient: 0
+    gridPos:
+      h: 9
+      w: 12
+      x: 12
+      'y': 36
+    id: 7
+    legend:
+      avg: false
+      current: false
+      max: false
+      min: false
+      show: false
+      total: false
+      values: false
+    lines: true
+    linewidth: 1
+    links: []
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 5
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: false
+    steppedLine: false
+    targets:
+      - expr: 'sum(mysql_info_schema_table_rows{release="$release"})'
+        format: time_series
+        intervalFactor: 1
+        refId: A
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Sum of all rows
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - decimals: null
+        format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+schemaVersion: 19
+style: dark
+tags: []
+templating:
+  list:
+    - allValue: null
+      current:
+        isNone: true
+        text: None
+        value: ''
+      datasource: Prometheus
+      definition: ''
+      hide: 0
+      includeAll: false
+      label: null
+      multi: false
+      name: release
+      options: []
+      query: 'label_values(mysql_up,release)'
+      refresh: 1
+      regex: ''
+      skipUrlSync: false
+      sort: 0
+      tagValuesQuery: ''
+      tags: []
+      tagsQuery: ''
+      type: query
+      useTags: false
+time:
+  from: now-1h
+  to: now
+timepicker:
+  refresh_intervals:
+    - 5s
+    - 10s
+    - 30s
+    - 1m
+    - 5m
+    - 15m
+    - 30m
+    - 1h
+    - 2h
+    - 1d
+  time_options:
+    - 5m
+    - 15m
+    - 1h
+    - 6h
+    - 12h
+    - 24h
+    - 2d
+    - 7d
+    - 30d
+timezone: ''
+title: Mysql
+uid: 6-kPlS7ik
+version: 1
diff --git a/installers/charm/grafana/files/nodes_exporter_dashboard.yaml b/installers/charm/grafana/files/nodes_exporter_dashboard.yaml
new file mode 100644 (file)
index 0000000..51fcff5
--- /dev/null
@@ -0,0 +1,1425 @@
+# Copyright 2021 Canonical Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact: legal@canonical.com
+#
+# To get in touch with the maintainers, please contact:
+# osm-charmers@lists.launchpad.net
+##
+
+---
+annotations:
+  list:
+    - builtIn: 1
+      datasource: '-- Grafana --'
+      enable: true
+      hide: true
+      iconColor: 'rgba(0, 211, 255, 1)'
+      name: Annotations & Alerts
+      type: dashboard
+description: Physical nodes dashboard
+editable: true
+gnetId: 11074
+graphTooltip: 0
+id: 12
+iteration: 1577553366915
+links: []
+panels:
+  - collapsed: true
+    gridPos:
+      h: 1
+      w: 24
+      x: 0
+      'y': 0
+    id: 179
+    panels:
+      - cacheTimeout: null
+        colorBackground: false
+        colorPostfix: false
+        colorPrefix: false
+        colorValue: true
+        colors:
+          - 'rgba(245, 54, 54, 0.9)'
+          - 'rgba(237, 129, 40, 0.89)'
+          - 'rgba(50, 172, 45, 0.97)'
+        datasource: Prometheus
+        decimals: 1
+        description: ''
+        format: s
+        gauge:
+          maxValue: 100
+          minValue: 0
+          show: false
+          thresholdLabels: false
+          thresholdMarkers: true
+        gridPos:
+          h: 6
+          w: 2
+          x: 0
+          'y': 1
+        hideTimeOverride: true
+        id: 15
+        interval: null
+        links: []
+        mappingType: 1
+        mappingTypes:
+          - name: value to text
+            value: 1
+          - name: range to text
+            value: 2
+        maxDataPoints: 100
+        nullPointMode: 'null'
+        nullText: null
+        options: {}
+        pluginVersion: 6.4.2
+        postfix: ''
+        postfixFontSize: 50%
+        prefix: ''
+        prefixFontSize: 50%
+        rangeMaps:
+          - from: 'null'
+            text: N/A
+            to: 'null'
+        sparkline:
+          fillColor: 'rgba(31, 118, 189, 0.18)'
+          full: false
+          lineColor: 'rgb(31, 120, 193)'
+          show: false
+        tableColumn: ''
+        targets:
+          - expr: 'sum(time() - node_boot_time_seconds{instance=~"$node"})'
+            format: time_series
+            hide: false
+            instant: true
+            intervalFactor: 1
+            refId: A
+            step: 40
+        thresholds: '1,2'
+        title: System Uptime
+        type: singlestat
+        valueFontSize: 70%
+        valueMaps:
+          - op: '='
+            text: N/A
+            value: 'null'
+        valueName: current
+      - cacheTimeout: null
+        colorBackground: false
+        colorPostfix: false
+        colorValue: true
+        colors:
+          - 'rgba(245, 54, 54, 0.9)'
+          - 'rgba(237, 129, 40, 0.89)'
+          - 'rgba(50, 172, 45, 0.97)'
+        datasource: Prometheus
+        description: ''
+        format: short
+        gauge:
+          maxValue: 100
+          minValue: 0
+          show: false
+          thresholdLabels: false
+          thresholdMarkers: true
+        gridPos:
+          h: 6
+          w: 2
+          x: 2
+          'y': 1
+        id: 14
+        interval: null
+        links: []
+        mappingType: 1
+        mappingTypes:
+          - name: value to text
+            value: 1
+          - name: range to text
+            value: 2
+        maxDataPoints: 100
+        maxPerRow: 6
+        nullPointMode: 'null'
+        nullText: null
+        options: {}
+        postfix: ''
+        postfixFontSize: 50%
+        prefix: ''
+        prefixFontSize: 50%
+        rangeMaps:
+          - from: 'null'
+            text: N/A
+            to: 'null'
+        sparkline:
+          fillColor: 'rgba(31, 118, 189, 0.18)'
+          full: false
+          lineColor: 'rgb(31, 120, 193)'
+          show: false
+        tableColumn: ''
+        targets:
+          - expr: >-
+              sum(count(node_cpu_seconds_total{instance=~"$node",
+              mode='system'}) by (cpu))
+            format: time_series
+            instant: true
+            intervalFactor: 1
+            legendFormat: ''
+            refId: A
+            step: 20
+        thresholds: '1,2'
+        title: CPU Cores
+        type: singlestat
+        valueFontSize: 70%
+        valueMaps:
+          - op: '='
+            text: N/A
+            value: 'null'
+        valueName: current
+      - cacheTimeout: null
+        colorBackground: false
+        colorValue: true
+        colors:
+          - 'rgba(245, 54, 54, 0.9)'
+          - 'rgba(237, 129, 40, 0.89)'
+          - 'rgba(50, 172, 45, 0.97)'
+        datasource: Prometheus
+        decimals: 2
+        description: ''
+        format: bytes
+        gauge:
+          maxValue: 100
+          minValue: 0
+          show: false
+          thresholdLabels: false
+          thresholdMarkers: true
+        gridPos:
+          h: 6
+          w: 2
+          x: 4
+          'y': 1
+        id: 75
+        interval: null
+        links: []
+        mappingType: 1
+        mappingTypes:
+          - name: value to text
+            value: 1
+          - name: range to text
+            value: 2
+        maxDataPoints: 100
+        maxPerRow: 6
+        nullPointMode: 'null'
+        nullText: null
+        options: {}
+        postfix: ''
+        postfixFontSize: 70%
+        prefix: ''
+        prefixFontSize: 50%
+        rangeMaps:
+          - from: 'null'
+            text: N/A
+            to: 'null'
+        sparkline:
+          fillColor: 'rgba(31, 118, 189, 0.18)'
+          full: false
+          lineColor: 'rgb(31, 120, 193)'
+          show: false
+        tableColumn: ''
+        targets:
+          - expr: 'sum(node_memory_MemTotal_bytes{instance=~"$node"})'
+            format: time_series
+            instant: true
+            intervalFactor: 1
+            legendFormat: '{{instance}}'
+            refId: A
+            step: 20
+        thresholds: '2,3'
+        title: Total RAM
+        type: singlestat
+        valueFontSize: 70%
+        valueMaps:
+          - op: '='
+            text: N/A
+            value: 'null'
+        valueName: current
+      - datasource: Prometheus
+        gridPos:
+          h: 6
+          w: 18
+          x: 6
+          'y': 1
+        id: 177
+        options:
+          displayMode: lcd
+          fieldOptions:
+            calcs:
+              - last
+            defaults:
+              mappings:
+                - from: ''
+                  id: 1
+                  operator: ''
+                  text: '-'
+                  to: ''
+                  type: 1
+                  value: NaN
+              max: 100
+              min: 0
+              thresholds:
+                - color: green
+                  value: null
+                - color: '#EAB839'
+                  value: 60
+                - color: red
+                  value: 80
+              title: ''
+              unit: percent
+            override: {}
+            values: false
+          orientation: horizontal
+        pluginVersion: 6.3.5
+        targets:
+          - expr: >-
+              100 -
+              (avg(irate(node_cpu_seconds_total{instance=~"$node",mode="idle"}[30m]))
+              * 100)
+            instant: true
+            legendFormat: CPU Busy
+            refId: A
+          - expr: >-
+              avg(irate(node_cpu_seconds_total{instance=~"$node",mode="iowait"}[30m]))
+              * 100
+            hide: true
+            instant: true
+            legendFormat: Busy Iowait
+            refId: C
+          - expr: >-
+              (1 - (node_memory_MemAvailable_bytes{instance=~"$node"} /
+              (node_memory_MemTotal_bytes{instance=~"$node"})))* 100
+            instant: true
+            legendFormat: Used RAM Memory
+            refId: B
+          - expr: >-
+              100 -
+              ((node_filesystem_avail_bytes{instance=~"$node",mountpoint="$maxmount",fstype=~"ext4|xfs"}
+              * 100) / node_filesystem_size_bytes
+              {instance=~"$node",mountpoint="$maxmount",fstype=~"ext4|xfs"})
+            hide: false
+            instant: true
+            legendFormat: Used Max Mount($maxmount)
+            refId: D
+          - expr: >-
+              (1 - (node_memory_SwapFree_bytes{instance=~"$node"} /
+              node_memory_SwapTotal_bytes{instance=~"$node"})) * 100
+            instant: true
+            legendFormat: Used SWAP
+            refId: E
+        timeFrom: null
+        timeShift: null
+        title: ''
+        type: bargauge
+    title: Summary
+    type: row
+  - collapsed: true
+    gridPos:
+      h: 1
+      w: 24
+      x: 0
+      'y': 1
+    id: 181
+    panels:
+      - aliasColors:
+          15分钟: '#6ED0E0'
+          1分钟: '#BF1B00'
+          5分钟: '#CCA300'
+        bars: false
+        dashLength: 10
+        dashes: false
+        datasource: Prometheus
+        editable: true
+        error: false
+        fill: 1
+        fillGradient: 1
+        grid: {}
+        gridPos:
+          h: 10
+          w: 12
+          x: 0
+          'y': 8
+        height: '300'
+        id: 13
+        legend:
+          alignAsTable: true
+          avg: true
+          current: true
+          max: true
+          min: false
+          rightSide: false
+          show: true
+          total: false
+          values: true
+        lines: true
+        linewidth: 2
+        links: []
+        maxPerRow: 6
+        nullPointMode: null as zero
+        options:
+          dataLinks: []
+        percentage: false
+        pointradius: 5
+        points: false
+        renderer: flot
+        repeat: null
+        seriesOverrides: []
+        spaceLength: 10
+        stack: false
+        steppedLine: false
+        targets:
+          - expr: 'node_load1{instance=~"$node"}'
+            format: time_series
+            instant: false
+            interval: ''
+            intervalFactor: 1
+            legendFormat: '{{instance}}_1m'
+            metric: ''
+            refId: A
+            step: 20
+            target: ''
+          - expr: 'node_load5{instance=~"$node"}'
+            format: time_series
+            instant: false
+            interval: ''
+            intervalFactor: 1
+            legendFormat: '{{instance}}_5m'
+            refId: B
+            step: 20
+          - expr: 'node_load15{instance=~"$node"}'
+            format: time_series
+            instant: false
+            interval: ''
+            intervalFactor: 1
+            legendFormat: '{{instance}}_15m'
+            refId: C
+            step: 20
+        thresholds: []
+        timeFrom: null
+        timeRegions: []
+        timeShift: null
+        title: System Load
+        tooltip:
+          msResolution: false
+          shared: true
+          sort: 2
+          value_type: cumulative
+        type: graph
+        xaxis:
+          buckets: null
+          mode: time
+          name: null
+          show: true
+          values: []
+        yaxes:
+          - format: short
+            logBase: 1
+            max: null
+            min: null
+            show: true
+          - format: short
+            logBase: 1
+            max: null
+            min: null
+            show: true
+        yaxis:
+          align: false
+          alignLevel: null
+      - aliasColors:
+          '192.168.200.241:9100_Total': dark-red
+          Idle - Waiting for something to happen: '#052B51'
+          guest: '#9AC48A'
+          idle: '#052B51'
+          iowait: '#EAB839'
+          irq: '#BF1B00'
+          nice: '#C15C17'
+          softirq: '#E24D42'
+          steal: '#FCE2DE'
+          system: '#508642'
+          user: '#5195CE'
+        bars: false
+        dashLength: 10
+        dashes: false
+        datasource: Prometheus
+        decimals: 2
+        description: ''
+        fill: 1
+        fillGradient: 0
+        gridPos:
+          h: 10
+          w: 12
+          x: 12
+          'y': 8
+        id: 7
+        legend:
+          alignAsTable: true
+          avg: true
+          current: true
+          hideEmpty: true
+          hideZero: true
+          max: true
+          min: false
+          rightSide: false
+          show: true
+          sideWidth: null
+          sort: current
+          sortDesc: true
+          total: false
+          values: true
+        lines: true
+        linewidth: 2
+        links: []
+        maxPerRow: 6
+        nullPointMode: 'null'
+        options:
+          dataLinks: []
+        percentage: false
+        pointradius: 5
+        points: false
+        renderer: flot
+        repeat: null
+        seriesOverrides:
+          - alias: /.*_Total/
+            color: '#C4162A'
+            fill: 0
+        spaceLength: 10
+        stack: false
+        steppedLine: false
+        targets:
+          - expr: >-
+              avg(irate(node_cpu_seconds_total{instance=~"$node",mode="system"}[30m]))
+              by (instance)
+            format: time_series
+            hide: false
+            instant: false
+            interval: ''
+            intervalFactor: 1
+            legendFormat: '{{instance}}_System'
+            refId: A
+            step: 20
+          - expr: >-
+              avg(irate(node_cpu_seconds_total{instance=~"$node",mode="user"}[30m]))
+              by (instance)
+            format: time_series
+            hide: false
+            intervalFactor: 1
+            legendFormat: '{{instance}}_User'
+            refId: B
+            step: 240
+          - expr: >-
+              avg(irate(node_cpu_seconds_total{instance=~"$node",mode="iowait"}[30m]))
+              by (instance)
+            format: time_series
+            hide: false
+            instant: false
+            intervalFactor: 1
+            legendFormat: '{{instance}}_Iowait'
+            refId: D
+            step: 240
+          - expr: >-
+              1 -
+              avg(irate(node_cpu_seconds_total{instance=~"$node",mode="idle"}[30m]))
+              by (instance)
+            format: time_series
+            hide: false
+            intervalFactor: 1
+            legendFormat: '{{instance}}_Total'
+            refId: F
+            step: 240
+        thresholds: []
+        timeFrom: null
+        timeRegions: []
+        timeShift: null
+        title: CPU
+        tooltip:
+          shared: true
+          sort: 2
+          value_type: individual
+        type: graph
+        xaxis:
+          buckets: null
+          mode: time
+          name: null
+          show: true
+          values: []
+        yaxes:
+          - decimals: 2
+            format: percentunit
+            label: ''
+            logBase: 1
+            max: null
+            min: null
+            show: true
+          - format: short
+            label: null
+            logBase: 1
+            max: null
+            min: null
+            show: false
+        yaxis:
+          align: false
+          alignLevel: null
+    title: CPU
+    type: row
+  - collapsed: true
+    gridPos:
+      h: 1
+      w: 24
+      x: 0
+      'y': 2
+    id: 183
+    panels:
+      - columns: []
+        datasource: Prometheus
+        fontSize: 110%
+        gridPos:
+          h: 8
+          w: 8
+          x: 0
+          'y': 3
+        id: 164
+        links: []
+        options: {}
+        pageSize: null
+        scroll: true
+        showHeader: true
+        sort:
+          col: 11
+          desc: true
+        styles:
+          - alias: Mounted on
+            colorMode: null
+            colors:
+              - 'rgba(50, 172, 45, 0.97)'
+              - 'rgba(237, 129, 40, 0.89)'
+              - 'rgba(245, 54, 54, 0.9)'
+            dateFormat: 'YYYY-MM-DD HH:mm:ss'
+            decimals: 2
+            mappingType: 1
+            pattern: mountpoint
+            thresholds:
+              - ''
+            type: string
+            unit: bytes
+          - alias: Avail
+            colorMode: value
+            colors:
+              - 'rgba(245, 54, 54, 0.9)'
+              - 'rgba(237, 129, 40, 0.89)'
+              - 'rgba(50, 172, 45, 0.97)'
+            dateFormat: 'YYYY-MM-DD HH:mm:ss'
+            decimals: 2
+            mappingType: 1
+            pattern: 'Value #A'
+            thresholds:
+              - '10000000000'
+              - '20000000000'
+            type: number
+            unit: bytes
+          - alias: Used
+            colorMode: cell
+            colors:
+              - 'rgba(50, 172, 45, 0.97)'
+              - 'rgba(237, 129, 40, 0.89)'
+              - 'rgba(245, 54, 54, 0.9)'
+            dateFormat: 'YYYY-MM-DD HH:mm:ss'
+            decimals: 2
+            mappingType: 1
+            pattern: 'Value #B'
+            thresholds:
+              - '0.6'
+              - '0.8'
+            type: number
+            unit: percentunit
+          - alias: Size
+            colorMode: null
+            colors:
+              - 'rgba(245, 54, 54, 0.9)'
+              - 'rgba(237, 129, 40, 0.89)'
+              - 'rgba(50, 172, 45, 0.97)'
+            dateFormat: 'YYYY-MM-DD HH:mm:ss'
+            decimals: 1
+            link: false
+            mappingType: 1
+            pattern: 'Value #C'
+            thresholds: []
+            type: number
+            unit: bytes
+          - alias: Filesystem
+            colorMode: null
+            colors:
+              - 'rgba(245, 54, 54, 0.9)'
+              - 'rgba(237, 129, 40, 0.89)'
+              - 'rgba(50, 172, 45, 0.97)'
+            dateFormat: 'YYYY-MM-DD HH:mm:ss'
+            decimals: 2
+            link: false
+            mappingType: 1
+            pattern: fstype
+            thresholds: []
+            type: string
+            unit: short
+          - alias: ''
+            colorMode: null
+            colors:
+              - 'rgba(245, 54, 54, 0.9)'
+              - 'rgba(237, 129, 40, 0.89)'
+              - 'rgba(50, 172, 45, 0.97)'
+            decimals: 2
+            pattern: /.*/
+            preserveFormat: true
+            sanitize: false
+            thresholds: []
+            type: hidden
+            unit: short
+        targets:
+          - expr: >-
+              node_filesystem_avail_bytes
+              {instance=~'$node',fstype=~"ext4|xfs"}-0
+            format: table
+            hide: false
+            instant: true
+            interval: 10s
+            intervalFactor: 1
+            legendFormat: ''
+            refId: A
+          - expr: >-
+              1-(node_filesystem_free_bytes{instance=~'$node',fstype=~"ext4|xfs"}
+              /
+              node_filesystem_size_bytes{instance=~'$node',fstype=~"ext4|xfs"})
+            format: table
+            hide: false
+            instant: true
+            intervalFactor: 1
+            legendFormat: ''
+            refId: B
+          - expr: >-
+              'node_filesystem_size_bytes{instance=~''$node'',fstype=~"ext4|xfs"}-0'
+            format: table
+            hide: false
+            instant: true
+            intervalFactor: 1
+            legendFormat: ''
+            refId: C
+        title: Disk Space Used  (EXT4/XFS)
+        transform: table
+        type: table
+      - aliasColors:
+          vda_write: '#6ED0E0'
+        bars: false
+        dashLength: 10
+        dashes: false
+        datasource: Prometheus
+        description: 'Per second read / write bytes '
+        fill: 1
+        fillGradient: 1
+        gridPos:
+          h: 8
+          w: 8
+          x: 8
+          'y': 3
+        height: '300'
+        id: 168
+        legend:
+          alignAsTable: true
+          avg: true
+          current: true
+          hideEmpty: true
+          hideZero: true
+          max: true
+          min: false
+          show: true
+          sort: current
+          sortDesc: true
+          total: false
+          values: true
+        lines: true
+        linewidth: 2
+        links: []
+        nullPointMode: 'null'
+        options:
+          dataLinks: []
+        percentage: false
+        pointradius: 5
+        points: false
+        renderer: flot
+        seriesOverrides:
+          - alias: /.*_Read bytes$/
+            transform: negative-Y
+        spaceLength: 10
+        stack: false
+        steppedLine: false
+        targets:
+          - expr: 'irate(node_disk_read_bytes_total{instance=~"$node"}[30m])'
+            format: time_series
+            interval: ''
+            intervalFactor: 1
+            legendFormat: '{{instance}}_{{device}}_Read bytes'
+            refId: A
+            step: 10
+          - expr: 'irate(node_disk_written_bytes_total{instance=~"$node"}[30m])'
+            format: time_series
+            hide: false
+            intervalFactor: 1
+            legendFormat: '{{instance}}_{{device}}_Written bytes'
+            refId: B
+            step: 10
+        thresholds: []
+        timeFrom: null
+        timeRegions: []
+        timeShift: null
+        title: Disk R/W Data
+        tooltip:
+          shared: true
+          sort: 2
+          value_type: individual
+        type: graph
+        xaxis:
+          buckets: null
+          mode: time
+          name: null
+          show: true
+          values: []
+        yaxes:
+          - decimals: null
+            format: Bps
+            label: Bytes read (-) / write (+)
+            logBase: 1
+            max: null
+            min: null
+            show: true
+          - format: short
+            label: null
+            logBase: 1
+            max: null
+            min: null
+            show: false
+        yaxis:
+          align: false
+          alignLevel: null
+      - aliasColors:
+          Idle - Waiting for something to happen: '#052B51'
+          guest: '#9AC48A'
+          idle: '#052B51'
+          iowait: '#EAB839'
+          irq: '#BF1B00'
+          nice: '#C15C17'
+          "sdb_æ¯\x8F秒I/Oæ“\x8D作%": '#d683ce'
+          softirq: '#E24D42'
+          steal: '#FCE2DE'
+          system: '#508642'
+          user: '#5195CE'
+          "ç£\x81盘花费在I/Oæ“\x8D作å\x8D æ¯”": '#ba43a9'
+        bars: false
+        dashLength: 10
+        dashes: false
+        datasource: Prometheus
+        decimals: null
+        description: >-
+          The time spent on I/O in the natural time of each second.(wall-clock
+          time)
+        fill: 1
+        fillGradient: 5
+        gridPos:
+          h: 8
+          w: 8
+          x: 16
+          'y': 3
+        id: 175
+        legend:
+          alignAsTable: true
+          avg: true
+          current: true
+          hideEmpty: true
+          hideZero: true
+          max: true
+          min: false
+          rightSide: false
+          show: true
+          sideWidth: null
+          sort: null
+          sortDesc: null
+          total: false
+          values: true
+        lines: true
+        linewidth: 2
+        links: []
+        maxPerRow: 6
+        nullPointMode: 'null'
+        options:
+          dataLinks: []
+        percentage: false
+        pointradius: 5
+        points: false
+        renderer: flot
+        seriesOverrides: []
+        spaceLength: 10
+        stack: false
+        steppedLine: false
+        targets:
+          - expr: >-
+              'irate(node_disk_io_time_seconds_total{instance=~"$node"}[30m])'
+            format: time_series
+            intervalFactor: 1
+            legendFormat: '{{instance}}_{{device}}_ IO time'
+            refId: C
+        thresholds: []
+        timeFrom: null
+        timeRegions: []
+        timeShift: null
+        title: Time Spent Doing I/Os
+        tooltip:
+          shared: true
+          sort: 2
+          value_type: individual
+        type: graph
+        xaxis:
+          buckets: null
+          mode: time
+          name: null
+          show: true
+          values: []
+        yaxes:
+          - decimals: null
+            format: s
+            label: ''
+            logBase: 1
+            max: null
+            min: null
+            show: true
+          - format: short
+            label: null
+            logBase: 1
+            max: null
+            min: null
+            show: false
+        yaxis:
+          align: false
+          alignLevel: null
+    title: Disk
+    type: row
+  - collapsed: true
+    gridPos:
+      h: 1
+      w: 24
+      x: 0
+      'y': 3
+    id: 185
+    panels:
+      - bars: false
+        dashLength: 10
+        dashes: false
+        datasource: Prometheus
+        decimals: 2
+        fill: 1
+        fillGradient: 0
+        gridPos:
+          h: 8
+          w: 24
+          x: 0
+          'y': 28
+        height: '300'
+        id: 156
+        legend:
+          alignAsTable: true
+          avg: false
+          current: true
+          max: false
+          min: false
+          rightSide: false
+          show: true
+          sort: current
+          sortDesc: true
+          total: false
+          values: true
+        lines: true
+        linewidth: 2
+        links: []
+        nullPointMode: 'null'
+        options:
+          dataLinks: []
+        percentage: false
+        pointradius: 5
+        points: false
+        renderer: flot
+        seriesOverrides:
+          - alias: /.*_Total/
+            color: '#C4162A'
+            fill: 0
+        spaceLength: 10
+        stack: false
+        steppedLine: false
+        targets:
+          - expr: 'node_memory_MemTotal_bytes{instance=~"$node"}'
+            format: time_series
+            hide: false
+            instant: false
+            intervalFactor: 1
+            legendFormat: '{{instance}}_Total'
+            refId: A
+            step: 4
+          - expr: >-
+              node_memory_MemTotal_bytes{instance=~"$node"} -
+              node_memory_MemAvailable_bytes{instance=~"$node"}
+            format: time_series
+            hide: false
+            intervalFactor: 1
+            legendFormat: '{{instance}}_Used'
+            refId: B
+            step: 4
+          - expr: 'node_memory_MemAvailable_bytes{instance=~"$node"}'
+            format: time_series
+            hide: false
+            interval: ''
+            intervalFactor: 1
+            legendFormat: '{{instance}}_Avaliable'
+            refId: F
+            step: 4
+        thresholds: []
+        timeFrom: null
+        timeRegions: []
+        timeShift: null
+        title: Memory
+        tooltip:
+          shared: true
+          sort: 2
+          value_type: individual
+        type: graph
+        xaxis:
+          buckets: null
+          mode: time
+          name: null
+          show: true
+          values: []
+        yaxes:
+          - format: bytes
+            label: null
+            logBase: 1
+            max: null
+            min: '0'
+            show: true
+          - format: short
+            label: null
+            logBase: 1
+            max: null
+            min: null
+            show: true
+        yaxis:
+          align: false
+          alignLevel: null
+    title: Memory
+    type: row
+  - collapsed: true
+    gridPos:
+      h: 1
+      w: 24
+      x: 0
+      'y': 4
+    id: 187
+    panels:
+      - bars: false
+        dashLength: 10
+        dashes: false
+        datasource: Prometheus
+        fill: 1
+        fillGradient: 3
+        gridPos:
+          h: 12
+          w: 12
+          x: 0
+          'y': 29
+        height: '300'
+        id: 157
+        legend:
+          alignAsTable: true
+          avg: false
+          current: true
+          hideEmpty: true
+          hideZero: true
+          max: true
+          min: false
+          rightSide: false
+          show: true
+          sort: current
+          sortDesc: true
+          total: false
+          values: true
+        lines: true
+        linewidth: 2
+        links: []
+        nullPointMode: 'null'
+        options:
+          dataLinks: []
+        percentage: false
+        pointradius: 2
+        points: false
+        renderer: flot
+        seriesOverrides:
+          - alias: /.*_transmit$/
+            transform: negative-Y
+        spaceLength: 10
+        stack: false
+        steppedLine: false
+        targets:
+          - expr: >-
+              irate(node_network_receive_bytes_total{instance=~'$node',device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[30m])*8
+            format: time_series
+            intervalFactor: 1
+            legendFormat: '{{instance}}_{{device}}_receive'
+            refId: A
+            step: 4
+          - expr: >-
+              irate(node_network_transmit_bytes_total{instance=~'$node',device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[30m])*8
+            format: time_series
+            intervalFactor: 1
+            legendFormat: '{{instance}}_{{device}}_transmit'
+            refId: B
+            step: 4
+        thresholds: []
+        timeFrom: null
+        timeRegions: []
+        timeShift: null
+        title: Network Traffic
+        tooltip:
+          shared: true
+          sort: 2
+          value_type: individual
+        type: graph
+        xaxis:
+          buckets: null
+          mode: time
+          name: null
+          show: true
+          values: []
+        yaxes:
+          - format: bps
+            label: transmit(-)/receive(+)
+            logBase: 1
+            max: null
+            min: null
+            show: true
+          - format: short
+            label: null
+            logBase: 1
+            max: null
+            min: null
+            show: false
+        yaxis:
+          align: false
+          alignLevel: null
+      - aliasColors:
+          TCP: '#6ED0E0'
+        bars: false
+        dashLength: 10
+        dashes: false
+        datasource: Prometheus
+        description: >-
+          TCP_alloc - Allocated sockets
+
+
+          CurrEstab - TCP connections for which the current state is either
+          ESTABLISHED or CLOSE- WAIT
+
+
+          TCP_tw - Sockets wating close
+
+
+          UDP_inuse - Udp sockets currently in use
+
+
+          Sockets_used - Sockets currently in use
+        fill: 1
+        fillGradient: 0
+        gridPos:
+          h: 12
+          w: 12
+          x: 12
+          'y': 29
+        height: '300'
+        id: 158
+        interval: ''
+        legend:
+          alignAsTable: true
+          avg: true
+          current: true
+          hideEmpty: true
+          hideZero: true
+          max: true
+          min: false
+          rightSide: false
+          show: true
+          sort: current
+          sortDesc: true
+          total: false
+          values: true
+        lines: true
+        linewidth: 2
+        links: []
+        nullPointMode: 'null'
+        options:
+          dataLinks: []
+        percentage: false
+        pointradius: 5
+        points: false
+        renderer: flot
+        seriesOverrides:
+          - alias: /.*_Sockets_used/
+            color: '#C4162A'
+            fill: 0
+        spaceLength: 10
+        stack: false
+        steppedLine: false
+        targets:
+          - expr: 'node_netstat_Tcp_CurrEstab{instance=~''$node''}'
+            format: time_series
+            hide: false
+            instant: false
+            interval: ''
+            intervalFactor: 1
+            legendFormat: '{{instance}}_CurrEstab'
+            refId: A
+            step: 20
+          - expr: 'node_sockstat_TCP_tw{instance=~''$node''}'
+            format: time_series
+            intervalFactor: 1
+            legendFormat: '{{instance}}_TCP_tw'
+            refId: D
+          - expr: 'node_sockstat_sockets_used{instance=~''$node''}'
+            legendFormat: '{{instance}}_Sockets_used'
+            refId: B
+          - expr: 'node_sockstat_UDP_inuse{instance=~''$node''}'
+            legendFormat: '{{instance}}_UDP_inuse'
+            refId: C
+          - expr: 'node_sockstat_TCP_alloc{instance=~''$node''}'
+            legendFormat: '{{instance}}_TCP_alloc'
+            refId: E
+        thresholds: []
+        timeFrom: null
+        timeRegions: []
+        timeShift: null
+        title: Network Sockstat
+        tooltip:
+          shared: true
+          sort: 2
+          value_type: individual
+        type: graph
+        xaxis:
+          buckets: null
+          mode: time
+          name: null
+          show: true
+          values: []
+        yaxes:
+          - format: short
+            label: null
+            logBase: 1
+            max: null
+            min: null
+            show: true
+          - format: short
+            label: null
+            logBase: 1
+            max: null
+            min: null
+            show: true
+        yaxis:
+          align: false
+          alignLevel: null
+    title: Network
+    type: row
+refresh: false
+schemaVersion: 19
+style: dark
+tags: []
+templating:
+  list:
+    - allValue: null
+      current:
+        text: node-exporter
+        value: node-exporter
+      datasource: Prometheus
+      definition: 'label_values(node_uname_info, job)'
+      hide: 0
+      includeAll: false
+      label: JOB
+      multi: false
+      name: job
+      options: []
+      query: 'label_values(node_uname_info, job)'
+      refresh: 1
+      regex: ''
+      skipUrlSync: false
+      sort: 1
+      tagValuesQuery: ''
+      tags: []
+      tagsQuery: ''
+      type: query
+      useTags: false
+    - allValue: null
+      current:
+        text: All
+        value: $__all
+      datasource: Prometheus
+      definition: 'label_values(node_uname_info{job=~"$job"}, nodename)'
+      hide: 0
+      includeAll: true
+      label: Host
+      multi: true
+      name: hostname
+      options: []
+      query: 'label_values(node_uname_info{job=~"$job"}, nodename)'
+      refresh: 1
+      regex: ''
+      skipUrlSync: false
+      sort: 0
+      tagValuesQuery: ''
+      tags: []
+      tagsQuery: ''
+      type: query
+      useTags: false
+    - allFormat: glob
+      allValue: null
+      current:
+        tags: []
+        text: All
+        value: $__all
+      datasource: Prometheus
+      definition: >-
+        'label_values(node_uname_info{nodename=~"$hostname"},instance)'
+      hide: 0
+      includeAll: true
+      label: IP
+      multi: false
+      multiFormat: regex values
+      name: node
+      options: []
+      query: 'label_values(node_uname_info{nodename=~"$hostname"},instance)'
+      refresh: 2
+      regex: ''
+      skipUrlSync: false
+      sort: 1
+      tagValuesQuery: ''
+      tags: []
+      tagsQuery: ''
+      type: query
+      useTags: false
+    - allValue: null
+      current:
+        text: /
+        value: /
+      datasource: Prometheus
+      definition: ''
+      hide: 2
+      includeAll: false
+      label: ''
+      multi: false
+      name: maxmount
+      options: []
+      query: >-
+        query_result(topk(1,sort_desc
+        (max(node_filesystem_size_bytes{instance=~'$node',fstype=~"ext4|xfs"})
+        by (mountpoint))))
+      refresh: 2
+      regex: /.*\"(.*)\".*/
+      skipUrlSync: false
+      sort: 0
+      tagValuesQuery: ''
+      tags: []
+      tagsQuery: ''
+      type: query
+      useTags: false
+    - allFormat: glob
+      allValue: null
+      current:
+        isNone: true
+        text: None
+        value: ''
+      datasource: Prometheus
+      definition: ''
+      hide: 2
+      includeAll: false
+      multi: false
+      multiFormat: regex values
+      name: env
+      options: []
+      query: 'label_values(node_exporter_build_info,env)'
+      refresh: 2
+      regex: ''
+      skipUrlSync: false
+      sort: 1
+      tagValuesQuery: ''
+      tags: []
+      tagsQuery: ''
+      type: query
+      useTags: false
+    - allFormat: glob
+      allValue: ''
+      current:
+        isNone: true
+        text: None
+        value: ''
+      datasource: Prometheus
+      definition: 'label_values(node_exporter_build_info{env=~''$env''},name)'
+      hide: 2
+      includeAll: false
+      label: "å\x90\x8D称"
+      multi: true
+      multiFormat: regex values
+      name: name
+      options: []
+      query: 'label_values(node_exporter_build_info{env=~''$env''},name)'
+      refresh: 2
+      regex: ''
+      skipUrlSync: false
+      sort: 1
+      tagValuesQuery: /.*/
+      tags: []
+      tagsQuery: ''
+      type: query
+      useTags: false
+time:
+  from: now-2d
+  to: now
+timepicker:
+  now: true
+  refresh_intervals:
+    - 5s
+    - 10s
+    - 30s
+    - 1m
+    - 5m
+    - 15m
+    - 30m
+    - 1h
+    - 2h
+    - 1d
+  time_options:
+    - 5m
+    - 15m
+    - 1h
+    - 6h
+    - 12h
+    - 24h
+    - 2d
+    - 7d
+    - 30d
+timezone: browser
+title: Hosts
+uid: ha7fSE0Zz
+version: 1
diff --git a/installers/charm/grafana/files/summary_dashboard.yaml b/installers/charm/grafana/files/summary_dashboard.yaml
new file mode 100644 (file)
index 0000000..c9c1fdf
--- /dev/null
@@ -0,0 +1,1621 @@
+# Copyright 2021 Canonical Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact: legal@canonical.com
+#
+# To get in touch with the maintainers, please contact:
+# osm-charmers@lists.launchpad.net
+##
+
+---
+annotations:
+  list:
+    - builtIn: 1
+      datasource: '-- Grafana --'
+      enable: true
+      hide: true
+      iconColor: 'rgba(0, 211, 255, 1)'
+      name: Annotations & Alerts
+      type: dashboard
+description: OSM status summary
+editable: true
+gnetId: 6417
+graphTooltip: 1
+id: 10
+iteration: 1577638384562
+links:
+  - asDropdown: true
+    icon: external link
+    includeVars: true
+    keepTime: false
+    tags: []
+    title: Dashboards
+    type: dashboards
+panels:
+  - collapsed: false
+    gridPos:
+      h: 1
+      w: 24
+      x: 0
+      'y': 0
+    id: 2
+    panels: []
+    title: Cluster Health
+    type: row
+  - cacheTimeout: null
+    colorBackground: false
+    colorPrefix: false
+    colorValue: false
+    colors:
+      - '#299c46'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#d44a3a'
+    datasource: Prometheus
+    format: none
+    gauge:
+      maxValue: 100
+      minValue: 0
+      show: false
+      thresholdLabels: false
+      thresholdMarkers: true
+    gridPos:
+      h: 2
+      w: 12
+      x: 0
+      'y': 1
+    id: 26
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ' Nodes'
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    repeat: null
+    repeatDirection: h
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+    tableColumn: Value
+    targets:
+      - expr: sum(kube_node_info)
+        format: time_series
+        instant: true
+        intervalFactor: 1
+        legendFormat: ''
+        refId: B
+    thresholds: '1'
+    title: ''
+    type: singlestat
+    valueFontSize: 70%
+    valueMaps:
+      - op: '='
+        text: N/A
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#299c46'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#d44a3a'
+    datasource: Prometheus
+    format: none
+    gauge:
+      maxValue: 100
+      minValue: 0
+      show: false
+      thresholdLabels: false
+      thresholdMarkers: true
+    gridPos:
+      h: 2
+      w: 12
+      x: 12
+      'y': 1
+    id: 30
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ' Pods Running'
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(78, 203, 42, 0.28)'
+      full: false
+      lineColor: '#629e51'
+      show: true
+    tableColumn: ''
+    targets:
+      - expr: sum(kube_pod_status_phase)
+        format: time_series
+        instant: true
+        interval: ''
+        intervalFactor: 1
+        refId: A
+    thresholds: ''
+    title: ''
+    type: singlestat
+    valueFontSize: 70%
+    valueMaps:
+      - op: '='
+        text: N/A
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: true
+    colorPrefix: false
+    colorValue: false
+    colors:
+      - '#56A64B'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#d44a3a'
+    datasource: Prometheus
+    format: none
+    gauge:
+      maxValue: 100
+      minValue: 0
+      show: false
+      thresholdLabels: false
+      thresholdMarkers: true
+    gridPos:
+      h: 2
+      w: 12
+      x: 0
+      'y': 3
+    id: 24
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ' Nodes Unavailable'
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+    tableColumn: ''
+    targets:
+      - expr: >-
+          sum(kube_node_info)-sum(kube_node_status_condition{condition="Ready",
+          status="true"})
+        format: time_series
+        instant: true
+        intervalFactor: 1
+        refId: A
+    thresholds: '1,1'
+    title: ''
+    type: singlestat
+    valueFontSize: 70%
+    valueMaps:
+      - op: '='
+        text: N/A
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: true
+    colorValue: false
+    colors:
+      - '#56A64B'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#d44a3a'
+    datasource: Prometheus
+    format: none
+    gauge:
+      maxValue: 100
+      minValue: 0
+      show: false
+      thresholdLabels: false
+      thresholdMarkers: true
+    gridPos:
+      h: 2
+      w: 12
+      x: 12
+      'y': 3
+    id: 55
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ' Pods not Ready'
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+      ymax: null
+      ymin: null
+    tableColumn: ''
+    targets:
+      - expr: 'sum(kube_pod_status_phase{phase!="Running"})'
+        instant: true
+        legendFormat: ''
+        refId: A
+    thresholds: '1'
+    timeFrom: null
+    timeShift: null
+    title: ''
+    type: singlestat
+    valueFontSize: 70%
+    valueMaps:
+      - op: '='
+        text: N/A
+        value: 'null'
+    valueName: avg
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#299c46'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#d44a3a'
+    datasource: Prometheus
+    format: percentunit
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: true
+    gridPos:
+      h: 4
+      w: 6
+      x: 0
+      'y': 5
+    id: 4
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+    tableColumn: ''
+    targets:
+      - expr: sum(kube_pod_info) / sum(kube_node_status_allocatable_pods)
+        format: time_series
+        intervalFactor: 1
+        refId: A
+    thresholds: '0.7,0.85'
+    title: Pod Usage
+    type: singlestat
+    valueFontSize: 80%
+    valueMaps:
+      - op: '='
+        text: N/A
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#299c46'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#d44a3a'
+    datasource: Prometheus
+    format: percentunit
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: true
+    gridPos:
+      h: 4
+      w: 6
+      x: 6
+      'y': 5
+    id: 5
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+    tableColumn: ''
+    targets:
+      - expr: >-
+          sum(kube_pod_container_resource_requests_cpu_cores) /
+          sum(kube_node_status_allocatable_cpu_cores)
+        format: time_series
+        instant: true
+        intervalFactor: 1
+        refId: A
+    thresholds: '0.7,0.85'
+    title: CPU Usage
+    type: singlestat
+    valueFontSize: 80%
+    valueMaps:
+      - op: '='
+        text: N/A
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#299c46'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#d44a3a'
+    datasource: Prometheus
+    format: percentunit
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: true
+    gridPos:
+      h: 4
+      w: 6
+      x: 12
+      'y': 5
+    id: 6
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+    tableColumn: ''
+    targets:
+      - expr: >-
+          sum(kube_pod_container_resource_requests_memory_bytes) /
+          sum(kube_node_status_allocatable_memory_bytes)
+        format: time_series
+        instant: true
+        intervalFactor: 1
+        refId: A
+    thresholds: '0.7,0.85'
+    title: Memory Usage
+    type: singlestat
+    valueFontSize: 80%
+    valueMaps:
+      - op: '='
+        text: N/A
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#73BF69'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#d44a3a'
+    datasource: Prometheus
+    format: percentunit
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: true
+    gridPos:
+      h: 4
+      w: 6
+      x: 18
+      'y': 5
+    id: 7
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+    tableColumn: ''
+    targets:
+      - expr: >-
+          (sum (node_filesystem_size_bytes) - sum (node_filesystem_free_bytes))
+          / sum (node_filesystem_size_bytes)
+        format: time_series
+        instant: true
+        intervalFactor: 1
+        refId: A
+    thresholds: '0.7,0.85'
+    title: Disk Usage
+    type: singlestat
+    valueFontSize: 80%
+    valueMaps:
+      - op: '='
+        text: N/A
+        value: 'null'
+    valueName: current
+  - collapsed: false
+    gridPos:
+      h: 1
+      w: 24
+      x: 0
+      'y': 9
+    id: 61
+    panels: []
+    title: OSM
+    type: row
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#d44a3a'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#299c46'
+    datasource: Prometheus
+    format: none
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: false
+    gridPos:
+      h: 4
+      w: 3
+      x: 0
+      'y': 10
+    id: 71
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+      ymax: null
+      ymin: null
+    tableColumn: ''
+    targets:
+      - expr: >-
+          kube_statefulset_status_replicas_ready{namespace="osm",
+          statefulset="prometheus"}
+        format: time_series
+        refId: A
+    thresholds: '0,1'
+    timeFrom: null
+    timeShift: null
+    title: Prometheus
+    type: singlestat
+    valueFontSize: 100%
+    valueMaps:
+      - op: '='
+        text: '0'
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#d44a3a'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#299c46'
+    datasource: Prometheus
+    decimals: null
+    format: none
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: false
+    gridPos:
+      h: 4
+      w: 3
+      x: 4
+      'y': 10
+    id: 74
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+      ymax: null
+      ymin: null
+    tableColumn: ''
+    targets:
+      - expr: >-
+          kube_statefulset_status_replicas_ready{namespace="osm",
+          statefulset="mongodb-k8s"}
+        format: time_series
+        refId: A
+    thresholds: '0,1'
+    timeFrom: null
+    timeShift: null
+    title: mongo
+    type: singlestat
+    valueFontSize: 100%
+    valueMaps:
+      - op: '='
+        text: '0'
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#d44a3a'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#299c46'
+    datasource: Prometheus
+    format: none
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: false
+    gridPos:
+      h: 4
+      w: 3
+      x: 8
+      'y': 10
+    id: 72
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+      ymax: null
+      ymin: null
+    tableColumn: ''
+    targets:
+      - expr: >-
+          kube_statefulset_status_replicas_ready{namespace="osm",
+          statefulset="mysql"}
+        format: time_series
+        refId: A
+    thresholds: '0,1'
+    timeFrom: null
+    timeShift: null
+    title: 'mysql '
+    type: singlestat
+    valueFontSize: 100%
+    valueMaps:
+      - op: '='
+        text: '0'
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#d44a3a'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#299c46'
+    datasource: Prometheus
+    format: none
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: false
+    gridPos:
+      h: 4
+      w: 3
+      x: 12
+      'y': 10
+    id: 77
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    pluginVersion: 6.3.5
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+      ymax: null
+      ymin: null
+    tableColumn: Value
+    targets:
+      - expr: 'kube_deployment_status_replicas_available{deployment="ro"}'
+        format: time_series
+        instant: true
+        legendFormat: ''
+        refId: A
+    thresholds: '0,1'
+    timeFrom: null
+    timeShift: null
+    title: ro
+    type: singlestat
+    valueFontSize: 100%
+    valueMaps:
+      - op: '='
+        text: '0'
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#d44a3a'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#299c46'
+    datasource: Prometheus
+    decimals: null
+    format: none
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: false
+    gridPos:
+      h: 4
+      w: 3
+      x: 16
+      'y': 10
+    id: 73
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+      ymax: null
+      ymin: null
+    tableColumn: ''
+    targets:
+      - expr: >-
+          kube_statefulset_status_replicas_ready{namespace="osm",
+          statefulset="zookeeper"}
+        format: time_series
+        refId: A
+    thresholds: '0,1'
+    timeFrom: null
+    timeShift: null
+    title: zookeeper
+    type: singlestat
+    valueFontSize: 100%
+    valueMaps:
+      - op: '='
+        text: '0'
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#d44a3a'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#299c46'
+    datasource: Prometheus
+    decimals: null
+    format: none
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: false
+    gridPos:
+      h: 4
+      w: 3
+      x: 20
+      'y': 10
+    id: 78
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+      ymax: null
+      ymin: null
+    tableColumn: ''
+    targets:
+      - expr: >-
+          kube_statefulset_status_replicas_ready{namespace="osm",
+          statefulset="kafka"}
+        format: time_series
+        refId: A
+    thresholds: '0,1'
+    timeFrom: null
+    timeShift: null
+    title: kafka
+    type: singlestat
+    valueFontSize: 100%
+    valueMaps:
+      - op: '='
+        text: '0'
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#d44a3a'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#299c46'
+    datasource: Prometheus
+    format: none
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: false
+    gridPos:
+      h: 4
+      w: 3
+      x: 0
+      'y': 14
+    id: 76
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    pluginVersion: 6.3.5
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+      ymax: null
+      ymin: null
+    tableColumn: Value
+    targets:
+      - expr: 'kube_deployment_status_replicas_available{deployment="lcm"}'
+        format: time_series
+        instant: true
+        legendFormat: ''
+        refId: A
+    thresholds: '0,1'
+    timeFrom: null
+    timeShift: null
+    title: lcm
+    type: singlestat
+    valueFontSize: 100%
+    valueMaps:
+      - op: '='
+        text: '0'
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#d44a3a'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#299c46'
+    datasource: Prometheus
+    format: none
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: false
+    gridPos:
+      h: 4
+      w: 3
+      x: 4
+      'y': 14
+    id: 79
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    pluginVersion: 6.3.5
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+      ymax: null
+      ymin: null
+    tableColumn: ''
+    targets:
+      - expr: 'kube_deployment_status_replicas_available{deployment="ng-ui"}'
+        instant: true
+        refId: A
+    thresholds: '0,1'
+    timeFrom: null
+    timeShift: null
+    title: light-ui
+    type: singlestat
+    valueFontSize: 100%
+    valueMaps:
+      - op: '='
+        text: '0'
+        value: 'null'
+    valueName: avg
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#d44a3a'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#299c46'
+    datasource: Prometheus
+    description: ''
+    format: none
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: false
+    gridPos:
+      h: 4
+      w: 3
+      x: 8
+      'y': 14
+    id: 75
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    pluginVersion: 6.3.5
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+      ymax: null
+      ymin: null
+    tableColumn: Value
+    targets:
+      - expr: 'kube_deployment_status_replicas_available{deployment="nbi"}'
+        format: time_series
+        instant: true
+        legendFormat: ''
+        refId: A
+    thresholds: '0,1'
+    timeFrom: null
+    timeShift: null
+    title: nbi
+    type: singlestat
+    valueFontSize: 100%
+    valueMaps:
+      - op: '='
+        text: '0'
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#d44a3a'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#299c46'
+    datasource: Prometheus
+    format: none
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: false
+    gridPos:
+      h: 4
+      w: 3
+      x: 12
+      'y': 14
+    id: 67
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    pluginVersion: 6.3.5
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+      ymax: null
+      ymin: null
+    tableColumn: Value
+    targets:
+      - expr: 'kube_deployment_status_replicas_available{deployment="pol"}'
+        format: time_series
+        instant: true
+        legendFormat: ''
+        refId: A
+    thresholds: '0,1'
+    timeFrom: null
+    timeShift: null
+    title: pol
+    type: singlestat
+    valueFontSize: 100%
+    valueMaps:
+      - op: '='
+        text: '0'
+        value: 'null'
+    valueName: current
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#d44a3a'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#299c46'
+    datasource: Prometheus
+    format: none
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: false
+    gridPos:
+      h: 4
+      w: 3
+      x: 16
+      'y': 14
+    id: 69
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    pluginVersion: 6.3.5
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+      ymax: null
+      ymin: null
+    tableColumn: ''
+    targets:
+      - expr: 'kube_deployment_status_replicas_available{deployment="mon"}'
+        instant: true
+        refId: A
+    thresholds: '0,1'
+    timeFrom: null
+    timeShift: null
+    title: mon
+    type: singlestat
+    valueFontSize: 100%
+    valueMaps:
+      - op: '='
+        text: '0'
+        value: 'null'
+    valueName: avg
+  - cacheTimeout: null
+    colorBackground: false
+    colorValue: false
+    colors:
+      - '#d44a3a'
+      - 'rgba(237, 129, 40, 0.89)'
+      - '#299c46'
+    datasource: Prometheus
+    format: none
+    gauge:
+      maxValue: 1
+      minValue: 0
+      show: true
+      thresholdLabels: false
+      thresholdMarkers: false
+    gridPos:
+      h: 4
+      w: 3
+      x: 20
+      'y': 14
+    id: 81
+    interval: null
+    links: []
+    mappingType: 1
+    mappingTypes:
+      - name: value to text
+        value: 1
+      - name: range to text
+        value: 2
+    maxDataPoints: 100
+    nullPointMode: connected
+    nullText: null
+    options: {}
+    pluginVersion: 6.3.5
+    postfix: ''
+    postfixFontSize: 50%
+    prefix: ''
+    prefixFontSize: 50%
+    rangeMaps:
+      - from: 'null'
+        text: N/A
+        to: 'null'
+    sparkline:
+      fillColor: 'rgba(31, 118, 189, 0.18)'
+      full: false
+      lineColor: 'rgb(31, 120, 193)'
+      show: false
+      ymax: null
+      ymin: null
+    tableColumn: Value
+    targets:
+      - expr: 'kube_deployment_status_replicas_available{deployment="keystone"}'
+        format: time_series
+        instant: true
+        legendFormat: ''
+        refId: A
+    thresholds: '0,1'
+    timeFrom: null
+    timeShift: null
+    title: keystone
+    type: singlestat
+    valueFontSize: 100%
+    valueMaps:
+      - op: '='
+        text: '0'
+        value: 'null'
+    valueName: current
+  - datasource: Prometheus
+    aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    fill: 6
+    fillGradient: 0
+    gridPos:
+      h: 9
+      w: 23
+      x: 0
+      'y': 18
+    id: 84
+    legend:
+      avg: false
+      current: false
+      max: false
+      min: false
+      show: true
+      total: false
+      values: false
+    lines: true
+    linewidth: 1
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 2
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: true
+    steppedLine: false
+    targets:
+      - expr: >-
+          sum(namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{namespace="osm"})
+          by (pod)
+        instant: false
+        intervalFactor: 4
+        legendFormat: '{{pod}}'
+        refId: A
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Pod CPU Usage
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - datasource: Prometheus
+    aliasColors: {}
+    bars: false
+    dashLength: 10
+    dashes: false
+    fill: 6
+    fillGradient: 0
+    gridPos:
+      h: 9
+      w: 23
+      x: 0
+      'y': 27
+    id: 85
+    legend:
+      avg: false
+      current: false
+      max: false
+      min: false
+      show: true
+      total: false
+      values: false
+    lines: true
+    linewidth: 1
+    nullPointMode: 'null'
+    options:
+      dataLinks: []
+    percentage: false
+    pointradius: 2
+    points: false
+    renderer: flot
+    seriesOverrides: []
+    spaceLength: 10
+    stack: true
+    steppedLine: false
+    targets:
+      - expr: >-
+          sum(container_memory_working_set_bytes{namespace="osm",
+          container!=""}) by (pod)
+        intervalFactor: 4
+        legendFormat: '{{pod}}'
+        refId: A
+    thresholds: []
+    timeFrom: null
+    timeRegions: []
+    timeShift: null
+    title: Pod Memory Usage
+    tooltip:
+      shared: true
+      sort: 0
+      value_type: individual
+    type: graph
+    xaxis:
+      buckets: null
+      mode: time
+      name: null
+      show: true
+      values: []
+    yaxes:
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+      - format: short
+        label: null
+        logBase: 1
+        max: null
+        min: null
+        show: true
+    yaxis:
+      align: false
+      alignLevel: null
+  - cacheTimeout: null
+    content: |+
+      ''
+      ''
+      ''
+    gridPos:
+      h: 4
+      w: 3
+      x: 21
+      'y': 36
+    id: 82
+    links: []
+    mode: markdown
+    options: {}
+    pluginVersion: 6.3.5
+    targets:
+      - expr: ''
+        instant: true
+        refId: A
+    timeFrom: null
+    timeShift: null
+    title: ''
+    transparent: true
+    type: text
+  - cacheTimeout: null
+    content: |+
+      '<h2 style="text-align: center;"></p>'
+      ''
+      ''
+    gridPos:
+      h: 4
+      w: 3
+      x: 19
+      'y': 40
+    id: 80
+    links: []
+    mode: html
+    options: {}
+    pluginVersion: 6.3.5
+    targets:
+      - expr: ''
+        instant: true
+        refId: A
+    timeFrom: null
+    timeShift: null
+    title: ''
+    transparent: true
+    type: text
+refresh: 30s
+schemaVersion: 19
+style: dark
+tags: []
+templating:
+  list:
+    - current:
+        text: No data sources found
+        value: ''
+      hide: 2
+      includeAll: false
+      label: ''
+      multi: false
+      name: datasource
+      options: []
+      query: prometheus
+      refresh: 1
+      regex: /$ds/
+      skipUrlSync: false
+      type: datasource
+time:
+  from: now-15m
+  to: now
+timepicker:
+  refresh_intervals:
+    - 5s
+    - 10s
+    - 30s
+    - 1m
+    - 5m
+    - 15m
+    - 30m
+    - 1h
+    - 2h
+    - 1d
+  time_options:
+    - 5m
+    - 15m
+    - 1h
+    - 6h
+    - 12h
+    - 24h
+    - 2d
+    - 7d
+    - 30d
+timezone: browser
+title: OSM Status Summary
+uid: 4XuPd2Ii1
+version: 2
index 9915a9e..8d525f3 100644 (file)
@@ -24,6 +24,8 @@ import logging
 from ipaddress import ip_network
 from typing import Any, Dict, List
 from urllib.parse import urlparse
+from pathlib import Path
+from string import Template
 
 logger = logging.getLogger(__name__)
 
@@ -224,55 +226,79 @@ def _make_pod_ingress_resources(
     return [ingress]
 
 
-def _make_pod_files(relation: Dict[str, Any]) -> List[Dict[str, Any]]:
+def _make_pod_files(
+    config: Dict[str, Any], relation: Dict[str, Any]
+) -> List[Dict[str, Any]]:
     """Generating ConfigMap information
 
     Args:
+        config (Dict[str, Any]): configuration information.
         relation (Dict[str, Any]): relation information.
 
     Returns:
         List[Dict[str, Any]]: ConfigMap information.
     """
+    template_data = {**config, **relation}
+    dashboards = []
+
+    if config.get("osm_dashboards", False):
+        dashboards.extend(
+            [
+                {
+                    "path": "kafka_exporter_dashboard.yaml",
+                    "content": Template(
+                        Path("files/kafka_exporter_dashboard.yaml").read_text()
+                    ),
+                },
+                {
+                    "path": "mongodb_exporter_dashboard.yaml",
+                    "content": Template(
+                        Path("files/mongodb_exporter_dashboard.yaml").read_text()
+                    ),
+                },
+                {
+                    "path": "mysql_exporter_dashboard.yaml",
+                    "content": Template(
+                        Path("files/mysql_exporter_dashboard.yaml").read_text()
+                    ),
+                },
+                {
+                    "path": "nodes_exporter_dashboard.yaml",
+                    "content": Template(
+                        Path("files/nodes_exporter_dashboard.yaml").read_text()
+                    ),
+                },
+                {
+                    "path": "summary_dashboard.yaml",
+                    "content": Template(
+                        Path("files/summary_dashboard.yaml").read_text()
+                    ),
+                },
+            ]
+        )
+
+    dashboards.append(
+        {
+            "path": "dashboard_osm.yaml",
+            "content": Template(Path("files/default_dashboards.yaml").read_text()),
+        }
+    )
+
     files = [
         {
             "name": "dashboards",
             "mountPath": "/etc/grafana/provisioning/dashboards/",
-            "files": [
-                {
-                    "path": "dashboard-osm.yml",
-                    "content": (
-                        "apiVersion: 1\n"
-                        "providers:\n"
-                        "  - name: 'osm'\n"
-                        "    orgId: 1\n"
-                        "    folder: ''\n"
-                        "    type: file\n"
-                        "    options:\n"
-                        "      path: /etc/grafana/provisioning/dashboards/\n"
-                    ),
-                }
-            ],
+            "files": dashboards,
         },
         {
             "name": "datasources",
             "mountPath": "/etc/grafana/provisioning/datasources/",
             "files": [
                 {
-                    "path": "datasource-prometheus.yml",
-                    "content": (
-                        "datasources:\n"
-                        "  - access: proxy\n"
-                        "    editable: true\n"
-                        "    is_default: true\n"
-                        "    name: osm_prometheus\n"
-                        "    orgId: 1\n"
-                        "    type: prometheus\n"
-                        "    version: 1\n"
-                        "    url: http://{}:{}\n".format(
-                            relation.get("prometheus_host"),
-                            relation.get("prometheus_port"),
-                        )
-                    ),
+                    "path": "datasource_prometheus.yaml",
+                    "content": Template(
+                        Path("files/default_dashboards.yaml").read_text()
+                    ).substitute(template_data),
                 }
             ],
         },