{ "annotations": { "list": [ { "builtIn": 1, "datasource": "-- Grafana --", "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" }, { "datasource": "-- Grafana --", "enable": true, "hide": true, "iconColor": "#73BF69", "limit": 100, "name": "PromEx service start", "showIn": 0, "tags": ["prom_ex", "pinchflat", "start"], "type": "tags" }, { "datasource": "-- Grafana --", "enable": true, "hide": true, "iconColor": "#FF9830", "limit": 100, "name": "PromEx service stop", "showIn": 0, "tags": ["prom_ex", "pinchflat", "stop"], "type": "tags" } ] }, "description": "All the data that is presented here is captured by the PromEx Ecto plugin (https://github.com/akoutmos/prom_ex/blob/master/lib/prom_ex/plugins/ecto.ex)", "editable": false, "gnetId": null, "graphTooltip": 1, "id": null, "links": [ { "asDropdown": false, "icon": "bolt", "includeVars": false, "keepTime": false, "tags": [], "targetBlank": true, "title": "Sponsor PromEx", "tooltip": "", "type": "link", "url": "https://github.com/sponsors/akoutmos" }, { "asDropdown": false, "icon": "doc", "includeVars": false, "keepTime": false, "tags": [], "targetBlank": true, "title": "Ecto Plugin Docs", "tooltip": "", "type": "link", "url": "https://hexdocs.pm/prom_ex/PromEx.Plugins.Ecto.html" } ], "panels": [ { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 19, "panels": [], "title": "Overview", "type": "row" }, { "datasource": "prometheus", "description": "The time the connection spent waiting before being checked out for the query.", "fieldConfig": { "defaults": { "custom": {}, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "ms" }, "overrides": [] }, "gridPos": { "h": 8, "w": 6, "x": 0, "y": 1 }, "id": 24, "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, "pluginVersion": "7.1.3", "targets": [ { "expr": "pinchflat_prom_ex_ecto_repo_query_idle_time_milliseconds_sum{instance=\"$instance\", job=\"$job\", repo=\"$repo\"} / pinchflat_prom_ex_ecto_repo_query_idle_time_milliseconds_count{instance=\"$instance\", job=\"$job\", repo=\"$repo\"}", "instant": false, "interval": "", "legendFormat": "", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Connection Idle Time (Average)", "type": "stat" }, { "datasource": "prometheus", "description": "The time spent waiting to check out a database connection.", "fieldConfig": { "defaults": { "custom": {}, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "ms" }, "overrides": [] }, "gridPos": { "h": 8, "w": 6, "x": 6, "y": 1 }, "id": 29, "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, "pluginVersion": "7.1.3", "targets": [ { "expr": "pinchflat_prom_ex_ecto_repo_query_queue_time_milliseconds_sum{instance=\"$instance\", job=\"$job\", repo=\"$repo\"} / pinchflat_prom_ex_ecto_repo_query_queue_time_milliseconds_count{instance=\"$instance\", job=\"$job\", repo=\"$repo\"}", "instant": false, "interval": "", "legendFormat": "", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Connection Queue Time (Average)", "type": "stat" }, { "datasource": "prometheus", "description": "The time spent decoding the data received from the database.", "fieldConfig": { "defaults": { "custom": {}, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "ms" }, "overrides": [] }, "gridPos": { "h": 8, "w": 6, "x": 12, "y": 1 }, "id": 30, "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, "pluginVersion": "7.1.3", "targets": [ { "expr": "pinchflat_prom_ex_ecto_repo_query_decode_time_milliseconds_sum{instance=\"$instance\", job=\"$job\", repo=\"$repo\"} / pinchflat_prom_ex_ecto_repo_query_decode_time_milliseconds_count{instance=\"$instance\", job=\"$job\", repo=\"$repo\"}", "instant": false, "interval": "", "legendFormat": "", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Connection Decode Time (Average)", "type": "stat" }, { "datasource": "prometheus", "description": "The time spent executing the query. This value is the average time across all query types (SELECT, DELETE, etc).", "fieldConfig": { "defaults": { "custom": {}, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "ms" }, "overrides": [] }, "gridPos": { "h": 8, "w": 6, "x": 18, "y": 1 }, "id": 31, "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, "pluginVersion": "7.1.3", "targets": [ { "expr": "sum(pinchflat_prom_ex_ecto_repo_query_execution_time_milliseconds_sum{instance=\"$instance\", job=\"$job\", repo=\"$repo\"}) / sum(pinchflat_prom_ex_ecto_repo_query_execution_time_milliseconds_count{instance=\"$instance\", job=\"$job\", repo=\"$repo\"})", "instant": false, "interval": "", "legendFormat": "", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Connection Execution Time (Average)", "type": "stat" }, { "datasource": "prometheus", "description": "The name of the Ecto Repo module", "fieldConfig": { "defaults": { "custom": {}, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "none" }, "overrides": [] }, "gridPos": { "h": 4, "w": 3, "x": 0, "y": 9 }, "id": 21, "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": ["last"], "fields": "/^repo$/", "values": false }, "textMode": "auto" }, "pluginVersion": "7.1.3", "targets": [ { "expr": "pinchflat_prom_ex_ecto_repo_init_status_info{job=\"$job\", instance=\"$instance\", repo=\"$repo\"}", "instant": true, "interval": "", "legendFormat": "", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Ecto Repo", "transformations": [ { "id": "labelsToFields", "options": {} } ], "type": "stat" }, { "datasource": "prometheus", "description": "The host of the database that the Repo is connected to.", "fieldConfig": { "defaults": { "custom": {}, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "none" }, "overrides": [] }, "gridPos": { "h": 4, "w": 3, "x": 3, "y": 9 }, "id": 26, "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": ["last"], "fields": "/^database_host$/", "values": false }, "textMode": "auto" }, "pluginVersion": "7.1.3", "targets": [ { "expr": "pinchflat_prom_ex_ecto_repo_init_status_info{job=\"$job\", instance=\"$instance\", repo=\"$repo\"}", "instant": true, "interval": "", "legendFormat": "", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Database Host", "transformations": [ { "id": "labelsToFields", "options": {} } ], "type": "stat" }, { "datasource": "prometheus", "description": "The name of the database that the Repo is connected to.", "fieldConfig": { "defaults": { "custom": {}, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "none" }, "overrides": [] }, "gridPos": { "h": 4, "w": 3, "x": 6, "y": 9 }, "id": 25, "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": ["last"], "fields": "/^database_name$/", "values": false }, "textMode": "auto" }, "pluginVersion": "7.1.3", "targets": [ { "expr": "pinchflat_prom_ex_ecto_repo_init_status_info{job=\"$job\", instance=\"$instance\", repo=\"$repo\"}", "instant": false, "interval": "", "legendFormat": "", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Database Name", "transformations": [ { "id": "labelsToFields", "options": {} } ], "type": "stat" }, { "datasource": "prometheus", "description": "The pool size that the repo was initialized with.", "fieldConfig": { "defaults": { "custom": {}, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "none" }, "overrides": [] }, "gridPos": { "h": 4, "w": 3, "x": 9, "y": 9 }, "id": 27, "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": ["last"], "fields": "/init_pool_size/", "values": false }, "textMode": "auto" }, "pluginVersion": "7.1.3", "targets": [ { "expr": "pinchflat_prom_ex_ecto_repo_init_pool_size{job=\"$job\", instance=\"$instance\", repo=\"$repo\"}", "instant": true, "interval": "", "legendFormat": "", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Pool Size", "transformations": [ { "id": "labelsToFields", "options": {} } ], "type": "stat" }, { "datasource": "prometheus", "description": "The timeout duration that the Repo was initialized with.", "fieldConfig": { "defaults": { "custom": {}, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "ms" }, "overrides": [] }, "gridPos": { "h": 4, "w": 3, "x": 12, "y": 9 }, "id": 28, "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": ["last"], "fields": "/init_timeout_duration/", "values": false }, "textMode": "auto" }, "pluginVersion": "7.1.3", "targets": [ { "expr": "pinchflat_prom_ex_ecto_repo_init_timeout_duration{job=\"$job\", instance=\"$instance\", repo=\"$repo\"}", "instant": true, "interval": "", "legendFormat": "", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Timeout Duration", "transformations": [ { "id": "labelsToFields", "options": {} } ], "type": "stat" }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 13 }, "id": 2, "panels": [], "title": "Query Details", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "prometheus", "description": "The average total time to execute and decode a database query.", "fill": 1, "fillGradient": 0, "gridPos": { "h": 13, "w": 12, "x": 0, "y": 14 }, "hiddenSeries": false, "id": 32, "legend": { "alignAsTable": true, "avg": false, "current": true, "hideEmpty": false, "hideZero": false, "max": true, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "nullPointMode": "null as zero", "percentage": false, "pluginVersion": "7.1.3", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(irate(pinchflat_prom_ex_ecto_repo_query_total_time_milliseconds_sum{job=\"$job\", instance=\"$instance\", repo=\"$repo\"}[$interval])) by(command) / sum(irate(pinchflat_prom_ex_ecto_repo_query_total_time_milliseconds_count{job=\"$job\", instance=\"$instance\", repo=\"$repo\"}[$interval])) by(command)", "interval": "", "legendFormat": "{{ command }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Average Total Execution Time", "tooltip": { "shared": true, "sort": 2, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "ms", "label": "Response Time", "logBase": 1, "max": null, "min": "0", "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "cards": { "cardPadding": null, "cardRound": null }, "color": { "cardColor": "#b4ff00", "colorScale": "sqrt", "colorScheme": "interpolateOranges", "exponent": 0.5, "mode": "spectrum" }, "dataFormat": "tsbuckets", "datasource": "prometheus", "description": "A heatmap showing the total time spread across all Repo query executions (regardless of query type).", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "gridPos": { "h": 13, "w": 12, "x": 12, "y": 14 }, "heatmap": {}, "hideZeroBuckets": true, "highlightCards": true, "id": 6, "legend": { "show": true }, "pluginVersion": "7.1.3", "reverseYBuckets": false, "targets": [ { "expr": "sum(irate(pinchflat_prom_ex_ecto_repo_query_execution_time_milliseconds_bucket{job=\"$job\", instance=\"$instance\", repo=\"$repo\"}[$interval])) by (le)", "format": "heatmap", "hide": false, "interval": "", "legendFormat": "{{ le }}", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Total Execution Time", "tooltip": { "show": true, "showHistogram": true }, "type": "heatmap", "xAxis": { "show": true }, "xBucketNumber": null, "xBucketSize": null, "yAxis": { "decimals": null, "format": "ms", "logBase": 1, "max": null, "min": null, "show": true, "splitFactor": null }, "yBucketBound": "auto", "yBucketNumber": null, "yBucketSize": null }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "prometheus", "description": "The average query execution time per Ecto command.", "fill": 1, "fillGradient": 0, "gridPos": { "h": 13, "w": 12, "x": 0, "y": 27 }, "hiddenSeries": false, "id": 11, "legend": { "alignAsTable": true, "avg": false, "current": true, "hideEmpty": false, "hideZero": false, "max": true, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "nullPointMode": "null as zero", "percentage": false, "pluginVersion": "7.1.3", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(irate(pinchflat_prom_ex_ecto_repo_query_execution_time_milliseconds_sum{job=\"$job\", instance=\"$instance\", repo=\"$repo\"}[$interval])) by(command) / sum(irate(pinchflat_prom_ex_ecto_repo_query_execution_time_milliseconds_count{job=\"$job\", instance=\"$instance\", repo=\"$repo\"}[$interval])) by(command)", "interval": "", "legendFormat": "{{ command }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Average Query Execution Time", "tooltip": { "shared": true, "sort": 2, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "ms", "label": "Response Time", "logBase": 1, "max": null, "min": "0", "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "cards": { "cardPadding": null, "cardRound": null }, "color": { "cardColor": "#b4ff00", "colorScale": "sqrt", "colorScheme": "interpolateOranges", "exponent": 0.5, "mode": "spectrum" }, "dataFormat": "tsbuckets", "datasource": "prometheus", "description": "A heatmap showing the request time spread across all Repo query executions (regardless of query type).", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "gridPos": { "h": 13, "w": 12, "x": 12, "y": 27 }, "heatmap": {}, "hideZeroBuckets": true, "highlightCards": true, "id": 33, "legend": { "show": true }, "pluginVersion": "7.1.3", "reverseYBuckets": false, "targets": [ { "expr": "sum(irate(pinchflat_prom_ex_ecto_repo_query_execution_time_milliseconds_bucket{job=\"$job\", instance=\"$instance\", repo=\"$repo\"}[$interval])) by (le)", "format": "heatmap", "hide": false, "interval": "", "legendFormat": "{{ le }}", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Query Execution Time", "tooltip": { "show": true, "showHistogram": true }, "type": "heatmap", "xAxis": { "show": true }, "xBucketNumber": null, "xBucketSize": null, "yAxis": { "decimals": null, "format": "ms", "logBase": 1, "max": null, "min": null, "show": true, "splitFactor": null }, "yBucketBound": "auto", "yBucketNumber": null, "yBucketSize": null }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "prometheus", "description": "The number of operations taking place on each data source.", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 13, "w": 12, "x": 0, "y": 40 }, "hiddenSeries": false, "id": 13, "legend": { "alignAsTable": true, "avg": false, "current": true, "hideEmpty": false, "hideZero": false, "max": true, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "nullPointMode": "null as zero", "percentage": false, "pluginVersion": "7.1.3", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(increase(pinchflat_prom_ex_ecto_repo_query_execution_time_milliseconds_count{instance=\"$instance\", job=\"$job\", repo=\"$repo\"}[$interval])) by(source)", "interval": "", "legendFormat": "{{ source }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Operations Per Source", "tooltip": { "shared": true, "sort": 2, "value_type": "individual" }, "transformations": [], "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "locale", "label": "Source Operations", "logBase": 1, "max": null, "min": "0", "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "cards": { "cardPadding": null, "cardRound": null }, "color": { "cardColor": "#b4ff00", "colorScale": "sqrt", "colorScheme": "interpolateOranges", "exponent": 0.5, "mode": "spectrum" }, "dataFormat": "tsbuckets", "datasource": "prometheus", "description": "A heatmap showing the number of results returned from the database (summed up across all operations and sources).", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "gridPos": { "h": 13, "w": 12, "x": 12, "y": 40 }, "heatmap": {}, "hideZeroBuckets": true, "highlightCards": true, "id": 12, "legend": { "show": true }, "pluginVersion": "7.1.3", "reverseYBuckets": false, "targets": [ { "expr": "sum(irate(pinchflat_prom_ex_ecto_repo_query_results_returned_bucket{job=\"$job\", instance=\"$instance\", repo=\"$repo\"}[$interval])) by (le)", "format": "heatmap", "hide": false, "interval": "", "legendFormat": "{{ le }}", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Results Returned", "tooltip": { "show": true, "showHistogram": true }, "type": "heatmap", "xAxis": { "show": true }, "xBucketNumber": null, "xBucketSize": null, "yAxis": { "decimals": null, "format": "locale", "logBase": 1, "max": null, "min": null, "show": true, "splitFactor": null }, "yBucketBound": "auto", "yBucketNumber": null, "yBucketSize": null } ], "refresh": "5s", "schemaVersion": 26, "style": "dark", "tags": ["PromEx", "Ecto", "pinchflat"], "templating": { "list": [ { "allValue": null, "datasource": "prometheus", "definition": "label_values(pinchflat_prom_ex_prom_ex_status_info, job)", "hide": 0, "includeAll": false, "label": "Prometheus Job", "multi": false, "name": "job", "options": [], "query": "label_values(pinchflat_prom_ex_prom_ex_status_info, job)", "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 6, "tagValuesQuery": "", "tags": [], "tagsQuery": "", "type": "query", "useTags": false }, { "allValue": null, "datasource": "prometheus", "definition": "label_values(pinchflat_prom_ex_prom_ex_status_info, instance)", "hide": 0, "includeAll": false, "label": "Application Instance", "multi": false, "name": "instance", "options": [], "query": "label_values(pinchflat_prom_ex_prom_ex_status_info{job=\"$job\"}, instance)", "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, "tagValuesQuery": "", "tags": [], "tagsQuery": "", "type": "query", "useTags": false }, { "allValue": null, "datasource": "prometheus", "definition": "label_values(pinchflat_prom_ex_ecto_repo_init_status_info, repo)", "hide": 0, "includeAll": false, "label": "Ecto Repo", "multi": false, "name": "repo", "options": [], "query": "label_values(pinchflat_prom_ex_ecto_repo_init_status_info, repo)", "refresh": 1, "regex": "", "skipUrlSync": false, "sort": 1, "tagValuesQuery": "", "tags": [], "tagsQuery": "", "type": "query", "useTags": false }, { "auto": false, "auto_count": 30, "auto_min": "10s", "current": { "selected": false, "text": "30s", "value": "30s" }, "hide": 0, "label": "Interval", "name": "interval", "options": [ { "selected": false, "text": "15s", "value": "15s" }, { "selected": true, "text": "30s", "value": "30s" }, { "selected": false, "text": "1m", "value": "1m" }, { "selected": false, "text": "5m", "value": "5m" }, { "selected": false, "text": "15m", "value": "15m" }, { "selected": false, "text": "30m", "value": "30m" }, { "selected": false, "text": "1h", "value": "1h" } ], "query": "15s, 30s, 1m, 5m, 15m, 30m, 1h", "queryValue": "", "refresh": 2, "skipUrlSync": false, "type": "interval" } ] }, "time": { "from": "now-1h", "to": "now" }, "timepicker": { "refresh_intervals": ["5s", "10s", "30s", "1m", "5m"] }, "timezone": "", "title": "Pinchflat - PromEx Ecto Dashboard", "uid": "449823C137E6C016E4480ADDA42E94EE", "version": 1 }