From 3884e23c245102cdebe39301786fec2a3f5d5150 Mon Sep 17 00:00:00 2001 From: sousaedu Date: Thu, 25 Feb 2021 21:32:25 +0100 Subject: [PATCH] Adding scraping relation to Mongodb Exporter Change-Id: Ia96b29a9c7373254cde77ca708d069d3681b1386 Signed-off-by: sousaedu --- .../.gitignore | 2 +- .../.yamllint.yaml | 0 .../README.md | 0 .../config.yaml | 0 .../files/mongodb_exporter_dashboard.json | 840 ++++++++++++++++++ .../metadata.yaml | 6 +- .../requirements.txt | 0 .../src/charm.py | 33 +- .../src/pod_spec.py | 27 +- .../tests/__init__.py | 0 .../tests/test_charm.py | 128 +-- .../tests/test_pod_spec.py | 69 +- .../tox.ini | 6 +- .../files/mongodb_exporter_dashboard.yaml | 691 -------------- 14 files changed, 971 insertions(+), 831 deletions(-) rename installers/charm/{prometheus-mongodb-exporter => mongodb-exporter}/.gitignore (96%) rename installers/charm/{prometheus-mongodb-exporter => mongodb-exporter}/.yamllint.yaml (100%) rename installers/charm/{prometheus-mongodb-exporter => mongodb-exporter}/README.md (100%) rename installers/charm/{prometheus-mongodb-exporter => mongodb-exporter}/config.yaml (100%) create mode 100644 installers/charm/mongodb-exporter/files/mongodb_exporter_dashboard.json rename installers/charm/{prometheus-mongodb-exporter => mongodb-exporter}/metadata.yaml (94%) rename installers/charm/{prometheus-mongodb-exporter => mongodb-exporter}/requirements.txt (100%) rename installers/charm/{prometheus-mongodb-exporter => mongodb-exporter}/src/charm.py (88%) rename installers/charm/{prometheus-mongodb-exporter => mongodb-exporter}/src/pod_spec.py (92%) rename installers/charm/{prometheus-mongodb-exporter => mongodb-exporter}/tests/__init__.py (100%) rename installers/charm/{prometheus-mongodb-exporter => mongodb-exporter}/tests/test_charm.py (82%) rename installers/charm/{prometheus-mongodb-exporter => mongodb-exporter}/tests/test_pod_spec.py (88%) rename installers/charm/{prometheus-mongodb-exporter => mongodb-exporter}/tox.ini (92%) delete mode 100644 installers/charm/prometheus-mongodb-exporter/files/mongodb_exporter_dashboard.yaml diff --git a/installers/charm/prometheus-mongodb-exporter/.gitignore b/installers/charm/mongodb-exporter/.gitignore similarity index 96% rename from installers/charm/prometheus-mongodb-exporter/.gitignore rename to installers/charm/mongodb-exporter/.gitignore index 60e34f39..a4d0de20 100644 --- a/installers/charm/prometheus-mongodb-exporter/.gitignore +++ b/installers/charm/mongodb-exporter/.gitignore @@ -22,7 +22,7 @@ venv .vscode build -prometheus-mongodb-exporter.charm +mongodb-exporter.charm .coverage .stestr cover diff --git a/installers/charm/prometheus-mongodb-exporter/.yamllint.yaml b/installers/charm/mongodb-exporter/.yamllint.yaml similarity index 100% rename from installers/charm/prometheus-mongodb-exporter/.yamllint.yaml rename to installers/charm/mongodb-exporter/.yamllint.yaml diff --git a/installers/charm/prometheus-mongodb-exporter/README.md b/installers/charm/mongodb-exporter/README.md similarity index 100% rename from installers/charm/prometheus-mongodb-exporter/README.md rename to installers/charm/mongodb-exporter/README.md diff --git a/installers/charm/prometheus-mongodb-exporter/config.yaml b/installers/charm/mongodb-exporter/config.yaml similarity index 100% rename from installers/charm/prometheus-mongodb-exporter/config.yaml rename to installers/charm/mongodb-exporter/config.yaml diff --git a/installers/charm/mongodb-exporter/files/mongodb_exporter_dashboard.json b/installers/charm/mongodb-exporter/files/mongodb_exporter_dashboard.json new file mode 100644 index 00000000..a1b128a0 --- /dev/null +++ b/installers/charm/mongodb-exporter/files/mongodb_exporter_dashboard.json @@ -0,0 +1,840 @@ +{ + "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 - Juju generated source", + "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 - Juju generated source", + "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 - Juju generated source", + "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 - Juju generated source", + "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 - Juju generated source", + "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 - Juju generated source", + "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 - Juju generated source", + "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 - Juju generated source", + "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/prometheus-mongodb-exporter/metadata.yaml b/installers/charm/mongodb-exporter/metadata.yaml similarity index 94% rename from installers/charm/prometheus-mongodb-exporter/metadata.yaml rename to installers/charm/mongodb-exporter/metadata.yaml index 78c4a311..26b6dad4 100644 --- a/installers/charm/prometheus-mongodb-exporter/metadata.yaml +++ b/installers/charm/mongodb-exporter/metadata.yaml @@ -19,7 +19,7 @@ # osm-charmers@lists.launchpad.net ## -name: prometheus-mongodb-exporter +name: mongodb-exporter summary: OSM Prometheus Mongodb Exporter description: | A CAAS charm to deploy OSM's Prometheus Mongodb Exporter. @@ -40,8 +40,8 @@ resources: description: Image of mongodb-exporter upstream-source: "bitnami/mongodb-exporter:latest" provides: - prometheus-target: - interface: http + prometheus-scrape: + interface: prometheus grafana-dashboard: interface: grafana-dashboard requires: diff --git a/installers/charm/prometheus-mongodb-exporter/requirements.txt b/installers/charm/mongodb-exporter/requirements.txt similarity index 100% rename from installers/charm/prometheus-mongodb-exporter/requirements.txt rename to installers/charm/mongodb-exporter/requirements.txt diff --git a/installers/charm/prometheus-mongodb-exporter/src/charm.py b/installers/charm/mongodb-exporter/src/charm.py similarity index 88% rename from installers/charm/prometheus-mongodb-exporter/src/charm.py rename to installers/charm/mongodb-exporter/src/charm.py index 12b3c1c2..02a600c8 100755 --- a/installers/charm/prometheus-mongodb-exporter/src/charm.py +++ b/installers/charm/mongodb-exporter/src/charm.py @@ -23,6 +23,7 @@ import logging from pathlib import Path from typing import Dict, List, NoReturn +from urllib.parse import urlparse from ops.charm import CharmBase from ops.framework import EventBase, StoredState @@ -34,7 +35,7 @@ from pod_spec import make_pod_spec logger = logging.getLogger(__name__) -PROMETHEUS_MONGODB_EXPORTER_PORT = 9216 +MONGODB_EXPORTER_PORT = 9216 class RelationsMissing(Exception): @@ -93,19 +94,19 @@ def get_relation_data( return data -class PrometheusMongodbExporterCharm(CharmBase): - """Prometheus Mongodb Exporter Charm.""" +class MongodbExporterCharm(CharmBase): + """Mongodb Exporter Charm.""" state = StoredState() def __init__(self, *args) -> NoReturn: - """Prometheus Mongodb Exporter Charm constructor.""" + """Mongodb Exporter Charm constructor.""" super().__init__(*args) # Internal state initialization self.state.set_default(pod_spec=None) - self.port = PROMETHEUS_MONGODB_EXPORTER_PORT + self.port = MONGODB_EXPORTER_PORT self.image = OCIImageResource(self, "image") # Registering regular events @@ -120,21 +121,28 @@ class PrometheusMongodbExporterCharm(CharmBase): # Registering provided relation events self.framework.observe( - self.on.prometheus_target_relation_joined, self._publish_target_info + self.on.prometheus_scrape_relation_joined, self._publish_scrape_info ) self.framework.observe( self.on.grafana_dashboard_relation_joined, self._publish_dashboard_info ) - def _publish_target_info(self, event: EventBase) -> NoReturn: - """Publishes target information. + def _publish_scrape_info(self, event: EventBase) -> NoReturn: + """Publishes scrape information. Args: event (EventBase): Exporter relation event. """ rel_data = { - "hostname": self.model.app.name, - "port": str(PROMETHEUS_MONGODB_EXPORTER_PORT), + "hostname": urlparse(self.model.config["site_url"]).hostname + if self.model.config["site_url"] + else self.model.app.name, + "port": "80" + if self.model.config["site_url"] + else str(MONGODB_EXPORTER_PORT), + "metrics_path": "/metrics", + "scrape_interval": "30s", + "scrape_timeout": "15s", } for k, v in rel_data.items(): event.relation.data[self.unit][k] = v @@ -146,7 +154,8 @@ class PrometheusMongodbExporterCharm(CharmBase): event (EventBase): Exporter relation event. """ rel_data = { - "dashboard": Path("files/mongodb_exporter_dashboard.yaml").read_text(), + "name": "osm-mongodb", + "dashboard": Path("files/mongodb_exporter_dashboard.json").read_text(), } for k, v in rel_data.items(): event.relation.data[self.unit][k] = v @@ -213,4 +222,4 @@ class PrometheusMongodbExporterCharm(CharmBase): if __name__ == "__main__": - main(PrometheusMongodbExporterCharm) + main(MongodbExporterCharm) diff --git a/installers/charm/prometheus-mongodb-exporter/src/pod_spec.py b/installers/charm/mongodb-exporter/src/pod_spec.py similarity index 92% rename from installers/charm/prometheus-mongodb-exporter/src/pod_spec.py rename to installers/charm/mongodb-exporter/src/pod_spec.py index 44acb765..781c6892 100644 --- a/installers/charm/prometheus-mongodb-exporter/src/pod_spec.py +++ b/installers/charm/mongodb-exporter/src/pod_spec.py @@ -103,7 +103,7 @@ def _make_pod_ports(port: int) -> List[Dict[str, Any]]: """ return [ { - "name": "prometheus-mongodb-exporter", + "name": "mongo-exporter", "containerPort": port, "protocol": "TCP", } @@ -122,7 +122,9 @@ def _make_pod_envconfig( Returns: Dict[str, Any]: pod environment configuration. """ - envconfig = {} + envconfig = { + "MONGODB_URI": relation_state.get("mongodb_connection_string"), + } return envconfig @@ -238,28 +240,11 @@ def _make_liveness_probe(port: int) -> Dict[str, Any]: } -def _make_pod_command(relation: Dict[str, Any]) -> List[str]: - """Generate the startup command. - - Args: - relation (Dict[str, Any]): Relation information. - - Returns: - List[str]: command to startup the process. - """ - command = [ - "mongodb_exporter_linux_amd64/mongodb_exporter", - "--mongodbdsn={}".format(relation.get("mongodb_connection_string")), - ] - - return command - - def make_pod_spec( image_info: Dict[str, str], config: Dict[str, Any], relation_state: Dict[str, Any], - app_name: str = "prometheus-mongodb-exporter", + app_name: str = "mongodb-exporter", port: int = 9216, ) -> Dict[str, Any]: """Generate the pod spec information. @@ -285,7 +270,6 @@ def make_pod_spec( readiness_probe = _make_readiness_probe(port) liveness_probe = _make_liveness_probe(port) ingress_resources = _make_pod_ingress_resources(config, app_name, port) - command = _make_pod_command(relation_state) return { "version": 3, @@ -296,7 +280,6 @@ def make_pod_spec( "imagePullPolicy": "Always", "ports": ports, "envConfig": env_config, - "command": command, "kubernetes": { "readinessProbe": readiness_probe, "livenessProbe": liveness_probe, diff --git a/installers/charm/prometheus-mongodb-exporter/tests/__init__.py b/installers/charm/mongodb-exporter/tests/__init__.py similarity index 100% rename from installers/charm/prometheus-mongodb-exporter/tests/__init__.py rename to installers/charm/mongodb-exporter/tests/__init__.py diff --git a/installers/charm/prometheus-mongodb-exporter/tests/test_charm.py b/installers/charm/mongodb-exporter/tests/test_charm.py similarity index 82% rename from installers/charm/prometheus-mongodb-exporter/tests/test_charm.py rename to installers/charm/mongodb-exporter/tests/test_charm.py index 89d30cd9..372886b4 100644 --- a/installers/charm/prometheus-mongodb-exporter/tests/test_charm.py +++ b/installers/charm/mongodb-exporter/tests/test_charm.py @@ -26,15 +26,15 @@ import unittest from ops.model import BlockedStatus from ops.testing import Harness -from charm import PrometheusMongodbExporterCharm +from charm import MongodbExporterCharm class TestCharm(unittest.TestCase): - """Prometheus Mongodb Exporter Charm unit tests.""" + """Mongodb Exporter Charm unit tests.""" def setUp(self) -> NoReturn: """Test setup""" - self.harness = Harness(PrometheusMongodbExporterCharm) + self.harness = Harness(MongodbExporterCharm) self.harness.set_leader(is_leader=True) self.harness.begin() @@ -59,21 +59,19 @@ class TestCharm(unittest.TestCase): "version": 3, "containers": [ { - "name": "prometheus-mongodb-exporter", + "name": "mongodb-exporter", "imageDetails": self.harness.charm.image.fetch(), "imagePullPolicy": "Always", "ports": [ { - "name": "prometheus-mongodb-exporter", + "name": "mongo-exporter", "containerPort": 9216, "protocol": "TCP", } ], - "envConfig": {}, - "command": [ - "mongodb_exporter_linux_amd64/mongodb_exporter", - "--mongodbdsn=mongodb://mongo", - ], + "envConfig": { + "MONGODB_URI": "mongodb://mongo", + }, "kubernetes": { "readinessProbe": { "httpGet": { @@ -127,21 +125,19 @@ class TestCharm(unittest.TestCase): "version": 3, "containers": [ { - "name": "prometheus-mongodb-exporter", + "name": "mongodb-exporter", "imageDetails": self.harness.charm.image.fetch(), "imagePullPolicy": "Always", "ports": [ { - "name": "prometheus-mongodb-exporter", + "name": "mongo-exporter", "containerPort": 9216, "protocol": "TCP", } ], - "envConfig": {}, - "command": [ - "mongodb_exporter_linux_amd64/mongodb_exporter", - "--mongodbdsn=mongodb://mongo", - ], + "envConfig": { + "MONGODB_URI": "mongodb://mongo", + }, "kubernetes": { "readinessProbe": { "httpGet": { @@ -169,20 +165,20 @@ class TestCharm(unittest.TestCase): "kubernetesResources": { "ingressResources": [ { - "name": "prometheus-mongodb-exporter-ingress", + "name": "mongodb-exporter-ingress", "annotations": { "nginx.ingress.kubernetes.io/ssl-redirect": "false", }, "spec": { "rules": [ { - "host": "prometheus-mongodb-exporter", + "host": "mongodb-exporter", "http": { "paths": [ { "path": "/", "backend": { - "serviceName": "prometheus-mongodb-exporter", + "serviceName": "mongodb-exporter", "servicePort": 9216, }, } @@ -209,7 +205,7 @@ class TestCharm(unittest.TestCase): }, ) - self.harness.update_config({"site_url": "http://prometheus-mongodb-exporter"}) + self.harness.update_config({"site_url": "http://mongodb-exporter"}) pod_spec, _ = self.harness.get_pod_spec() @@ -221,21 +217,19 @@ class TestCharm(unittest.TestCase): "version": 3, "containers": [ { - "name": "prometheus-mongodb-exporter", + "name": "mongodb-exporter", "imageDetails": self.harness.charm.image.fetch(), "imagePullPolicy": "Always", "ports": [ { - "name": "prometheus-mongodb-exporter", + "name": "mongo-exporter", "containerPort": 9216, "protocol": "TCP", } ], - "envConfig": {}, - "command": [ - "mongodb_exporter_linux_amd64/mongodb_exporter", - "--mongodbdsn=mongodb://mongo", - ], + "envConfig": { + "MONGODB_URI": "mongodb://mongo", + }, "kubernetes": { "readinessProbe": { "httpGet": { @@ -263,18 +257,18 @@ class TestCharm(unittest.TestCase): "kubernetesResources": { "ingressResources": [ { - "name": "prometheus-mongodb-exporter-ingress", + "name": "mongodb-exporter-ingress", "annotations": {}, "spec": { "rules": [ { - "host": "prometheus-mongodb-exporter", + "host": "mongodb-exporter", "http": { "paths": [ { "path": "/", "backend": { - "serviceName": "prometheus-mongodb-exporter", + "serviceName": "mongodb-exporter", "servicePort": 9216, }, } @@ -284,8 +278,8 @@ class TestCharm(unittest.TestCase): ], "tls": [ { - "hosts": ["prometheus-mongodb-exporter"], - "secretName": "prometheus-mongodb-exporter", + "hosts": ["mongodb-exporter"], + "secretName": "mongodb-exporter", } ], }, @@ -309,8 +303,8 @@ class TestCharm(unittest.TestCase): self.harness.update_config( { - "site_url": "https://prometheus-mongodb-exporter", - "tls_secret_name": "prometheus-mongodb-exporter", + "site_url": "https://mongodb-exporter", + "tls_secret_name": "mongodb-exporter", } ) @@ -324,21 +318,19 @@ class TestCharm(unittest.TestCase): "version": 3, "containers": [ { - "name": "prometheus-mongodb-exporter", + "name": "mongodb-exporter", "imageDetails": self.harness.charm.image.fetch(), "imagePullPolicy": "Always", "ports": [ { - "name": "prometheus-mongodb-exporter", + "name": "mongo-exporter", "containerPort": 9216, "protocol": "TCP", } ], - "envConfig": {}, - "command": [ - "mongodb_exporter_linux_amd64/mongodb_exporter", - "--mongodbdsn=mongodb://mongo", - ], + "envConfig": { + "MONGODB_URI": "mongodb://mongo", + }, "kubernetes": { "readinessProbe": { "httpGet": { @@ -366,20 +358,20 @@ class TestCharm(unittest.TestCase): "kubernetesResources": { "ingressResources": [ { - "name": "prometheus-mongodb-exporter-ingress", + "name": "mongodb-exporter-ingress", "annotations": { "nginx.ingress.kubernetes.io/whitelist-source-range": "0.0.0.0/0", }, "spec": { "rules": [ { - "host": "prometheus-mongodb-exporter", + "host": "mongodb-exporter", "http": { "paths": [ { "path": "/", "backend": { - "serviceName": "prometheus-mongodb-exporter", + "serviceName": "mongodb-exporter", "servicePort": 9216, }, } @@ -389,8 +381,8 @@ class TestCharm(unittest.TestCase): ], "tls": [ { - "hosts": ["prometheus-mongodb-exporter"], - "secretName": "prometheus-mongodb-exporter", + "hosts": ["mongodb-exporter"], + "secretName": "mongodb-exporter", } ], }, @@ -414,8 +406,8 @@ class TestCharm(unittest.TestCase): self.harness.update_config( { - "site_url": "https://prometheus-mongodb-exporter", - "tls_secret_name": "prometheus-mongodb-exporter", + "site_url": "https://mongodb-exporter", + "tls_secret_name": "mongodb-exporter", "ingress_whitelist_source_range": "0.0.0.0/0", } ) @@ -442,19 +434,44 @@ class TestCharm(unittest.TestCase): # Verifying status self.assertNotIsInstance(self.harness.charm.unit.status, BlockedStatus) - def test_publish_target_info(self) -> NoReturn: - """Test to see if target relation is updated.""" + def test_publish_scrape_info(self) -> NoReturn: + """Test to see if scrape relation is updated.""" expected_result = { - "hostname": "prometheus-mongodb-exporter", + "hostname": "mongodb-exporter", "port": "9216", + "metrics_path": "/metrics", + "scrape_interval": "30s", + "scrape_timeout": "15s", + } + + self.harness.charm.on.start.emit() + + relation_id = self.harness.add_relation("prometheus-scrape", "prometheus") + self.harness.add_relation_unit(relation_id, "prometheus/0") + relation_data = self.harness.get_relation_data( + relation_id, "mongodb-exporter/0" + ) + + self.assertDictEqual(expected_result, relation_data) + + def test_publish_scrape_info_with_site_url(self) -> NoReturn: + """Test to see if target relation is updated.""" + expected_result = { + "hostname": "mongodb-exporter-osm", + "port": "80", + "metrics_path": "/metrics", + "scrape_interval": "30s", + "scrape_timeout": "15s", } self.harness.charm.on.start.emit() - relation_id = self.harness.add_relation("prometheus-target", "prometheus") + self.harness.update_config({"site_url": "http://mongodb-exporter-osm"}) + + relation_id = self.harness.add_relation("prometheus-scrape", "prometheus") self.harness.add_relation_unit(relation_id, "prometheus/0") relation_data = self.harness.get_relation_data( - relation_id, "prometheus-mongodb-exporter/0" + relation_id, "mongodb-exporter/0" ) self.assertDictEqual(expected_result, relation_data) @@ -466,9 +483,10 @@ class TestCharm(unittest.TestCase): relation_id = self.harness.add_relation("grafana-dashboard", "grafana") self.harness.add_relation_unit(relation_id, "grafana/0") relation_data = self.harness.get_relation_data( - relation_id, "prometheus-mongodb-exporter/0" + relation_id, "mongodb-exporter/0" ) + self.assertEqual("osm-mongodb", relation_data["name"]) self.assertTrue("dashboard" in relation_data) self.assertTrue(len(relation_data["dashboard"]) > 0) diff --git a/installers/charm/prometheus-mongodb-exporter/tests/test_pod_spec.py b/installers/charm/mongodb-exporter/tests/test_pod_spec.py similarity index 88% rename from installers/charm/prometheus-mongodb-exporter/tests/test_pod_spec.py rename to installers/charm/mongodb-exporter/tests/test_pod_spec.py index e907cc03..3e312f48 100644 --- a/installers/charm/prometheus-mongodb-exporter/tests/test_pod_spec.py +++ b/installers/charm/mongodb-exporter/tests/test_pod_spec.py @@ -35,7 +35,7 @@ class TestPodSpec(unittest.TestCase): expected_result = [ { - "name": "prometheus-mongodb-exporter", + "name": "mongo-exporter", "containerPort": port, "protocol": "TCP", } @@ -52,7 +52,7 @@ class TestPodSpec(unittest.TestCase): "mongodb_connection_string": "mongodb://mongo", } - expected_result = {} + expected_result = {"MONGODB_URI": "mongodb://mongo"} pod_envconfig = pod_spec._make_pod_envconfig(config, relation_state) @@ -61,7 +61,7 @@ class TestPodSpec(unittest.TestCase): def test_make_pod_ingress_resources_without_site_url(self) -> NoReturn: """Testing make pod ingress resources without site_url.""" config = {"site_url": ""} - app_name = "prometheus-mongodb-exporter" + app_name = "mongodb-exporter" port = 9216 pod_ingress_resources = pod_spec._make_pod_ingress_resources( @@ -73,10 +73,10 @@ class TestPodSpec(unittest.TestCase): def test_make_pod_ingress_resources(self) -> NoReturn: """Testing make pod ingress resources.""" config = { - "site_url": "http://prometheus-mongodb-exporter", + "site_url": "http://mongodb-exporter", "ingress_whitelist_source_range": "", } - app_name = "prometheus-mongodb-exporter" + app_name = "mongodb-exporter" port = 9216 expected_result = [ @@ -115,10 +115,10 @@ class TestPodSpec(unittest.TestCase): def test_make_pod_ingress_resources_with_whitelist_source_range(self) -> NoReturn: """Testing make pod ingress resources with whitelist_source_range.""" config = { - "site_url": "http://prometheus-mongodb-exporter", + "site_url": "http://mongodb-exporter", "ingress_whitelist_source_range": "0.0.0.0/0", } - app_name = "prometheus-mongodb-exporter" + app_name = "mongodb-exporter" port = 9216 expected_result = [ @@ -160,11 +160,11 @@ class TestPodSpec(unittest.TestCase): def test_make_pod_ingress_resources_with_https(self) -> NoReturn: """Testing make pod ingress resources with HTTPs.""" config = { - "site_url": "https://prometheus-mongodb-exporter", + "site_url": "https://mongodb-exporter", "ingress_whitelist_source_range": "", "tls_secret_name": "", } - app_name = "prometheus-mongodb-exporter" + app_name = "mongodb-exporter" port = 9216 expected_result = [ @@ -202,11 +202,11 @@ class TestPodSpec(unittest.TestCase): def test_make_pod_ingress_resources_with_https_tls_secret_name(self) -> NoReturn: """Testing make pod ingress resources with HTTPs and TLS secret name.""" config = { - "site_url": "https://prometheus-mongodb-exporter", + "site_url": "https://mongodb-exporter", "ingress_whitelist_source_range": "", "tls_secret_name": "secret_name", } - app_name = "prometheus-mongodb-exporter" + app_name = "mongodb-exporter" port = 9216 expected_result = [ @@ -281,21 +281,6 @@ class TestPodSpec(unittest.TestCase): self.assertDictEqual(expected_result, liveness_probe) - def test_make_pod_command(self) -> NoReturn: - """Testing make pod command.""" - relation = { - "mongodb_connection_string": "mongodb://mongo", - } - - expected_result = [ - "mongodb_exporter_linux_amd64/mongodb_exporter", - "--mongodbdsn={}".format(relation.get("mongodb_connection_string")), - ] - - pod_envconfig = pod_spec._make_pod_command(relation) - - self.assertListEqual(expected_result, pod_envconfig) - def test_make_pod_spec(self) -> NoReturn: """Testing make pod spec.""" image_info = {"upstream-source": "bitnami/mongodb-exporter:latest"} @@ -305,7 +290,7 @@ class TestPodSpec(unittest.TestCase): relation_state = { "mongodb_connection_string": "mongodb://mongo", } - app_name = "prometheus-mongodb-exporter" + app_name = "mongodb-exporter" port = 9216 expected_result = { @@ -317,16 +302,14 @@ class TestPodSpec(unittest.TestCase): "imagePullPolicy": "Always", "ports": [ { - "name": app_name, + "name": "mongo-exporter", "containerPort": port, "protocol": "TCP", } ], - "envConfig": {}, - "command": [ - "mongodb_exporter_linux_amd64/mongodb_exporter", - "--mongodbdsn=mongodb://mongo", - ], + "envConfig": { + "MONGODB_URI": "mongodb://mongo", + }, "kubernetes": { "readinessProbe": { "httpGet": { @@ -364,14 +347,14 @@ class TestPodSpec(unittest.TestCase): """Testing make pod spec.""" image_info = {"upstream-source": "bitnami/mongodb-exporter:latest"} config = { - "site_url": "https://prometheus-mongodb-exporter", - "tls_secret_name": "prometheus-mongodb-exporter", + "site_url": "https://mongodb-exporter", + "tls_secret_name": "mongodb-exporter", "ingress_whitelist_source_range": "0.0.0.0/0", } relation_state = { "mongodb_connection_string": "mongodb://mongo", } - app_name = "prometheus-mongodb-exporter" + app_name = "mongodb-exporter" port = 9216 expected_result = { @@ -383,16 +366,14 @@ class TestPodSpec(unittest.TestCase): "imagePullPolicy": "Always", "ports": [ { - "name": app_name, + "name": "mongo-exporter", "containerPort": port, "protocol": "TCP", } ], - "envConfig": {}, - "command": [ - "mongodb_exporter_linux_amd64/mongodb_exporter", - "--mongodbdsn=mongodb://mongo", - ], + "envConfig": { + "MONGODB_URI": "mongodb://mongo", + }, "kubernetes": { "readinessProbe": { "httpGet": { @@ -470,7 +451,7 @@ class TestPodSpec(unittest.TestCase): relation_state = { "mongodb_connection_string": "mongodb://mongo", } - app_name = "prometheus-mongodb-exporter" + app_name = "mongodb-exporter" port = 9216 spec = pod_spec.make_pod_spec( @@ -486,7 +467,7 @@ class TestPodSpec(unittest.TestCase): "site_url": "", } relation_state = {} - app_name = "prometheus-mongodb-exporter" + app_name = "mongodb-exporter" port = 9216 with self.assertRaises(ValueError): diff --git a/installers/charm/prometheus-mongodb-exporter/tox.ini b/installers/charm/mongodb-exporter/tox.ini similarity index 92% rename from installers/charm/prometheus-mongodb-exporter/tox.ini rename to installers/charm/mongodb-exporter/tox.ini index a20a6f0a..69911728 100644 --- a/installers/charm/prometheus-mongodb-exporter/tox.ini +++ b/installers/charm/mongodb-exporter/tox.ini @@ -30,7 +30,7 @@ basepython = python3 setenv = PYTHONHASHSEED=0 PYTHONPATH = {toxinidir}/src - CHARM_NAME = prometheus-mongodb-exporter + CHARM_NAME = mongodb-exporter [testenv:build] passenv=HTTP_PROXY HTTPS_PROXY NO_PROXY @@ -39,9 +39,9 @@ whitelist_externals = rm unzip commands = - rm -rf release prometheus-mongodb-exporter.charm + rm -rf release mongodb-exporter.charm charmcraft build - unzip prometheus-mongodb-exporter.charm -d release + unzip mongodb-exporter.charm -d release [testenv:unit] commands = diff --git a/installers/charm/prometheus-mongodb-exporter/files/mongodb_exporter_dashboard.yaml b/installers/charm/prometheus-mongodb-exporter/files/mongodb_exporter_dashboard.yaml deleted file mode 100644 index b2489f4a..00000000 --- a/installers/charm/prometheus-mongodb-exporter/files/mongodb_exporter_dashboard.yaml +++ /dev/null @@ -1,691 +0,0 @@ -# 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 -- 2.25.1