From fcc0d3cb73add2e48f2919db6b51d47c2983bb0c Mon Sep 17 00:00:00 2001 From: Parth Yadav Date: Wed, 15 Jan 2020 12:51:25 +0530 Subject: Support: Container Metrics collection and Visualization A. Collector: Add cAdvisor Collector This patch adds supports for Container Metrics collection using cAdvisor. The collector: 1. Pushes metrics to InfluxDB storage 2. Stores metrics locally in Result Dir 3. Implements print_results() for metric summary 4. Is configurable from 05_collector.conf B. Docker: Grafana Dashboard This patch also adds JSON file for Grafana Dashboard for Container Metrics Signed-off-by: Parth Yadav Change-Id: I7c39d4e1a7a46d3a499a241e618bd0da7eed53a8 --- .../dashboards/container_metrics_dashboard.json | 1291 ++++++++++++++++++++ 1 file changed, 1291 insertions(+) create mode 100644 tools/docker/results/grafana/dashboards/container_metrics_dashboard.json (limited to 'tools/docker/results/grafana') diff --git a/tools/docker/results/grafana/dashboards/container_metrics_dashboard.json b/tools/docker/results/grafana/dashboards/container_metrics_dashboard.json new file mode 100644 index 00000000..ef0b32a1 --- /dev/null +++ b/tools/docker/results/grafana/dashboards/container_metrics_dashboard.json @@ -0,0 +1,1291 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "id": 3, + "links": [], + "refresh": "5s", + "rows": [ + { + "collapse": false, + "height": 234, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "influxdb", + "description": "Total CPU usage of container", + "fill": 0, + "height": "", + "hideTimeOverride": false, + "id": 1, + "interval": "", + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "minSpan": null, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "Total", + "dsType": "influxdb", + "groupBy": [], + "hide": false, + "measurement": "cpu_usage_total", + "orderByTime": "ASC", + "policy": "monitor", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "difference" + }, + { + "params": [ + " / 1000000000" + ], + "type": "math" + } + ] + ], + "tags": [ + { + "key": "container_name", + "operator": "=~", + "value": "/^$container$/" + } + ] + } + ], + "thresholds": [], + "timeFrom": "1m", + "timeShift": null, + "title": "Total Usage", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "short", + "label": "Cores", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "decimals": null, + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Core 0": "#0a50a1", + "Core 1": "#890f02", + "Core 2": "#f9934e", + "Core 3": "#3f6833" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "influxdb", + "description": "CPU usage per core", + "fill": 0, + "height": "", + "hideTimeOverride": false, + "id": 2, + "interval": "", + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "minSpan": null, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "scopedVars": { + "core": { + "selected": false, + "text": "0", + "value": "0" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "Core $tag_instance", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "instance" + ], + "type": "tag" + } + ], + "measurement": "cpu_usage_per_cpu", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT difference(\"value\") / 1000000000 FROM \"monitor\".\"cpu_usage_per_cpu\" WHERE (\"container_name\" =~ /^$container$/) AND $timeFilter GROUP BY \"instance\"", + "rawQuery": false, + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "difference" + }, + { + "params": [ + " / 1000000000" + ], + "type": "math" + } + ] + ], + "tags": [ + { + "key": "container_name", + "operator": "=~", + "value": "/^$container$/" + } + ] + } + ], + "thresholds": [], + "timeFrom": "1m", + "timeShift": null, + "title": "Usage per Core", + "tooltip": { + "shared": false, + "sort": 1, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "short", + "label": "Cores", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "decimals": null, + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Kernel": "#890f02", + "User": "#0a50a1" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "influxdb", + "description": "CPU usage per User/Kernel", + "fill": 0, + "height": "", + "hideTimeOverride": false, + "id": 3, + "interval": "", + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "minSpan": null, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "User", + "dsType": "influxdb", + "groupBy": [], + "hide": false, + "measurement": "cpu_usage_user", + "orderByTime": "ASC", + "policy": "monitor", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "difference" + }, + { + "params": [ + " / 1000000000" + ], + "type": "math" + } + ] + ], + "tags": [ + { + "key": "container_name", + "operator": "=~", + "value": "/^$container$/" + } + ] + }, + { + "alias": "Kernel", + "dsType": "influxdb", + "groupBy": [], + "measurement": "cpu_usage_system", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "difference" + }, + { + "params": [ + " / 1000000000" + ], + "type": "math" + } + ] + ], + "tags": [ + { + "key": "container_name", + "operator": "=~", + "value": "/^$container$/" + } + ] + } + ], + "thresholds": [], + "timeFrom": "1m", + "timeShift": null, + "title": "Usage Breakdown", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "short", + "label": "Cores", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "decimals": null, + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "CPU", + "titleSize": "h3" + }, + { + "collapse": false, + "height": 250, + "panels": [ + { + "aliasColors": { + "Hot": "#890f02", + "Total": "#0a50a1" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "description": "Memory Usage", + "fill": 1, + "height": "", + "id": 4, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "sideWidth": 250, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "Total", + "dsType": "influxdb", + "groupBy": [], + "measurement": "memory_usage", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [ + " / 1024/1024" + ], + "type": "math" + } + ] + ], + "tags": [ + { + "key": "container_name", + "operator": "=~", + "value": "/^$container$/" + } + ] + }, + { + "alias": "Hot", + "dsType": "influxdb", + "groupBy": [], + "measurement": "memory_working_set", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [ + " / 1024/1024" + ], + "type": "math" + } + ] + ], + "tags": [ + { + "key": "container_name", + "operator": "=~", + "value": "/^$container$/" + } + ] + } + ], + "thresholds": [], + "timeFrom": "1m", + "timeShift": null, + "title": "Memory", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "decmbytes", + "label": "Megabytes", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Memory", + "titleSize": "h3" + }, + { + "collapse": false, + "height": 250, + "panels": [ + { + "aliasColors": { + "rx_bytes": "#890f02", + "tx_bytes": "#0a50a1" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "description": "Rx/Tx", + "fill": 0, + "height": "", + "id": 5, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "rx_bytes", + "dsType": "influxdb", + "groupBy": [], + "measurement": "rx_bytes", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "difference" + }, + { + "params": [ + " / 1024" + ], + "type": "math" + } + ] + ], + "tags": [ + { + "key": "container_name", + "operator": "=~", + "value": "/^$container$/" + } + ] + }, + { + "alias": "tx_bytes", + "dsType": "influxdb", + "groupBy": [], + "measurement": "tx_bytes", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "difference" + }, + { + "params": [ + " / 1024" + ], + "type": "math" + } + ] + ], + "tags": [ + { + "key": "container_name", + "operator": "=~", + "value": "/^$container$/" + } + ] + } + ], + "thresholds": [], + "timeFrom": "1m", + "timeShift": null, + "title": "Throughput", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "KBs", + "label": "Kilobytes per second", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "rx_errors": "#890f02", + "tx_bytes": "#0a50a1", + "tx_errors": "#0a50a1" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fill": 0, + "height": "", + "id": 6, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "rx_errors", + "dsType": "influxdb", + "groupBy": [], + "measurement": "rx_errors", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "tags": [ + { + "key": "container_name", + "operator": "=~", + "value": "/^$container$/" + } + ] + }, + { + "alias": "tx_errors", + "dsType": "influxdb", + "groupBy": [], + "measurement": "tx_errors", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "tags": [ + { + "key": "container_name", + "operator": "=~", + "value": "/^$container$/" + } + ] + } + ], + "thresholds": [], + "timeFrom": "1m", + "timeShift": null, + "title": "Errors", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Errors per second", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Network", + "titleSize": "h3" + }, + { + "collapse": false, + "height": 30, + "panels": [ + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": null, + "decimals": 2, + "format": "decbytes", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "height": "200px", + "hideTimeOverride": false, + "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, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 6, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": true + }, + "tableColumn": "", + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "fs_usage", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "container_name", + "operator": "=~", + "value": "/^$container$/" + } + ] + } + ], + "thresholds": "", + "timeFrom": "1m", + "title": "Storage usage", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "avg" + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Storage", + "titleSize": "h3" + }, + { + "collapse": false, + "height": 250, + "panels": [ + { + "columns": [], + "datasource": "influxdb", + "description": "Runtime table", + "fontSize": "80%", + "height": "", + "id": 8, + "links": [], + "pageSize": 5, + "scroll": false, + "showHeader": true, + "sort": { + "col": 0, + "desc": true + }, + "span": 12, + "styles": [ + { + "alias": "Time", + "dateFormat": "MM/DD/YY h:mm:ss a", + "pattern": "Time", + "type": "date" + }, + { + "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": "/.*/", + "thresholds": [], + "type": "number", + "unit": "short" + } + ], + "targets": [ + { + "alias": "$col", + "dsType": "influxdb", + "groupBy": [], + "limit": "5", + "measurement": "runtime", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "Alloc" + ], + "type": "field" + } + ], + [ + { + "params": [ + "Frees" + ], + "type": "field" + } + ], + [ + { + "params": [ + "HeapAlloc" + ], + "type": "field" + } + ], + [ + { + "params": [ + "HeapIdle" + ], + "type": "field" + } + ], + [ + { + "params": [ + "HeapObjects" + ], + "type": "field" + } + ], + [ + { + "params": [ + "HeapReleased" + ], + "type": "field" + } + ], + [ + { + "params": [ + "HeapSys" + ], + "type": "field" + } + ], + [ + { + "params": [ + "Lookups" + ], + "type": "field" + } + ], + [ + { + "params": [ + "Mallocs" + ], + "type": "field" + } + ], + [ + { + "params": [ + "NumGC" + ], + "type": "field" + } + ], + [ + { + "params": [ + "NumGoroutine" + ], + "type": "field" + } + ], + [ + { + "params": [ + "PauseTotalNs" + ], + "type": "field" + } + ], + [ + { + "params": [ + "Sys" + ], + "type": "field" + } + ], + [ + { + "params": [ + "TotalAlloc" + ], + "type": "field" + } + ] + ], + "tags": [] + } + ], + "timeFrom": "1m", + "title": "Runtime Metrics", + "transform": "timeseries_to_columns", + "type": "table" + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6" + } + ], + "schemaVersion": 14, + "style": "dark", + "tags": [ + "vsperf", + "container" + ], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "selected": false, + "tags": [], + "text": "nginx", + "value": "nginx" + }, + "datasource": "influxdb", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "container", + "options": [], + "query": "show tag values with key = container_name", + "refresh": 1, + "regex": "[a-zA-Z0-9_/]*", + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "tags": [], + "text": "All", + "value": "$__all" + }, + "datasource": "influxdb", + "hide": 0, + "includeAll": true, + "label": null, + "multi": false, + "name": "core", + "options": [], + "query": "show tag values with key = instance", + "refresh": 1, + "regex": "", + "sort": 3, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-5m", + "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": "Container Metrics", + "version": 12 +} \ No newline at end of file -- cgit 1.2.3-korg