From 5d87abc50c5c090ed71884b163420deea024775d Mon Sep 17 00:00:00 2001 From: Facu de la Cruz Date: Mon, 5 Oct 2020 01:34:32 -0300 Subject: [PATCH] Initial commit --- .pre-commit-config.yaml | 12 + LICENSE | 201 ++++ README.md | 50 + create-volumes.sh | 6 + docker-compose.yaml | 52 + grafana/network-dashboad.json | 1910 +++++++++++++++++++++++++++++++++ img/InfluxDB-config.png | Bin 0 -> 125387 bytes telegraf/Dockerfile | 17 + telegraf/bin/entrypoint.sh | 8 + telegraf/conf/telegraf.conf | 110 ++ 10 files changed, 2366 insertions(+) create mode 100644 .pre-commit-config.yaml create mode 100644 LICENSE create mode 100644 README.md create mode 100755 create-volumes.sh create mode 100644 docker-compose.yaml create mode 100644 grafana/network-dashboad.json create mode 100644 img/InfluxDB-config.png create mode 100644 telegraf/Dockerfile create mode 100755 telegraf/bin/entrypoint.sh create mode 100644 telegraf/conf/telegraf.conf diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..11e59c4 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,12 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.2.0 # Use the ref you want to point at + hooks: + - id: trailing-whitespace + - id: detect-private-key + - id: check-symlinks + - id: check-yaml + - id: mixed-line-ending + - id: pretty-format-json + args: ["--autofix"] + - id: forbid-new-submodules diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8eb5aba --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..361f12e --- /dev/null +++ b/README.md @@ -0,0 +1,50 @@ +# ISP-Checker + +`docker-compose` stack to run a set of ISP controls in a [Raspberry Pi](https://www.raspberrypi.org/). + +[![Linkedin](https://i.stack.imgur.com/gVE0j.png) LinkedIn](https://www.linkedin.com/in/fmdlc) [![GitHub](https://i.stack.imgur.com/tskMh.png) GitHub](https://github.com/fmdlc) +### Configuration + +Make sure you have [Docker-CE](https://phoenixnap.com/kb/docker-on-raspberry-pi) installed in your *Raspberry Pi*. If you don't, install it. +```bash +$ curl -fsSL https://get.docker.com -o get-docker.sh | bash - +``` + +Configure the InfluxDB credentials using Environment variables in the `./docker-compose.yaml` file. +```yaml +services: + influxdb: + container_name: influxdb + image: influxdb:latest + expose: + - 8086 + user: root + restart: on-failure + volumes: + - "influxdb-storage:/var/influxdb/data" + environment: + - INFLUXDB_DB="db1" + - INFLUXDB_ADMIN_USER="telegraf" + - INFLUXDB_ADMIN_PASSWORD="VerySecurePassword" + - INFLUXDB_READ_USER="grafana" + - INFLUXDB_READ_USER_PASSWORD="VerySecurePassword" +``` + +### Start +1. Create the Docker persistent volumes running the `./create-volumes.sh`. +2. Start the stack running `docker-compose up -d`. +3. Monitor the log status with `docker-compose logs -f`. + +### Login +1. Open your browser and point to `http://:3000/` and login with username `admin` and password `admin`. _Change it inmediately after the first login_. +2. Configure the _InfluxDB_ datasource to point to your local InfluxDB database. +3. Import the JSON Dashboard located in the `./grafana` directory. +![InfluxDB](./img/InfluxDB-config.png.png) + +## Contributing +Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. + +Please make sure to update tests as appropriate. + +## License +[Apache 2](https://www.apache.org/licenses/LICENSE-2.0) diff --git a/create-volumes.sh b/create-volumes.sh new file mode 100755 index 0000000..6f0ba43 --- /dev/null +++ b/create-volumes.sh @@ -0,0 +1,6 @@ +#!/bin/bash + + docker volume create --name=influxdb-storage + docker volume create --name=grafana-storage + + exit $? diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..f40f2d9 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,52 @@ +version: "3.3" +services: + influxdb: + container_name: influxdb + image: influxdb:latest + expose: + - 8086 + user: root + restart: on-failure + volumes: + - "influxdb-storage:/var/influxdb/data" + environment: + - INFLUXDB_DB="db1" + - INFLUXDB_ADMIN_USER="root" + - INFLUXDB_ADMIN_PASSWORD="VerySecurePassword" + - INFLUXDB_READ_USER="grafana" + - INFLUXDB_READ_USER_PASSWORD="VerySecurePassword" + ports: + - 8086:8086 + telegraf: + container_name: telegraf + image: tty0/isp_telegraf:latest + user: root + restart: on-failure + volumes: + - "./telegraf/conf/telegraf.conf:/etc/telegraf/telegraf.conf:ro" + links: + - "influxdb" + depends_on: + - "influxdb" + grafana: + container_name: grafana + image: grafana/grafana:latest + environment: + - GF_INSTALL_PLUGINS=https://grafana.com/api/plugins/gowee-traceroutemap-panel/versions/0.2.3/download;gowee-traceroutemap-panel + expose: + - 3000 + ports: + - 3000:3000 + restart: on-failure + volumes: + - "grafana-storage:/var/lib/grafana" + links: + - "influxdb" + depends_on: + - "influxdb" + - "telegraf" +volumes: + grafana-storage: + external: true + influxdb-storage: + external: true diff --git a/grafana/network-dashboad.json b/grafana/network-dashboad.json new file mode 100644 index 0000000..453ca0e --- /dev/null +++ b/grafana/network-dashboad.json @@ -0,0 +1,1910 @@ +{ + "__inputs": [ + { + "description": "", + "label": "InfluxDB", + "name": "DS_INFLUXDB", + "pluginId": "influxdb", + "pluginName": "InfluxDB", + "type": "datasource" + } + ], + "__requires": [ + { + "id": "bargauge", + "name": "Bar gauge", + "type": "panel", + "version": "" + }, + { + "id": "gauge", + "name": "Gauge", + "type": "panel", + "version": "" + }, + { + "id": "gowee-traceroutemap-panel", + "name": "Traceroute Map Panel", + "type": "panel", + "version": "0.2.3" + }, + { + "id": "grafana", + "name": "Grafana", + "type": "grafana", + "version": "7.2.0" + }, + { + "id": "graph", + "name": "Graph", + "type": "panel", + "version": "" + }, + { + "id": "heatmap", + "name": "Heatmap", + "type": "panel", + "version": "" + }, + { + "id": "influxdb", + "name": "InfluxDB", + "type": "datasource", + "version": "1.0.0" + }, + { + "id": "stat", + "name": "Stat", + "type": "panel", + "version": "" + }, + { + "id": "table", + "name": "Table", + "type": "panel", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Network latencies and availability", + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": null, + "links": [], + "panels": [ + { + "datasource": "${DS_INFLUXDB}", + "fieldConfig": { + "defaults": { + "custom": {}, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-red", + "value": null + }, + { + "color": "light-green", + "value": 1 + }, + { + "color": "semi-dark-green", + "value": 30 + }, + { + "color": "dark-green", + "value": 40 + }, + { + "color": "semi-dark-yellow", + "value": 50 + }, + { + "color": "semi-dark-orange", + "value": 60 + }, + { + "color": "dark-orange", + "value": 70 + }, + { + "color": "semi-dark-red", + "value": 80 + }, + { + "color": "dark-red", + "value": 90 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 0 + }, + "id": 26, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": true, + "showThresholdMarkers": true + }, + "pluginVersion": "7.2.0", + "targets": [ + { + "groupBy": [ + { + "params": [ + "5m" + ], + "type": "time" + }, + { + "params": [ + "previous" + ], + "type": "fill" + } + ], + "measurement": "speedtest", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "Ping" + ], + "type": "field" + }, + { + "params": [], + "type": "last" + } + ] + ], + "tags": [] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Speedtest (Ping)", + "transparent": true, + "type": "gauge" + }, + { + "datasource": "${DS_INFLUXDB}", + "description": "Download bandwidth", + "fieldConfig": { + "defaults": { + "custom": {}, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-red", + "value": null + }, + { + "color": "light-red", + "value": 5 + }, + { + "color": "dark-orange", + "value": 10 + }, + { + "color": "super-light-orange", + "value": 20 + }, + { + "color": "super-light-green", + "value": 30 + }, + { + "color": "light-green", + "value": 40 + }, + { + "color": "semi-dark-green", + "value": 50 + } + ] + }, + "unit": "Mbits" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 5, + "x": 6, + "y": 0 + }, + "id": 20, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "7.2.0", + "targets": [ + { + "groupBy": [ + { + "params": [ + "5m" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "speedtest", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "Download" + ], + "type": "field" + }, + { + "params": [], + "type": "last" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" + } + ] + ], + "tags": [] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Bandwidth (Download)", + "transparent": true, + "type": "stat" + }, + { + "aliasColors": {}, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_INFLUXDB}", + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 2, + "gridPos": { + "h": 9, + "w": 13, + "x": 11, + "y": 0 + }, + "hiddenSeries": false, + "id": 24, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.2.0", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "alias": "Download", + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "previous" + ], + "type": "fill" + } + ], + "measurement": "speedtest", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "Download" + ], + "type": "field" + }, + { + "params": [], + "type": "last" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" + } + ] + ], + "tags": [] + }, + { + "alias": "Upload", + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "previous" + ], + "type": "fill" + } + ], + "measurement": "speedtest", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "Upload" + ], + "type": "field" + }, + { + "params": [], + "type": "last" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" + } + ] + ], + "tags": [] + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Speedtest TX/RX", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:401", + "format": "Mbits", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:402", + "decimals": 2, + "format": "MBs", + "label": "Download (MB/s)", + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "datasource": "${DS_INFLUXDB}", + "description": "Uptime bandwidth", + "fieldConfig": { + "defaults": { + "custom": {}, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-red", + "value": null + }, + { + "color": "red", + "value": 0.5 + }, + { + "color": "dark-orange", + "value": 1 + }, + { + "color": "light-yellow", + "value": 2 + }, + { + "color": "super-light-green", + "value": 3 + }, + { + "color": "light-green", + "value": 4 + }, + { + "color": "semi-dark-green", + "value": 5 + }, + { + "color": "dark-green", + "value": 6 + } + ] + }, + "unit": "Mbits" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 5, + "x": 6, + "y": 5 + }, + "id": 22, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "7.2.0", + "targets": [ + { + "groupBy": [ + { + "params": [ + "5m" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "speedtest", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "Upload" + ], + "type": "field" + }, + { + "params": [], + "type": "last" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" + } + ] + ], + "tags": [] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Bandwidth (uptime)", + "type": "stat" + }, + { + "datasource": "${DS_INFLUXDB}", + "description": "DNS resolution average query time", + "fieldConfig": { + "defaults": { + "custom": {}, + "mappings": [], + "max": 1000, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "semi-dark-green", + "value": 200 + }, + { + "color": "dark-green", + "value": 300 + }, + { + "color": "super-light-orange", + "value": 400 + }, + { + "color": "#EAB839", + "value": 500 + }, + { + "color": "light-red", + "value": 700 + }, + { + "color": "red", + "value": 900 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 11, + "x": 0, + "y": 9 + }, + "id": 6, + "options": { + "displayMode": "lcd", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true + }, + "pluginVersion": "7.2.0", + "targets": [ + { + "alias": "$tag_domain", + "groupBy": [ + { + "params": [ + "domain" + ], + "type": "tag" + } + ], + "measurement": "dns_query", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "query_time_ms" + ], + "type": "field" + } + ] + ], + "tags": [] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "DNS AVG Query time", + "transparent": true, + "type": "bargauge" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_INFLUXDB}", + "description": "Percentage of package lost ", + "fieldConfig": { + "defaults": { + "custom": {}, + "unit": "percent" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 13, + "x": 11, + "y": 9 + }, + "hiddenSeries": false, + "id": 8, + "legend": { + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.2.0", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "$$hashKey": "object:405" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "groupBy": [], + "measurement": "ping", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "percent_packet_loss" + ], + "type": "field" + } + ] + ], + "tags": [] + } + ], + "thresholds": [ + { + "$$hashKey": "object:387", + "colorMode": "critical", + "fill": true, + "line": true, + "op": "gt", + "value": 20, + "yaxis": "left" + }, + { + "$$hashKey": "object:393", + "colorMode": "warning", + "fill": true, + "line": true, + "op": "gt", + "value": 2, + "yaxis": "left" + }, + { + "$$hashKey": "object:399", + "colorMode": "ok", + "fill": false, + "line": false, + "op": "lt", + "value": 0, + "yaxis": "left" + } + ], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "ICMP Packet loss (%)", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:416", + "format": "percent", + "label": "Packet lost %", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "$$hashKey": "object:417", + "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": "${DS_INFLUXDB}", + "description": "HTTP GET request response time (ms)", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 18 + }, + "hiddenSeries": false, + "id": 12, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.2.0", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "$tag_server", + "groupBy": [ + { + "params": [ + "server" + ], + "type": "tag" + } + ], + "measurement": "http_response", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "response_time" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "method", + "operator": "=", + "value": "GET" + } + ] + } + ], + "thresholds": [ + { + "$$hashKey": "object:1216", + "colorMode": "critical", + "fill": true, + "line": true, + "op": "gt", + "value": 10, + "yaxis": "left" + }, + { + "$$hashKey": "object:1222", + "colorMode": "warning", + "fill": false, + "line": false, + "op": "gt", + "value": 5, + "yaxis": "left" + }, + { + "$$hashKey": "object:1228", + "colorMode": "ok", + "fill": true, + "line": true, + "op": "lt", + "value": 2, + "yaxis": "left" + } + ], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "HTTP GET response time (ms)", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:1019", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:1020", + "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": "${DS_INFLUXDB}", + "description": "ICMP echo requests average latency.", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 2, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 28 + }, + "hiddenSeries": false, + "id": 2, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.2.0", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "$tag_url", + "groupBy": [ + { + "params": [ + "url" + ], + "type": "tag" + } + ], + "measurement": "ping", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "average_response_ms" + ], + "type": "field" + } + ] + ], + "tags": [] + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [ + { + "$$hashKey": "object:150", + "colorMode": "background6", + "fill": true, + "fillColor": "rgba(234, 112, 112, 0.12)", + "line": false, + "lineColor": "rgba(237, 46, 24, 0.60)", + "op": "time" + } + ], + "timeShift": null, + "title": "ICMP average response", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:100", + "format": "short", + "label": "average (ms)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:101", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "datasource": "${DS_INFLUXDB}", + "description": "Average response time for External Ping in ms.", + "fieldConfig": { + "defaults": { + "custom": {}, + "mappings": [], + "max": 700, + "min": 0, + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "semi-dark-green", + "value": 30 + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "semi-dark-orange", + "value": 70 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 2, + "y": 38 + }, + "id": 4, + "options": { + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/^ping\\.average_response_ms$/", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true + }, + "pluginVersion": "7.2.0", + "targets": [ + { + "groupBy": [], + "hide": false, + "limit": "", + "measurement": "ping", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT \"average_response_ms\" FROM \"ping\" ", + "rawQuery": false, + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "average_response_ms" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "url", + "operator": "=", + "value": "4.2.2.1" + } + ] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Ping AVG response time (external)", + "transparent": true, + "type": "gauge" + }, + { + "aliasColors": {}, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_INFLUXDB}", + "fieldConfig": { + "defaults": { + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 15, + "x": 9, + "y": 38 + }, + "hiddenSeries": false, + "id": 16, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null as zero", + "options": { + "alertThreshold": false + }, + "percentage": false, + "pluginVersion": "7.2.0", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "Tx (Bytes)", + "groupBy": [ + { + "params": [ + "1m" + ], + "type": "time" + } + ], + "measurement": "net", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "bytes_sent" + ], + "type": "field" + }, + { + "params": [], + "type": "integral" + } + ] + ], + "tags": [ + { + "key": "interface", + "operator": "=", + "value": "eth0" + } + ] + }, + { + "alias": "Rx (Bytes)", + "groupBy": [ + { + "params": [ + "1m" + ], + "type": "time" + } + ], + "measurement": "net", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "bytes_recv" + ], + "type": "field" + }, + { + "params": [], + "type": "integral" + } + ] + ], + "tags": [ + { + "key": "interface", + "operator": "=", + "value": "eth0" + } + ] + }, + { + "alias": "Drop In", + "groupBy": [ + { + "params": [ + "1m" + ], + "type": "time" + } + ], + "measurement": "net", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "drop_in" + ], + "type": "field" + }, + { + "params": [], + "type": "integral" + } + ] + ], + "tags": [ + { + "key": "interface", + "operator": "=", + "value": "eth0" + } + ] + }, + { + "alias": "Drop Out", + "groupBy": [ + { + "params": [ + "1m" + ], + "type": "time" + } + ], + "measurement": "net", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "drop_out" + ], + "type": "field" + }, + { + "params": [], + "type": "integral" + } + ] + ], + "tags": [ + { + "key": "interface", + "operator": "=", + "value": "eth0" + } + ] + } + ], + "thresholds": [ + { + "$$hashKey": "object:1747", + "colorMode": "warning", + "fill": true, + "line": true, + "op": "lt", + "value": 0, + "yaxis": "left" + } + ], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Interface: eth0 Tx/Rx", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "series", + "name": null, + "show": true, + "values": [ + "total" + ] + }, + "yaxes": [ + { + "$$hashKey": "object:1468", + "format": "bytes", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:1469", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "cards": { + "cardPadding": null, + "cardRound": null + }, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateCool", + "exponent": 0.5, + "max": null, + "min": null, + "mode": "spectrum" + }, + "dataFormat": "timeseries", + "datasource": "${DS_INFLUXDB}", + "description": "Standard Deviation (ms) heatmap", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 48 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 10, + "legend": { + "show": true + }, + "pluginVersion": "7.2.0", + "reverseYBuckets": false, + "targets": [ + { + "groupBy": [ + { + "params": [ + "url" + ], + "type": "tag" + } + ], + "measurement": "ping", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "standard_deviation_ms" + ], + "type": "field" + } + ] + ], + "tags": [] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Ping Standard Deviation (ms)", + "tooltip": { + "show": true, + "showHistogram": true + }, + "tooltipDecimals": 2, + "transparent": true, + "type": "heatmap", + "xAxis": { + "show": true + }, + "xBucketNumber": null, + "xBucketSize": "10s", + "yAxis": { + "decimals": 2, + "format": "none", + "logBase": 1, + "max": "3", + "min": "-0.2", + "show": true, + "splitFactor": null + }, + "yBucketBound": "auto", + "yBucketNumber": 10, + "yBucketSize": null + }, + { + "datasource": "${DS_INFLUXDB}", + "fieldConfig": { + "defaults": { + "custom": { + "align": null, + "displayMode": "color-text", + "filterable": true + }, + "mappings": [], + "max": 500, + "min": 100, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "super-light-blue", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "custom.width", + "value": 230 + }, + { + "id": "custom.displayMode", + "value": "color-text" + }, + { + "id": "unit", + "value": "dateTimeAsLocal" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "server" + }, + "properties": [ + { + "id": "custom.width", + "value": 617 + }, + { + "id": "mappings", + "value": [] + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "last" + }, + "properties": [ + { + "id": "custom.width", + "value": 145 + }, + { + "id": "displayName", + "value": "Response code" + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "light-red", + "value": null + }, + { + "color": "light-green", + "value": 100 + }, + { + "color": "light-green", + "value": 200 + }, + { + "color": "semi-dark-green", + "value": 300 + }, + { + "color": "super-light-yellow", + "value": 400 + }, + { + "color": "super-light-red", + "value": 500 + } + ] + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Response code" + }, + "properties": [ + { + "id": "custom.width", + "value": 385 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 48 + }, + "id": 14, + "options": { + "showHeader": true, + "sortBy": [ + { + "desc": false, + "displayName": "Time" + } + ] + }, + "pluginVersion": "7.2.0", + "targets": [ + { + "alias": "$tag_server", + "groupBy": [ + { + "params": [ + "server" + ], + "type": "tag" + } + ], + "measurement": "http_response", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "table", + "select": [ + [ + { + "params": [ + "http_response_code" + ], + "type": "field" + }, + { + "params": [], + "type": "last" + } + ] + ], + "tags": [] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "HTTP response codes", + "type": "table" + }, + { + "datasource": "${DS_INFLUXDB}", + "fieldConfig": { + "defaults": { + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 59 + }, + "id": 18, + "options": { + "geoIPProviders": { + "active": "ipsb", + "custom-api": { + "kind": "custom-api" + }, + "custom-function": { + "kind": "custom-function" + }, + "ipinfo": { + "kind": "ipinfo" + }, + "ipsb": { + "kind": "ipsb" + } + }, + "hostnameLabelWidth": 8, + "longitude360": false, + "mapClusterRadius": 15, + "simplifyHostname": false + }, + "pluginVersion": "7.2.0", + "targets": [ + { + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "orderByTime": "ASC", + "policy": "default", + "query": "select mean(avg) as rtt, mean(loss) as loss from mtr WHERE now() - 5m < time group by hop, ip, host, dest\n", + "rawQuery": true, + "refId": "A", + "resultFormat": "table", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "TraceRoute", + "transparent": true, + "type": "gowee-traceroutemap-panel" + } + ], + "refresh": "5s", + "schemaVersion": 26, + "style": "dark", + "tags": [ + "networking" + ], + "templating": { + "list": [] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Network", + "uid": "zLFZEuWRk", + "version": 6 +} diff --git a/img/InfluxDB-config.png b/img/InfluxDB-config.png new file mode 100644 index 0000000000000000000000000000000000000000..6c5513c16717b24c8aa9eecf5a96602b6cc9da62 GIT binary patch literal 125387 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 Q0>JP5*-K~2PPxSXABJPwPXGV_ literal 0 HcmV?d00001 diff --git a/telegraf/Dockerfile b/telegraf/Dockerfile new file mode 100644 index 0000000..456e55e --- /dev/null +++ b/telegraf/Dockerfile @@ -0,0 +1,17 @@ +FROM telegraf:latest + +LABEL mantainer="Facu de la Cruz" +LABEL PROJECT="ISP_monitor" + +COPY ./bin/entrypoint.sh /entrypoint.sh + +RUN apt-get update && apt-get install -y --no-install-recommends \ + mtr \ + speedtest-cli && \ + rm -rf /var/lib/apt/lists/* + +EXPOSE 8125/udp 8092/udp 8094 + +ENTRYPOINT ["/entrypoint.sh"] + +CMD ["telegraf"] diff --git a/telegraf/bin/entrypoint.sh b/telegraf/bin/entrypoint.sh new file mode 100755 index 0000000..6e7580b --- /dev/null +++ b/telegraf/bin/entrypoint.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -e + +if [ "${1:0:1}" = '-' ]; then + set -- telegraf "$@" +fi + +exec "$@" diff --git a/telegraf/conf/telegraf.conf b/telegraf/conf/telegraf.conf new file mode 100644 index 0000000..8d63b43 --- /dev/null +++ b/telegraf/conf/telegraf.conf @@ -0,0 +1,110 @@ +[global_tags] + +[agent] + interval = "10s" + round_interval = true + metric_batch_size = 1000 + metric_buffer_limit = 10000 + collection_jitter = "0s" + flush_interval = "10s" + flush_jitter = "0s" + precision = "" + hostname = "" + omit_hostname = false + debug = true + +[[outputs.influxdb]] + urls = ["http://influxdb:8086"] + database = "telegraf" + timeout = "60s" + username = "telegraf" + password = "VerySecurePassword" + user_agent = "telegraf" + +[[inputs.cpu]] + percpu = true + totalcpu = true + collect_cpu_time = false + report_active = false + +[[inputs.disk]] + ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"] + +[[inputs.diskio]] + +[[inputs.kernel]] + +[[inputs.mem]] + +[[inputs.processes]] + +[[inputs.swap]] + +[[inputs.system]] + +[[inputs.dns_query]] + servers = ["8.8.8.8", "4.2.2.1"] + domains = [ + "www.google.com", + "kernel.org", + "facebook.com", + "www.lanacion.com.ar", + "www.cablevision.com.ar" + ] + record_type = "A" + port = 53 + timeout = 2 + + [[inputs.http_response]] + urls = [ + "http://192.168.0.1", + "http://www.wikipedia.org", + "http://github.com", + "http://www.cablevision.com.ar", + "https://www.google.com", + "https://www.facebook.com" + ] + response_timeout = "5s" + method = "GET" + follow_redirects = true + +[[inputs.internal]] + collect_memstats = true + +[[inputs.linux_sysctl_fs]] + +[[inputs.net]] + +[[inputs.netstat]] + +[[inputs.ping]] + urls = ["192.168.0.1", "190.216.88.1", "4.2.2.1", "8.8.8.8", "kernel.org"] + method = "exec" + count = 1 + ping_interval = 1.0 + timeout = 5.0 + deadline = 10 + interface = "eth0" + binary = "ping" + ipv6 = false + +[[inputs.exec]] + commands=["mtr -C -n 4.2.2.1"] + timeout = "2m" + interval = "5m" + data_format = "csv" + csv_skip_rows = 1 + csv_column_names=[ "", "", "status","dest","hop","ip","loss","snt","", "","avg","best","worst","stdev"] + name_override = "mtr" + csv_tag_columns = ["dest", "hop", "ip"] + +[[inputs.exec]] + commands = ["/usr/bin/speedtest-cli --csv --bytes --no-pre-allocate"] + name_override = "speedtest" + timeout = "3m" + interval = "5m" + data_format = "csv" + csv_column_names = ['Server ID','Sponsor','Server Name','Timestamp','Distance','Ping','Download','Upload','Share','IP Address'] + csv_timestamp_column = "Timestamp" + csv_timestamp_format = "2006-01-02T15:04:05Z07:00" +