From d71221c9a80f6c7782d33b92e76ddac751bdd8c7 Mon Sep 17 00:00:00 2001 From: Martin Copjan Date: Thu, 21 Jan 2021 09:25:55 +0000 Subject: [PATCH 01/11] selenium 4 alpha upgrade --- selenium_grid_exporter.go | 92 ++++++++++++++++++++++----------------- 1 file changed, 52 insertions(+), 40 deletions(-) diff --git a/selenium_grid_exporter.go b/selenium_grid_exporter.go index aa40f4e..b13fca6 100644 --- a/selenium_grid_exporter.go +++ b/selenium_grid_exporter.go @@ -3,8 +3,10 @@ package main import ( "encoding/json" "flag" + "fmt" "io/ioutil" "net/http" + "strings" "sync" "time" @@ -25,22 +27,23 @@ var ( ) type Exporter struct { - URI string - mutex sync.RWMutex - up, slotsTotal, slotsFree, newSessionRequestCount prometheus.Gauge + URI string + mutex sync.RWMutex + up, totalSlots, usedSlots, sessionCount prometheus.Gauge } type hubResponse struct { - Success bool `json:"success"` - Debug bool `json:"debug"` - CleanUpCycle int `json:"cleanUpCycle"` - Slots slotCounts `json:"slotCounts"` - NewSession float64 `json:"newSessionRequestCount"` + Data Data `json:"data"` } -type slotCounts struct { - Free float64 `json:"free"` - Total float64 `json:"total"` +type Data struct { + Grid Grid `json:"grid"` +} + +type Grid struct { + TotalSlots float64 `json:"totalSlots"` + UsedSlots float64 `json:"usedSlots"` + SessionCount float64 `json:"sessionCount"` } func NewExporter(uri string) *Exporter { @@ -53,32 +56,32 @@ func NewExporter(uri string) *Exporter { Name: "up", Help: "was the last scrape of Selenium Grid successful.", }), - slotsTotal: prometheus.NewGauge(prometheus.GaugeOpts{ + totalSlots: prometheus.NewGauge(prometheus.GaugeOpts{ Namespace: nameSpace, Subsystem: subSystem, - Name: "slotsTotal", - Help: "total number of slots", + Name: "totalSlots", + Help: "total number of usedSlots", }), - slotsFree: prometheus.NewGauge(prometheus.GaugeOpts{ + usedSlots: prometheus.NewGauge(prometheus.GaugeOpts{ Namespace: nameSpace, Subsystem: subSystem, - Name: "slotsFree", - Help: "number of free slots", + Name: "usedSlots", + Help: "number of used slots", }), - newSessionRequestCount: prometheus.NewGauge(prometheus.GaugeOpts{ + sessionCount: prometheus.NewGauge(prometheus.GaugeOpts{ Namespace: nameSpace, Subsystem: subSystem, - Name: "sessions_backlog", - Help: "number of sessions waiting for a slot", + Name: "sessionCount", + Help: "number of active sessions", }), } } func (e *Exporter) Describe(ch chan<- *prometheus.Desc) { e.up.Describe(ch) - e.slotsTotal.Describe(ch) - e.slotsFree.Describe(ch) - e.newSessionRequestCount.Describe(ch) + e.totalSlots.Describe(ch) + e.usedSlots.Describe(ch) + e.sessionCount.Describe(ch) } func (e *Exporter) Collect(ch chan<- prometheus.Metric) { @@ -89,17 +92,18 @@ func (e *Exporter) Collect(ch chan<- prometheus.Metric) { e.scrape() ch <- e.up - ch <- e.slotsTotal - ch <- e.slotsFree - ch <- e.newSessionRequestCount + ch <- e.totalSlots + ch <- e.usedSlots + ch <- e.sessionCount return } func (e *Exporter) scrape() { - e.slotsTotal.Set(0) - e.slotsFree.Set(0) + e.totalSlots.Set(0) + e.usedSlots.Set(0) + e.sessionCount.Set(0) body, err := e.fetch() if err != nil { @@ -112,37 +116,45 @@ func (e *Exporter) scrape() { e.up.Set(1) var hResponse hubResponse + if err := json.Unmarshal(body, &hResponse); err != nil { log.Errorf("Can't decode Selenium Grid response: %v", err) return } - - e.slotsTotal.Set(hResponse.Slots.Total) - e.slotsFree.Set(hResponse.Slots.Free) - e.newSessionRequestCount.Set(hResponse.NewSession) - + e.totalSlots.Set(hResponse.Data.Grid.TotalSlots) + e.usedSlots.Set(hResponse.Data.Grid.UsedSlots) + e.sessionCount.Set(hResponse.Data.Grid.SessionCount) } func (e Exporter) fetch() (output []byte, err error) { + url := (e.URI + "/graphql") + method := "POST" + + payload := strings.NewReader(`{"query":"{ grid {totalSlots, usedSlots , sessionCount } }"}`) + client := http.Client{ Timeout: 3 * time.Second, } + req, err := http.NewRequest(method, url, payload) - response, err := client.Get(e.URI + "/grid/api/hub") if err != nil { - return nil, err + fmt.Println(err) + return } + req.Header.Add("Content-Type", "application/json") - defer response.Body.Close() - - output, err = ioutil.ReadAll(response.Body) + res, err := client.Do(req) if err != nil { - return nil, err + fmt.Println(err) + return } + defer res.Body.Close() - return + body, err := ioutil.ReadAll(res.Body) + + return body, err } func main() { From fe8dc4856ea812af589787c2413f818ebba36947 Mon Sep 17 00:00:00 2001 From: Martin Copjan Date: Mon, 25 Jan 2021 13:19:40 +0000 Subject: [PATCH 02/11] update readme --- README.md | 18 +++++++++--------- selenium_grid_exporter.go | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index daf0dfa..027c44f 100644 --- a/README.md +++ b/README.md @@ -18,15 +18,15 @@ Usage of /selenium_grid_exporter: ## Metrics ``` -# HELP selenium_grid_hub_sessions_backlog number of sessions waiting for a slot -# TYPE selenium_grid_hub_sessions_backlog gauge -selenium_grid_hub_sessions_backlog 0 -# HELP selenium_grid_hub_slotsFree number of free slots -# TYPE selenium_grid_hub_slotsFree gauge -selenium_grid_hub_slotsFree 4 -# HELP selenium_grid_hub_slotsTotal total number of slots -# TYPE selenium_grid_hub_slotsTotal gauge -selenium_grid_hub_slotsTotal 8 +# HELP selenium_grid_hub_sessionCount number of active sessions +# TYPE selenium_grid_hub_sessionCount gauge +selenium_grid_hub_sessionCount 0 +# HELP selenium_grid_hub_usedSlots number of used slots +# TYPE selenium_grid_hub_usedSlots gauge +selenium_grid_hub_usedSlots 4 +# HELP selenium_grid_hub_totalSlots total number of slots +# TYPE selenium_grid_hub_totalSlots gauge +selenium_grid_hub_totalSlots 8 # HELP selenium_grid_up was the last scrape of Selenium Grid successful. # TYPE selenium_grid_up gauge selenium_grid_up 1 diff --git a/selenium_grid_exporter.go b/selenium_grid_exporter.go index b13fca6..178cbf7 100644 --- a/selenium_grid_exporter.go +++ b/selenium_grid_exporter.go @@ -60,7 +60,7 @@ func NewExporter(uri string) *Exporter { Namespace: nameSpace, Subsystem: subSystem, Name: "totalSlots", - Help: "total number of usedSlots", + Help: "total number of slots", }), usedSlots: prometheus.NewGauge(prometheus.GaugeOpts{ Namespace: nameSpace, From 238708ea4654df5be97377aa2c851bf5fd9fecb6 Mon Sep 17 00:00:00 2001 From: Martin Copjan Date: Tue, 2 Feb 2021 14:50:23 +0000 Subject: [PATCH 03/11] update to reflect qraphql changes for selenium 4.0.0-beta-1-prerelease-20210201 --- selenium_grid_exporter.go | 57 +++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/selenium_grid_exporter.go b/selenium_grid_exporter.go index 178cbf7..a908d69 100644 --- a/selenium_grid_exporter.go +++ b/selenium_grid_exporter.go @@ -27,23 +27,20 @@ var ( ) type Exporter struct { - URI string - mutex sync.RWMutex - up, totalSlots, usedSlots, sessionCount prometheus.Gauge + URI string + mutex sync.RWMutex + up, totalSlots, maxSession, sessionCount, sessionQueueSize prometheus.Gauge } type hubResponse struct { - Data Data `json:"data"` -} - -type Data struct { - Grid Grid `json:"grid"` -} - -type Grid struct { - TotalSlots float64 `json:"totalSlots"` - UsedSlots float64 `json:"usedSlots"` - SessionCount float64 `json:"sessionCount"` + Data struct { + Grid struct { + TotalSlots float64 `json:"totalSlots"` + MaxSession float64 `json:"maxSession"` + SessionCount float64 `json:"sessionCount"` + SessionQueueSize float64 `json:"sessionQueueSize"` + } `json:"grid"` + } `json:"data"` } func NewExporter(uri string) *Exporter { @@ -60,13 +57,13 @@ func NewExporter(uri string) *Exporter { Namespace: nameSpace, Subsystem: subSystem, Name: "totalSlots", - Help: "total number of slots", + Help: "total number of usedSlots", }), - usedSlots: prometheus.NewGauge(prometheus.GaugeOpts{ + maxSession: prometheus.NewGauge(prometheus.GaugeOpts{ Namespace: nameSpace, Subsystem: subSystem, - Name: "usedSlots", - Help: "number of used slots", + Name: "maxSession", + Help: "maximum number of sessions", }), sessionCount: prometheus.NewGauge(prometheus.GaugeOpts{ Namespace: nameSpace, @@ -74,14 +71,21 @@ func NewExporter(uri string) *Exporter { Name: "sessionCount", Help: "number of active sessions", }), + sessionQueueSize: prometheus.NewGauge(prometheus.GaugeOpts{ + Namespace: nameSpace, + Subsystem: subSystem, + Name: "sessionQueueSize", + Help: "number of queued sessions", + }), } } func (e *Exporter) Describe(ch chan<- *prometheus.Desc) { e.up.Describe(ch) e.totalSlots.Describe(ch) - e.usedSlots.Describe(ch) + e.maxSession.Describe(ch) e.sessionCount.Describe(ch) + e.sessionQueueSize.Describe(ch) } func (e *Exporter) Collect(ch chan<- prometheus.Metric) { @@ -93,8 +97,9 @@ func (e *Exporter) Collect(ch chan<- prometheus.Metric) { ch <- e.up ch <- e.totalSlots - ch <- e.usedSlots + ch <- e.maxSession ch <- e.sessionCount + ch <- e.sessionQueueSize return } @@ -102,8 +107,9 @@ func (e *Exporter) Collect(ch chan<- prometheus.Metric) { func (e *Exporter) scrape() { e.totalSlots.Set(0) - e.usedSlots.Set(0) + e.maxSession.Set(0) e.sessionCount.Set(0) + e.sessionQueueSize.Set(0) body, err := e.fetch() if err != nil { @@ -123,8 +129,9 @@ func (e *Exporter) scrape() { return } e.totalSlots.Set(hResponse.Data.Grid.TotalSlots) - e.usedSlots.Set(hResponse.Data.Grid.UsedSlots) + e.maxSession.Set(hResponse.Data.Grid.MaxSession) e.sessionCount.Set(hResponse.Data.Grid.SessionCount) + e.sessionQueueSize.Set(hResponse.Data.Grid.SessionQueueSize) } func (e Exporter) fetch() (output []byte, err error) { @@ -132,7 +139,9 @@ func (e Exporter) fetch() (output []byte, err error) { url := (e.URI + "/graphql") method := "POST" - payload := strings.NewReader(`{"query":"{ grid {totalSlots, usedSlots , sessionCount } }"}`) + payload := strings.NewReader(`{ + "query": "{ grid {totalSlots, maxSession, sessionCount, sessionQueueSize} }" + }`) client := http.Client{ Timeout: 3 * time.Second, @@ -154,6 +163,8 @@ func (e Exporter) fetch() (output []byte, err error) { body, err := ioutil.ReadAll(res.Body) + //s := string(body) + //fmt.Println(s) return body, err } From 317b9055ac718b4ca43d1ac4ef738d590270b830 Mon Sep 17 00:00:00 2001 From: Martin Copjan Date: Tue, 2 Feb 2021 14:55:09 +0000 Subject: [PATCH 04/11] update readme --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 027c44f..a3dca20 100644 --- a/README.md +++ b/README.md @@ -21,12 +21,15 @@ Usage of /selenium_grid_exporter: # HELP selenium_grid_hub_sessionCount number of active sessions # TYPE selenium_grid_hub_sessionCount gauge selenium_grid_hub_sessionCount 0 -# HELP selenium_grid_hub_usedSlots number of used slots -# TYPE selenium_grid_hub_usedSlots gauge -selenium_grid_hub_usedSlots 4 +# HELP selenium_grid_hub_maxSession number of max sessions +# TYPE sselenium_grid_hub_maxSession gauge +selenium_grid_hub_maxSession 0 # HELP selenium_grid_hub_totalSlots total number of slots # TYPE selenium_grid_hub_totalSlots gauge selenium_grid_hub_totalSlots 8 +# HELP selenium_grid_hub_sessionQueueSize number of session in queue +# TYPE selenium_grid_hub_sessionQueueSize gauge +selenium_grid_hub_sessionQueueSize 0 # HELP selenium_grid_up was the last scrape of Selenium Grid successful. # TYPE selenium_grid_up gauge selenium_grid_up 1 From c59aca6d5a606184cab5c2ffbaf1facc187d9ec8 Mon Sep 17 00:00:00 2001 From: Martin Copjan Date: Wed, 3 Feb 2021 10:25:07 +0000 Subject: [PATCH 05/11] add prometheus and grafana --- alertmanager/config.yml | 12 + docker-compose.yml | 106 +- grafana/config.monitoring | 2 + ...r Prometheus Monitoring-1571332751387.json | 1831 +++ .../dashboards/NodeExporterWithHostname.json | 13659 ++++++++++++++++ .../dashboards/Selenium4GridMonitoring.json | 233 + .../dashboards/SeleniumGridDashboard.json | 2220 +++ grafana/provisioning/dashboards/dashboard.yml | 11 + .../provisioning/datasources/datasource.yml | 50 + grafana_config/Dockerfile | 9 - grafana_config/prometheus_datasource.json | 7 - grafana_config/selenium_grid_dashboard.json | 150 - grafana_config/wait.sh | 7 - prometheus.yml | 9 - prometheus/alert.rules | 85 + prometheus/prometheus.yml | 78 + 16 files changed, 18265 insertions(+), 204 deletions(-) create mode 100644 alertmanager/config.yml create mode 100644 grafana/config.monitoring create mode 100644 grafana/provisioning/dashboards/Docker Prometheus Monitoring-1571332751387.json create mode 100644 grafana/provisioning/dashboards/NodeExporterWithHostname.json create mode 100644 grafana/provisioning/dashboards/Selenium4GridMonitoring.json create mode 100644 grafana/provisioning/dashboards/SeleniumGridDashboard.json create mode 100644 grafana/provisioning/dashboards/dashboard.yml create mode 100644 grafana/provisioning/datasources/datasource.yml delete mode 100644 grafana_config/Dockerfile delete mode 100644 grafana_config/prometheus_datasource.json delete mode 100644 grafana_config/selenium_grid_dashboard.json delete mode 100644 grafana_config/wait.sh delete mode 100644 prometheus.yml create mode 100644 prometheus/alert.rules create mode 100644 prometheus/prometheus.yml diff --git a/alertmanager/config.yml b/alertmanager/config.yml new file mode 100644 index 0000000..7fde267 --- /dev/null +++ b/alertmanager/config.yml @@ -0,0 +1,12 @@ +route: + group_by: ['alertname'] + group_interval: 30s + repeat_interval: 30s + group_wait: 30s + receiver: 'prometheus-msteams' + +receivers: +- name: 'prometheus-msteams' + webhook_configs: # https://prometheus.io/docs/alerting/configuration/#webhook_config + - send_resolved: true + url: 'http://prometheus-msteams-alert:2000/alertmanager' # the prometheus-msteams proxy \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index c0d4cb9..a761227 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,35 +1,97 @@ -version: '3' +# To execute this docker-compose yml file use `docker-compose -f docker-compose-v3.yml up` +# Add the `-d` flag at the end for detached execution +# To stop the execution, hit Ctrl+C, and then `docker-compose -f docker-compose-v3.yml down` +version: "3" + +volumes: + prometheus_data: {} + grafana_data: {} services: - hub: - image: selenium/hub:3.6.0 + chrome: + image: selenium/node-chrome:4.0.0-beta-1-prerelease-20210201 + volumes: + - /dev/shm:/dev/shm + depends_on: + - selenium-hub environment: - GRID_TIMEOUT: 10 + - SE_EVENT_BUS_HOST=selenium-hub + - SE_EVENT_BUS_PUBLISH_PORT=4442 + - SE_EVENT_BUS_SUBSCRIBE_PORT=4443 + - LANG=en_GB.UTF-8 + - SE_NODE_MAX_CONCURRENT_SESSIONS=5 + - START_XVFB=true + - SCREEN_WIDTH=1920 + - SCREEN_HEIGHT=1080 + - SCREEN_DEPTH=24 ports: - - "4444:4444" + - "6900:5900" + firefox: - image: selenium/node-firefox:3.6.0 + image: selenium/node-firefox:4.0.0-beta-1-prerelease-20210201 + volumes: + - /dev/shm:/dev/shm + depends_on: + - selenium-hub environment: - HUB_PORT_4444_TCP_ADDR: "hub" - HUB_PORT_4444_TCP_PORT: "4444" + - SE_EVENT_BUS_HOST=selenium-hub + - SE_EVENT_BUS_PUBLISH_PORT=4442 + - SE_EVENT_BUS_SUBSCRIBE_PORT=4443 + ports: + - "6901:5900" + + opera: + image: selenium/node-opera:4.0.0-beta-1-prerelease-20210201 + volumes: + - /dev/shm:/dev/shm + depends_on: + - selenium-hub + environment: + - SE_EVENT_BUS_HOST=selenium-hub + - SE_EVENT_BUS_PUBLISH_PORT=4442 + - SE_EVENT_BUS_SUBSCRIBE_PORT=4443 + ports: + - "6902:5900" + + selenium-hub: + image: selenium/hub:4.0.0-beta-1-prerelease-20210201 + container_name: selenium-hub + ports: + - "4442:4442" + - "4443:4443" + - "4444:4444" + prometheus: image: prom/prometheus - ports: - - "9090:9090" volumes: - - ./prometheus.yml:/etc/prometheus/prometheus.yml:z + - ./prometheus/:/etc/prometheus/ + - prometheus_data:/prometheus + command: + - '--config.file=/etc/prometheus/prometheus.yml' + - '--storage.tsdb.path=/prometheus' + - '--storage.tsdb.retention.time=3d' + - '--web.console.libraries=/usr/share/prometheus/console_libraries' + - '--web.console.templates=/usr/share/prometheus/consoles' + - '--web.enable-lifecycle' + - '--web.enable-admin-api' + ports: + - 9090:9090 + grafana: - image: grafana/grafana:4.5.2 - environment: - GF_AUTH_ANONYMOUS_ENABLED: "true" - GF_AUTH_ANONYMOUS_ORG_ROLE: "Admin" - GF_INSTALL_PLUGINS: "grafana-piechart-panel" + image: grafana/grafana + depends_on: + - prometheus ports: - - "3000:3000" - grafana_config: - build: ./grafana_config + - 3000:3000 + volumes: + - grafana_data:/var/lib/grafana + - ./grafana/provisioning/:/etc/grafana/provisioning/ + env_file: + - ./grafana/config.monitoring + user: "472" + selenium_grid_exporter: - build: . - command: "--scrape-uri http://hub:4444" + image: mcopjan/selenium_grid_exporter:latest + command: "--scrape-uri http://selenium-hub:4444" ports: - - "8080:8080" + - "8080:8080" \ No newline at end of file diff --git a/grafana/config.monitoring b/grafana/config.monitoring new file mode 100644 index 0000000..f12466b --- /dev/null +++ b/grafana/config.monitoring @@ -0,0 +1,2 @@ +GF_SECURITY_ADMIN_PASSWORD=foobar +GF_USERS_ALLOW_SIGN_UP=false diff --git a/grafana/provisioning/dashboards/Docker Prometheus Monitoring-1571332751387.json b/grafana/provisioning/dashboards/Docker Prometheus Monitoring-1571332751387.json new file mode 100644 index 0000000..c4b76ba --- /dev/null +++ b/grafana/provisioning/dashboards/Docker Prometheus Monitoring-1571332751387.json @@ -0,0 +1,1831 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Docker Monitoring Template", + "editable": true, + "gnetId": 179, + "graphTooltip": 1, + "id": 1, + "iteration": 1571330223815, + "links": [], + "panels": [ + { + "collapsed": false, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 17, + "panels": [], + "title": "Host Info", + "type": "row" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "Prometheus", + "decimals": null, + "format": "s", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 7, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 15, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "options": {}, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "time() - process_start_time_seconds{job=\"prometheus\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "", + "title": "Uptime", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "Prometheus", + "format": "short", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 35, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "options": {}, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false, + "ymax": null, + "ymin": null + }, + "tableColumn": "", + "targets": [ + { + "expr": "count(count(node_cpu_seconds_total{instance=~\"$node\", mode='system'}) by (cpu))", + "instant": true, + "refId": "A" + } + ], + "thresholds": "", + "timeFrom": null, + "timeShift": null, + "title": "CPU Cores", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": true, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "Prometheus", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 7, + "w": 5, + "x": 6, + "y": 1 + }, + "id": 13, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "options": {}, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(ALERTS)", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "0,1", + "title": "Alerts", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "0" + } + ], + "valueName": "avg" + }, + { + "cacheTimeout": null, + "colorBackground": true, + "colorValue": false, + "colors": [ + "#d44a3a", + "rgba(237, 129, 40, 0.89)", + "#299c46" + ], + "datasource": "Prometheus", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 11, + "y": 1 + }, + "id": 11, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "options": {}, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(up)", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "0,1", + "title": "Targets Online", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#d44a3a", + "rgba(237, 129, 40, 0.89)", + "#299c46" + ], + "datasource": "Prometheus", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 15, + "y": 1 + }, + "id": 31, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "options": {}, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": true + }, + "tableColumn": "", + "targets": [ + { + "expr": "count(rate(container_last_seen{job=\"cadvisor\", name!=\"\"}[5m]))", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "0,1", + "title": "Running Containers", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": null, + "decimals": null, + "format": "decbytes", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 3, + "y": 5 + }, + "id": 37, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "options": {}, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false, + "ymax": null, + "ymin": null + }, + "tableColumn": "", + "targets": [ + { + "expr": "node_memory_MemTotal_bytes{instance=~\"$node\"}", + "refId": "A" + } + ], + "thresholds": "", + "timeFrom": null, + "timeShift": null, + "title": "Host Memory", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "Prometheus", + "editable": true, + "error": false, + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": true, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 8 + }, + "id": 4, + "interval": null, + "isNew": true, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "options": {}, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "(sum(node_memory_MemTotal_bytes) - sum(node_memory_MemFree_bytes +node_memory_Buffers_bytes + node_memory_Cached_bytes) ) / sum(node_memory_MemTotal_bytes) * 100", + "format": "time_series", + "interval": "10s", + "intervalFactor": 1, + "refId": "A", + "step": 10 + } + ], + "thresholds": "65, 90", + "title": "Memory usage", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "Prometheus", + "decimals": 2, + "editable": true, + "error": false, + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": true, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 8 + }, + "id": 6, + "interval": null, + "isNew": true, + "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": "100 - (avg(irate(node_cpu_seconds_total{instance=~\"$node\",mode=\"idle\"}[5m])) * 100)", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A", + "step": 10 + } + ], + "thresholds": "65, 90", + "title": "CPU usage", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "Prometheus", + "decimals": 2, + "editable": true, + "error": false, + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": true, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 6, + "w": 7, + "x": 12, + "y": 8 + }, + "id": 7, + "interval": null, + "isNew": true, + "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": "avg( node_filesystem_avail_bytes {mountpoint=\"/\"} / node_filesystem_size_bytes{mountpoint=\"/\"})", + "interval": "10s", + "intervalFactor": 1, + "metric": "", + "refId": "A", + "step": 10 + } + ], + "thresholds": "65, 90", + "title": "Filesystem usage", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "aliasColors": { + "RECEIVE": "#ea6460", + "SENT": "#1f78c1", + "TRANSMIT": "#1f78c1" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 4, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 14 + }, + "id": 25, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(container_network_receive_bytes_total{id=\"/\"}[$interval])) by (id)", + "format": "time_series", + "interval": "2m", + "intervalFactor": 2, + "legendFormat": "RECEIVE", + "refId": "A" + }, + { + "expr": "- sum(rate(container_network_transmit_bytes_total{id=\"/\"}[$interval])) by (id)", + "format": "time_series", + "interval": "2m", + "intervalFactor": 2, + "legendFormat": "TRANSMIT", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Node Network Traffic", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "Available Memory": "#508642", + "Used Memory": "#bf1b00" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 3, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 14 + }, + "id": 27, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(node_memory_MemTotal_bytes) - sum(node_memory_MemAvailable_bytes)", + "format": "time_series", + "interval": "2m", + "intervalFactor": 2, + "legendFormat": "Used Memory", + "refId": "B" + }, + { + "expr": "sum(node_memory_MemAvailable_bytes)", + "format": "time_series", + "interval": "2m", + "intervalFactor": 2, + "legendFormat": "Available Memory", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Node Mermory", + "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": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "Available Memory": "#508642", + "Free Storage": "#447ebc", + "Total Storage Available": "#508642", + "Used Memory": "#bf1b00", + "Used Storage": "#bf1b00" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 3, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 7, + "x": 12, + "y": 14 + }, + "id": 28, + "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": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(node_filesystem_free_bytes {job=\"node-exporter\", instance=~\".*9100\", device=~\"/dev/.*\", mountpoint!=\"/var/lib/docker/aufs\"}) ", + "format": "time_series", + "interval": "2m", + "intervalFactor": 2, + "legendFormat": "Free Storage", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Filesystem Available", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "decbytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 19, + "panels": [], + "repeat": null, + "title": "Container Performance", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 3, + "editable": true, + "error": false, + "fill": 0, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 10, + "w": 6, + "x": 0, + "y": 24 + }, + "id": 3, + "isNew": true, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(container_cpu_usage_seconds_total{image!=\"\"}[1m])) by (id,name)", + "format": "time_series", + "interval": "10s", + "intervalFactor": 1, + "legendFormat": "{{ name }}", + "metric": "container_cpu_user_seconds_total", + "refId": "A", + "step": 10 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Container CPU usage", + "tooltip": { + "msResolution": true, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percentunit", + "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", + "decimals": 2, + "editable": true, + "error": false, + "fill": 0, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 10, + "w": 6, + "x": 6, + "y": 24 + }, + "id": 2, + "isNew": true, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "container_memory_max_usage_bytes{image!=\"\"}", + "format": "time_series", + "interval": "10s", + "intervalFactor": 1, + "legendFormat": "{{ name }}", + "metric": "container_memory_usage:sort_desc", + "refId": "A", + "step": 10 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Container Memory Usage", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "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 + } + }, + { + "columns": [], + "datasource": "Prometheus", + "fontSize": "100%", + "gridPos": { + "h": 13, + "w": 10, + "x": 12, + "y": 24 + }, + "id": 23, + "links": [], + "options": {}, + "pageSize": null, + "scroll": true, + "showHeader": true, + "sort": { + "col": 0, + "desc": true + }, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "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": [ + { + "expr": "ALERTS", + "format": "table", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Alerts", + "transform": "table", + "type": "table" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "editable": true, + "error": false, + "fill": 0, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 14, + "w": 6, + "x": 0, + "y": 34 + }, + "id": 8, + "isNew": true, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum by (name) (rate(container_network_receive_bytes_total{image!=\"\"}[1m] ) ))", + "interval": "10s", + "intervalFactor": 1, + "legendFormat": "{{ name }}", + "metric": "container_network_receive_bytes_total", + "refId": "A", + "step": 10 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Container Network Input", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "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", + "decimals": 2, + "editable": true, + "error": false, + "fill": 0, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 14, + "w": 6, + "x": 6, + "y": 34 + }, + "id": 9, + "isNew": true, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum by (name) (rate(container_network_transmit_bytes_total{image!=\"\"}[1m] ) ))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{ name }}", + "metric": "container_network_transmit_bytes_total", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Container Network Output", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "columns": [], + "datasource": "Prometheus", + "fontSize": "100%", + "gridPos": { + "h": 10, + "w": 10, + "x": 12, + "y": 37 + }, + "id": 30, + "links": [], + "options": {}, + "pageSize": 10, + "scroll": true, + "showHeader": true, + "sort": { + "col": 0, + "desc": true + }, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "link": false, + "linkUrl": "", + "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": [ + { + "expr": "cadvisor_version_info", + "format": "table", + "instant": false, + "interval": "15m", + "intervalFactor": 2, + "legendFormat": "cAdvisor Version: {{cadvisorVersion}}", + "refId": "A" + }, + { + "expr": "prometheus_build_info", + "format": "table", + "interval": "15m", + "intervalFactor": 2, + "legendFormat": "Prometheus Version: {{version}}", + "refId": "B" + }, + { + "expr": "node_exporter_build_info", + "format": "table", + "interval": "15m", + "intervalFactor": 2, + "legendFormat": "Node-Exporter Version: {{version}}", + "refId": "C" + } + ], + "title": "Running Versions", + "transform": "table", + "type": "table" + } + ], + "refresh": "10s", + "schemaVersion": 20, + "style": "dark", + "tags": [ + "docker", + "prometheus, ", + "node-exporter", + "cadvisor" + ], + "templating": { + "list": [ + { + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "1m", + "value": "1m" + }, + "hide": 0, + "label": "interval", + "name": "interval", + "options": [ + { + "selected": true, + "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" + }, + { + "allValue": null, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": "Prometheus", + "definition": "label_values(node_exporter_build_info{name=~'$name'},instance)", + "hide": 0, + "includeAll": true, + "label": "IP", + "multi": true, + "name": "node", + "options": [], + "query": "label_values(node_exporter_build_info{name=~'$name'},instance)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": "Prometheus", + "definition": "label_values(node_exporter_build_info,env)", + "hide": 0, + "includeAll": true, + "label": "Env", + "multi": true, + "name": "env", + "options": [], + "query": "label_values(node_exporter_build_info,env)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": "Prometheus", + "definition": "label_values(node_exporter_build_info{env=~'$env'},name)", + "hide": 0, + "includeAll": true, + "label": "CPU Name", + "multi": true, + "name": "name", + "options": [], + "query": "label_values(node_exporter_build_info{env=~'$env'},name)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "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": "browser", + "title": "Docker Prometheus Monitoring", + "uid": "64nrElFmk", + "version": 2 +} \ No newline at end of file diff --git a/grafana/provisioning/dashboards/NodeExporterWithHostname.json b/grafana/provisioning/dashboards/NodeExporterWithHostname.json new file mode 100644 index 0000000..2c115bc --- /dev/null +++ b/grafana/provisioning/dashboards/NodeExporterWithHostname.json @@ -0,0 +1,13659 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": 1860, + "graphTooltip": 0, + "id": 3, + "iteration": 1605793851039, + "links": [], + "panels": [ + { + "collapsed": false, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 261, + "panels": [], + "repeat": null, + "title": "Quick CPU / Mem / Disk", + "type": "row" + }, + { + "cacheTimeout": null, + "datasource": "Prometheus", + "description": "Busy state of all CPU cores together", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [ + { + "id": 0, + "op": "=", + "text": "N/A", + "type": 1, + "value": "null" + } + ], + "max": 100, + "min": 0, + "nullValueMode": "null", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 20, + "links": [], + "options": { + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true + }, + "pluginVersion": "7.3.3", + "targets": [ + { + "expr": "(((count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu))) - avg(sum by (mode)(irate(node_cpu_seconds_total{mode='idle',instance=\"$node\",job=\"$job\"}[5m])))) * 100) / count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu))", + "hide": false, + "intervalFactor": 1, + "legendFormat": "", + "refId": "A", + "step": 900 + } + ], + "title": "CPU Busy", + "type": "gauge" + }, + { + "cacheTimeout": null, + "datasource": "Prometheus", + "description": "Busy state of all CPU cores together (5 min average)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [ + { + "id": 0, + "op": "=", + "text": "N/A", + "type": 1, + "value": "null" + } + ], + "max": 100, + "min": 0, + "nullValueMode": "null", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 155, + "links": [], + "options": { + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true + }, + "pluginVersion": "7.3.3", + "targets": [ + { + "expr": "avg(node_load5{instance=\"$node\",job=\"$job\"}) / count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)) * 100", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "refId": "A", + "step": 900 + } + ], + "title": "Sys Load (5m avg)", + "type": "gauge" + }, + { + "cacheTimeout": null, + "datasource": "Prometheus", + "description": "Busy state of all CPU cores together (15 min average)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [ + { + "id": 0, + "op": "=", + "text": "N/A", + "type": 1, + "value": "null" + } + ], + "max": 100, + "min": 0, + "nullValueMode": "null", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 19, + "links": [], + "options": { + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true + }, + "pluginVersion": "7.3.3", + "targets": [ + { + "expr": "avg(node_load15{instance=\"$node\",job=\"$job\"}) / count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)) * 100", + "hide": false, + "intervalFactor": 1, + "refId": "A", + "step": 900 + } + ], + "title": "Sys Load (15m avg)", + "type": "gauge" + }, + { + "cacheTimeout": null, + "datasource": "Prometheus", + "description": "Non available RAM memory", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "decimals": 0, + "mappings": [], + "max": 100, + "min": 0, + "nullValueMode": "null", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 9, + "y": 1 + }, + "hideTimeOverride": false, + "id": 16, + "links": [], + "options": { + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true + }, + "pluginVersion": "7.3.3", + "targets": [ + { + "expr": "((node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"}) / (node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} )) * 100", + "format": "time_series", + "hide": true, + "intervalFactor": 1, + "refId": "A", + "step": 900 + }, + { + "expr": "100 - ((node_memory_MemAvailable_bytes{instance=\"$node\",job=\"$job\"} * 100) / node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "refId": "B", + "step": 900 + } + ], + "title": "RAM Used", + "type": "gauge" + }, + { + "cacheTimeout": null, + "datasource": "Prometheus", + "description": "Used Swap", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [ + { + "id": 0, + "op": "=", + "text": "N/A", + "type": 1, + "value": "null" + } + ], + "max": 100, + "min": 0, + "nullValueMode": "null", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 10 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 25 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 12, + "y": 1 + }, + "id": 21, + "links": [], + "options": { + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true + }, + "pluginVersion": "7.3.3", + "targets": [ + { + "expr": "((node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"}) / (node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} )) * 100", + "intervalFactor": 1, + "refId": "A", + "step": 900 + } + ], + "title": "SWAP Used", + "type": "gauge" + }, + { + "cacheTimeout": null, + "datasource": "Prometheus", + "description": "Used Root FS", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [ + { + "id": 0, + "op": "=", + "text": "N/A", + "type": 1, + "value": "null" + } + ], + "max": 100, + "min": 0, + "nullValueMode": "null", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 15, + "y": 1 + }, + "id": 154, + "links": [], + "options": { + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true + }, + "pluginVersion": "7.3.3", + "targets": [ + { + "expr": "100 - ((node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"} * 100) / node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"})", + "format": "time_series", + "intervalFactor": 1, + "refId": "A", + "step": 900 + } + ], + "title": "Root FS Used", + "type": "gauge" + }, + { + "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", + "description": "Total number of CPU cores", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "format": "short", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 1 + }, + "id": 14, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "maxPerRow": 6, + "nullPointMode": "null", + "nullText": null, + "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": "count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu))", + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A", + "step": 900 + } + ], + "thresholds": "", + "title": "CPU Cores", + "type": "singlestat", + "valueFontSize": "50%", + "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", + "decimals": 1, + "description": "System uptime", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "format": "s", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 20, + "y": 1 + }, + "hideTimeOverride": true, + "id": 15, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "null", + "nullText": null, + "postfix": "s", + "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": "{instance=\"10.0.1.36:9100\", job=\"node-exporter\"}", + "targets": [ + { + "expr": "node_time_seconds{instance=\"$node\",job=\"$job\"} - node_boot_time_seconds{instance=\"$node\",job=\"$job\"}", + "intervalFactor": 2, + "refId": "A", + "step": 1800 + } + ], + "thresholds": "", + "title": "Uptime", + "type": "singlestat", + "valueFontSize": "50%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "Prometheus", + "decimals": 0, + "description": "Total RootFS", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "format": "bytes", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 3 + }, + "id": 23, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "maxPerRow": 6, + "nullPointMode": "null", + "nullText": null, + "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": "node_filesystem_size_bytes{device=\"/dev/mapper/docker-253:2-3148406-4377d3ea310277e81b27efdcfc828d1f2d7058320f7a157af86efbe890c56ca8\", fstype=\"xfs\", instance=\"10.0.1.36:9100\", job=\"node-exporter\", mountpoint=\"/\"}", + "targets": [ + { + "expr": "node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "refId": "A", + "step": 900 + } + ], + "thresholds": "70,90", + "title": "RootFS Total", + "type": "singlestat", + "valueFontSize": "50%", + "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", + "decimals": 0, + "description": "Total RAM", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "format": "bytes", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 20, + "y": 3 + }, + "id": 75, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "maxPerRow": 6, + "nullPointMode": "null", + "nullText": null, + "postfix": "", + "postfixFontSize": "70%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "node_memory_MemTotal_bytes{instance=\"10.0.1.36:9100\", job=\"node-exporter\"}", + "targets": [ + { + "expr": "node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"}", + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A", + "step": 900 + } + ], + "thresholds": "", + "title": "RAM Total", + "type": "singlestat", + "valueFontSize": "50%", + "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", + "decimals": 0, + "description": "Total SWAP", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "format": "bytes", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 22, + "y": 3 + }, + "id": 18, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "maxPerRow": 6, + "nullPointMode": "null", + "nullText": null, + "postfix": "", + "postfixFontSize": "70%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "node_memory_SwapTotal_bytes{instance=\"10.0.1.36:9100\", job=\"node-exporter\"}", + "targets": [ + { + "expr": "node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"}", + "intervalFactor": 1, + "refId": "A", + "step": 900 + } + ], + "thresholds": "", + "title": "SWAP Total", + "type": "singlestat", + "valueFontSize": "50%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "collapsed": false, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 263, + "panels": [], + "repeat": null, + "title": "Basic CPU / Mem / Net / Disk", + "type": "row" + }, + { + "aliasColors": { + "Busy": "#EAB839", + "Busy Iowait": "#890F02", + "Busy other": "#1F78C1", + "Idle": "#052B51", + "Idle - Waiting for something to happen": "#052B51", + "guest": "#9AC48A", + "idle": "#052B51", + "iowait": "#EAB839", + "irq": "#BF1B00", + "nice": "#C15C17", + "softirq": "#E24D42", + "steal": "#FCE2DE", + "system": "#508642", + "user": "#5195CE" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "description": "Basic CPU info", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 4, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 6 + }, + "hiddenSeries": false, + "id": 77, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": 250, + "sort": null, + "sortDesc": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": true, + "pluginVersion": "7.3.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "Busy Iowait", + "color": "#890F02" + }, + { + "alias": "Idle", + "color": "#7EB26D" + }, + { + "alias": "Busy System", + "color": "#EAB839" + }, + { + "alias": "Busy User", + "color": "#0A437C" + }, + { + "alias": "Busy Other", + "color": "#6D1F62" + } + ], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum by (instance)(irate(node_cpu_seconds_total{mode=\"system\",instance=\"$node\",job=\"$job\"}[5m])) * 100", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Busy System", + "refId": "A", + "step": 240 + }, + { + "expr": "sum by (instance)(irate(node_cpu_seconds_total{mode='user',instance=\"$node\",job=\"$job\"}[5m])) * 100", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Busy User", + "refId": "B", + "step": 240 + }, + { + "expr": "sum by (instance)(irate(node_cpu_seconds_total{mode='iowait',instance=\"$node\",job=\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Busy Iowait", + "refId": "C", + "step": 240 + }, + { + "expr": "sum by (instance)(irate(node_cpu_seconds_total{mode=~\".*irq\",instance=\"$node\",job=\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Busy IRQs", + "refId": "D", + "step": 240 + }, + { + "expr": "sum (irate(node_cpu_seconds_total{mode!='idle',mode!='user',mode!='system',mode!='iowait',mode!='irq',mode!='softirq',instance=\"$node\",job=\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Busy Other", + "refId": "E", + "step": 240 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='idle',instance=\"$node\",job=\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Idle", + "refId": "F", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "CPU Basic", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "", + "logBase": 1, + "max": "100", + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "SWAP Used": "#BF1B00", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap Used": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "description": "Basic memory usage", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 4, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 6 + }, + "hiddenSeries": false, + "id": 78, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "RAM Total", + "color": "#E0F9D7", + "fill": 0, + "stack": false + }, + { + "alias": "RAM Cache + Buffer", + "color": "#052B51" + }, + { + "alias": "RAM Free", + "color": "#7EB26D" + }, + { + "alias": "Avaliable", + "color": "#DEDAF7", + "fill": 0, + "stack": false + } + ], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "RAM Total", + "refId": "A", + "step": 240 + }, + { + "expr": "node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"} - (node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} + node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "RAM Used", + "refId": "B", + "step": 240 + }, + { + "expr": "node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} + node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "RAM Cache + Buffer", + "refId": "C", + "step": 240 + }, + { + "expr": "node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "RAM Free", + "refId": "D", + "step": 240 + }, + { + "expr": "(node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "SWAP Used", + "refId": "E", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Basic", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "", + "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 + } + }, + { + "aliasColors": { + "Recv_bytes_eth2": "#7EB26D", + "Recv_bytes_lo": "#0A50A1", + "Recv_drop_eth2": "#6ED0E0", + "Recv_drop_lo": "#E0F9D7", + "Recv_errs_eth2": "#BF1B00", + "Recv_errs_lo": "#CCA300", + "Trans_bytes_eth2": "#7EB26D", + "Trans_bytes_lo": "#0A50A1", + "Trans_drop_eth2": "#6ED0E0", + "Trans_drop_lo": "#E0F9D7", + "Trans_errs_eth2": "#BF1B00", + "Trans_errs_lo": "#CCA300", + "recv_bytes_lo": "#0A50A1", + "recv_drop_eth0": "#99440A", + "recv_drop_lo": "#967302", + "recv_errs_eth0": "#BF1B00", + "recv_errs_lo": "#890F02", + "trans_bytes_eth0": "#7EB26D", + "trans_bytes_lo": "#0A50A1", + "trans_drop_eth0": "#99440A", + "trans_drop_lo": "#967302", + "trans_errs_eth0": "#BF1B00", + "trans_errs_lo": "#890F02" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "Basic network info per interface", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 4, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 13 + }, + "hiddenSeries": false, + "id": 74, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": false, + "hideZero": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*trans.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_bytes_total{instance=\"$node\",job=\"$job\"}[5m])*8", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "recv {{device}}", + "refId": "A", + "step": 240 + }, + { + "expr": "irate(node_network_transmit_bytes_total{instance=\"$node\",job=\"$job\"}[5m])*8", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "trans {{device}} ", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Network Traffic Basic", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bps", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "pps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 3, + "description": "Disk space used of all filesystems mounted", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 4, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 13 + }, + "height": "", + "hiddenSeries": false, + "id": 152, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "100 - ((node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'} * 100) / node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{mountpoint}}", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Disk Space Used Basic", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percent", + "label": null, + "logBase": 1, + "max": "100", + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": true, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 20 + }, + "id": 265, + "panels": [ + { + "aliasColors": { + "Idle - Waiting for something to happen": "#052B51", + "guest": "#9AC48A", + "idle": "#052B51", + "iowait": "#EAB839", + "irq": "#BF1B00", + "nice": "#C15C17", + "softirq": "#E24D42", + "steal": "#FCE2DE", + "system": "#508642", + "user": "#5195CE" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "description": "", + "fill": 4, + "fillGradient": 0, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 21 + }, + "hiddenSeries": false, + "id": 3, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 250, + "sort": null, + "sortDesc": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": true, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode=\"system\",instance=\"$node\",job=\"$job\"}[5m])) * 100", + "format": "time_series", + "interval": "10s", + "intervalFactor": 2, + "legendFormat": "System - Processes executing in kernel mode", + "refId": "A", + "step": 20 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='user',instance=\"$node\",job=\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "User - Normal processes executing in user mode", + "refId": "B", + "step": 240 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='nice',instance=\"$node\",job=\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Nice - Niced processes executing in user mode", + "refId": "C", + "step": 240 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='idle',instance=\"$node\",job=\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Idle - Waiting for something to happen", + "refId": "D", + "step": 240 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='iowait',instance=\"$node\",job=\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Iowait - Waiting for I/O to complete", + "refId": "E", + "step": 240 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='irq',instance=\"$node\",job=\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Irq - Servicing interrupts", + "refId": "F", + "step": 240 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='softirq',instance=\"$node\",job=\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Softirq - Servicing softirqs", + "refId": "G", + "step": 240 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='steal',instance=\"$node\",job=\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Steal - Time spent in other operating systems when running in a virtualized environment", + "refId": "H", + "step": 240 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='guest',instance=\"$node\",job=\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Guest - Time spent running a virtual CPU for a guest operating system", + "refId": "I", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "CPU", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "percentage", + "logBase": 1, + "max": "100", + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap - Swap memory usage": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839", + "Unused - Free memory unassigned": "#052B51" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "description": "", + "fill": 4, + "fillGradient": 0, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 21 + }, + "hiddenSeries": false, + "id": 24, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "sort": null, + "sortDesc": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Hardware Corrupted - *./", + "stack": false + } + ], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"} - node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"} - node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} - node_memory_Slab_bytes{instance=\"$node\",job=\"$job\"} - node_memory_PageTables_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapCached_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Apps - Memory used by user-space applications", + "refId": "A", + "step": 240 + }, + { + "expr": "node_memory_PageTables_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "PageTables - Memory used to map between virtual and physical memory addresses", + "refId": "B", + "step": 240 + }, + { + "expr": "node_memory_SwapCached_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "SwapCache - Memory that keeps track of pages that have been fetched from swap but not yet been modified", + "refId": "C", + "step": 240 + }, + { + "expr": "node_memory_Slab_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Slab - Memory used by the kernel to cache data structures for its own use (caches like inode, dentry, etc)", + "refId": "D", + "step": 240 + }, + { + "expr": "node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Cache - Parked file data (file content) cache", + "refId": "E", + "step": 240 + }, + { + "expr": "node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Buffers - Block device (e.g. harddisk) cache", + "refId": "F", + "step": 240 + }, + { + "expr": "node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Unused - Free memory unassigned", + "refId": "G", + "step": 240 + }, + { + "expr": "(node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Swap - Swap space used", + "refId": "H", + "step": 240 + }, + { + "expr": "node_memory_HardwareCorrupted_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working", + "refId": "I", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Stack", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": { + "receive_packets_eth0": "#7EB26D", + "receive_packets_lo": "#E24D42", + "transmit_packets_eth0": "#7EB26D", + "transmit_packets_lo": "#E24D42" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 4, + "fillGradient": 0, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 33 + }, + "hiddenSeries": false, + "id": 84, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "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": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_bytes_total{instance=\"$node\",job=\"$job\"}[5m])*8", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive", + "refId": "A", + "step": 240 + }, + { + "expr": "irate(node_network_transmit_bytes_total{instance=\"$node\",job=\"$job\"}[5m])*8", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Transmit", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Network Traffic", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bps", + "label": "bits out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 3, + "description": "", + "fill": 4, + "fillGradient": 0, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 33 + }, + "height": "", + "hiddenSeries": false, + "id": 156, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": false, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'} - node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{mountpoint}}", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Disk Space Used", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 45 + }, + "hiddenSeries": false, + "id": 229, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Read.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[5m])", + "intervalFactor": 4, + "legendFormat": "{{device}} - Reads completed", + "refId": "A", + "step": 480 + }, + { + "expr": "irate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[5m])", + "intervalFactor": 2, + "legendFormat": "{{device}} - Writes completed", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Disk IOps", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "iops", + "label": "IO read (-) / write (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "io time": "#890F02" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 3, + "description": "", + "fill": 4, + "fillGradient": 0, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 45 + }, + "hiddenSeries": false, + "id": 42, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": null, + "sortDesc": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*read*./", + "transform": "negative-Y" + }, + { + "alias": "/.*sda.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde.*/", + "color": "#E24D42" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_read_bytes_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{device}} - Successfully read bytes", + "refId": "A", + "step": 240 + }, + { + "expr": "irate(node_disk_written_bytes_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{device}} - Successfully written bytes", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "I/O Usage Read / Write", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": false, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes read (-) / write (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "ms", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "io time": "#890F02" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 3, + "description": "", + "fill": 4, + "fillGradient": 0, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 57 + }, + "hiddenSeries": false, + "id": 127, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": null, + "sortDesc": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_io_time_seconds_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"} [5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{device}} - Time spent doing I/Os", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "I/O Usage Times", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": false, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": "time", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "s", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "repeat": null, + "title": "CPU / Memory / Net / Disk", + "type": "row" + }, + { + "collapsed": true, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 266, + "panels": [ + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 70 + }, + "hiddenSeries": false, + "id": 136, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 2, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_Inactive_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Inactive - Memory which has been less recently used. It is more eligible to be reclaimed for other purposes", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_Active_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Active - Memory that has been used more recently and usually not reclaimed unless absolutely necessary", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Active / Inactive", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 70 + }, + "hiddenSeries": false, + "id": 135, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Committed_AS - *./" + }, + { + "alias": "/.*CommitLimit - *./", + "color": "#BF1B00", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_Committed_AS_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Committed_AS - Amount of memory presently allocated on the system", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_CommitLimit_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "CommitLimit - Amount of memory currently available to be allocated on the system", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Commited", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 80 + }, + "hiddenSeries": false, + "id": 191, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_Inactive_file_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Inactive_file - File-backed memory on inactive LRU list", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_Inactive_anon_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Inactive_anon - Anonymous and swap cache on inactive LRU list, including tmpfs (shmem)", + "refId": "B", + "step": 4 + }, + { + "expr": "node_memory_Active_file_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Active_file - File-backed memory on active LRU list", + "refId": "C", + "step": 4 + }, + { + "expr": "node_memory_Active_anon_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Active_anon - Anonymous and swap cache on active least-recently-used (LRU) list, including tmpfs", + "refId": "D", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Active / Inactive Detail", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#052B51", + "Total RAM + Swap": "#052B51", + "Total Swap": "#614D93", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 80 + }, + "hiddenSeries": false, + "id": 130, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 2, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_Writeback_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Writeback - Memory which is actively being written back to disk", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_WritebackTmp_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "WritebackTmp - Memory used by FUSE for temporary writeback buffers", + "refId": "B", + "step": 4 + }, + { + "expr": "node_memory_Dirty_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Dirty - Memory which is waiting to get written back to the disk", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Writeback and Dirty", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 90 + }, + "hiddenSeries": false, + "id": 138, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated with huge pages", + "fill": 0 + }, + { + "alias": "ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated with huge pages", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_Mapped_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Mapped - Used memory in mapped pages files which have been mmaped, such as libraries", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_Shmem_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Shmem - Used shared memory (shared between several processes, thus including RAM disks)", + "refId": "B", + "step": 4 + }, + { + "expr": "node_memory_ShmemHugePages_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated with huge pages", + "refId": "C", + "step": 4 + }, + { + "expr": "node_memory_ShmemPmdMapped_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "ShmemPmdMapped - Ammount of shared (shmem/tmpfs) memory backed by huge pages", + "refId": "D", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Shared and Mapped", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#052B51", + "Total RAM + Swap": "#052B51", + "Total Swap": "#614D93", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 90 + }, + "hiddenSeries": false, + "id": 131, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 2, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_SUnreclaim_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "SUnreclaim - Part of Slab, that cannot be reclaimed on memory pressure", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_SReclaimable_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "SReclaimable - Part of Slab, that might be reclaimed, such as caches", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Slab", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#052B51", + "Total RAM + Swap": "#052B51", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 100 + }, + "hiddenSeries": false, + "id": 70, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_VmallocChunk_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "VmallocChunk - Largest contigious block of vmalloc area which is free", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_VmallocTotal_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "VmallocTotal - Total size of vmalloc memory area", + "refId": "B", + "step": 4 + }, + { + "expr": "node_memory_VmallocUsed_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "VmallocUsed - Amount of vmalloc area which is used", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Vmalloc", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 100 + }, + "hiddenSeries": false, + "id": 159, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_Bounce_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Bounce - Memory used for block device bounce buffers", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Bounce", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#052B51", + "Total RAM + Swap": "#052B51", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 110 + }, + "hiddenSeries": false, + "id": 129, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Inactive *./", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_AnonHugePages_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "AnonHugePages - Memory in anonymous huge pages", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_AnonPages_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "AnonPages - Memory in user pages not backed by files", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Anonymous", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 110 + }, + "hiddenSeries": false, + "id": 160, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 2, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_KernelStack_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "KernelStack - Kernel memory stack. This is not reclaimable", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_Percpu_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "PerCPU - Per CPU memory allocated dynamically by loadable modules", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Kernel / CPU", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#806EB7", + "Total RAM + Swap": "#806EB7", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 120 + }, + "hiddenSeries": false, + "id": 140, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_HugePages_Free{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "HugePages_Free - Huge pages in the pool that are not yet allocated", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_HugePages_Rsvd{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "HugePages_Rsvd - Huge pages for which a commitment to allocate from the pool has been made, but no allocation has yet been made", + "refId": "B", + "step": 4 + }, + { + "expr": "node_memory_HugePages_Surp{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "HugePages_Surp - Huge pages in the pool above the value in /proc/sys/vm/nr_hugepages", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory HugePages Counter", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#806EB7", + "Total RAM + Swap": "#806EB7", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 120 + }, + "hiddenSeries": false, + "id": 71, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 2, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_HugePages_Total{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "HugePages - Total size of the pool of huge pages", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_Hugepagesize_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Hugepagesize - Huge Page size", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory HugePages Size", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#052B51", + "Total RAM + Swap": "#052B51", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 130 + }, + "hiddenSeries": false, + "id": 128, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_DirectMap1G_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "DirectMap1G - Amount of pages mapped as this size", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_DirectMap2M_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "DirectMap2M - Amount of pages mapped as this size", + "refId": "B", + "step": 4 + }, + { + "expr": "node_memory_DirectMap4k_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "DirectMap4K - Amount of pages mapped as this size", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory DirectMap", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 130 + }, + "hiddenSeries": false, + "id": 137, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_Unevictable_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Unevictable - Amount of unevictable memory that can't be swapped out for a variety of reasons", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_Mlocked_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "MLocked - Size of pages locked to memory using the mlock() system call", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Unevictable and MLocked", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#052B51", + "Total RAM + Swap": "#052B51", + "Total Swap": "#614D93", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 140 + }, + "hiddenSeries": false, + "id": 132, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_NFS_Unstable_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "NFS Unstable - Memory in NFS pages sent to the server, but not yet commited to the storage", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory NFS", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + } + ], + "repeat": null, + "title": "Memory Meminfo", + "type": "row" + }, + { + "collapsed": true, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 22 + }, + "id": 267, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 23 + }, + "hiddenSeries": false, + "id": 176, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*out/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_pgpgin{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pagesin - Page in operations", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgpgout{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pagesout - Page out operations", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Pages In / Out", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "pages out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 23 + }, + "hiddenSeries": false, + "id": 22, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*out/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_pswpin{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pswpin - Pages swapped in", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pswpout{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pswpout - Pages swapped out", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Pages Swap In / Out", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "pages out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 33 + }, + "hiddenSeries": false, + "id": 175, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "Pgfault - Page major and minor fault operations", + "fill": 0, + "stack": false + } + ], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_pgfault{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgfault - Page major and minor fault operations", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgmajfault{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgmajfault - Major page fault operations", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgfault{instance=\"$node\",job=\"$job\"}[5m]) - irate(node_vmstat_pgmajfault{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgminfault - Minor page fault operations", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Page Faults", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "faults", + "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 + } + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#052B51", + "Total RAM + Swap": "#052B51", + "Total Swap": "#614D93", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 33 + }, + "hiddenSeries": false, + "id": 307, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_oom_kill{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "oom killer invocations ", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "OOM Killer", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "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 + } + } + ], + "repeat": null, + "title": "Memory Vmstat", + "type": "row" + }, + { + "collapsed": true, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 293, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 24 + }, + "hiddenSeries": false, + "id": 260, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Variation*./", + "color": "#890F02" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_timex_estimated_error_seconds{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Estimated error in seconds", + "refId": "A", + "step": 240 + }, + { + "expr": "node_timex_offset_seconds{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Time offset in between local system and reference clock", + "refId": "B", + "step": 240 + }, + { + "expr": "node_timex_maxerror_seconds{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Maximum error in seconds", + "refId": "C", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Time Syncronized Drift", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": "seconds", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": "counter", + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 24 + }, + "hiddenSeries": false, + "id": 291, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "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": "node_timex_loop_time_constant{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Phase-locked loop time adjust", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Time PLL Adjust", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 34 + }, + "hiddenSeries": false, + "id": 168, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Variation*./", + "color": "#890F02" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_timex_sync_status{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Is clock synchronized to a reliable server (1 = yes, 0 = no)", + "refId": "A", + "step": 240 + }, + { + "expr": "node_timex_frequency_adjustment_ratio{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Local clock frequency adjustment", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Time Syncronized Status", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 34 + }, + "hiddenSeries": false, + "id": 294, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "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": "node_timex_tick_seconds{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Seconds between clock ticks", + "refId": "A", + "step": 240 + }, + { + "expr": "node_timex_tai_offset_seconds{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "International Atomic Time (TAI) offset", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Time Misc", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": "seconds", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "System Timesync", + "type": "row" + }, + { + "collapsed": true, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 24 + }, + "id": 312, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 7 + }, + "hiddenSeries": false, + "id": 62, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_procs_blocked{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Processes blocked waiting for I/O to complete", + "refId": "A", + "step": 240 + }, + { + "expr": "node_procs_running{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Processes in runnable state", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Processes Status", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 7 + }, + "hiddenSeries": false, + "id": 315, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_processes_state{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ state }}", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Processes State", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 17 + }, + "hiddenSeries": false, + "id": 148, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_forks_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Processes forks second", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Processes Forks", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "forks / sec", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 17 + }, + "hiddenSeries": false, + "id": 149, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Max.*/", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(process_virtual_memory_bytes{instance=\"$node\",job=\"$job\"}[5m])", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Processes virtual memory size in bytes", + "refId": "A", + "step": 240 + }, + { + "expr": "process_resident_memory_max_bytes{instance=\"$node\",job=\"$job\"}", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Maximum amount of virtual memory available in bytes", + "refId": "B", + "step": 240 + }, + { + "expr": "irate(process_virtual_memory_bytes{instance=\"$node\",job=\"$job\"}[5m])", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Processes virtual memory size in bytes", + "refId": "C", + "step": 240 + }, + { + "expr": "irate(process_virtual_memory_max_bytes{instance=\"$node\",job=\"$job\"}[5m])", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Maximum amount of virtual memory available in bytes", + "refId": "D", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Processes Memory", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "decbytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 27 + }, + "hiddenSeries": false, + "id": 313, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "PIDs limit", + "color": "#F2495C", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_processes_pids{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Number of PIDs", + "refId": "A", + "step": 240 + }, + { + "expr": "node_processes_max_processes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "PIDs limit", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "PIDs Number and Limit", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 27 + }, + "hiddenSeries": false, + "id": 305, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*waiting.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_schedstat_running_seconds_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "CPU {{ cpu }} - seconds spent running a process", + "refId": "A", + "step": 240 + }, + { + "expr": "irate(node_schedstat_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "CPU {{ cpu }} - seconds spent by processing waiting for this CPU", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Process schdeule stats Running / Waiting", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": "seconds", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 37 + }, + "hiddenSeries": false, + "id": 314, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "Threads limit", + "color": "#F2495C", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_processes_threads{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Allocated threads", + "refId": "A", + "step": 240 + }, + { + "expr": "node_processes_max_threads{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Threads limit", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Threads Number and Limit", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "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 + } + } + ], + "title": "System Processes", + "type": "row" + }, + { + "collapsed": true, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 25 + }, + "id": 269, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 8 + }, + "hiddenSeries": false, + "id": 8, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_context_switches_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Context switches", + "refId": "A", + "step": 240 + }, + { + "expr": "irate(node_intr_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Interrupts", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Context Switches / Interrupts", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 8 + }, + "hiddenSeries": false, + "id": 7, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_load1{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 4, + "legendFormat": "Load 1m", + "refId": "A", + "step": 480 + }, + { + "expr": "node_load5{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 4, + "legendFormat": "Load 5m", + "refId": "B", + "step": 480 + }, + { + "expr": "node_load15{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 4, + "legendFormat": "Load 15m", + "refId": "C", + "step": 480 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "System Load", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 18 + }, + "hiddenSeries": false, + "id": 259, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Critical*./", + "color": "#E24D42", + "fill": 0 + }, + { + "alias": "/.*Max*./", + "color": "#EF843C", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_interrupts_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ type }} - {{ info }}", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Interrupts Detail", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 18 + }, + "hiddenSeries": false, + "id": 306, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_schedstat_timeslices_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "CPU {{ cpu }}", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Schedule timeslices executed by each cpu", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 28 + }, + "hiddenSeries": false, + "id": 151, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_entropy_available_bits{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Entropy available to random number generators", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Entropy", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 28 + }, + "hiddenSeries": false, + "id": 308, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(process_cpu_seconds_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Time spent", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "CPU time spent in user and system contexts", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": "seconds", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 38 + }, + "hiddenSeries": false, + "id": 64, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Max*./", + "color": "#890F02", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "process_max_fds{instance=\"$node\",job=\"$job\"}", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Maximum open file descriptors", + "refId": "A", + "step": 240 + }, + { + "expr": "process_open_fds{instance=\"$node\",job=\"$job\"}", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Open file descriptors", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "File Descriptors", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "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 + } + } + ], + "repeat": null, + "title": "System Misc", + "type": "row" + }, + { + "collapsed": true, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 26 + }, + "id": 304, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 26 + }, + "hiddenSeries": false, + "id": 158, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Critical*./", + "color": "#E24D42", + "fill": 0 + }, + { + "alias": "/.*Max*./", + "color": "#EF843C", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_hwmon_temp_celsius{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ chip }} {{ sensor }} temp", + "refId": "A", + "step": 240 + }, + { + "expr": "node_hwmon_temp_crit_alarm_celsius{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ chip }} {{ sensor }} Critical Alarm", + "refId": "B", + "step": 240 + }, + { + "expr": "node_hwmon_temp_crit_celsius{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ chip }} {{ sensor }} Critical", + "refId": "C", + "step": 240 + }, + { + "expr": "node_hwmon_temp_crit_hyst_celsius{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ chip }} {{ sensor }} Critical Historical", + "refId": "D", + "step": 240 + }, + { + "expr": "node_hwmon_temp_max_celsius{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ chip }} {{ sensor }} Max", + "refId": "E", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Hardware temperature monitor", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "celsius", + "label": "temperature", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 26 + }, + "hiddenSeries": false, + "id": 300, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Max*./", + "color": "#EF843C", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_cooling_device_cur_state{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Current {{ name }} in {{ type }}", + "refId": "A", + "step": 240 + }, + { + "expr": "node_cooling_device_max_state{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Max {{ name }} in {{ type }}", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Throttle cooling device", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 36 + }, + "hiddenSeries": false, + "id": 302, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "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": "node_power_supply_online{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ power_supply }} online", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Power supply", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "Hardware Misc", + "type": "row" + }, + { + "collapsed": true, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 27 + }, + "id": 296, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 10 + }, + "hiddenSeries": false, + "id": 297, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "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": "irate(node_systemd_socket_accepted_connections_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ name }} Connections", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Systemd Sockets", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 10 + }, + "hiddenSeries": false, + "id": 298, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "Failed", + "color": "#F2495C" + }, + { + "alias": "Inactive", + "color": "#FF9830" + }, + { + "alias": "Active", + "color": "#73BF69" + }, + { + "alias": "Deactivating", + "color": "#FFCB7D" + }, + { + "alias": "Activating", + "color": "#C8F2C2" + } + ], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_systemd_units{instance=\"$node\",job=\"$job\",state=\"activating\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Activating", + "refId": "A", + "step": 240 + }, + { + "expr": "node_systemd_units{instance=\"$node\",job=\"$job\",state=\"active\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Active", + "refId": "B", + "step": 240 + }, + { + "expr": "node_systemd_units{instance=\"$node\",job=\"$job\",state=\"deactivating\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Deactivating", + "refId": "C", + "step": 240 + }, + { + "expr": "node_systemd_units{instance=\"$node\",job=\"$job\",state=\"failed\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Failed", + "refId": "D", + "step": 240 + }, + { + "expr": "node_systemd_units{instance=\"$node\",job=\"$job\",state=\"inactive\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Inactive", + "refId": "E", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Systemd Units State", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "Systemd", + "type": "row" + }, + { + "collapsed": true, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 28 + }, + "id": 270, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 29 + }, + "hiddenSeries": false, + "id": 9, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ + { + "alias": "/.*Read.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\"}[5m])", + "intervalFactor": 4, + "legendFormat": "{{device}} - Reads completed", + "refId": "A", + "step": 8 + }, + { + "expr": "irate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\"}[5m])", + "intervalFactor": 2, + "legendFormat": "{{device}} - Writes completed", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Disk IOps Completed", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "iops", + "label": "IO read (-) / write (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 29 + }, + "hiddenSeries": false, + "id": 33, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Read.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_read_bytes_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 4, + "legendFormat": "{{device}} - Read bytes", + "refId": "A", + "step": 8 + }, + { + "expr": "irate(node_disk_written_bytes_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Written bytes", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Disk R/W Data", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "label": "bytes read (-) / write (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 3, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 39 + }, + "hiddenSeries": false, + "id": 37, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Read.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_read_time_seconds_total{instance=\"$node\",job=\"$job\"}[5m])", + "hide": false, + "intervalFactor": 4, + "legendFormat": "{{device}} - Read time", + "refId": "A", + "step": 8 + }, + { + "expr": "irate(node_disk_write_time_seconds_total{instance=\"$node\",job=\"$job\"}[5m])", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{device}} - Write time", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Disk R/W Time", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": "time. read (-) / write (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 39 + }, + "hiddenSeries": false, + "id": 35, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_io_time_weighted_seconds_total{instance=\"$node\",job=\"$job\"}[5m])", + "intervalFactor": 4, + "legendFormat": "{{device}} - IO time weighted", + "refId": "A", + "step": 8 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Disk IOs Weighted", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 49 + }, + "hiddenSeries": false, + "id": 133, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Read.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_reads_merged_total{instance=\"$node\",job=\"$job\"}[5m])", + "intervalFactor": 2, + "legendFormat": "{{device}} - Read merged", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_disk_writes_merged_total{instance=\"$node\",job=\"$job\"}[5m])", + "intervalFactor": 2, + "legendFormat": "{{device}} - Write merged", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Disk R/W Merged", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "iops", + "label": "I/Os", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 3, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 49 + }, + "hiddenSeries": false, + "id": 36, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_io_time_seconds_total{instance=\"$node\",job=\"$job\"}[5m])", + "intervalFactor": 4, + "legendFormat": "{{device}} - IO time", + "refId": "A", + "step": 8 + }, + { + "expr": "irate(node_disk_discard_time_seconds_total{instance=\"$node\",job=\"$job\"}[5m])", + "interval": "", + "intervalFactor": 4, + "legendFormat": "{{device}} - discard time", + "refId": "B", + "step": 8 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Time Spent Doing I/Os", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 59 + }, + "hiddenSeries": false, + "id": 34, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_io_now{instance=\"$node\",job=\"$job\"}[5m])", + "intervalFactor": 4, + "legendFormat": "{{device}} - IO now", + "refId": "A", + "step": 8 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Disk IOs Current in Progress", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "iops", + "label": "I/Os", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 59 + }, + "hiddenSeries": false, + "id": 301, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null as zero", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_discards_completed_total{instance=\"$node\",job=\"$job\"}[5m])", + "interval": "", + "intervalFactor": 4, + "legendFormat": "{{device}} - Discards completed", + "refId": "A", + "step": 8 + }, + { + "expr": "irate(node_disk_discards_merged_total{instance=\"$node\",job=\"$job\"}[5m])", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{device}} - Discards merged", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Disk IOps Discards completed / merged", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "iops", + "label": "IOs", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "repeat": null, + "title": "Storage Disk", + "type": "row" + }, + { + "collapsed": true, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 29 + }, + "id": 271, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 3, + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 78 + }, + "hiddenSeries": false, + "id": 43, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{mountpoint}} - Available", + "metric": "", + "refId": "A", + "step": 4 + }, + { + "expr": "node_filesystem_free_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}", + "format": "time_series", + "hide": true, + "intervalFactor": 2, + "legendFormat": "{{mountpoint}} - Free", + "refId": "B", + "step": 2 + }, + { + "expr": "node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}", + "format": "time_series", + "hide": true, + "intervalFactor": 2, + "legendFormat": "{{mountpoint}} - Size", + "refId": "C", + "step": 2 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Filesystem space available", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 78 + }, + "hiddenSeries": false, + "id": 41, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "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": "node_filesystem_files_free{instance=\"$node\",job=\"$job\",device!~'rootfs'}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{mountpoint}} - Free file nodes", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "File Nodes Free", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "file nodes", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 88 + }, + "hiddenSeries": false, + "id": 28, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_filefd_maximum{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 4, + "legendFormat": "Max open files", + "refId": "A", + "step": 8 + }, + { + "expr": "node_filefd_allocated{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Open files", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "File Descriptor", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "files", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 88 + }, + "hiddenSeries": false, + "id": 219, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "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": "node_filesystem_files{instance=\"$node\",job=\"$job\",device!~'rootfs'}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{mountpoint}} - File nodes total", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "File Nodes Size", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "file Nodes", + "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 + } + }, + { + "aliasColors": { + "/ ReadOnly": "#890F02" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 98 + }, + "hiddenSeries": false, + "id": 44, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 6, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_filesystem_readonly{instance=\"$node\",job=\"$job\",device!~'rootfs'}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{mountpoint}} - ReadOnly", + "refId": "A", + "step": 4 + }, + { + "expr": "node_filesystem_device_error{instance=\"$node\",job=\"$job\",device!~'rootfs'}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{mountpoint}} - Device error", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Filesystem in ReadOnly / Error", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "logBase": 1, + "max": "1", + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "repeat": null, + "title": "Storage Filesystem", + "type": "row" + }, + { + "collapsed": true, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 30 + }, + "id": 272, + "panels": [ + { + "aliasColors": { + "receive_packets_eth0": "#7EB26D", + "receive_packets_lo": "#E24D42", + "transmit_packets_eth0": "#7EB26D", + "transmit_packets_lo": "#E24D42" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 30 + }, + "hiddenSeries": false, + "id": 60, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_packets_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_network_transmit_packets_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{device}} - Transmit", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Network Traffic by Packets", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "pps", + "label": "packets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 30 + }, + "hiddenSeries": false, + "id": 142, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_errs_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive errors", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_network_transmit_errs_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Rransmit errors", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Network Traffic Errors", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "pps", + "label": "packets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 40 + }, + "hiddenSeries": false, + "id": 143, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_drop_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive drop", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_network_transmit_drop_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Transmit drop", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Network Traffic Drop", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "pps", + "label": "packets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 40 + }, + "hiddenSeries": false, + "id": 141, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_compressed_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive compressed", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_network_transmit_compressed_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Transmit compressed", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Network Traffic Compressed", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "pps", + "label": "packets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 50 + }, + "hiddenSeries": false, + "id": 146, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_multicast_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive multicast", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Network Traffic Multicast", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "pps", + "label": "packets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 50 + }, + "hiddenSeries": false, + "id": 144, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_fifo_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive fifo", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_network_transmit_fifo_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Transmit fifo", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Network Traffic Fifo", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "pps", + "label": "packets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 60 + }, + "hiddenSeries": false, + "id": 145, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_frame_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive frame", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Network Traffic Frame", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "pps", + "label": "packets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 60 + }, + "hiddenSeries": false, + "id": 231, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": 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": "irate(node_network_transmit_carrier_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Statistic transmit_carrier", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Network Traffic Carrier", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 70 + }, + "hiddenSeries": false, + "id": 232, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_transmit_colls_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Transmit colls", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Network Traffic Colls", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 70 + }, + "hiddenSeries": false, + "id": 61, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "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": [ + { + "alias": "NF conntrack limit", + "color": "#890F02", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_nf_conntrack_entries{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "NF conntrack entries", + "refId": "A", + "step": 4 + }, + { + "expr": "node_nf_conntrack_entries_limit{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "NF conntrack limit", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "NF Contrack", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "entries", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 80 + }, + "hiddenSeries": false, + "id": 230, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "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": "node_arp_entries{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{ device }} - ARP entries", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "ARP Entries", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Entries", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 80 + }, + "hiddenSeries": false, + "id": 288, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 1, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_network_mtu_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{ device }} - Bytes", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "MTU", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": 0, + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 90 + }, + "hiddenSeries": false, + "id": 280, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 1, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_network_speed_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{ device }} - Speed", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Speed", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": 0, + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 90 + }, + "hiddenSeries": false, + "id": 289, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 1, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_network_transmit_queue_length{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{ device }} - Interface transmit queue length", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Queue Length", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": 0, + "format": "none", + "label": "packets", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 100 + }, + "hiddenSeries": false, + "id": 290, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Dropped.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_softnet_processed_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "CPU {{cpu}} - Processed", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_softnet_dropped_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "CPU {{cpu}} - Dropped", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Softnet Packets", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "packetes drop (-) / process (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 100 + }, + "hiddenSeries": false, + "id": 310, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": 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": "irate(node_softnet_times_squeezed_total{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "CPU {{cpu}} - Squeezed", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Softnet Out of Quota", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 110 + }, + "hiddenSeries": false, + "id": 309, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": 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": "node_network_up{operstate=\"up\",instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{interface}} - Operational state UP", + "refId": "A", + "step": 4 + }, + { + "expr": "node_network_carrier{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "instant": false, + "legendFormat": "{{device}} - Physical link state", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Network Operational Status", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "repeat": null, + "title": "Network Traffic", + "type": "row" + }, + { + "collapsed": true, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 31 + }, + "id": 273, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 13 + }, + "hiddenSeries": false, + "id": 63, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "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": "node_sockstat_TCP_alloc{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "TCP_alloc - Allocated sockets", + "refId": "A", + "step": 240 + }, + { + "expr": "node_sockstat_TCP_inuse{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "TCP_inuse - Tcp sockets currently in use", + "refId": "B", + "step": 240 + }, + { + "expr": "node_sockstat_TCP_mem{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 2, + "legendFormat": "TCP_mem - Used memory for tcp", + "refId": "C", + "step": 240 + }, + { + "expr": "node_sockstat_TCP_orphan{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "TCP_orphan - Orphan sockets", + "refId": "D", + "step": 240 + }, + { + "expr": "node_sockstat_TCP_tw{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "TCP_tw - Sockets wating close", + "refId": "E", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Sockstat TCP", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 13 + }, + "hiddenSeries": false, + "id": 124, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "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": "node_sockstat_UDPLITE_inuse{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "UDPLITE_inuse - Udplite sockets currently in use", + "refId": "A", + "step": 240 + }, + { + "expr": "node_sockstat_UDP_inuse{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "UDP_inuse - Udp sockets currently in use", + "refId": "B", + "step": 240 + }, + { + "expr": "node_sockstat_UDP_mem{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "UDP_mem - Used memory for udp", + "refId": "C", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Sockstat UDP", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 23 + }, + "hiddenSeries": false, + "id": 126, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "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": "node_sockstat_sockets_used{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Sockets_used - Sockets currently in use", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Sockstat Used", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "sockets", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 23 + }, + "hiddenSeries": false, + "id": 220, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "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": "node_sockstat_TCP_mem_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "mem_bytes - TCP sockets in that state", + "refId": "A", + "step": 240 + }, + { + "expr": "node_sockstat_UDP_mem_bytes{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "mem_bytes - UDP sockets in that state", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Sockstat Memory Size", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "bytes", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 33 + }, + "hiddenSeries": false, + "id": 125, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "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": "node_sockstat_FRAG_inuse{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "FRAG_inuse - Frag sockets currently in use", + "refId": "A", + "step": 240 + }, + { + "expr": "node_sockstat_FRAG_memory{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "FRAG_memory - Used memory for frag", + "refId": "B", + "step": 240 + }, + { + "expr": "node_sockstat_RAW_inuse{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "RAW_inuse - Raw sockets currently in use", + "refId": "C", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Sockstat FRAG / RAW", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "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 + } + } + ], + "repeat": null, + "title": "Network Sockstat", + "type": "row" + }, + { + "collapsed": true, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 32 + }, + "id": 274, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 32 + }, + "height": "", + "hiddenSeries": false, + "id": 221, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 12, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_IpExt_InOctets{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "InOctets - Received octets", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_IpExt_OutOctets{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutOctets - Sent octets", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Netstat IP In / Out Octets", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "octects out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 32 + }, + "height": "", + "hiddenSeries": false, + "id": 81, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": 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": "irate(node_netstat_Ip_Forwarding{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Forwarding - IP forwarding", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Netstat IP Forwarding", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "datagrams", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 42 + }, + "height": "", + "hiddenSeries": false, + "id": 115, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 12, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Icmp_InMsgs{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "InMsgs - Messages which the entity received. Note that this counter includes all those counted by icmpInErrors", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_OutMsgs{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "OutMsgs - Messages which this entity attempted to send. Note that this counter includes all those counted by icmpOutErrors", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "ICMP In / Out", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "messages out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 42 + }, + "height": "", + "hiddenSeries": false, + "id": 50, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 12, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Icmp_InErrors{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "InErrors - Messages which the entity received but determined as having ICMP-specific errors (bad ICMP checksums, bad length, etc.)", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "ICMP 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": "messages out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 52 + }, + "height": "", + "hiddenSeries": false, + "id": 55, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 12, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Snd.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Udp_InDatagrams{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "InDatagrams - Datagrams received", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_Udp_OutDatagrams{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "OutDatagrams - Datagrams sent", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "UDP In / Out", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "datagrams out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 52 + }, + "height": "", + "hiddenSeries": false, + "id": 109, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 12, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Udp_InErrors{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "InErrors - UDP Datagrams that could not be delivered to an application", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_Udp_NoPorts{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "NoPorts - UDP Datagrams received on a port with no listener", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_netstat_UdpLite_InErrors{instance=\"$node\",job=\"$job\"}[5m])", + "interval": "", + "legendFormat": "InErrors Lite - UDPLite Datagrams that could not be delivered to an application", + "refId": "C" + }, + { + "expr": "irate(node_netstat_Udp_RcvbufErrors{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "RcvbufErrors - UDP buffer errors received", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_netstat_Udp_SndbufErrors{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "SndbufErrors - UDP buffer errors send", + "refId": "E", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "UDP 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": "datagrams", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 62 + }, + "height": "", + "hiddenSeries": false, + "id": 299, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 12, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Snd.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Tcp_InSegs{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "InSegs - Segments received, including those received in error. This count includes segments received on currently established connections", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_Tcp_OutSegs{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "OutSegs - Segments sent, including those on current connections but excluding those containing only retransmitted octets", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "TCP In / Out", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "datagrams out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 62 + }, + "height": "", + "hiddenSeries": false, + "id": 104, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 12, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_ListenOverflows{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "ListenOverflows - Times the listen queue of a socket overflowed", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_ListenDrops{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "ListenDrops - SYNs to LISTEN sockets ignored", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPSynRetrans{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "TCPSynRetrans - SYN-SYN/ACK retransmits to break down retransmissions in SYN, fast/timeout retransmits", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_netstat_Tcp_RetransSegs{instance=\"$node\",job=\"$job\"}[5m])", + "interval": "", + "legendFormat": "RetransSegs - Segments retransmitted - that is, the number of TCP segments transmitted containing one or more previously transmitted octets", + "refId": "D" + }, + { + "expr": "irate(node_netstat_Tcp_InErrs{instance=\"$node\",job=\"$job\"}[5m])", + "interval": "", + "legendFormat": "InErrs - Segments received in error (e.g., bad TCP checksums)", + "refId": "E" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "TCP 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": "counter", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 72 + }, + "height": "", + "hiddenSeries": false, + "id": 85, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 12, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*MaxConn *./", + "color": "#890F02", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_netstat_Tcp_CurrEstab{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "CurrEstab - TCP connections for which the current state is either ESTABLISHED or CLOSE- WAIT", + "refId": "A", + "step": 4 + }, + { + "expr": "node_netstat_Tcp_MaxConn{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "MaxConn - Limit on the total number of TCP connections the entity can support (Dinamic is \"-1\")", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "TCP Connections", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "connections", + "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 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 72 + }, + "height": "", + "hiddenSeries": false, + "id": 91, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 12, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Sent.*/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_SyncookiesFailed{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "SyncookiesFailed - Invalid SYN cookies received", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_SyncookiesRecv{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "SyncookiesRecv - SYN cookies received", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_SyncookiesSent{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "SyncookiesSent - SYN cookies sent", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "TCP SynCookie", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 82 + }, + "height": "", + "hiddenSeries": false, + "id": 82, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 12, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Tcp_ActiveOpens{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "ActiveOpens - TCP connections that have made a direct transition to the SYN-SENT state from the CLOSED state", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_Tcp_PassiveOpens{instance=\"$node\",job=\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "PassiveOpens - TCP connections that have made a direct transition to the SYN-RCVD state from the LISTEN state", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "TCP Direct Transition", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "connections", + "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 + } + } + ], + "repeat": null, + "title": "Network Netstat", + "type": "row" + }, + { + "collapsed": true, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 33 + }, + "id": 279, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 54 + }, + "hiddenSeries": false, + "id": 40, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "sort": "current", + "sortDesc": 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": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_scrape_collector_duration_seconds{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{collector}} - Scrape duration", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Node Exporter Scrape Time", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": "seconds", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 54 + }, + "hiddenSeries": false, + "id": 157, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*error.*/", + "color": "#F2495C", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_scrape_collector_success{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{collector}} - Scrape success", + "refId": "A", + "step": 4 + }, + { + "expr": "node_textfile_scrape_error{instance=\"$node\",job=\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{collector}} - Scrape textfile error (1 = true)", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Node Exporter Scrape", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "repeat": null, + "title": "Node Exporter", + "type": "row" + } + ], + "refresh": "1m", + "schemaVersion": 26, + "style": "dark", + "tags": [ + "linux" + ], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "default", + "value": "default" + }, + "error": null, + "hide": 0, + "includeAll": false, + "label": "datasource", + "multi": false, + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "allValue": null, + "current": { + "selected": false, + "text": "node-exporter", + "value": "node-exporter" + }, + "datasource": "Prometheus", + "definition": "", + "error": null, + "hide": 0, + "includeAll": false, + "label": "Job", + "multi": false, + "name": "job", + "options": [], + "query": "label_values(node_uname_info, job)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "selected": false, + "text": "10.0.1.36:9100", + "value": "10.0.1.36:9100" + }, + "datasource": "Prometheus", + "definition": "label_values(node_uname_info{job=\"$job\"}, instance)", + "error": null, + "hide": 0, + "includeAll": false, + "label": "Host:", + "multi": false, + "name": "node", + "options": [], + "query": "label_values(node_uname_info{job=\"$job\"}, instance)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": true + }, + { + "allValue": null, + "current": { + "selected": false, + "text": "[a-z]+|nvme[0-9]+n[0-9]+", + "value": "[a-z]+|nvme[0-9]+n[0-9]+" + }, + "error": null, + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "diskdevices", + "options": [ + { + "selected": true, + "text": "[a-z]+|nvme[0-9]+n[0-9]+", + "value": "[a-z]+|nvme[0-9]+n[0-9]+" + } + ], + "query": "[a-z]+|nvme[0-9]+n[0-9]+", + "skipUrlSync": false, + "type": "custom" + }, + { + "allValue": null, + "current": { + "selected": false, + "text": "uiplspidoc004", + "value": "uiplspidoc004" + }, + "datasource": "$DS_PROMETHEUS", + "definition": "label_values(node_meta{instance=\"$node\",job=\"$job\"}, node_name)", + "error": null, + "hide": 0, + "includeAll": false, + "label": "hostnameInfo", + "multi": false, + "name": "hostname", + "options": [ + { + "selected": true, + "text": "uiplspidoc004", + "value": "uiplspidoc004" + } + ], + "query": "label_values(node_meta{instance=\"$node\",job=\"$job\"}, node_name)", + "refresh": 0, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "browser", + "title": "Node Exporter Full", + "uid": "rYdddlPWk", + "version": 5 +} \ No newline at end of file diff --git a/grafana/provisioning/dashboards/Selenium4GridMonitoring.json b/grafana/provisioning/dashboards/Selenium4GridMonitoring.json new file mode 100644 index 0000000..51bf042 --- /dev/null +++ b/grafana/provisioning/dashboards/Selenium4GridMonitoring.json @@ -0,0 +1,233 @@ +{ + "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, + "id": 4, + "links": [], + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 18, + "x": 0, + "y": 0 + }, + "hiddenSeries": false, + "id": 2, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.7", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "selenium_grid_hub_maxSession", + "interval": "", + "legendFormat": "maxSession", + "refId": "A" + }, + { + "expr": "selenium_grid_hub_sessionCount", + "interval": "", + "legendFormat": "sessionCount", + "refId": "B" + }, + { + "expr": "selenium_grid_hub_sessionQueueSize", + "interval": "", + "legendFormat": "sessionQueueSize", + "refId": "C" + }, + { + "expr": "selenium_grid_hub_totalSlots", + "interval": "", + "legendFormat": "totalSlots", + "refId": "D" + }, + { + "expr": "selenium_grid_up", + "interval": "", + "legendFormat": "grid_up", + "refId": "E" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Panel Title", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "datasource": null, + "fieldConfig": { + "defaults": { + "custom": {}, + "mappings": [ + { + "from": "0", + "id": 1, + "text": "DOWN", + "to": "0.99", + "type": 2 + }, + { + "from": "", + "id": 2, + "text": "UP", + "to": "", + "type": 1, + "value": "1" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 0 + }, + { + "color": "light-green", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 5, + "x": 18, + "y": 0 + }, + "id": 4, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "expr": "selenium_grid_up", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Panel Title", + "type": "stat" + } + ], + "schemaVersion": 26, + "style": "dark", + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Selenium4 Grid monitoring", + "uid": "xECAhEYMk", + "version": 2 +} \ No newline at end of file diff --git a/grafana/provisioning/dashboards/SeleniumGridDashboard.json b/grafana/provisioning/dashboards/SeleniumGridDashboard.json new file mode 100644 index 0000000..928fc9c --- /dev/null +++ b/grafana/provisioning/dashboards/SeleniumGridDashboard.json @@ -0,0 +1,2220 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Docker Monitoring Template", + "editable": true, + "gnetId": 179, + "graphTooltip": 1, + "id": 2, + "iteration": 1605793991102, + "links": [], + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fieldConfig": { + "defaults": { + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "fill": 6, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 0 + }, + "hiddenSeries": false, + "id": 45, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.1", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "selenium_grid_up", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Grid Health", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "active", + "logBase": 1, + "max": "1", + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "datasource": null, + "fieldConfig": { + "defaults": { + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "yellow", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 0, + "y": 7 + }, + "id": 41, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true + }, + "pluginVersion": "7.3.1", + "targets": [ + { + "expr": "selenium_grid_hub_sessions_backlog", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Number of queued sessions", + "type": "gauge" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fieldConfig": { + "defaults": { + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "fill": 3, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 8, + "x": 6, + "y": 7 + }, + "hiddenSeries": false, + "id": 39, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.1", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "selenium_grid_hub_slotsFree", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Selenium Grid capacity (free slots)", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "datasource": null, + "fieldConfig": { + "defaults": { + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "orange", + "value": 60 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 14, + "y": 7 + }, + "id": 43, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "last" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "7.3.1", + "targets": [ + { + "expr": "selenium_grid_hub_slotsTotal - selenium_grid_hub_slotsFree", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Selenium Grid occupied slots", + "transparent": true, + "type": "stat" + }, + { + "collapsed": false, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 17, + "panels": [], + "title": "Host Info", + "type": "row" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "Prometheus", + "decimals": null, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "format": "s", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 7, + "w": 3, + "x": 0, + "y": 16 + }, + "id": 15, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "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": "time() - process_start_time_seconds{job=\"prometheus\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "", + "title": "Uptime", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "format": "short", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 7, + "w": 3, + "x": 3, + "y": 16 + }, + "id": 35, + "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" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false, + "ymax": null, + "ymin": null + }, + "tableColumn": "", + "targets": [ + { + "expr": "count(count(node_cpu_seconds_total{instance=~\"$node\", mode='system'}) by (cpu))", + "instant": true, + "refId": "A" + } + ], + "thresholds": "", + "timeFrom": null, + "timeShift": null, + "title": "CPU Cores", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": true, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 7, + "w": 5, + "x": 6, + "y": 16 + }, + "id": 13, + "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" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(ALERTS)", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "0,1", + "title": "Alerts", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "0" + } + ], + "valueName": "avg" + }, + { + "cacheTimeout": null, + "colorBackground": true, + "colorValue": false, + "colors": [ + "#d44a3a", + "rgba(237, 129, 40, 0.89)", + "#299c46" + ], + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 11, + "y": 16 + }, + "id": 11, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(up)", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "0,1", + "title": "Targets Online", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#d44a3a", + "rgba(237, 129, 40, 0.89)", + "#299c46" + ], + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 15, + "y": 16 + }, + "id": 31, + "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" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": true + }, + "tableColumn": "", + "targets": [ + { + "expr": "count(rate(container_last_seen{job=\"cadvisor\", name!=\"\"}[5m]))", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "0,1", + "title": "Running Containers", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "Prometheus", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": true, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 23 + }, + "id": 4, + "interval": null, + "isNew": true, + "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" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "(sum(node_memory_MemTotal_bytes) - sum(node_memory_MemFree_bytes +node_memory_Buffers_bytes + node_memory_Cached_bytes) ) / sum(node_memory_MemTotal_bytes) * 100", + "format": "time_series", + "interval": "10s", + "intervalFactor": 1, + "refId": "A", + "step": 10 + } + ], + "thresholds": "65, 90", + "title": "Memory usage", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "Prometheus", + "decimals": 2, + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": true, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 23 + }, + "id": 6, + "interval": null, + "isNew": true, + "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" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "100 - (avg(irate(node_cpu_seconds_total{instance=~\"$node\",mode=\"idle\"}[5m])) * 100)", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A", + "step": 10 + } + ], + "thresholds": "65, 90", + "title": "CPU usage", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "Prometheus", + "decimals": 2, + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": true, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 6, + "w": 7, + "x": 12, + "y": 23 + }, + "id": 7, + "interval": null, + "isNew": true, + "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" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "avg( node_filesystem_avail_bytes {mountpoint=\"/\"} / node_filesystem_size_bytes{mountpoint=\"/\"})", + "interval": "10s", + "intervalFactor": 1, + "metric": "", + "refId": "A", + "step": 10 + } + ], + "thresholds": "65, 90", + "title": "Filesystem usage", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "aliasColors": { + "RECEIVE": "#ea6460", + "SENT": "#1f78c1", + "TRANSMIT": "#1f78c1" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 4, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 29 + }, + "hiddenSeries": false, + "id": 25, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.1", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(container_network_receive_bytes_total{id=\"/\"}[$interval])) by (id)", + "format": "time_series", + "interval": "2m", + "intervalFactor": 2, + "legendFormat": "RECEIVE", + "refId": "A" + }, + { + "expr": "- sum(rate(container_network_transmit_bytes_total{id=\"/\"}[$interval])) by (id)", + "format": "time_series", + "interval": "2m", + "intervalFactor": 2, + "legendFormat": "TRANSMIT", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Node Network Traffic", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "Available Memory": "#508642", + "Used Memory": "#bf1b00" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 3, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 29 + }, + "hiddenSeries": false, + "id": 27, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.1", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(node_memory_MemTotal_bytes) - sum(node_memory_MemAvailable_bytes)", + "format": "time_series", + "interval": "2m", + "intervalFactor": 2, + "legendFormat": "Used Memory", + "refId": "B" + }, + { + "expr": "sum(node_memory_MemAvailable_bytes)", + "format": "time_series", + "interval": "2m", + "intervalFactor": 2, + "legendFormat": "Available Memory", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Node Mermory", + "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": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "Available Memory": "#508642", + "Free Storage": "#447ebc", + "Total Storage Available": "#508642", + "Used Memory": "#bf1b00", + "Used Storage": "#bf1b00" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 3, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 29 + }, + "hiddenSeries": false, + "id": 28, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.1", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(node_filesystem_free_bytes {job=\"node-exporter\", instance=~\".*9100\", device=~\"/dev/.*\", mountpoint!=\"/var/lib/docker/aufs\"}) ", + "format": "time_series", + "interval": "2m", + "intervalFactor": 2, + "legendFormat": "Free Storage", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Filesystem Available", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "decbytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 38 + }, + "id": 19, + "panels": [], + "repeat": null, + "title": "Container Performance", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 3, + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 10, + "w": 6, + "x": 0, + "y": 39 + }, + "hiddenSeries": false, + "id": 3, + "isNew": true, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.1", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(container_cpu_usage_seconds_total{image!=\"\"}[1m])) by (id,name)", + "format": "time_series", + "interval": "10s", + "intervalFactor": 1, + "legendFormat": "{{ name }}", + "metric": "container_cpu_user_seconds_total", + "refId": "A", + "step": 10 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Container CPU usage", + "tooltip": { + "msResolution": true, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percentunit", + "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", + "decimals": 2, + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 10, + "w": 6, + "x": 6, + "y": 39 + }, + "hiddenSeries": false, + "id": 2, + "isNew": true, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.1", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "container_memory_max_usage_bytes{image!=\"\"}", + "format": "time_series", + "interval": "10s", + "intervalFactor": 1, + "legendFormat": "{{ name }}", + "metric": "container_memory_usage:sort_desc", + "refId": "A", + "step": 10 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Container Memory Usage", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "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 + } + }, + { + "columns": [], + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fontSize": "100%", + "gridPos": { + "h": 13, + "w": 12, + "x": 12, + "y": 39 + }, + "id": 23, + "links": [], + "pageSize": null, + "scroll": true, + "showHeader": true, + "sort": { + "col": 0, + "desc": true + }, + "styles": [ + { + "alias": "Time", + "align": "auto", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "date" + }, + { + "alias": "", + "align": "auto", + "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": [ + { + "expr": "ALERTS", + "format": "table", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Alerts", + "transform": "table", + "type": "table-old" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 14, + "w": 6, + "x": 0, + "y": 49 + }, + "hiddenSeries": false, + "id": 8, + "isNew": true, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.1", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum by (name) (rate(container_network_receive_bytes_total{image!=\"\"}[1m] ) ))", + "interval": "10s", + "intervalFactor": 1, + "legendFormat": "{{ name }}", + "metric": "container_network_receive_bytes_total", + "refId": "A", + "step": 10 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Container Network Input", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "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", + "decimals": 2, + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 14, + "w": 6, + "x": 6, + "y": 49 + }, + "hiddenSeries": false, + "id": 9, + "isNew": true, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.1", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum by (name) (rate(container_network_transmit_bytes_total{image!=\"\"}[1m] ) ))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{ name }}", + "metric": "container_network_transmit_bytes_total", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Container Network Output", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "columns": [], + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fontSize": "100%", + "gridPos": { + "h": 10, + "w": 10, + "x": 12, + "y": 52 + }, + "id": 30, + "links": [], + "pageSize": 10, + "scroll": true, + "showHeader": true, + "sort": { + "col": 0, + "desc": true + }, + "styles": [ + { + "alias": "Time", + "align": "auto", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "link": false, + "linkUrl": "", + "pattern": "Time", + "type": "date" + }, + { + "alias": "", + "align": "auto", + "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": [ + { + "expr": "cadvisor_version_info", + "format": "table", + "instant": false, + "interval": "15m", + "intervalFactor": 2, + "legendFormat": "cAdvisor Version: {{cadvisorVersion}}", + "refId": "A" + }, + { + "expr": "prometheus_build_info", + "format": "table", + "interval": "15m", + "intervalFactor": 2, + "legendFormat": "Prometheus Version: {{version}}", + "refId": "B" + }, + { + "expr": "node_exporter_build_info", + "format": "table", + "interval": "15m", + "intervalFactor": 2, + "legendFormat": "Node-Exporter Version: {{version}}", + "refId": "C" + } + ], + "title": "Running Versions", + "transform": "table", + "type": "table-old" + } + ], + "refresh": "5s", + "schemaVersion": 26, + "style": "dark", + "tags": [ + "docker", + "prometheus, ", + "node-exporter", + "cadvisor" + ], + "templating": { + "list": [ + { + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "selected": false, + "text": "1m", + "value": "1m" + }, + "error": null, + "hide": 0, + "label": "interval", + "name": "interval", + "options": [ + { + "selected": true, + "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" + }, + { + "allValue": null, + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": "Prometheus", + "definition": "label_values(node_exporter_build_info{name=~'$name'},instance)", + "error": null, + "hide": 0, + "includeAll": true, + "label": "IP", + "multi": true, + "name": "node", + "options": [], + "query": "label_values(node_exporter_build_info{name=~'$name'},instance)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": "Prometheus", + "definition": "label_values(node_exporter_build_info,env)", + "error": null, + "hide": 0, + "includeAll": true, + "label": "Env", + "multi": true, + "name": "env", + "options": [], + "query": "label_values(node_exporter_build_info,env)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": "Prometheus", + "definition": "label_values(node_exporter_build_info{env=~'$env'},name)", + "error": null, + "hide": 0, + "includeAll": true, + "label": "CPU Name", + "multi": true, + "name": "name", + "options": [], + "query": "label_values(node_exporter_build_info{env=~'$env'},name)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-2d", + "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": "Selenium Grid monitoring", + "uid": "64nrElFm2", + "version": 1 +} \ No newline at end of file diff --git a/grafana/provisioning/dashboards/dashboard.yml b/grafana/provisioning/dashboards/dashboard.yml new file mode 100644 index 0000000..14716ee --- /dev/null +++ b/grafana/provisioning/dashboards/dashboard.yml @@ -0,0 +1,11 @@ +apiVersion: 1 + +providers: +- name: 'Prometheus' + orgId: 1 + folder: '' + type: file + disableDeletion: false + editable: true + options: + path: /etc/grafana/provisioning/dashboards diff --git a/grafana/provisioning/datasources/datasource.yml b/grafana/provisioning/datasources/datasource.yml new file mode 100644 index 0000000..c02bb38 --- /dev/null +++ b/grafana/provisioning/datasources/datasource.yml @@ -0,0 +1,50 @@ +# config file version +apiVersion: 1 + +# list of datasources that should be deleted from the database +deleteDatasources: + - name: Prometheus + orgId: 1 + +# list of datasources to insert/update depending +# whats available in the database +datasources: + # name of the datasource. Required +- name: Prometheus + # datasource type. Required + type: prometheus + # access mode. direct or proxy. Required + access: proxy + # org id. will default to orgId 1 if not specified + orgId: 1 + # url + url: http://prometheus:9090 + # database password, if used + password: + # database user, if used + user: + # database name, if used + database: + # enable/disable basic auth + basicAuth: false + # basic auth username, if used + basicAuthUser: + # basic auth password, if used + basicAuthPassword: + # enable/disable with credentials headers + withCredentials: + # mark as default datasource. Max one per org + isDefault: true + # fields that will be converted to json and stored in json_data + jsonData: + graphiteVersion: "1.1" + tlsAuth: false + tlsAuthWithCACert: false + # json object of data that will be encrypted. + secureJsonData: + tlsCACert: "..." + tlsClientCert: "..." + tlsClientKey: "..." + version: 1 + # allow users to edit datasources from the UI. + editable: true diff --git a/grafana_config/Dockerfile b/grafana_config/Dockerfile deleted file mode 100644 index 3014a19..0000000 --- a/grafana_config/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM alpine:3.6 - -WORKDIR /grafana_config -COPY . . - -RUN apk add --no-cache curl -RUN chmod +x /grafana_config/wait.sh - -ENTRYPOINT ["/grafana_config/wait.sh"] diff --git a/grafana_config/prometheus_datasource.json b/grafana_config/prometheus_datasource.json deleted file mode 100644 index 2eb9297..0000000 --- a/grafana_config/prometheus_datasource.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name":"prometheus", - "type":"prometheus", - "url":"http://prometheus:9090", - "access":"proxy", - "basicAuth":false -} diff --git a/grafana_config/selenium_grid_dashboard.json b/grafana_config/selenium_grid_dashboard.json deleted file mode 100644 index c71ef1f..0000000 --- a/grafana_config/selenium_grid_dashboard.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "dashboard": { - "annotations": { - "list": [] - }, - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "hideControls": false, - "id": null, - "links": [], - "rows": [ - { - "collapse": false, - "height": "250px", - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "prometheus", - "fill": 1, - "id": 1, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "span": 12, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "selenium_grid_hub_slotsTotal", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "Total", - "refId": "A", - "step": 2 - }, - { - "expr": "selenium_grid_hub_slotsFree", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "Free", - "refId": "B", - "step": 2 - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Slots", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 0, - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ] - } - ], - "repeat": null, - "repeatIteration": null, - "repeatRowId": null, - "showTitle": false, - "title": "Dashboard Row", - "titleSize": "h6" - } - ], - "schemaVersion": 14, - "style": "dark", - "tags": [], - "templating": { - "list": [] - }, - "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": "Selenium Grid", - "version": 1 - } -} \ No newline at end of file diff --git a/grafana_config/wait.sh b/grafana_config/wait.sh deleted file mode 100644 index 4752d3e..0000000 --- a/grafana_config/wait.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -while ! curl --output /dev/null --silent --head --fail http://grafana:3000; do sleep 1 && echo -n .; done; - -curl -v -H "Content-Type: application/json" -X POST -d @prometheus_datasource.json http://grafana:3000/api/datasources - -curl -v -H "Content-Type: application/json" -X POST -d @selenium_grid_dashboard.json http://grafana:3000/api/dashboards/db diff --git a/prometheus.yml b/prometheus.yml deleted file mode 100644 index 5f54805..0000000 --- a/prometheus.yml +++ /dev/null @@ -1,9 +0,0 @@ -global: - scrape_interval: 15s - evaluation_interval: 15s - external_labels: - monitor: '48k-monitor' -scrape_configs: - - job_name: 'selenium' - static_configs: - - targets: ['selenium_grid_exporter:8080'] diff --git a/prometheus/alert.rules b/prometheus/alert.rules new file mode 100644 index 0000000..e0aa881 --- /dev/null +++ b/prometheus/alert.rules @@ -0,0 +1,85 @@ +groups: +- name: example + rules: + + # Alert for any instance that is unreachable for > 5 minutes. + - alert: ServiceDown + expr: up == 0 + for: 5m + labels: + severity: page + annotations: + summary: "Instance {{ $labels.instance }} down" + description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes." + + - alert: SeleniumGridDown + expr: selenium_grid_up != 1 + for: 5s + labels: + severity: page + annotations: + summary: "Selenium grid down" + description: "Selenium grid http://uiplinfdoc040.ipswich.mgsops.net:4444/ went offline!" + + - alert: SeleniumGridPendingSessions + expr: selenium_grid_hub_sessions_backlog > 0 + for: 5s + labels: + severity: page + annotations: + summary: "Selenium grid pending sessions detected." + description: "Selenium grid http://uiplinfdoc040.ipswich.mgsops.net:4444/ contains queued up sessions!" + + - alert: ContainerHighThrottleRate + expr: rate(container_cpu_cfs_throttled_seconds_total[3m]) > 1 + for: 5m + labels: + severity: warning + annotations: + summary: "Container high throttle rate (instance {{ $labels.instance }})" + description: "Container is being throttled\n VALUE = {{ $value }}\n LABELS: {{ $labels }}" + + - alert: ContainerVolumeUsage + expr: (1 - (sum(container_fs_inodes_free) BY (instance) / sum(container_fs_inodes_total) BY (instance)) * 100) > 80 + for: 5m + labels: + severity: warning + annotations: + summary: "Container Volume usage (instance {{ $labels.instance }})" + description: "Container Volume usage is above 80%\n VALUE = {{ $value }}\n LABELS: {{ $labels }}" + + - alert: ContainerCpuUsage + expr: (sum(rate(container_cpu_usage_seconds_total{name!=""}[3m])) BY (instance, name) * 100) > 80 + for: 5m + labels: + severity: warning + annotations: + summary: "Container CPU usage (instance {{ $labels.instance }})" + description: "Container CPU usage is above 80%\n VALUE = {{ $value }}\n LABELS: {{ $labels }}" + + - alert: HostHighCpuLoad + expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80 + for: 5m + labels: + severity: warning + annotations: + summary: "Host high CPU load (instance {{ $labels.instance }})" + description: "CPU load is > 80%\n VALUE = {{ $value }}\n LABELS: {{ $labels }}" + + - alert: PrometheusAlertmanagerConfigurationReloadFailure + expr: alertmanager_config_last_reload_successful != 1 + for: 5m + labels: + severity: warning + annotations: + summary: "Prometheus AlertManager configuration reload failure (instance {{ $labels.instance }})" + description: "AlertManager configuration reload error\n VALUE = {{ $value }}\n LABELS: {{ $labels }}" + + - alert: PrometheusAlertmanagerConfigNotSynced + expr: count(count_values("config_hash", alertmanager_config_hash)) > 1 + for: 5m + labels: + severity: warning + annotations: + summary: "Prometheus AlertManager config not synced (instance {{ $labels.instance }})" + description: "Configurations of AlertManager cluster instances are out of sync\n VALUE = {{ $value }}\n LABELS: {{ $labels }}" \ No newline at end of file diff --git a/prometheus/prometheus.yml b/prometheus/prometheus.yml new file mode 100644 index 0000000..d928304 --- /dev/null +++ b/prometheus/prometheus.yml @@ -0,0 +1,78 @@ +# my global config +global: + scrape_interval: 15s # By default, scrape targets every 15 seconds. + evaluation_interval: 15s # By default, scrape targets every 15 seconds. + # scrape_timeout is set to the global default (10s). + + # Attach these labels to any time series or alerts when communicating with + # external systems (federation, remote storage, Alertmanager). + external_labels: + monitor: 'selenium-grid-monitoring' + +rule_files: + - 'alert.rules' + +# alert +alerting: + alertmanagers: + - scheme: http + static_configs: + - targets: + - "alertmanager:9093" + +# A scrape configuration containing exactly one endpoint to scrape: +# Here it's Prometheus itself. +scrape_configs: + # The job name is added as a label `job=` to any timeseries scraped from this config. + - job_name: 'prometheus' + + # Override the global default and scrape targets from this job every 5 seconds. + scrape_interval: 5s + + static_configs: + - targets: ['localhost:9090'] + + - job_name: 'selenium' + + # Override the global default and scrape targets from this job every 5 seconds. + scrape_interval: 5s + + static_configs: + - targets: ['selenium_grid_exporter:8080'] + + - job_name: 'docker-exporter' + + # Override the global default and scrape targets from this job every 5 seconds. + scrape_interval: 10s + + dns_sd_configs: + - names: + - 'tasks.docker-exporter' + type: 'A' + port: 9417 + +# static_configs: +# - targets: ['docker_exporter:8080'] + + + - job_name: 'node-exporter' + + # Override the global default and scrape targets from this job every 5 seconds. + scrape_interval: 10s + + dns_sd_configs: + - names: + - 'tasks.node-exporter' + type: 'A' + port: 9100 + + - job_name: 'cadvisor' + + # Override the global default and scrape targets from this job every 5 seconds. + scrape_interval: 10s + + dns_sd_configs: + - names: + - 'tasks.cadvisor' + type: 'A' + port: 8080 \ No newline at end of file From 38e219bd8b83436ddc7b111f6ab64eef33cbc5e3 Mon Sep 17 00:00:00 2001 From: mcopjan Date: Fri, 5 Mar 2021 10:08:54 +0000 Subject: [PATCH 06/11] Update docker-compose.yml update with the latest version of selenium beta images --- docker-compose.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index a761227..41dfa18 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ -# To execute this docker-compose yml file use `docker-compose -f docker-compose-v3.yml up` +# To execute this docker-compose yml file use `docker-compose -f docker-compose.yml up` # Add the `-d` flag at the end for detached execution -# To stop the execution, hit Ctrl+C, and then `docker-compose -f docker-compose-v3.yml down` +# To stop the execution, hit Ctrl+C, and then `docker-compose -f docker-compose.yml down` version: "3" volumes: @@ -9,7 +9,7 @@ volumes: services: chrome: - image: selenium/node-chrome:4.0.0-beta-1-prerelease-20210201 + image: selenium/node-chrome:4.0.0-beta-1-20210215 volumes: - /dev/shm:/dev/shm depends_on: @@ -28,7 +28,7 @@ services: - "6900:5900" firefox: - image: selenium/node-firefox:4.0.0-beta-1-prerelease-20210201 + image: selenium/node-firefox:4.0.0-beta-1-20210215 volumes: - /dev/shm:/dev/shm depends_on: @@ -41,7 +41,7 @@ services: - "6901:5900" opera: - image: selenium/node-opera:4.0.0-beta-1-prerelease-20210201 + image: selenium/node-opera:4.0.0-beta-1-20210215 volumes: - /dev/shm:/dev/shm depends_on: @@ -54,7 +54,7 @@ services: - "6902:5900" selenium-hub: - image: selenium/hub:4.0.0-beta-1-prerelease-20210201 + image: selenium/hub:4.0.0-beta-1-20210215 container_name: selenium-hub ports: - "4442:4442" @@ -91,7 +91,7 @@ services: user: "472" selenium_grid_exporter: - image: mcopjan/selenium_grid_exporter:latest + image: mcopjan/seleniumv4_grid_exporter:latest command: "--scrape-uri http://selenium-hub:4444" ports: - "8080:8080" \ No newline at end of file From 6cbcbcbfa77213d32399ec34711db5c023116b42 Mon Sep 17 00:00:00 2001 From: mcopjan Date: Fri, 5 Mar 2021 10:24:40 +0000 Subject: [PATCH 07/11] Update README.md update readme --- README.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a3dca20..a8132cf 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ A [Prometheus](https://prometheus.io/) exporter that collects [Selenium Grid](ht ### Usage ```sh -$ docker run -it wakeful/selenium-grid-exporter -h +$ docker run -it mcopjan/seleniumv4_grid_exporter:latest -h Usage of /selenium_grid_exporter: -listen-address string Address on which to expose metrics. (default ":8080") @@ -15,6 +15,20 @@ Usage of /selenium_grid_exporter: Path under which to expose metrics. (default "/metrics") ``` +### Prometheus/Grafana example + +``` + - run docker-compose -f docker-compose.yml up + - open grafana at localhost:3000 (admin/foobar) + - open Dashboards -> Manage -> Selenium4 Grid monitoring + ![selenium4_grafana.png](selenium4_grafana.png "Grafana example") + +``` + +run docker-compose -f docker-compose.yml up +open grafana at localhost:3000 (admin/foobar) +Dashboards -> Manage -> Selenium4 Grid monitoring +image ## Metrics ``` From d76d8a3377bf833267c44e103960f25edb5dd3ed Mon Sep 17 00:00:00 2001 From: mcopjan Date: Fri, 5 Mar 2021 10:26:08 +0000 Subject: [PATCH 08/11] add screenshot, update redme --- README.md | 8 ++------ selenium4_grafana.png | Bin 0 -> 204136 bytes 2 files changed, 2 insertions(+), 6 deletions(-) create mode 100644 selenium4_grafana.png diff --git a/README.md b/README.md index a8132cf..546999d 100644 --- a/README.md +++ b/README.md @@ -21,14 +21,10 @@ Usage of /selenium_grid_exporter: - run docker-compose -f docker-compose.yml up - open grafana at localhost:3000 (admin/foobar) - open Dashboards -> Manage -> Selenium4 Grid monitoring - ![selenium4_grafana.png](selenium4_grafana.png "Grafana example") + ![selenium4_grafana.png](./selenium4_grafana.png "Grafana example") ``` - -run docker-compose -f docker-compose.yml up -open grafana at localhost:3000 (admin/foobar) -Dashboards -> Manage -> Selenium4 Grid monitoring -image + ## Metrics ``` diff --git a/selenium4_grafana.png b/selenium4_grafana.png new file mode 100644 index 0000000000000000000000000000000000000000..a50aecd96e0a1381bf988491295226db4585cfcb GIT binary patch literal 204136 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 literal 0 HcmV?d00001 From 8468cb9b85820791977d38df42f508dea798ad69 Mon Sep 17 00:00:00 2001 From: mcopjan Date: Fri, 5 Mar 2021 10:27:22 +0000 Subject: [PATCH 09/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 546999d..4cbb80b 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Usage of /selenium_grid_exporter: - run docker-compose -f docker-compose.yml up - open grafana at localhost:3000 (admin/foobar) - open Dashboards -> Manage -> Selenium4 Grid monitoring - ![selenium4_grafana.png](./selenium4_grafana.png "Grafana example") + ![selenium4_grafana.png](./selenium4_grafana.png) ``` From 2dba232646861c8f9efc98fb77e431895c60a884 Mon Sep 17 00:00:00 2001 From: mcopjan Date: Fri, 5 Mar 2021 10:28:11 +0000 Subject: [PATCH 10/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4cbb80b..19d58f7 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Usage of /selenium_grid_exporter: - run docker-compose -f docker-compose.yml up - open grafana at localhost:3000 (admin/foobar) - open Dashboards -> Manage -> Selenium4 Grid monitoring - ![selenium4_grafana.png](./selenium4_grafana.png) + ![Screenshot](selenium4_grafana.png) ``` From 8ebb4e91081bd1c14bf8ccb0a3b41db0a275f885 Mon Sep 17 00:00:00 2001 From: mcopjan Date: Fri, 5 Mar 2021 10:28:48 +0000 Subject: [PATCH 11/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 19d58f7..9ab394b 100644 --- a/README.md +++ b/README.md @@ -21,9 +21,9 @@ Usage of /selenium_grid_exporter: - run docker-compose -f docker-compose.yml up - open grafana at localhost:3000 (admin/foobar) - open Dashboards -> Manage -> Selenium4 Grid monitoring - ![Screenshot](selenium4_grafana.png) ``` + ![Screenshot](selenium4_grafana.png) ## Metrics