├── packaging ├── preinst ├── conffiles ├── prerm ├── postrm ├── control └── postinst ├── telegraf-edgeos.png ├── grafana ├── grafana_edgerouter_banner.png ├── grafana_edgerouter_fullscreen.png └── grafana_edgerouter.json ├── configs ├── 99telegraf ├── telegraf.service └── telegraf.conf ├── .github └── workflows │ ├── shellcheck.yml │ ├── cicd.yml │ ├── release.yml │ └── build.yml ├── LICENSE ├── plugins └── edgeos.sh └── README.md /packaging/preinst: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | exit 0 4 | -------------------------------------------------------------------------------- /packaging/conffiles: -------------------------------------------------------------------------------- 1 | /etc/default/telegraf 2 | /etc/telegraf/telegraf.conf 3 | -------------------------------------------------------------------------------- /telegraf-edgeos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/x70b1/telegraf-edgeos/HEAD/telegraf-edgeos.png -------------------------------------------------------------------------------- /grafana/grafana_edgerouter_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/x70b1/telegraf-edgeos/HEAD/grafana/grafana_edgerouter_banner.png -------------------------------------------------------------------------------- /grafana/grafana_edgerouter_fullscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/x70b1/telegraf-edgeos/HEAD/grafana/grafana_edgerouter_fullscreen.png -------------------------------------------------------------------------------- /configs/99telegraf: -------------------------------------------------------------------------------- 1 | telegraf ALL = NOPASSWD: /usr/sbin/ubnt-hal show-version 2 | telegraf ALL = NOPASSWD: /usr/sbin/ubnt-hal getPowerStatus 3 | telegraf ALL = NOPASSWD: /usr/sbin/ubnt-hal getTemp 4 | -------------------------------------------------------------------------------- /packaging/prerm: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "$1" = remove ]; then 4 | systemctl stop telegraf.service > /dev/null || true 5 | systemctl disable telegraf.service > /dev/null || true 6 | fi 7 | 8 | exit 0 9 | -------------------------------------------------------------------------------- /packaging/postrm: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "$1" = "remove" ] ; then 4 | systemctl daemon-reload > /dev/null || true 5 | fi 6 | 7 | if [ "$1" = "purge" ] ; then 8 | deluser --quiet telegraf > /dev/null || true 9 | fi 10 | 11 | exit 0 12 | -------------------------------------------------------------------------------- /packaging/control: -------------------------------------------------------------------------------- 1 | Maintainer: x70b1 2 | Package: telegraf 3 | Architecture: #ARCH 4 | Depends: adduser, curl, jq 5 | Version: #VERSION 6 | Description: A lightweight Telegraf distribution customized for Ubiquiti's EdgeOS. 7 | Installed-Size: #SIZE 8 | Homepage: https://github.com/x70b1/telegraf-edgeos 9 | -------------------------------------------------------------------------------- /packaging/postinst: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "$1" = "configure" ]; then 4 | if ! getent passwd telegraf > /dev/null; then 5 | adduser --quiet --system --group --no-create-home --home /etc/telegraf --shell /bin/false telegraf 6 | fi 7 | fi 8 | 9 | systemctl daemon-reload > /dev/null || true 10 | systemctl enable telegraf.service > /dev/null || true 11 | 12 | exit 0 13 | -------------------------------------------------------------------------------- /configs/telegraf.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=A lightweight Telegraf distribution customized for Ubiquiti's EdgeOS. 3 | Documentation=https://github.com/x70b1/telegraf-edgeos 4 | After=network.target 5 | 6 | [Service] 7 | EnvironmentFile=-/etc/default/telegraf 8 | User=telegraf 9 | ExecStart=/usr/bin/telegraf -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d $TELEGRAF_OPTS 10 | ExecReload=/bin/kill -HUP $MAINPID 11 | Restart=on-failure 12 | RestartForceExitStatus=SIGPIPE 13 | KillMode=control-group 14 | AmbientCapabilities=CAP_NET_RAW 15 | 16 | [Install] 17 | WantedBy=multi-user.target 18 | -------------------------------------------------------------------------------- /.github/workflows/shellcheck.yml: -------------------------------------------------------------------------------- 1 | name: ShellCheck 2 | 3 | on: 4 | workflow_call: 5 | 6 | jobs: 7 | Analysis: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Install 11 | run: | 12 | wget -O /opt/shellcheck-stable.linux.x86_64.tar.xz https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.linux.x86_64.tar.xz 13 | tar xf /opt/shellcheck-stable.linux.x86_64.tar.xz -C /opt 14 | - name: Version 15 | run: /opt/shellcheck-stable/shellcheck --version 16 | - name: Checkout 17 | uses: actions/checkout@v5 18 | - name: Analysis 19 | run: find . '(' -name '*.sh' ')' -exec /opt/shellcheck-stable/shellcheck {} + 20 | -------------------------------------------------------------------------------- /configs/telegraf.conf: -------------------------------------------------------------------------------- 1 | # 2 | # [agent] 3 | # hostname = "telegraf" 4 | # 5 | # interval = "1m" 6 | # 7 | # debug = false 8 | # quiet = false 9 | # logtarget = "stderr" 10 | # 11 | # [[outputs.influxdb]] 12 | # urls = [""] 13 | # username = "telegraf" 14 | # password = "" 15 | # 16 | # [[inputs.cpu]] 17 | # percpu = false 18 | # report_active = true 19 | # 20 | # [[inputs.system]] 21 | # 22 | # [[inputs.mem]] 23 | # 24 | # [[inputs.net]] 25 | # 26 | # [[inputs.exec]] 27 | # command = "sh /usr/lib/telegraf/edgeos.sh --interfaces --power --temperature" 28 | # data_format = "influx" 29 | # 30 | # [[inputs.exec]] 31 | # command = "sh /usr/lib/telegraf/edgeos.sh --firmware" 32 | # data_format = "influx" 33 | # 34 | # interval = "24h" 35 | # 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 x70b1 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/workflows/cicd.yml: -------------------------------------------------------------------------------- 1 | name: CI/CD 2 | 3 | on: 4 | push: 5 | branches: 6 | - '**' 7 | tags-ignore: 8 | - '**' 9 | 10 | env: 11 | VERSION_UPSTREAM: 1.36.1 12 | VERSION_BUILD: 1 13 | 14 | jobs: 15 | Variables: 16 | runs-on: ubuntu-latest 17 | outputs: 18 | version: ${{ env.VERSION_UPSTREAM }} 19 | build: ${{ env.VERSION_BUILD }} 20 | steps: 21 | - run: echo "Expose env vars" 22 | 23 | ShellCheck: 24 | uses: ./.github/workflows/shellcheck.yml 25 | flavor-influxdb: 26 | needs: 27 | - Variables 28 | - ShellCheck 29 | uses: ./.github/workflows/build.yml 30 | with: 31 | flavor: influxdb 32 | version: ${{ needs.Variables.outputs.version }} 33 | build: ${{ needs.Variables.outputs.build }} 34 | inputs: inputs.bond,inputs.cpu,inputs.disk,inputs.diskio,inputs.dns_query,inputs.ethtool,inputs.exec,inputs.http_response,inputs.internal,inputs.internet_speed,inputs.iptables,inputs.mem,inputs.net,inputs.netstat,inputs.net_response,inputs.ping,inputs.processes,inputs.snmp,inputs.snmp_legacy,inputs.snmp_trap,inputs.system 35 | outputs: outputs.influxdb,outputs.influxdb_v2 36 | parsers: parsers.influx 37 | processors: 38 | serializers: 39 | flavor-prometheus: 40 | needs: 41 | - Variables 42 | - ShellCheck 43 | uses: ./.github/workflows/build.yml 44 | with: 45 | flavor: prometheus 46 | version: ${{ needs.Variables.outputs.version }} 47 | build: ${{ needs.Variables.outputs.build }} 48 | inputs: inputs.bond,inputs.cpu,inputs.disk,inputs.diskio,inputs.dns_query,inputs.ethtool,inputs.exec,inputs.http_response,inputs.internal,inputs.internet_speed,inputs.iptables,inputs.mem,inputs.net,inputs.netstat,inputs.net_response,inputs.ping,inputs.processes,inputs.snmp,inputs.snmp_legacy,inputs.snmp_trap,inputs.system 49 | outputs: outputs.prometheus_client 50 | parsers: parsers.influx 51 | processors: 52 | serializers: 53 | flavor-prometheus-loki: 54 | needs: 55 | - Variables 56 | - ShellCheck 57 | uses: ./.github/workflows/build.yml 58 | with: 59 | flavor: prometheus+loki 60 | version: ${{ needs.Variables.outputs.version }} 61 | build: ${{ needs.Variables.outputs.build }} 62 | inputs: inputs.bond,inputs.cpu,inputs.disk,inputs.diskio,inputs.dns_query,inputs.ethtool,inputs.exec,inputs.http_response,inputs.internal,inputs.internet_speed,inputs.iptables,inputs.mem,inputs.net,inputs.netstat,inputs.net_response,inputs.ping,inputs.processes,inputs.snmp,inputs.snmp_legacy,inputs.snmp_trap,inputs.system 63 | outputs: outputs.prometheus_client,outputs.loki 64 | parsers: parsers.influx 65 | processors: 66 | serializers: 67 | flavor-splunk: 68 | needs: 69 | - Variables 70 | - ShellCheck 71 | uses: ./.github/workflows/build.yml 72 | with: 73 | flavor: splunk 74 | version: ${{ needs.Variables.outputs.version }} 75 | build: ${{ needs.Variables.outputs.build }} 76 | inputs: inputs.bond,inputs.cpu,inputs.disk,inputs.diskio,inputs.dns_query,inputs.ethtool,inputs.exec,inputs.http_response,inputs.internal,inputs.internet_speed,inputs.iptables,inputs.mem,inputs.net,inputs.netstat,inputs.net_response,inputs.ping,inputs.processes,inputs.snmp,inputs.snmp_legacy,inputs.snmp_trap,inputs.system 77 | outputs: outputs.http 78 | parsers: parsers.influx 79 | processors: processors.rename 80 | serializers: serializers.splunkmetric 81 | -------------------------------------------------------------------------------- /plugins/edgeos.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | edgeos_firmware() { 4 | firmware_product=$(cut -d '.' -f 2 < /etc/version | cut -d '-' -f 2) 5 | firmware_parameter="filter=eq~~platform~~edgerouter&filter=eq~~channel~~release&filter=eq~~product~~$firmware_product" 6 | 7 | firmware_running=$(sudo /usr/sbin/ubnt-hal show-version | grep Version | cut -d ' ' -f 7) 8 | firmware_availiable=$(curl -sf "https://fw-update.ubnt.com/api/firmware-latest?$firmware_parameter" | jq -r ._embedded.firmware[0].version) 9 | firmware_model=$(sudo /usr/sbin/ubnt-hal show-version | grep model | cut -d ' ' -f 7-) 10 | firmware_serial=$(sudo /usr/sbin/ubnt-hal show-version | grep S/N | cut -d ' ' -f 9-) 11 | 12 | if [ -n "$firmware_availiable" ]; then 13 | if [ "$firmware_running" = "$firmware_availiable" ]; then 14 | firmware_upgrade=0 15 | else 16 | firmware_upgrade=1 17 | fi 18 | else 19 | firmware_availiable="unknown" 20 | firmware_upgrade=0 21 | fi 22 | 23 | echo "edgeos_firmware running=\"$firmware_running\",availiable=\"$firmware_availiable\",upgrade=$firmware_upgrade,model=\"$firmware_model\",serial=\"$firmware_serial\"" 24 | } 25 | 26 | edgeos_interfaces() { 27 | interfaces_list=$(find /sys/class/net -maxdepth 1 -type l | cut -d '/' -f 5) 28 | 29 | interfaces_ethernet=$(/usr/sbin/ubnt-ifctl list-sys-intfs ethernet) 30 | interfaces_switch=$(/usr/sbin/ubnt-ifctl list-sys-intfs switch) 31 | interfaces_vif=$(/usr/sbin/ubnt-ifctl list-sys-intfs vif) 32 | interfaces_bridge=$(/usr/sbin/ubnt-ifctl list-sys-intfs bridge) 33 | 34 | for interface_name in $interfaces_list; do 35 | if echo "$interfaces_ethernet" | grep -q "$interface_name"; then 36 | interface_type="ethernet" 37 | elif echo "$interfaces_switch" | grep -q "$interface_name"; then 38 | interface_type="switch" 39 | elif echo "$interfaces_vif" | grep -q "$interface_name"; then 40 | interface_type="vif" 41 | elif echo "$interfaces_bridge" | grep -q "$interface_name"; then 42 | interface_type="bridge" 43 | else 44 | interface_type="other" 45 | fi 46 | 47 | if [ -f /sys/class/net/"$interface_name"/ifalias ]; then 48 | interface_alias=$(cat /sys/class/net/"$interface_name"/ifalias) 49 | 50 | if [ -n "$interface_alias" ]; then 51 | interface_alias="alias=\"$interface_alias\"," 52 | else 53 | interface_alias="" 54 | fi 55 | fi 56 | 57 | if [ -f /sys/class/net/"$interface_name"/operstate ]; then 58 | interface_state=$(cat /sys/class/net/"$interface_name"/operstate) 59 | 60 | if [ "$interface_state" = "up" ]; then 61 | interface_state="state=0," 62 | elif [ "$interface_state" = "lowerlayerdown" ]; then 63 | interface_state="state=1," 64 | elif [ "$interface_state" = "down" ]; then 65 | interface_state="state=2," 66 | else 67 | interface_state="state=3," 68 | fi 69 | fi 70 | 71 | if [ -f /sys/class/net/"$interface_name"/speed ]; then 72 | interface_speed=$(cat /sys/class/net/"$interface_name"/speed 2>/dev/null) 73 | 74 | if [ -n "$interface_speed" ]; then 75 | interface_speed="speed=$interface_speed" 76 | else 77 | interface_speed="speed=0" 78 | fi 79 | fi 80 | 81 | echo "edgeos_interface,interface=$interface_name,type=$interface_type $interface_alias$interface_state$interface_speed" 82 | done 83 | } 84 | 85 | edgeos_power() { 86 | power_info=$(sudo /usr/sbin/ubnt-hal getPowerStatus) 87 | 88 | if ! echo "$power_info" | grep -q "is not supported on this platform"; then 89 | echo "$power_info" | while read -r line; do 90 | power_info_measurement=$(echo "$line" | cut -d ':' -f 1 | rev | cut -d ' ' -f 1 | rev) 91 | power_info_value=$(echo "$line" | cut -d ':' -f 2 | cut -d ' ' -f 2) 92 | 93 | echo "edgeos_power $power_info_measurement=$power_info_value" 94 | done 95 | else 96 | echo "Collecting power metrics is not supported on this hardware!" 97 | fi 98 | } 99 | 100 | edgeos_temperature() { 101 | temperature_info=$(sudo /usr/sbin/ubnt-hal getTemp | tail -n +2 | head -n -1) 102 | 103 | if [ -n "$temperature_info" ]; then 104 | echo "$temperature_info" | while read -r line; do 105 | temperature_info_sensor=$(echo "$line" | cut -d ':' -f 1 | sed 's/ /\\ /') 106 | temperature_info_value=$(echo "$line" | cut -d ':' -f 2 | cut -d ' ' -f 1) 107 | 108 | echo "edgeos_temperature,sensor=$temperature_info_sensor temperature=$temperature_info_value" 109 | done 110 | else 111 | echo "Collecting temperature metrics is not supported on this hardware!" 112 | fi 113 | } 114 | 115 | for module in "$@"; do 116 | if [ "$module" = "--firmware" ]; then 117 | edgeos_firmware 118 | elif [ "$module" = "--interfaces" ]; then 119 | edgeos_interfaces 120 | elif [ "$module" = "--power" ]; then 121 | edgeos_power 122 | elif [ "$module" = "--temperature" ]; then 123 | edgeos_temperature 124 | fi 125 | done 126 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | # telegraf-edgeos 6 | 7 | [![Actions](https://github.com/x70b1/telegraf-edgeos/actions/workflows/cicd.yml/badge.svg)](https://github.com/x70b1/telegraf-edgeos/actions) 8 | [![Contributors](https://img.shields.io/github/contributors/x70b1/telegraf-edgeos.svg)](https://github.com/x70b1/telegraf-edgeos/graphs/contributors) 9 | [![License](https://img.shields.io/github/license/x70b1/telegraf-edgeos.svg)](https://github.com/x70b1/telegraf-edgeos/blob/master/LICENSE) 10 | [![Release](https://img.shields.io/github/v/release/x70b1/telegraf-edgeos?label=Release)](https://github.com/x70b1/telegraf-edgeos/releases) 11 | 12 | A lightweight [Telegraf](https://github.com/influxdata/telegraf) distribution customized for Ubiquiti's EdgeOS. 13 | 14 | 15 | ## What is so cool here? 16 | 17 | This Telegraf is crosscompiled for `mips` and `mipsel`. 18 | To reduce the size only essential and basic networking related internal plugins are part of the packaged binary. 19 | The result is a ~ 18 MB binary file instead of ~ 210 MB for a full featured Telegraf. 20 | So it should fit on every EdgeRouter. 21 | 22 | 23 | ## edgeos.sh 24 | 25 | To collect metrics that are availiable on EdgeOS but not collected via an internal module the package contains an additional plugin. 26 | You find it at `/usr/lib/telegraf/edgeos.sh`. 27 | It works with different parameters: 28 | 29 | **--firmware** checks Ubnt's servers for EdgeOS updates and returns the result 30 | 31 | **--interfaces** returns more details about a network interface like description, up/down-status and negotiated speed 32 | 33 | **--power** prints power stats, like `show hardware power` 34 | 35 | **--temperature** prints temperature stats, like `show hardware temperature` 36 | 37 | 38 | Example: 39 | 40 | ``` 41 | edgeos_firmware running="v2.0.9-hotfix.2",availiable="v2.0.9-hotfix.2",upgrade=0,model="EdgeRouter 12",serial="ABC123456" 42 | 43 | ... 44 | 45 | edgeos_interface,interface=eth4,type=ethernet alias="Server A",state=0,speed=1000 46 | edgeos_interface,interface=eth2,type=ethernet alias="Server B",state=1,speed=10 47 | edgeos_interface,interface=eth0,type=ethernet alias="Provider XYZ",state=0,speed=1000 48 | 49 | ... 50 | 51 | edgeos_power voltage=23.41 52 | edgeos_power current=0.37 53 | edgeos_power consumption=8.85 54 | edgeos_temperature,sensor=CPU temperature=66.75 55 | edgeos_temperature,sensor=Board\ 1 temperature=58.25 56 | edgeos_temperature,sensor=Board\ 2 temperature=49.75 57 | edgeos_temperature,sensor=PHY\ 1 temperature=68.50 58 | edgeos_temperature,sensor=PHY\ 2 temperature=57.50 59 | ``` 60 | 61 | 62 | ## Supported Hardware 63 | 64 | | | Family | Package | Internal Plugins | firmware | interfaces | power | temperature | 65 | | --------------------- | --------------------- | --------------------- | :----: | :----: | :----: | :----: | :----: | 66 | | `ER-X` | E50 | mipsel | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: | :x: | 67 | | `ER-X-SFP` | E50 | mipsel | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: | :x: | 68 | | `ER-4` | E300 | mips | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: | :x: | 69 | | `ER-6P` | E300 | mips | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: | 70 | | `ER‑8` | E200 | mips | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | 71 | | `ER-8-XG` | E1000 | mips | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | 72 | | `ER-10X` | E50 | mipsel | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | 73 | | `ER-12` | E300 | mips | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | 74 | | `ER-12P` | E300 | mips | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | 75 | | `ERLite-3` | E100 | mips | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: | :x: | 76 | | `ERPoe‑5` | E100 | mips | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | 77 | | `ERPro-8` | E200 | mips | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | 78 | | `EP-R6` | E50 | mipsel | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | 79 | | `EP-R8` | E200 | mips | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | 80 | 81 | 82 | :heavy_check_mark: = Works for me! 83 | 84 | :x: = No hardware support for this feature :( 85 | 86 | :grey_question: = Unknown 87 | 88 | Your device is not listed with a green check mark? Please open an issue if you have tested Telegraf on an EdgeRouter and share your findings. 89 | 90 | 91 | ## Setup 92 | 93 | To keep the binary size small, we introduced `flavors`. 94 | This means that only a specific output like `influxdb_v2` or `prometheus_client` is part of the built binary. 95 | If you need a different output, create an issue. 96 | 97 | Install the prebuild package with your needed flavor: 98 | 99 | ```sh 100 | curl -L -o telegraf.deb https://github.com/x70b1/telegraf-edgeos/releases/download/{RELEASE}/telegraf_{REALEASE}+{FLAVOR}_{ARCH}.deb 101 | dpkg -i telegraf.deb 102 | ``` 103 | 104 | You can upgrade Telegraf with the same commands. 105 | 106 | As you already know from InfluxData's distribution of Telegraf, the configuration is located at `/etc/telegraf/telegraf.conf` and `/etc/telegraf/telegraf.d`. 107 | The [sample config](https://github.com/x70b1/telegraf-edgeos/blob/master/configs/telegraf.conf) is pre-installed. This needs to be modified for your own use case. 108 | 109 | 110 | ## Dashboard 111 | 112 | [![Dashboard](grafana/grafana_edgerouter_banner.png)](#) 113 | 114 | I added a sample Grafana dashboard. 115 | 116 | It comes without warranty. 117 | You will have to customize it. 118 | 119 | * [grafana_edgerouter.json](grafana/grafana_edgerouter.json) 120 | * [grafana_edgerouter_fullscreen.png](grafana/grafana_edgerouter_fullscreen.png) 121 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | tags: 6 | - '**' 7 | 8 | env: 9 | VERSION_UPSTREAM: 1.36.1 10 | VERSION_BUILD: 1 11 | 12 | jobs: 13 | Variables: 14 | runs-on: ubuntu-latest 15 | outputs: 16 | version: ${{ env.VERSION_UPSTREAM }} 17 | build: ${{ env.VERSION_BUILD }} 18 | steps: 19 | - run: echo "Expose env vars" 20 | 21 | ShellCheck: 22 | uses: ./.github/workflows/shellcheck.yml 23 | flavor-influxdb: 24 | needs: 25 | - Variables 26 | - ShellCheck 27 | uses: ./.github/workflows/build.yml 28 | with: 29 | flavor: influxdb 30 | version: ${{ needs.Variables.outputs.version }} 31 | build: ${{ needs.Variables.outputs.build }} 32 | inputs: inputs.bond,inputs.cpu,inputs.disk,inputs.diskio,inputs.dns_query,inputs.ethtool,inputs.exec,inputs.http_response,inputs.internal,inputs.internet_speed,inputs.iptables,inputs.mem,inputs.net,inputs.netstat,inputs.net_response,inputs.ping,inputs.processes,inputs.snmp,inputs.snmp_legacy,inputs.snmp_trap,inputs.system 33 | outputs: outputs.influxdb,outputs.influxdb_v2 34 | parsers: parsers.influx 35 | processors: 36 | serializers: 37 | flavor-prometheus: 38 | needs: 39 | - Variables 40 | - ShellCheck 41 | uses: ./.github/workflows/build.yml 42 | with: 43 | flavor: prometheus 44 | version: ${{ needs.Variables.outputs.version }} 45 | build: ${{ needs.Variables.outputs.build }} 46 | inputs: inputs.bond,inputs.cpu,inputs.disk,inputs.diskio,inputs.dns_query,inputs.ethtool,inputs.exec,inputs.http_response,inputs.internal,inputs.internet_speed,inputs.iptables,inputs.mem,inputs.net,inputs.netstat,inputs.net_response,inputs.ping,inputs.processes,inputs.snmp,inputs.snmp_legacy,inputs.snmp_trap,inputs.system 47 | outputs: outputs.prometheus_client 48 | parsers: parsers.influx 49 | processors: 50 | serializers: 51 | flavor-prometheus-loki: 52 | needs: 53 | - Variables 54 | - ShellCheck 55 | uses: ./.github/workflows/build.yml 56 | with: 57 | flavor: prometheus+loki 58 | version: ${{ needs.Variables.outputs.version }} 59 | build: ${{ needs.Variables.outputs.build }} 60 | inputs: inputs.bond,inputs.cpu,inputs.disk,inputs.diskio,inputs.dns_query,inputs.ethtool,inputs.exec,inputs.http_response,inputs.internal,inputs.internet_speed,inputs.iptables,inputs.mem,inputs.net,inputs.netstat,inputs.net_response,inputs.ping,inputs.processes,inputs.snmp,inputs.snmp_legacy,inputs.snmp_trap,inputs.system 61 | outputs: outputs.prometheus_client,outputs.loki 62 | parsers: parsers.influx 63 | processors: 64 | serializers: 65 | flavor-splunk: 66 | needs: 67 | - Variables 68 | - ShellCheck 69 | uses: ./.github/workflows/build.yml 70 | with: 71 | flavor: splunk 72 | version: ${{ needs.Variables.outputs.version }} 73 | build: ${{ needs.Variables.outputs.build }} 74 | inputs: inputs.bond,inputs.cpu,inputs.disk,inputs.diskio,inputs.dns_query,inputs.ethtool,inputs.exec,inputs.http_response,inputs.internal,inputs.internet_speed,inputs.iptables,inputs.mem,inputs.net,inputs.netstat,inputs.net_response,inputs.ping,inputs.processes,inputs.snmp,inputs.snmp_legacy,inputs.snmp_trap,inputs.system 75 | outputs: outputs.http 76 | parsers: parsers.influx 77 | processors: processors.rename 78 | serializers: serializers.splunkmetric 79 | Release: 80 | needs: 81 | - flavor-influxdb 82 | - flavor-prometheus 83 | - flavor-prometheus-loki 84 | - flavor-splunk 85 | runs-on: ubuntu-latest 86 | steps: 87 | - name: Draft 88 | uses: actions/create-release@v1 89 | id: draft 90 | env: 91 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 92 | with: 93 | tag_name: ${{ github.ref }} 94 | release_name: ${{ github.ref }} 95 | draft: true 96 | prerelease: false 97 | - name: Download 98 | uses: actions/download-artifact@v5 99 | with: 100 | name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+influxdb_mips.deb 101 | path: ./ 102 | - name: Download 103 | uses: actions/download-artifact@v5 104 | with: 105 | name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+influxdb_mipsel.deb 106 | path: ./ 107 | - name: Download 108 | uses: actions/download-artifact@v5 109 | with: 110 | name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus_mips.deb 111 | path: ./ 112 | - name: Download 113 | uses: actions/download-artifact@v5 114 | with: 115 | name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus_mipsel.deb 116 | path: ./ 117 | - name: Download 118 | uses: actions/download-artifact@v5 119 | with: 120 | name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus+loki_mips.deb 121 | path: ./ 122 | - name: Download 123 | uses: actions/download-artifact@v5 124 | with: 125 | name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus+loki_mipsel.deb 126 | path: ./ 127 | - name: Download 128 | uses: actions/download-artifact@v5 129 | with: 130 | name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+splunk_mips.deb 131 | path: ./ 132 | - name: Download 133 | uses: actions/download-artifact@v5 134 | with: 135 | name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+splunk_mipsel.deb 136 | path: ./ 137 | - name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+influxdb_mips.deb 138 | uses: actions/upload-release-asset@v1 139 | env: 140 | GITHUB_TOKEN: ${{ github.token }} 141 | with: 142 | upload_url: ${{ steps.draft.outputs.upload_url }} 143 | asset_path: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+influxdb_mips.deb 144 | asset_name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+influxdb_mips.deb 145 | asset_content_type: application/vnd.debian.binary-package 146 | - name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+influxdb_mipsel.deb 147 | uses: actions/upload-release-asset@v1 148 | env: 149 | GITHUB_TOKEN: ${{ github.token }} 150 | with: 151 | upload_url: ${{ steps.draft.outputs.upload_url }} 152 | asset_path: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+influxdb_mipsel.deb 153 | asset_name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+influxdb_mipsel.deb 154 | asset_content_type: application/vnd.debian.binary-package 155 | - name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus_mips.deb 156 | uses: actions/upload-release-asset@v1 157 | env: 158 | GITHUB_TOKEN: ${{ github.token }} 159 | with: 160 | upload_url: ${{ steps.draft.outputs.upload_url }} 161 | asset_path: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus_mips.deb 162 | asset_name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus_mips.deb 163 | asset_content_type: application/vnd.debian.binary-package 164 | - name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus_mipsel.deb 165 | uses: actions/upload-release-asset@v1 166 | env: 167 | GITHUB_TOKEN: ${{ github.token }} 168 | with: 169 | upload_url: ${{ steps.draft.outputs.upload_url }} 170 | asset_path: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus_mipsel.deb 171 | asset_name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus_mipsel.deb 172 | asset_content_type: application/vnd.debian.binary-package 173 | - name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus+loki_mips.deb 174 | uses: actions/upload-release-asset@v1 175 | env: 176 | GITHUB_TOKEN: ${{ github.token }} 177 | with: 178 | upload_url: ${{ steps.draft.outputs.upload_url }} 179 | asset_path: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus+loki_mips.deb 180 | asset_name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus+loki_mips.deb 181 | asset_content_type: application/vnd.debian.binary-package 182 | - name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus+loki_mipsel.deb 183 | uses: actions/upload-release-asset@v1 184 | env: 185 | GITHUB_TOKEN: ${{ github.token }} 186 | with: 187 | upload_url: ${{ steps.draft.outputs.upload_url }} 188 | asset_path: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus+loki_mipsel.deb 189 | asset_name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+prometheus+loki_mipsel.deb 190 | asset_content_type: application/vnd.debian.binary-package 191 | - name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+splunk_mips.deb 192 | uses: actions/upload-release-asset@v1 193 | env: 194 | GITHUB_TOKEN: ${{ github.token }} 195 | with: 196 | upload_url: ${{ steps.draft.outputs.upload_url }} 197 | asset_path: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+splunk_mips.deb 198 | asset_name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+splunk_mips.deb 199 | asset_content_type: application/vnd.debian.binary-package 200 | - name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+splunk_mipsel.deb 201 | uses: actions/upload-release-asset@v1 202 | env: 203 | GITHUB_TOKEN: ${{ github.token }} 204 | with: 205 | upload_url: ${{ steps.draft.outputs.upload_url }} 206 | asset_path: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+splunk_mipsel.deb 207 | asset_name: telegraf_${{ env.VERSION_UPSTREAM }}-${{ env.VERSION_BUILD }}+splunk_mipsel.deb 208 | asset_content_type: application/vnd.debian.binary-package 209 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | workflow_call: 5 | inputs: 6 | flavor: 7 | required: true 8 | type: string 9 | version: 10 | required: true 11 | type: string 12 | build: 13 | required: true 14 | type: string 15 | inputs: 16 | required: true 17 | type: string 18 | outputs: 19 | required: true 20 | type: string 21 | parsers: 22 | required: false 23 | type: string 24 | processors: 25 | required: false 26 | type: string 27 | serializers: 28 | required: false 29 | type: string 30 | 31 | jobs: 32 | mips: 33 | runs-on: ubuntu-latest 34 | steps: 35 | - name: Golang 36 | uses: actions/setup-go@v6 37 | with: 38 | cache: false 39 | go-version: "1.25" 40 | - name: Checkout 41 | uses: actions/checkout@v5 42 | with: 43 | path: telegraf-edgeos 44 | - name: Checkout 45 | uses: actions/checkout@v5 46 | with: 47 | path: telegraf 48 | repository: influxdb/telegraf 49 | ref: v${{ inputs.version }} 50 | - name: Build 51 | run: | 52 | cd telegraf 53 | CGO_ENABLED=0 \ 54 | GOOS=linux GOARCH=mips \ 55 | go build \ 56 | -ldflags "-w -s -X github.com/influxdata/telegraf/internal.Version=${{ inputs.version }} -X github.com/influxdata/telegraf/internal.Branch=$(git rev-parse --abbrev-ref HEAD) -X github.com/influxdata/telegraf/internal.Commit=$(git rev-parse --short=8 HEAD)" \ 57 | -tags "custom,${{ inputs.inputs }},${{ inputs.outputs }},${{ inputs.parsers }},${{ inputs.processors }},${{ inputs.serializers }}" \ 58 | ./cmd/telegraf 59 | - name: sha256sum 60 | run: sha256sum telegraf/telegraf 61 | - name: Filesize 62 | run: du -h telegraf/telegraf 63 | - name: Packaging 64 | run: | 65 | mkdir -p telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/DEBIAN 66 | mkdir -p telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/usr/bin 67 | mkdir -p telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/etc/default 68 | mkdir -p telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/etc/telegraf/telegraf.d 69 | mkdir -p telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/lib/systemd/system 70 | mkdir -p telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/etc/sudoers.d/ 71 | mkdir -p telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/usr/lib/telegraf 72 | touch telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/etc/default/telegraf 73 | cp telegraf-edgeos/configs/telegraf.conf telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/etc/telegraf/telegraf.conf 74 | cp telegraf-edgeos/configs/telegraf.service telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/lib//systemd/system/telegraf.service 75 | cp telegraf-edgeos/configs/99telegraf telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/etc/sudoers.d/99telegraf 76 | cp telegraf/telegraf telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/usr/bin/telegraf 77 | cp -r telegraf-edgeos/plugins/* telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/usr/lib/telegraf/ 78 | cp -r telegraf-edgeos/packaging/* telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/DEBIAN 79 | chmod 0755 telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/DEBIAN/preinst 80 | chmod 0755 telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/DEBIAN/postinst 81 | chmod 0755 telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/DEBIAN/prerm 82 | chmod 0755 telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/DEBIAN/postrm 83 | sed -i 's/#VERSION/${{ inputs.version }}-${{ inputs.build }}/' telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/DEBIAN/control 84 | sed -i 's/#ARCH/mips/' telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/DEBIAN/control 85 | sed -i "s/#SIZE/$(echo $(du -sk --exclude=./telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/DEBIAN telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips | awk '{{ print $1 }}'))/" telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips/DEBIAN/control 86 | cd telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips && md5sum $(find * -type f -not -path 'DEBIAN/*') > DEBIAN/md5sums && cd .. 87 | dpkg-deb --build --root-owner-group -Z gzip telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips 88 | dpkg-deb --info telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips.deb 89 | - name: Upload 90 | uses: actions/upload-artifact@v4 91 | with: 92 | name: telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips.deb 93 | path: telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mips.deb 94 | mipsel: 95 | runs-on: ubuntu-latest 96 | steps: 97 | - name: Golang 98 | uses: actions/setup-go@v6 99 | with: 100 | cache: false 101 | go-version: "1.25" 102 | - name: Checkout 103 | uses: actions/checkout@v5 104 | with: 105 | path: telegraf-edgeos 106 | - name: Checkout 107 | uses: actions/checkout@v5 108 | with: 109 | path: telegraf 110 | repository: influxdb/telegraf 111 | ref: v${{ inputs.version }} 112 | - name: Build 113 | run: | 114 | cd telegraf 115 | CGO_ENABLED=0 \ 116 | GOOS=linux GOARCH=mipsle \ 117 | go build \ 118 | -ldflags "-w -s -X github.com/influxdata/telegraf/internal.Version=${{ inputs.version }} -X github.com/influxdata/telegraf/internal.Branch=$(git rev-parse --abbrev-ref HEAD) -X github.com/influxdata/telegraf/internal.Commit=$(git rev-parse --short=8 HEAD)" \ 119 | -tags "custom,${{ inputs.inputs }},${{ inputs.outputs }},${{ inputs.parsers }},${{ inputs.processors }},${{ inputs.serializers }}" \ 120 | ./cmd/telegraf 121 | - name: sha256sum 122 | run: sha256sum telegraf/telegraf 123 | - name: Filesize 124 | run: du -h telegraf/telegraf 125 | - name: Packaging 126 | run: | 127 | mkdir -p telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/DEBIAN 128 | mkdir -p telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/usr/bin 129 | mkdir -p telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/etc/default 130 | mkdir -p telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/etc/telegraf/telegraf.d 131 | mkdir -p telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/lib/systemd/system 132 | mkdir -p telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/etc/sudoers.d/ 133 | mkdir -p telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/usr/lib/telegraf 134 | touch telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/etc/default/telegraf 135 | cp telegraf-edgeos/configs/telegraf.conf telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/etc/telegraf/telegraf.conf 136 | cp telegraf-edgeos/configs/telegraf.service telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/lib//systemd/system/telegraf.service 137 | cp telegraf-edgeos/configs/99telegraf telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/etc/sudoers.d/99telegraf 138 | cp telegraf/telegraf telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/usr/bin/telegraf 139 | cp -r telegraf-edgeos/plugins/* telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/usr/lib/telegraf/ 140 | cp -r telegraf-edgeos/packaging/* telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/DEBIAN 141 | chmod 0755 telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/DEBIAN/preinst 142 | chmod 0755 telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/DEBIAN/postinst 143 | chmod 0755 telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/DEBIAN/prerm 144 | chmod 0755 telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/DEBIAN/postrm 145 | sed -i 's/#VERSION/${{ inputs.version }}-${{ inputs.build }}/' telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/DEBIAN/control 146 | sed -i 's/#ARCH/mipsel/' telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/DEBIAN/control 147 | sed -i "s/#SIZE/$(echo $(du -sk --exclude=./telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/DEBIAN telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel | awk '{{ print $1 }}'))/" telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel/DEBIAN/control 148 | cd telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel && md5sum $(find * -type f -not -path 'DEBIAN/*') > DEBIAN/md5sums && cd .. 149 | dpkg-deb --build --root-owner-group -Z gzip telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel 150 | dpkg-deb --info telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel.deb 151 | - name: Upload 152 | uses: actions/upload-artifact@v4 153 | with: 154 | name: telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel.deb 155 | path: telegraf_${{ inputs.version }}-${{ inputs.build }}+${{ inputs.flavor }}_mipsel.deb 156 | -------------------------------------------------------------------------------- /grafana/grafana_edgerouter.json: -------------------------------------------------------------------------------- 1 | { 2 | "annotations": { 3 | "list": [ 4 | { 5 | "builtIn": 1, 6 | "datasource": "-- Grafana --", 7 | "enable": true, 8 | "hide": true, 9 | "iconColor": "rgba(0, 211, 255, 1)", 10 | "name": "Annotations & Alerts", 11 | "target": { 12 | "limit": 100, 13 | "matchAny": false, 14 | "tags": [], 15 | "type": "dashboard" 16 | }, 17 | "type": "dashboard" 18 | } 19 | ] 20 | }, 21 | "editable": true, 22 | "fiscalYearStartMonth": 0, 23 | "graphTooltip": 1, 24 | "id": 44, 25 | "links": [], 26 | "liveNow": false, 27 | "panels": [ 28 | { 29 | "datasource": { 30 | "type": "influxdb", 31 | "uid": "P12F67F8539C46701" 32 | }, 33 | "fieldConfig": { 34 | "defaults": { 35 | "displayName": "Availability", 36 | "mappings": [ 37 | { 38 | "options": { 39 | "0": { 40 | "index": 1, 41 | "text": "Up!" 42 | } 43 | }, 44 | "type": "value" 45 | }, 46 | { 47 | "options": { 48 | "from": 1, 49 | "result": { 50 | "index": 0, 51 | "text": "Down!" 52 | }, 53 | "to": 2 54 | }, 55 | "type": "range" 56 | } 57 | ], 58 | "noValue": "?", 59 | "thresholds": { 60 | "mode": "absolute", 61 | "steps": [ 62 | { 63 | "color": "rgb(13, 99, 0)", 64 | "value": null 65 | }, 66 | { 67 | "color": "rgb(158, 12, 12)", 68 | "value": 1 69 | } 70 | ] 71 | }, 72 | "unit": "none" 73 | }, 74 | "overrides": [] 75 | }, 76 | "gridPos": { 77 | "h": 3, 78 | "w": 3, 79 | "x": 0, 80 | "y": 0 81 | }, 82 | "id": 41, 83 | "options": { 84 | "colorMode": "background", 85 | "graphMode": "none", 86 | "justifyMode": "auto", 87 | "orientation": "auto", 88 | "reduceOptions": { 89 | "calcs": [ 90 | "lastNotNull" 91 | ], 92 | "fields": "", 93 | "values": false 94 | }, 95 | "text": {}, 96 | "textMode": "value_and_name" 97 | }, 98 | "pluginVersion": "8.3.6", 99 | "targets": [ 100 | { 101 | "datasource": { 102 | "type": "influxdb", 103 | "uid": "P12F67F8539C46701" 104 | }, 105 | "groupBy": [], 106 | "measurement": "ping", 107 | "orderByTime": "ASC", 108 | "policy": "default", 109 | "query": "SELECT last(\"result_code\") + last(\"http_response_code\") as \"result\" FROM \"http_response\" WHERE (\"server\" = 'https://grafana.uptimelabs.com/login') AND $timeFilter GROUP BY time($interval) fill(null)", 110 | "rawQuery": false, 111 | "refId": "A", 112 | "resultFormat": "time_series", 113 | "select": [ 114 | [ 115 | { 116 | "params": [ 117 | "result_code" 118 | ], 119 | "type": "field" 120 | }, 121 | { 122 | "params": [], 123 | "type": "last" 124 | } 125 | ] 126 | ], 127 | "tags": [ 128 | { 129 | "key": "url", 130 | "operator": "=", 131 | "value": "edgerouter.example.com" 132 | } 133 | ] 134 | } 135 | ], 136 | "transparent": true, 137 | "type": "stat" 138 | }, 139 | { 140 | "datasource": { 141 | "type": "influxdb", 142 | "uid": "P12F67F8539C46701" 143 | }, 144 | "fieldConfig": { 145 | "defaults": { 146 | "decimals": 2, 147 | "displayName": "Uptime", 148 | "mappings": [ 149 | { 150 | "options": { 151 | "from": 99.995, 152 | "result": { 153 | "color": "#0d6300", 154 | "index": 0, 155 | "text": "100%" 156 | }, 157 | "to": 100 158 | }, 159 | "type": "range" 160 | } 161 | ], 162 | "max": 100, 163 | "min": 0, 164 | "noValue": "?", 165 | "thresholds": { 166 | "mode": "absolute", 167 | "steps": [ 168 | { 169 | "color": "rgb(13, 99, 0)", 170 | "value": null 171 | }, 172 | { 173 | "color": "rgb(158, 12, 12)", 174 | "value": 0 175 | }, 176 | { 177 | "color": "rgb(212, 158, 0)", 178 | "value": 90 179 | }, 180 | { 181 | "color": "rgb(13, 99, 0)", 182 | "value": 95 183 | } 184 | ] 185 | }, 186 | "unit": "percent" 187 | }, 188 | "overrides": [] 189 | }, 190 | "gridPos": { 191 | "h": 3, 192 | "w": 3, 193 | "x": 3, 194 | "y": 0 195 | }, 196 | "id": 58, 197 | "interval": "", 198 | "options": { 199 | "colorMode": "background", 200 | "graphMode": "none", 201 | "justifyMode": "auto", 202 | "orientation": "auto", 203 | "reduceOptions": { 204 | "calcs": [ 205 | "lastNotNull" 206 | ], 207 | "fields": "", 208 | "values": false 209 | }, 210 | "text": {}, 211 | "textMode": "value_and_name" 212 | }, 213 | "pluginVersion": "8.3.6", 214 | "targets": [ 215 | { 216 | "alias": "", 217 | "datasource": { 218 | "type": "influxdb", 219 | "uid": "P12F67F8539C46701" 220 | }, 221 | "groupBy": [ 222 | { 223 | "params": [ 224 | "$__interval" 225 | ], 226 | "type": "time" 227 | }, 228 | { 229 | "params": [ 230 | "null" 231 | ], 232 | "type": "fill" 233 | } 234 | ], 235 | "orderByTime": "ASC", 236 | "policy": "default", 237 | "query": "SELECT (sum(\"up\") / sum(\"all\")) * 100 AS \"uptime\" FROM (\nSELECT \"up\", \"all\" FROM (\nSELECT count(\"result_code\") AS \"all\" FROM \"ping\" WHERE (\"url\" = 'edgerouter.example.com') AND $timeFilter GROUP BY \"url\"), (\nSELECT count(\"result_code\") AS \"up\" FROM \"ping\" WHERE (\"url\" = 'edgerouter.example.com') AND \"result_code\" = 0 AND $timeFilter GROUP BY \"url\"\n)\n)\n", 238 | "rawQuery": true, 239 | "refId": "A", 240 | "resultFormat": "time_series", 241 | "select": [ 242 | [ 243 | { 244 | "params": [ 245 | "value" 246 | ], 247 | "type": "field" 248 | }, 249 | { 250 | "params": [], 251 | "type": "mean" 252 | } 253 | ] 254 | ], 255 | "tags": [] 256 | } 257 | ], 258 | "transformations": [], 259 | "transparent": true, 260 | "type": "stat" 261 | }, 262 | { 263 | "datasource": { 264 | "type": "influxdb", 265 | "uid": "P12F67F8539C46701" 266 | }, 267 | "fieldConfig": { 268 | "defaults": { 269 | "displayName": "Upstream", 270 | "mappings": [], 271 | "noValue": "?", 272 | "thresholds": { 273 | "mode": "absolute", 274 | "steps": [ 275 | { 276 | "color": "rgb(13, 99, 0)", 277 | "value": null 278 | }, 279 | { 280 | "color": "rgb(212, 158, 0)", 281 | "value": 50 282 | }, 283 | { 284 | "color": "rgb(158, 12, 12)", 285 | "value": 100 286 | } 287 | ] 288 | }, 289 | "unit": "ms" 290 | }, 291 | "overrides": [] 292 | }, 293 | "gridPos": { 294 | "h": 3, 295 | "w": 3, 296 | "x": 6, 297 | "y": 0 298 | }, 299 | "id": 35, 300 | "options": { 301 | "colorMode": "background", 302 | "graphMode": "none", 303 | "justifyMode": "auto", 304 | "orientation": "auto", 305 | "reduceOptions": { 306 | "calcs": [ 307 | "lastNotNull" 308 | ], 309 | "fields": "", 310 | "values": false 311 | }, 312 | "text": {}, 313 | "textMode": "value_and_name" 314 | }, 315 | "pluginVersion": "8.3.6", 316 | "targets": [ 317 | { 318 | "alias": "", 319 | "datasource": { 320 | "type": "influxdb", 321 | "uid": "P12F67F8539C46701" 322 | }, 323 | "groupBy": [], 324 | "measurement": "ping", 325 | "orderByTime": "ASC", 326 | "policy": "default", 327 | "query": "SELECT mean(\"response_time\") FROM \"http_response\" WHERE (\"server\" = 'https://network-operations.center/login') AND $timeFilter GROUP BY time($__interval) fill(null)", 328 | "rawQuery": false, 329 | "refId": "A", 330 | "resultFormat": "time_series", 331 | "select": [ 332 | [ 333 | { 334 | "params": [ 335 | "average_response_ms" 336 | ], 337 | "type": "field" 338 | }, 339 | { 340 | "params": [], 341 | "type": "last" 342 | } 343 | ] 344 | ], 345 | "tags": [ 346 | { 347 | "key": "host", 348 | "operator": "=", 349 | "value": "edgerouter" 350 | }, 351 | { 352 | "condition": "AND", 353 | "key": "url", 354 | "operator": "=", 355 | "value": "1.1.1.1" 356 | } 357 | ] 358 | } 359 | ], 360 | "transparent": true, 361 | "type": "stat" 362 | }, 363 | { 364 | "datasource": { 365 | "type": "influxdb", 366 | "uid": "PBB990B61CE1B21F8" 367 | }, 368 | "fieldConfig": { 369 | "defaults": { 370 | "decimals": 2, 371 | "displayName": "Power Consumption", 372 | "mappings": [], 373 | "noValue": "?", 374 | "thresholds": { 375 | "mode": "absolute", 376 | "steps": [ 377 | { 378 | "color": "rgb(212, 158, 0)", 379 | "value": null 380 | }, 381 | { 382 | "color": "#1f71ab", 383 | "value": 1 384 | } 385 | ] 386 | }, 387 | "unit": "watt" 388 | }, 389 | "overrides": [] 390 | }, 391 | "gridPos": { 392 | "h": 3, 393 | "w": 3, 394 | "x": 9, 395 | "y": 0 396 | }, 397 | "id": 14, 398 | "maxDataPoints": 100, 399 | "options": { 400 | "colorMode": "background", 401 | "graphMode": "area", 402 | "justifyMode": "auto", 403 | "orientation": "auto", 404 | "reduceOptions": { 405 | "calcs": [ 406 | "lastNotNull" 407 | ], 408 | "fields": "", 409 | "values": false 410 | }, 411 | "text": {}, 412 | "textMode": "auto" 413 | }, 414 | "pluginVersion": "8.3.6", 415 | "targets": [ 416 | { 417 | "datasource": { 418 | "type": "influxdb", 419 | "uid": "PBB990B61CE1B21F8" 420 | }, 421 | "groupBy": [ 422 | { 423 | "params": [ 424 | "$interval" 425 | ], 426 | "type": "time" 427 | }, 428 | { 429 | "params": [ 430 | "null" 431 | ], 432 | "type": "fill" 433 | } 434 | ], 435 | "measurement": "edgeos_power", 436 | "orderByTime": "ASC", 437 | "policy": "default", 438 | "query": "SELECT sum(\"numSeries\") FROM ( SELECT last(\"numSeries\") AS numSeries FROM \"database\" GROUP BY \"database\")", 439 | "rawQuery": false, 440 | "refId": "A", 441 | "resultFormat": "time_series", 442 | "select": [ 443 | [ 444 | { 445 | "params": [ 446 | "consumption" 447 | ], 448 | "type": "field" 449 | }, 450 | { 451 | "params": [], 452 | "type": "mean" 453 | } 454 | ] 455 | ], 456 | "tags": [ 457 | { 458 | "key": "host", 459 | "operator": "=", 460 | "value": "edgerouter" 461 | } 462 | ] 463 | } 464 | ], 465 | "transparent": true, 466 | "type": "stat" 467 | }, 468 | { 469 | "datasource": { 470 | "type": "influxdb", 471 | "uid": "PBB990B61CE1B21F8" 472 | }, 473 | "fieldConfig": { 474 | "defaults": { 475 | "displayName": "CPU Temperature", 476 | "mappings": [], 477 | "noValue": "?", 478 | "thresholds": { 479 | "mode": "absolute", 480 | "steps": [ 481 | { 482 | "color": "rgb(212, 158, 0)", 483 | "value": null 484 | }, 485 | { 486 | "color": "#1f71ab", 487 | "value": 1 488 | } 489 | ] 490 | }, 491 | "unit": "celsius" 492 | }, 493 | "overrides": [] 494 | }, 495 | "gridPos": { 496 | "h": 3, 497 | "w": 3, 498 | "x": 12, 499 | "y": 0 500 | }, 501 | "id": 43, 502 | "maxDataPoints": 100, 503 | "options": { 504 | "colorMode": "background", 505 | "graphMode": "area", 506 | "justifyMode": "auto", 507 | "orientation": "auto", 508 | "reduceOptions": { 509 | "calcs": [ 510 | "lastNotNull" 511 | ], 512 | "fields": "", 513 | "values": false 514 | }, 515 | "text": {}, 516 | "textMode": "auto" 517 | }, 518 | "pluginVersion": "8.3.6", 519 | "targets": [ 520 | { 521 | "datasource": { 522 | "type": "influxdb", 523 | "uid": "PBB990B61CE1B21F8" 524 | }, 525 | "groupBy": [ 526 | { 527 | "params": [ 528 | "$interval" 529 | ], 530 | "type": "time" 531 | }, 532 | { 533 | "params": [ 534 | "null" 535 | ], 536 | "type": "fill" 537 | } 538 | ], 539 | "measurement": "edgeos_temperature", 540 | "orderByTime": "ASC", 541 | "policy": "default", 542 | "query": "SELECT sum(\"numSeries\") FROM ( SELECT last(\"numSeries\") AS numSeries FROM \"database\" GROUP BY \"database\")", 543 | "rawQuery": false, 544 | "refId": "A", 545 | "resultFormat": "time_series", 546 | "select": [ 547 | [ 548 | { 549 | "params": [ 550 | "temperature" 551 | ], 552 | "type": "field" 553 | }, 554 | { 555 | "params": [], 556 | "type": "mean" 557 | } 558 | ] 559 | ], 560 | "tags": [ 561 | { 562 | "key": "host", 563 | "operator": "=", 564 | "value": "edgerouter" 565 | }, 566 | { 567 | "condition": "AND", 568 | "key": "sensor", 569 | "operator": "=", 570 | "value": "CPU" 571 | } 572 | ] 573 | } 574 | ], 575 | "transparent": true, 576 | "type": "stat" 577 | }, 578 | { 579 | "datasource": { 580 | "type": "influxdb", 581 | "uid": "PBB990B61CE1B21F8" 582 | }, 583 | "fieldConfig": { 584 | "defaults": { 585 | "color": { 586 | "mode": "palette-classic", 587 | "seriesBy": "last" 588 | }, 589 | "custom": { 590 | "axisLabel": "", 591 | "axisPlacement": "auto", 592 | "barAlignment": 0, 593 | "drawStyle": "line", 594 | "fillOpacity": 25, 595 | "gradientMode": "hue", 596 | "hideFrom": { 597 | "legend": false, 598 | "tooltip": false, 599 | "viz": false 600 | }, 601 | "lineInterpolation": "linear", 602 | "lineWidth": 1, 603 | "pointSize": 5, 604 | "scaleDistribution": { 605 | "type": "linear" 606 | }, 607 | "showPoints": "never", 608 | "spanNulls": true, 609 | "stacking": { 610 | "group": "A", 611 | "mode": "none" 612 | }, 613 | "thresholdsStyle": { 614 | "mode": "off" 615 | } 616 | }, 617 | "mappings": [], 618 | "max": 2000000, 619 | "min": -2000000, 620 | "thresholds": { 621 | "mode": "absolute", 622 | "steps": [ 623 | { 624 | "color": "green", 625 | "value": null 626 | } 627 | ] 628 | }, 629 | "unit": "bps" 630 | }, 631 | "overrides": [ 632 | { 633 | "matcher": { 634 | "id": "byName", 635 | "options": "RX" 636 | }, 637 | "properties": [ 638 | { 639 | "id": "color", 640 | "value": { 641 | "fixedColor": "#d60000", 642 | "mode": "fixed" 643 | } 644 | } 645 | ] 646 | }, 647 | { 648 | "matcher": { 649 | "id": "byName", 650 | "options": "TX" 651 | }, 652 | "properties": [ 653 | { 654 | "id": "color", 655 | "value": { 656 | "fixedColor": "#044fbf", 657 | "mode": "fixed" 658 | } 659 | } 660 | ] 661 | }, 662 | { 663 | "matcher": { 664 | "id": "byType", 665 | "options": "number" 666 | }, 667 | "properties": [ 668 | { 669 | "id": "custom.axisLabel", 670 | "value": "eth0" 671 | } 672 | ] 673 | } 674 | ] 675 | }, 676 | "gridPos": { 677 | "h": 7, 678 | "w": 5, 679 | "x": 0, 680 | "y": 3 681 | }, 682 | "id": 44, 683 | "options": { 684 | "legend": { 685 | "calcs": [ 686 | "last" 687 | ], 688 | "displayMode": "list", 689 | "placement": "bottom" 690 | }, 691 | "tooltip": { 692 | "mode": "multi" 693 | } 694 | }, 695 | "targets": [ 696 | { 697 | "alias": "$col", 698 | "datasource": { 699 | "type": "influxdb", 700 | "uid": "PBB990B61CE1B21F8" 701 | }, 702 | "groupBy": [ 703 | { 704 | "params": [ 705 | "$__interval" 706 | ], 707 | "type": "time" 708 | }, 709 | { 710 | "params": [ 711 | "null" 712 | ], 713 | "type": "fill" 714 | } 715 | ], 716 | "hide": false, 717 | "measurement": "net", 718 | "orderByTime": "ASC", 719 | "policy": "default", 720 | "query": "SELECT non_negative_difference(mean(\"bytes_sent\")) * 8 / 60 FROM \"net\" WHERE (\"host\" = 'edgerouter' AND \"interface\" = 'eth0') AND $timeFilter GROUP BY time($__interval), \"interface\" fill(null)", 721 | "rawQuery": false, 722 | "refId": "A", 723 | "resultFormat": "time_series", 724 | "select": [ 725 | [ 726 | { 727 | "params": [ 728 | "bytes_recv" 729 | ], 730 | "type": "field" 731 | }, 732 | { 733 | "params": [], 734 | "type": "last" 735 | }, 736 | { 737 | "params": [ 738 | "1s" 739 | ], 740 | "type": "non_negative_derivative" 741 | }, 742 | { 743 | "params": [ 744 | "* 8" 745 | ], 746 | "type": "math" 747 | }, 748 | { 749 | "params": [ 750 | "RX" 751 | ], 752 | "type": "alias" 753 | } 754 | ], 755 | [ 756 | { 757 | "params": [ 758 | "bytes_sent" 759 | ], 760 | "type": "field" 761 | }, 762 | { 763 | "params": [], 764 | "type": "last" 765 | }, 766 | { 767 | "params": [ 768 | "1s" 769 | ], 770 | "type": "non_negative_derivative" 771 | }, 772 | { 773 | "params": [ 774 | "* 8 * -1" 775 | ], 776 | "type": "math" 777 | }, 778 | { 779 | "params": [ 780 | "TX" 781 | ], 782 | "type": "alias" 783 | } 784 | ] 785 | ], 786 | "tags": [ 787 | { 788 | "key": "host", 789 | "operator": "=", 790 | "value": "edgerouter" 791 | }, 792 | { 793 | "condition": "AND", 794 | "key": "interface", 795 | "operator": "=", 796 | "value": "eth0" 797 | } 798 | ] 799 | } 800 | ], 801 | "transformations": [], 802 | "type": "timeseries" 803 | }, 804 | { 805 | "datasource": { 806 | "type": "influxdb", 807 | "uid": "PBB990B61CE1B21F8" 808 | }, 809 | "fieldConfig": { 810 | "defaults": { 811 | "color": { 812 | "mode": "palette-classic", 813 | "seriesBy": "last" 814 | }, 815 | "custom": { 816 | "axisLabel": "", 817 | "axisPlacement": "auto", 818 | "barAlignment": 0, 819 | "drawStyle": "line", 820 | "fillOpacity": 25, 821 | "gradientMode": "hue", 822 | "hideFrom": { 823 | "legend": false, 824 | "tooltip": false, 825 | "viz": false 826 | }, 827 | "lineInterpolation": "linear", 828 | "lineWidth": 1, 829 | "pointSize": 5, 830 | "scaleDistribution": { 831 | "type": "linear" 832 | }, 833 | "showPoints": "never", 834 | "spanNulls": true, 835 | "stacking": { 836 | "group": "A", 837 | "mode": "none" 838 | }, 839 | "thresholdsStyle": { 840 | "mode": "off" 841 | } 842 | }, 843 | "mappings": [], 844 | "max": 2000000, 845 | "min": -2000000, 846 | "thresholds": { 847 | "mode": "absolute", 848 | "steps": [ 849 | { 850 | "color": "green", 851 | "value": null 852 | } 853 | ] 854 | }, 855 | "unit": "bps" 856 | }, 857 | "overrides": [ 858 | { 859 | "matcher": { 860 | "id": "byName", 861 | "options": "RX" 862 | }, 863 | "properties": [ 864 | { 865 | "id": "color", 866 | "value": { 867 | "fixedColor": "#01874d", 868 | "mode": "fixed" 869 | } 870 | } 871 | ] 872 | }, 873 | { 874 | "matcher": { 875 | "id": "byName", 876 | "options": "TX" 877 | }, 878 | "properties": [ 879 | { 880 | "id": "color", 881 | "value": { 882 | "fixedColor": "#ffa400", 883 | "mode": "fixed" 884 | } 885 | } 886 | ] 887 | }, 888 | { 889 | "matcher": { 890 | "id": "byType", 891 | "options": "number" 892 | }, 893 | "properties": [ 894 | { 895 | "id": "custom.axisLabel", 896 | "value": "eth1" 897 | } 898 | ] 899 | } 900 | ] 901 | }, 902 | "gridPos": { 903 | "h": 7, 904 | "w": 5, 905 | "x": 5, 906 | "y": 3 907 | }, 908 | "id": 59, 909 | "options": { 910 | "legend": { 911 | "calcs": [ 912 | "last" 913 | ], 914 | "displayMode": "list", 915 | "placement": "bottom" 916 | }, 917 | "tooltip": { 918 | "mode": "multi" 919 | } 920 | }, 921 | "targets": [ 922 | { 923 | "alias": "$col", 924 | "datasource": { 925 | "type": "influxdb", 926 | "uid": "PBB990B61CE1B21F8" 927 | }, 928 | "groupBy": [ 929 | { 930 | "params": [ 931 | "$__interval" 932 | ], 933 | "type": "time" 934 | }, 935 | { 936 | "params": [ 937 | "null" 938 | ], 939 | "type": "fill" 940 | } 941 | ], 942 | "hide": false, 943 | "measurement": "net", 944 | "orderByTime": "ASC", 945 | "policy": "default", 946 | "query": "SELECT non_negative_difference(mean(\"bytes_sent\")) * 8 / 60 FROM \"net\" WHERE (\"host\" = 'edgerouter' AND \"interface\" = 'eth0') AND $timeFilter GROUP BY time($__interval), \"interface\" fill(null)", 947 | "rawQuery": false, 948 | "refId": "A", 949 | "resultFormat": "time_series", 950 | "select": [ 951 | [ 952 | { 953 | "params": [ 954 | "bytes_recv" 955 | ], 956 | "type": "field" 957 | }, 958 | { 959 | "params": [], 960 | "type": "last" 961 | }, 962 | { 963 | "params": [ 964 | "1s" 965 | ], 966 | "type": "non_negative_derivative" 967 | }, 968 | { 969 | "params": [ 970 | "* 8" 971 | ], 972 | "type": "math" 973 | }, 974 | { 975 | "params": [ 976 | "RX" 977 | ], 978 | "type": "alias" 979 | } 980 | ], 981 | [ 982 | { 983 | "params": [ 984 | "bytes_sent" 985 | ], 986 | "type": "field" 987 | }, 988 | { 989 | "params": [], 990 | "type": "last" 991 | }, 992 | { 993 | "params": [ 994 | "1s" 995 | ], 996 | "type": "non_negative_derivative" 997 | }, 998 | { 999 | "params": [ 1000 | "* 8 * -1" 1001 | ], 1002 | "type": "math" 1003 | }, 1004 | { 1005 | "params": [ 1006 | "TX" 1007 | ], 1008 | "type": "alias" 1009 | } 1010 | ] 1011 | ], 1012 | "tags": [ 1013 | { 1014 | "key": "host", 1015 | "operator": "=", 1016 | "value": "edgerouter" 1017 | }, 1018 | { 1019 | "condition": "AND", 1020 | "key": "interface", 1021 | "operator": "=", 1022 | "value": "eth1" 1023 | } 1024 | ] 1025 | } 1026 | ], 1027 | "transformations": [], 1028 | "type": "timeseries" 1029 | }, 1030 | { 1031 | "datasource": { 1032 | "type": "influxdb", 1033 | "uid": "PBB990B61CE1B21F8" 1034 | }, 1035 | "fieldConfig": { 1036 | "defaults": { 1037 | "color": { 1038 | "mode": "palette-classic", 1039 | "seriesBy": "last" 1040 | }, 1041 | "custom": { 1042 | "axisLabel": "", 1043 | "axisPlacement": "auto", 1044 | "barAlignment": 0, 1045 | "drawStyle": "line", 1046 | "fillOpacity": 25, 1047 | "gradientMode": "hue", 1048 | "hideFrom": { 1049 | "legend": false, 1050 | "tooltip": false, 1051 | "viz": false 1052 | }, 1053 | "lineInterpolation": "linear", 1054 | "lineWidth": 1, 1055 | "pointSize": 5, 1056 | "scaleDistribution": { 1057 | "type": "linear" 1058 | }, 1059 | "showPoints": "never", 1060 | "spanNulls": true, 1061 | "stacking": { 1062 | "group": "A", 1063 | "mode": "none" 1064 | }, 1065 | "thresholdsStyle": { 1066 | "mode": "off" 1067 | } 1068 | }, 1069 | "mappings": [], 1070 | "max": 2000000, 1071 | "min": -2000000, 1072 | "thresholds": { 1073 | "mode": "absolute", 1074 | "steps": [ 1075 | { 1076 | "color": "green", 1077 | "value": null 1078 | } 1079 | ] 1080 | }, 1081 | "unit": "bps" 1082 | }, 1083 | "overrides": [ 1084 | { 1085 | "matcher": { 1086 | "id": "byName", 1087 | "options": "RX" 1088 | }, 1089 | "properties": [ 1090 | { 1091 | "id": "color", 1092 | "value": { 1093 | "fixedColor": "#950088", 1094 | "mode": "fixed" 1095 | } 1096 | } 1097 | ] 1098 | }, 1099 | { 1100 | "matcher": { 1101 | "id": "byName", 1102 | "options": "TX" 1103 | }, 1104 | "properties": [ 1105 | { 1106 | "id": "color", 1107 | "value": { 1108 | "fixedColor": "#00b5a6", 1109 | "mode": "fixed" 1110 | } 1111 | } 1112 | ] 1113 | }, 1114 | { 1115 | "matcher": { 1116 | "id": "byType", 1117 | "options": "number" 1118 | }, 1119 | "properties": [ 1120 | { 1121 | "id": "custom.axisLabel", 1122 | "value": "eth5" 1123 | } 1124 | ] 1125 | } 1126 | ] 1127 | }, 1128 | "gridPos": { 1129 | "h": 7, 1130 | "w": 5, 1131 | "x": 10, 1132 | "y": 3 1133 | }, 1134 | "id": 60, 1135 | "options": { 1136 | "legend": { 1137 | "calcs": [ 1138 | "last" 1139 | ], 1140 | "displayMode": "list", 1141 | "placement": "bottom" 1142 | }, 1143 | "tooltip": { 1144 | "mode": "multi" 1145 | } 1146 | }, 1147 | "targets": [ 1148 | { 1149 | "alias": "$col", 1150 | "datasource": { 1151 | "type": "influxdb", 1152 | "uid": "PBB990B61CE1B21F8" 1153 | }, 1154 | "groupBy": [ 1155 | { 1156 | "params": [ 1157 | "$__interval" 1158 | ], 1159 | "type": "time" 1160 | }, 1161 | { 1162 | "params": [ 1163 | "null" 1164 | ], 1165 | "type": "fill" 1166 | } 1167 | ], 1168 | "hide": false, 1169 | "measurement": "net", 1170 | "orderByTime": "ASC", 1171 | "policy": "default", 1172 | "query": "SELECT non_negative_difference(mean(\"bytes_sent\")) * 8 / 60 FROM \"net\" WHERE (\"host\" = 'edgerouter' AND \"interface\" = 'eth0') AND $timeFilter GROUP BY time($__interval), \"interface\" fill(null)", 1173 | "rawQuery": false, 1174 | "refId": "A", 1175 | "resultFormat": "time_series", 1176 | "select": [ 1177 | [ 1178 | { 1179 | "params": [ 1180 | "bytes_recv" 1181 | ], 1182 | "type": "field" 1183 | }, 1184 | { 1185 | "params": [], 1186 | "type": "last" 1187 | }, 1188 | { 1189 | "params": [ 1190 | "1s" 1191 | ], 1192 | "type": "non_negative_derivative" 1193 | }, 1194 | { 1195 | "params": [ 1196 | "* 8" 1197 | ], 1198 | "type": "math" 1199 | }, 1200 | { 1201 | "params": [ 1202 | "RX" 1203 | ], 1204 | "type": "alias" 1205 | } 1206 | ], 1207 | [ 1208 | { 1209 | "params": [ 1210 | "bytes_sent" 1211 | ], 1212 | "type": "field" 1213 | }, 1214 | { 1215 | "params": [], 1216 | "type": "last" 1217 | }, 1218 | { 1219 | "params": [ 1220 | "1s" 1221 | ], 1222 | "type": "non_negative_derivative" 1223 | }, 1224 | { 1225 | "params": [ 1226 | "* 8 * -1" 1227 | ], 1228 | "type": "math" 1229 | }, 1230 | { 1231 | "params": [ 1232 | "TX" 1233 | ], 1234 | "type": "alias" 1235 | } 1236 | ] 1237 | ], 1238 | "tags": [ 1239 | { 1240 | "key": "host", 1241 | "operator": "=", 1242 | "value": "edgerouter" 1243 | }, 1244 | { 1245 | "condition": "AND", 1246 | "key": "interface", 1247 | "operator": "=", 1248 | "value": "eth5" 1249 | } 1250 | ] 1251 | } 1252 | ], 1253 | "transformations": [], 1254 | "type": "timeseries" 1255 | }, 1256 | { 1257 | "datasource": { 1258 | "type": "influxdb", 1259 | "uid": "PBB990B61CE1B21F8" 1260 | }, 1261 | "fieldConfig": { 1262 | "defaults": { 1263 | "color": { 1264 | "mode": "thresholds" 1265 | }, 1266 | "decimals": 0, 1267 | "displayName": "CPU", 1268 | "mappings": [], 1269 | "max": 100, 1270 | "min": 0, 1271 | "thresholds": { 1272 | "mode": "absolute", 1273 | "steps": [ 1274 | { 1275 | "color": "#0d6300", 1276 | "value": null 1277 | }, 1278 | { 1279 | "color": "#ffad00", 1280 | "value": 75 1281 | }, 1282 | { 1283 | "color": "#9e0c0c", 1284 | "value": 90 1285 | } 1286 | ] 1287 | }, 1288 | "unit": "percent" 1289 | }, 1290 | "overrides": [] 1291 | }, 1292 | "gridPos": { 1293 | "h": 4, 1294 | "w": 3, 1295 | "x": 15, 1296 | "y": 8 1297 | }, 1298 | "id": 52, 1299 | "links": [], 1300 | "maxDataPoints": 100, 1301 | "options": { 1302 | "orientation": "vertical", 1303 | "reduceOptions": { 1304 | "calcs": [ 1305 | "lastNotNull" 1306 | ], 1307 | "fields": "", 1308 | "values": false 1309 | }, 1310 | "showThresholdLabels": false, 1311 | "showThresholdMarkers": true, 1312 | "text": { 1313 | "titleSize": 15, 1314 | "valueSize": 26 1315 | } 1316 | }, 1317 | "pluginVersion": "8.3.6", 1318 | "targets": [ 1319 | { 1320 | "datasource": { 1321 | "type": "influxdb", 1322 | "uid": "PBB990B61CE1B21F8" 1323 | }, 1324 | "groupBy": [], 1325 | "measurement": "cpu", 1326 | "orderByTime": "ASC", 1327 | "policy": "default", 1328 | "query": "SELECT non_negative_derivative(last(\"metrics_gathered\"), 1s) FROM \"internal_gather\" WHERE (\"host\" =~ /^$host$/ AND \"input\" =~ /^$input$/) AND $timeFilter GROUP BY time($__interval) fill(null)", 1329 | "rawQuery": false, 1330 | "refId": "A", 1331 | "resultFormat": "time_series", 1332 | "select": [ 1333 | [ 1334 | { 1335 | "params": [ 1336 | "usage_active" 1337 | ], 1338 | "type": "field" 1339 | }, 1340 | { 1341 | "params": [], 1342 | "type": "last" 1343 | } 1344 | ] 1345 | ], 1346 | "tags": [ 1347 | { 1348 | "key": "cpu", 1349 | "operator": "=", 1350 | "value": "cpu-total" 1351 | }, 1352 | { 1353 | "condition": "AND", 1354 | "key": "host", 1355 | "operator": "=", 1356 | "value": "edgerouter" 1357 | } 1358 | ] 1359 | } 1360 | ], 1361 | "transparent": true, 1362 | "type": "gauge" 1363 | }, 1364 | { 1365 | "datasource": { 1366 | "type": "influxdb", 1367 | "uid": "PBB990B61CE1B21F8" 1368 | }, 1369 | "fieldConfig": { 1370 | "defaults": { 1371 | "color": { 1372 | "mode": "thresholds" 1373 | }, 1374 | "decimals": 0, 1375 | "displayName": "Memory", 1376 | "mappings": [], 1377 | "max": 100, 1378 | "min": 0, 1379 | "thresholds": { 1380 | "mode": "absolute", 1381 | "steps": [ 1382 | { 1383 | "color": "#0d6300", 1384 | "value": null 1385 | }, 1386 | { 1387 | "color": "#ffad00", 1388 | "value": 75 1389 | }, 1390 | { 1391 | "color": "#9e0c0c", 1392 | "value": 90 1393 | } 1394 | ] 1395 | }, 1396 | "unit": "percent" 1397 | }, 1398 | "overrides": [] 1399 | }, 1400 | "gridPos": { 1401 | "h": 4, 1402 | "w": 3, 1403 | "x": 18, 1404 | "y": 8 1405 | }, 1406 | "id": 53, 1407 | "links": [], 1408 | "maxDataPoints": 100, 1409 | "options": { 1410 | "orientation": "vertical", 1411 | "reduceOptions": { 1412 | "calcs": [ 1413 | "lastNotNull" 1414 | ], 1415 | "fields": "", 1416 | "values": false 1417 | }, 1418 | "showThresholdLabels": false, 1419 | "showThresholdMarkers": true, 1420 | "text": { 1421 | "titleSize": 15, 1422 | "valueSize": 26 1423 | } 1424 | }, 1425 | "pluginVersion": "8.3.6", 1426 | "targets": [ 1427 | { 1428 | "datasource": { 1429 | "type": "influxdb", 1430 | "uid": "PBB990B61CE1B21F8" 1431 | }, 1432 | "groupBy": [], 1433 | "hide": false, 1434 | "measurement": "mem", 1435 | "orderByTime": "ASC", 1436 | "policy": "default", 1437 | "query": "SELECT non_negative_derivative(last(\"metrics_gathered\"), 1s) FROM \"internal_gather\" WHERE (\"host\" =~ /^$host$/ AND \"input\" =~ /^$input$/) AND $timeFilter GROUP BY time($__interval) fill(null)", 1438 | "rawQuery": false, 1439 | "refId": "B", 1440 | "resultFormat": "time_series", 1441 | "select": [ 1442 | [ 1443 | { 1444 | "params": [ 1445 | "used_percent" 1446 | ], 1447 | "type": "field" 1448 | }, 1449 | { 1450 | "params": [], 1451 | "type": "last" 1452 | } 1453 | ] 1454 | ], 1455 | "tags": [ 1456 | { 1457 | "condition": "AND", 1458 | "key": "host", 1459 | "operator": "=", 1460 | "value": "edgerouter" 1461 | } 1462 | ] 1463 | } 1464 | ], 1465 | "transparent": true, 1466 | "type": "gauge" 1467 | }, 1468 | { 1469 | "datasource": { 1470 | "type": "influxdb", 1471 | "uid": "PBB990B61CE1B21F8" 1472 | }, 1473 | "fieldConfig": { 1474 | "defaults": { 1475 | "color": { 1476 | "mode": "thresholds" 1477 | }, 1478 | "decimals": 0, 1479 | "displayName": "Diskusage", 1480 | "mappings": [], 1481 | "max": 100, 1482 | "min": 0, 1483 | "thresholds": { 1484 | "mode": "absolute", 1485 | "steps": [ 1486 | { 1487 | "color": "#0d6300", 1488 | "value": null 1489 | }, 1490 | { 1491 | "color": "#ffad00", 1492 | "value": 75 1493 | }, 1494 | { 1495 | "color": "#9e0c0c", 1496 | "value": 90 1497 | } 1498 | ] 1499 | }, 1500 | "unit": "percent" 1501 | }, 1502 | "overrides": [] 1503 | }, 1504 | "gridPos": { 1505 | "h": 4, 1506 | "w": 3, 1507 | "x": 21, 1508 | "y": 8 1509 | }, 1510 | "id": 54, 1511 | "links": [], 1512 | "maxDataPoints": 100, 1513 | "options": { 1514 | "orientation": "vertical", 1515 | "reduceOptions": { 1516 | "calcs": [ 1517 | "lastNotNull" 1518 | ], 1519 | "fields": "", 1520 | "values": false 1521 | }, 1522 | "showThresholdLabels": false, 1523 | "showThresholdMarkers": true, 1524 | "text": { 1525 | "titleSize": 15, 1526 | "valueSize": 26 1527 | } 1528 | }, 1529 | "pluginVersion": "8.3.6", 1530 | "targets": [ 1531 | { 1532 | "alias": "Diskspace", 1533 | "datasource": { 1534 | "type": "influxdb", 1535 | "uid": "PBB990B61CE1B21F8" 1536 | }, 1537 | "groupBy": [], 1538 | "hide": false, 1539 | "measurement": "disk", 1540 | "orderByTime": "ASC", 1541 | "policy": "default", 1542 | "query": "SELECT non_negative_derivative(last(\"metrics_gathered\"), 1s) FROM \"internal_gather\" WHERE (\"host\" =~ /^$host$/ AND \"input\" =~ /^$input$/) AND $timeFilter GROUP BY time($__interval) fill(null)", 1543 | "rawQuery": false, 1544 | "refId": "C", 1545 | "resultFormat": "time_series", 1546 | "select": [ 1547 | [ 1548 | { 1549 | "params": [ 1550 | "used_percent" 1551 | ], 1552 | "type": "field" 1553 | }, 1554 | { 1555 | "params": [], 1556 | "type": "last" 1557 | } 1558 | ] 1559 | ], 1560 | "tags": [ 1561 | { 1562 | "condition": "AND", 1563 | "key": "host", 1564 | "operator": "=", 1565 | "value": "edgerouter" 1566 | }, 1567 | { 1568 | "condition": "AND", 1569 | "key": "path", 1570 | "operator": "=", 1571 | "value": "/root.dev" 1572 | } 1573 | ] 1574 | } 1575 | ], 1576 | "transparent": true, 1577 | "type": "gauge" 1578 | }, 1579 | { 1580 | "datasource": { 1581 | "type": "influxdb", 1582 | "uid": "PBB990B61CE1B21F8" 1583 | }, 1584 | "fieldConfig": { 1585 | "defaults": { 1586 | "color": { 1587 | "mode": "thresholds" 1588 | }, 1589 | "custom": { 1590 | "align": "auto", 1591 | "displayMode": "auto", 1592 | "filterable": false 1593 | }, 1594 | "mappings": [], 1595 | "thresholds": { 1596 | "mode": "absolute", 1597 | "steps": [ 1598 | { 1599 | "color": "green", 1600 | "value": null 1601 | } 1602 | ] 1603 | }, 1604 | "unit": "none" 1605 | }, 1606 | "overrides": [ 1607 | { 1608 | "matcher": { 1609 | "id": "byName", 1610 | "options": "Interface" 1611 | }, 1612 | "properties": [ 1613 | { 1614 | "id": "custom.align", 1615 | "value": "left" 1616 | }, 1617 | { 1618 | "id": "custom.width", 1619 | "value": 100 1620 | }, 1621 | { 1622 | "id": "mappings", 1623 | "value": [ 1624 | { 1625 | "options": { 1626 | "pattern": "/^switch0\\./", 1627 | "result": { 1628 | "index": 0, 1629 | "text": "VLAN " 1630 | } 1631 | }, 1632 | "type": "regex" 1633 | } 1634 | ] 1635 | } 1636 | ] 1637 | }, 1638 | { 1639 | "matcher": { 1640 | "id": "byName", 1641 | "options": "RX" 1642 | }, 1643 | "properties": [ 1644 | { 1645 | "id": "custom.width", 1646 | "value": 100 1647 | }, 1648 | { 1649 | "id": "unit", 1650 | "value": "bps" 1651 | }, 1652 | { 1653 | "id": "noValue", 1654 | "value": "0 b/s" 1655 | } 1656 | ] 1657 | }, 1658 | { 1659 | "matcher": { 1660 | "id": "byName", 1661 | "options": "TX" 1662 | }, 1663 | "properties": [ 1664 | { 1665 | "id": "unit", 1666 | "value": "bps" 1667 | }, 1668 | { 1669 | "id": "custom.width", 1670 | "value": 100 1671 | }, 1672 | { 1673 | "id": "noValue", 1674 | "value": "0 b/s" 1675 | } 1676 | ] 1677 | }, 1678 | { 1679 | "matcher": { 1680 | "id": "byName", 1681 | "options": "Speed" 1682 | }, 1683 | "properties": [ 1684 | { 1685 | "id": "custom.width", 1686 | "value": 100 1687 | }, 1688 | { 1689 | "id": "unit", 1690 | "value": "Mbits" 1691 | }, 1692 | { 1693 | "id": "mappings", 1694 | "value": [ 1695 | { 1696 | "options": { 1697 | "0": { 1698 | "index": 0, 1699 | "text": "-" 1700 | }, 1701 | "10": { 1702 | "index": 1, 1703 | "text": "-" 1704 | }, 1705 | "100": { 1706 | "color": "#1f71ab", 1707 | "index": 2 1708 | } 1709 | }, 1710 | "type": "value" 1711 | }, 1712 | { 1713 | "options": { 1714 | "from": 1000, 1715 | "result": { 1716 | "color": "#0d6300", 1717 | "index": 3 1718 | }, 1719 | "to": 10000 1720 | }, 1721 | "type": "range" 1722 | } 1723 | ] 1724 | }, 1725 | { 1726 | "id": "custom.displayMode", 1727 | "value": "color-text" 1728 | }, 1729 | { 1730 | "id": "custom.align", 1731 | "value": "center" 1732 | } 1733 | ] 1734 | }, 1735 | { 1736 | "matcher": { 1737 | "id": "byName", 1738 | "options": "Status" 1739 | }, 1740 | "properties": [ 1741 | { 1742 | "id": "mappings", 1743 | "value": [ 1744 | { 1745 | "options": { 1746 | "0ethernet0": { 1747 | "index": 0, 1748 | "text": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgdmlld0JveD0iMCAwIDQ0OCA1MTIiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzE4ODUiCiAgIHNvZGlwb2RpOmRvY25hbWU9InVwLnN2ZyIKICAgd2lkdGg9IjQ0OCIKICAgaGVpZ2h0PSI1MTIiCiAgIGlua3NjYXBlOnZlcnNpb249IjEuMS4xICgzYmY1YWUwZDI1LCAyMDIxLTA5LTIwLCBjdXN0b20pIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMxODg5IiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0ibmFtZWR2aWV3MTg4NyIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSJ0cnVlIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iZmFsc2UiCiAgICAgaW5rc2NhcGU6em9vbT0iMS4yODcxMDk0IgogICAgIGlua3NjYXBlOmN4PSIyNDIuNzkyMTEiCiAgICAgaW5rc2NhcGU6Y3k9IjI1NS42MTE1MyIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAzOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iNDIiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmcxODg1IiAvPgogIDwhLS0gRm9udCBBd2Vzb21lIEZyZWUgNS4xNS40IGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgKEljb25zOiBDQyBCWSA0LjAsIEZvbnRzOiBTSUwgT0ZMIDEuMSwgQ29kZTogTUlUIExpY2Vuc2UpIC0tPgogIDxwYXRoCiAgICAgZD0iTSAwLDI1NiBDIDAsMTMyLjI1ODA2IDEwMC4yNTgwNiwzMiAyMjQsMzIgMzQ3Ljc0MTk0LDMyIDQ0OCwxMzIuMjU4MDYgNDQ4LDI1NiA0NDgsMzc5Ljc0MTk0IDM0Ny43NDE5NCw0ODAgMjI0LDQ4MCAxMDAuMjU4MDYsNDgwIDAsMzc5Ljc0MTk0IDAsMjU2IFogTSAyNjMuNzQxOTQsMzYwLjc3NDE5IFYgMjU2IGggNjQuMDM4NzEgYyA5LjY2NDUxLDAgMTQuNTQxOTMsLTExLjc0MTk0IDcuNjc3NDEsLTE4LjUxNjEzIEwgMjMxLjY3NzQyLDEzNC4yNDUxNiBDIDIyNy40MzIyNiwxMzAgMjIwLjY1ODA2LDEzMCAyMTYuNDEyOSwxMzQuMjQ1MTYgTCAxMTIuNTQxOTQsMjM3LjQ4Mzg3IEMgMTA1LjY3NzQyLDI0NC4zNDgzOSAxMTAuNTU0ODQsMjU2IDEyMC4yMTkzNSwyNTYgaCA2NC4wMzg3MSB2IDEwNC43NzQxOSBjIDAsNS45NjEyOSA0Ljg3NzQyLDEwLjgzODcxIDEwLjgzODcxLDEwLjgzODcxIGggNTcuODA2NDYgYyA1Ljk2MTI5LDAgMTAuODM4NzEsLTQuODc3NDIgMTAuODM4NzEsLTEwLjgzODcxIHoiCiAgICAgaWQ9InBhdGgxODgzIgogICAgIHN0eWxlPSJzdHJva2Utd2lkdGg6MC45MDMyMjY7ZmlsbDojMGQ2MzAwO2ZpbGwtb3BhY2l0eToxIiAvPgo8L3N2Zz4K" 1749 | }, 1750 | "0ethernet1": { 1751 | "index": 1, 1752 | "text": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgdmlld0JveD0iMCAwIDQ0OCA1MTEuOTk5OTgiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzIyMzgiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImRvd24uc3ZnIgogICB3aWR0aD0iNDQ4IgogICBoZWlnaHQ9IjUxMiIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4xLjEgKDNiZjVhZTBkMjUsIDIwMjEtMDktMjAsIGN1c3RvbSkiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczIyNDIiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJuYW1lZHZpZXcyMjQwIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9InRydWUiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnNob3dwYWdlc2hhZG93PSJmYWxzZSIKICAgICB1bml0cz0icHgiCiAgICAgd2lkdGg9IjQ0OG1tIgogICAgIGlua3NjYXBlOnpvb209IjEuMjg3MTA5NCIKICAgICBpbmtzY2FwZTpjeD0iMjQyLjc5MjExIgogICAgIGlua3NjYXBlOmN5PSIyNTUuNjExNTMiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMzgiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjQyIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMjIzOCIgLz4KICA8IS0tIEZvbnQgQXdlc29tZSBGcmVlIDUuMTUuNCBieSBAZm9udGF3ZXNvbWUgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbSBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIChJY29uczogQ0MgQlkgNC4wLCBGb250czogU0lMIE9GTCAxLjEsIENvZGU6IE1JVCBMaWNlbnNlKSAtLT4KICA8cGF0aAogICAgIGQ9Ik0gNDQ4LDI1NiBDIDQ0OCwzNzkuNzQxOTQgMzQ3Ljc0MTk0LDQ4MCAyMjQsNDgwIDEwMC4yNTgwNiw0ODAgMCwzNzkuNzQxOTQgMCwyNTYgMCwxMzIuMjU4MDYgMTAwLjI1ODA2LDMyIDIyNCwzMiAzNDcuNzQxOTQsMzIgNDQ4LDEzMi4yNTgwNiA0NDgsMjU2IFogTSAxODQuMjU4MDYsMTUxLjIyNTgxIFYgMjU2IGggLTY0LjAzODcxIGMgLTkuNjY0NTEsMCAtMTQuNTQxOTMsMTEuNzQxOTQgLTcuNjc3NDEsMTguNTE2MTMgbCAxMDMuNzgwNjQsMTAzLjIzODcxIGMgNC4yNDUxNiw0LjI0NTE2IDExLjAxOTM2LDQuMjQ1MTYgMTUuMjY0NTIsMCBMIDMzNS4zNjc3NCwyNzQuNTE2MTMgQyAzNDIuMjMyMjYsMjY3LjY1MTYxIDMzNy4zNTQ4NCwyNTYgMzI3LjY5MDMyLDI1NiBIIDI2My43NDE5NCBWIDE1MS4yMjU4MSBjIDAsLTUuOTYxMjkgLTQuODc3NDIsLTEwLjgzODcxIC0xMC44Mzg3MSwtMTAuODM4NzEgaCAtNTcuODA2NDYgYyAtNS45NjEyOSwwIC0xMC44Mzg3MSw0Ljg3NzQyIC0xMC44Mzg3MSwxMC44Mzg3MSB6IgogICAgIGlkPSJwYXRoMjIzNiIKICAgICBzdHlsZT0iZmlsbDojOWUwYzBjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDowLjkwMzIyNiIgLz4KPC9zdmc+Cg==" 1753 | }, 1754 | "0ethernet2": { 1755 | "index": 2, 1756 | "text": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgdmlld0JveD0iMCAwIDQ0OCA1MTIiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzQwNjgiCiAgIHNvZGlwb2RpOmRvY25hbWU9Im9mZi5zdmciCiAgIHdpZHRoPSI0NDgiCiAgIGhlaWdodD0iNTEyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjEuMSAoM2JmNWFlMGQyNSwgMjAyMS0wOS0yMCwgY3VzdG9tKSIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDA3MiIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9Im5hbWVkdmlldzQwNzAiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0idHJ1ZSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6c2hvd3BhZ2VzaGFkb3c9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuOTEwMTIzNzciCiAgICAgaW5rc2NhcGU6Y3g9IjM3NC4xMjQ5NCIKICAgICBpbmtzY2FwZTpjeT0iMTg3Ljg4NjUzIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDM4IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSI0MiIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzQwNjgiIC8+CiAgPCEtLSBGb250IEF3ZXNvbWUgRnJlZSA1LjE1LjQgYnkgQGZvbnRhd2Vzb21lIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20gTGljZW5zZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tL2xpY2Vuc2UvZnJlZSAoSWNvbnM6IENDIEJZIDQuMCwgRm9udHM6IFNJTCBPRkwgMS4xLCBDb2RlOiBNSVQgTGljZW5zZSkgLS0+CiAgPHBhdGgKICAgICBkPSJtIDI1Mi45MDM0Miw1NC4wMjk5NTYgdiAxNS4yNjI1NzMgYyAwLDkuODk4MzYzIDYuNTc2MzgsMTguNDY5MTg4IDE1Ljk3NDQ0LDIxLjEzMjUxMSA3MC4wMTYxOSwxOS44Mzc5NSAxMjEuMzE1NzUsODQuOTYzMzkgMTIxLjMxNTc1LDE2Mi4zNjM3NSAwLDkzLjE2NSAtNzQuMzMwODksMTY4LjU3NjM1IC0xNjYuMTkzMzgsMTY4LjU3NjM1IC05MS44NDgwNCwwIC0xNjYuMTkzMzkzLC03NS4zOTY2OSAtMTY2LjE5MzM5MywtMTY4LjU3NjM1IDAsLTc3LjM4OTM2IDUxLjI5MDUzMywtMTQyLjUyMzk3IDEyMS4zMTM5NTMsLTE2Mi4zNjM3NSA5LjM5OTg2LC0yLjY2MzMyMyAxNS45NzYyNCwtMTEuMjM1OTgxIDE1Ljk3NjI0LC0yMS4xMzUyNTkgViA1NC4wMzcyODUgYyAwLC0xNC4zOTIyMDUgLTEzLjM5ODQ0LC0yNC44NzY5MjEgLTI3LjEzODMsLTIxLjI4NjQyOCBDIDcwLjk5NjYyOSw1OC4wODQ5NSAtMC41NDY5MTE4NywxNDcuNjE3MzEgMC4wMDMxNTExMywyNTQuMDA5MTQgMC42NTM0NzMxMywzNzkuNTcyODYgMTAwLjY5MTk2LDQ4MC4yNjQyMyAyMjQuNDgyNTUsNDc5Ljk5OTQ4IDM0Ny45NzIzNiw0NzkuNzM1NjEgNDQ4LDM3OC4xMTA2NSA0NDgsMjUyLjc4ODc5IDQ0OCwxNDYuODQ4NjQgMzc2LjUxODc5LDU3Ljg0NTgyOSAyNzkuODA5NTksMzIuNjkwMzg5IGMgLTEzLjY0ODYzLC0zLjU1MDE4IC0yNi45MDYxNyw3LjA0NzIyNSAtMjYuOTA2MTcsMjEuMzM5NTY3IHoiCiAgICAgaWQ9InBhdGg0MDY2IgogICAgIHN0eWxlPSJzdHJva2Utd2lkdGg6MC45MDk2NzY7ZmlsbDojNTk1OTU5O2ZpbGwtb3BhY2l0eToxIiAvPgo8L3N2Zz4K" 1757 | }, 1758 | "0vif0": { 1759 | "index": 3, 1760 | "text": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgdmlld0JveD0iMCAwIDQ0OCA1MTIiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzEwMzkiCiAgIHNvZGlwb2RpOmRvY25hbWU9IndrLnN2ZyIKICAgd2lkdGg9IjQ0OCIKICAgaGVpZ2h0PSI1MTIiCiAgIGlua3NjYXBlOnZlcnNpb249IjEuMS4xICgzYmY1YWUwZDI1LCAyMDIxLTA5LTIwLCBjdXN0b20pIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMxMDQzIiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0ibmFtZWR2aWV3MTA0MSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSJ0cnVlIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBzaG93Ym9yZGVyPSJ0cnVlIgogICAgIGlua3NjYXBlOnNob3dwYWdlc2hhZG93PSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIwLjgwNjY0MDYzIgogICAgIGlua3NjYXBlOmN4PSIzODkuODg4NjIiCiAgICAgaW5rc2NhcGU6Y3k9IjMwMC4wMDk2OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAzOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iNDIiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmcxMDM5IiAvPgogIDwhLS0gRm9udCBBd2Vzb21lIEZyZWUgNS4xNS40IGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgKEljb25zOiBDQyBCWSA0LjAsIEZvbnRzOiBTSUwgT0ZMIDEuMSwgQ29kZTogTUlUIExpY2Vuc2UpIC0tPgogIDxwYXRoCiAgICAgZD0ibSA0NDgsMjYxLjYgdiAtMTEuMiBjIDAsLTYuMTg4IC01LjAxMiwtMTEuMiAtMTEuMiwtMTEuMiBoIC0xOTYgdiAtMjggaCA1MC40IGMgMTIuMzY5LDAgMjIuNCwtMTAuMDMxIDIyLjQsLTIyLjQgViA5OS4yIGMgMCwtMTIuMzY5IC0xMC4wMzEsLTIyLjQgLTIyLjQsLTIyLjQgSCAxNTYuOCBjIC0xMi4zNjksMCAtMjIuNCwxMC4wMzEgLTIyLjQsMjIuNCB2IDg5LjYgYyAwLDEyLjM2OSAxMC4wMzEsMjIuNCAyMi40LDIyLjQgaCA1MC40IHYgMjggSCAxMS4yIEMgNS4wMTIsMjM5LjIgMCwyNDQuMjEyIDAsMjUwLjQgdiAxMS4yIGMgMCw2LjE4OCA1LjAxMiwxMS4yIDExLjIsMTEuMiBIIDg0IHYgMjggSCA0NC44IGMgLTEyLjM2OSwwIC0yMi40LDEwLjAzMSAtMjIuNCwyMi40IHYgODkuNiBjIDAsMTIuMzY5IDEwLjAzMSwyMi40IDIyLjQsMjIuNCBoIDExMiBjIDEyLjM2OSwwIDIyLjQsLTEwLjAzMSAyMi40LC0yMi40IHYgLTg5LjYgYyAwLC0xMi4zNjkgLTEwLjAzMSwtMjIuNCAtMjIuNCwtMjIuNCBoIC0zOS4yIHYgLTI4IGggMjEyLjggdiAyOCBoIC0zOS4yIGMgLTEyLjM2OSwwIC0yMi40LDEwLjAzMSAtMjIuNCwyMi40IHYgODkuNiBjIDAsMTIuMzY5IDEwLjAzMSwyMi40IDIyLjQsMjIuNCBoIDExMiBjIDEyLjM2OSwwIDIyLjQsLTEwLjAzMSAyMi40LC0yMi40IHYgLTg5LjYgYyAwLC0xMi4zNjkgLTEwLjAzMSwtMjIuNCAtMjIuNCwtMjIuNCBIIDM2NCB2IC0yOCBoIDcyLjggYyA2LjE4OCwwIDExLjIsLTUuMDEyIDExLjIsLTExLjIgeiBNIDE3OS4yLDE2Ni40IHYgLTQ0LjggaCA4OS42IHYgNDQuOCB6IG0gLTQ0LjgsMjI0IEggNjcuMiB2IC00NC44IGggNjcuMiB6IG0gMjQ2LjQsMCBoIC02Ny4yIHYgLTQ0LjggaCA2Ny4yIHoiCiAgICAgaWQ9InBhdGgxMDM3IgogICAgIHN0eWxlPSJzdHJva2Utd2lkdGg6MC43O2ZpbGw6IzFmMWYxZjtmaWxsLW9wYWNpdHk6MSIgLz4KPC9zdmc+Cg==" 1761 | } 1762 | }, 1763 | "type": "value" 1764 | } 1765 | ] 1766 | }, 1767 | { 1768 | "id": "custom.displayMode", 1769 | "value": "image" 1770 | }, 1771 | { 1772 | "id": "custom.align", 1773 | "value": "center" 1774 | }, 1775 | { 1776 | "id": "custom.width", 1777 | "value": 100 1778 | } 1779 | ] 1780 | }, 1781 | { 1782 | "matcher": { 1783 | "id": "byName", 1784 | "options": "Received" 1785 | }, 1786 | "properties": [ 1787 | { 1788 | "id": "unit", 1789 | "value": "decbytes" 1790 | }, 1791 | { 1792 | "id": "custom.width", 1793 | "value": 100 1794 | }, 1795 | { 1796 | "id": "noValue", 1797 | "value": "0 B" 1798 | } 1799 | ] 1800 | }, 1801 | { 1802 | "matcher": { 1803 | "id": "byName", 1804 | "options": "Sent" 1805 | }, 1806 | "properties": [ 1807 | { 1808 | "id": "unit", 1809 | "value": "decbytes" 1810 | }, 1811 | { 1812 | "id": "custom.width", 1813 | "value": 100 1814 | }, 1815 | { 1816 | "id": "noValue", 1817 | "value": "0 B" 1818 | } 1819 | ] 1820 | } 1821 | ] 1822 | }, 1823 | "gridPos": { 1824 | "h": 13, 1825 | "w": 15, 1826 | "x": 0, 1827 | "y": 10 1828 | }, 1829 | "id": 24, 1830 | "options": { 1831 | "footer": { 1832 | "fields": "", 1833 | "reducer": [ 1834 | "sum" 1835 | ], 1836 | "show": false 1837 | }, 1838 | "frameIndex": 1, 1839 | "showHeader": true, 1840 | "sortBy": [ 1841 | { 1842 | "desc": false, 1843 | "displayName": "Interface" 1844 | } 1845 | ] 1846 | }, 1847 | "pluginVersion": "8.3.6", 1848 | "targets": [ 1849 | { 1850 | "datasource": { 1851 | "type": "influxdb", 1852 | "uid": "PBB990B61CE1B21F8" 1853 | }, 1854 | "groupBy": [ 1855 | { 1856 | "params": [ 1857 | "$__interval" 1858 | ], 1859 | "type": "time" 1860 | }, 1861 | { 1862 | "params": [ 1863 | "interface" 1864 | ], 1865 | "type": "tag" 1866 | }, 1867 | { 1868 | "params": [ 1869 | "null" 1870 | ], 1871 | "type": "fill" 1872 | } 1873 | ], 1874 | "hide": false, 1875 | "measurement": "net", 1876 | "orderByTime": "ASC", 1877 | "policy": "default", 1878 | "query": "SELECT non_negative_difference(last(\"bytes_recv\")) FROM \"net\" WHERE (\"host\" = 'edgerouter') AND $timeFilter GROUP BY time($__interval), \"interface\" fill(null) LIMIT 1", 1879 | "rawQuery": false, 1880 | "refId": "A", 1881 | "resultFormat": "table", 1882 | "select": [ 1883 | [ 1884 | { 1885 | "params": [ 1886 | "bytes_recv" 1887 | ], 1888 | "type": "field" 1889 | }, 1890 | { 1891 | "params": [], 1892 | "type": "last" 1893 | }, 1894 | { 1895 | "params": [ 1896 | "1s" 1897 | ], 1898 | "type": "non_negative_derivative" 1899 | }, 1900 | { 1901 | "params": [ 1902 | "* 8" 1903 | ], 1904 | "type": "math" 1905 | }, 1906 | { 1907 | "params": [ 1908 | "rx" 1909 | ], 1910 | "type": "alias" 1911 | } 1912 | ], 1913 | [ 1914 | { 1915 | "params": [ 1916 | "bytes_sent" 1917 | ], 1918 | "type": "field" 1919 | }, 1920 | { 1921 | "params": [], 1922 | "type": "last" 1923 | }, 1924 | { 1925 | "params": [ 1926 | "1s" 1927 | ], 1928 | "type": "non_negative_derivative" 1929 | }, 1930 | { 1931 | "params": [ 1932 | "* 8" 1933 | ], 1934 | "type": "math" 1935 | }, 1936 | { 1937 | "params": [ 1938 | "tx" 1939 | ], 1940 | "type": "alias" 1941 | } 1942 | ] 1943 | ], 1944 | "tags": [ 1945 | { 1946 | "key": "host", 1947 | "operator": "=", 1948 | "value": "edgerouter" 1949 | }, 1950 | { 1951 | "condition": "AND", 1952 | "key": "interface", 1953 | "operator": "=~", 1954 | "value": "/^eth[0-9]$|^switch[0-9]\\.[0-9]{1,}$/" 1955 | } 1956 | ] 1957 | }, 1958 | { 1959 | "datasource": { 1960 | "type": "influxdb", 1961 | "uid": "PBB990B61CE1B21F8" 1962 | }, 1963 | "groupBy": [ 1964 | { 1965 | "params": [ 1966 | "interface" 1967 | ], 1968 | "type": "tag" 1969 | }, 1970 | { 1971 | "params": [ 1972 | "type" 1973 | ], 1974 | "type": "tag" 1975 | } 1976 | ], 1977 | "hide": false, 1978 | "measurement": "edgeos_interface", 1979 | "orderByTime": "ASC", 1980 | "policy": "default", 1981 | "query": "SELECT last(\"alias\") AS \"description\", last(\"speed\") AS \"speed\", last(\"state\") AS \"state\" FROM \"edgeos_interface\" WHERE (\"host\" = 'edgerouter' AND \"interface\" !~ /switch* | loop* | npi* | itf*/) AND $timeFilter GROUP BY \"interface\", \"type\"", 1982 | "rawQuery": false, 1983 | "refId": "B", 1984 | "resultFormat": "table", 1985 | "select": [ 1986 | [ 1987 | { 1988 | "params": [ 1989 | "alias" 1990 | ], 1991 | "type": "field" 1992 | }, 1993 | { 1994 | "params": [], 1995 | "type": "last" 1996 | }, 1997 | { 1998 | "params": [ 1999 | "description" 2000 | ], 2001 | "type": "alias" 2002 | } 2003 | ], 2004 | [ 2005 | { 2006 | "params": [ 2007 | "speed" 2008 | ], 2009 | "type": "field" 2010 | }, 2011 | { 2012 | "params": [], 2013 | "type": "last" 2014 | }, 2015 | { 2016 | "params": [ 2017 | "speed" 2018 | ], 2019 | "type": "alias" 2020 | } 2021 | ], 2022 | [ 2023 | { 2024 | "params": [ 2025 | "state" 2026 | ], 2027 | "type": "field" 2028 | }, 2029 | { 2030 | "params": [], 2031 | "type": "last" 2032 | }, 2033 | { 2034 | "params": [ 2035 | "state" 2036 | ], 2037 | "type": "alias" 2038 | } 2039 | ] 2040 | ], 2041 | "tags": [ 2042 | { 2043 | "key": "host", 2044 | "operator": "=", 2045 | "value": "edgerouter" 2046 | }, 2047 | { 2048 | "condition": "AND", 2049 | "key": "interface", 2050 | "operator": "=~", 2051 | "value": "/^eth[0-9]$|^switch[0-9]\\.[0-9]{1,}$/" 2052 | } 2053 | ] 2054 | }, 2055 | { 2056 | "alias": "", 2057 | "datasource": { 2058 | "type": "influxdb", 2059 | "uid": "PBB990B61CE1B21F8" 2060 | }, 2061 | "hide": false, 2062 | "query": "SELECT sum(\"bytes_recv\") AS data_in FROM\n(SELECT non_negative_difference(\"bytes_recv\") AS \"bytes_recv\" FROM \"net\" WHERE (\"host\" = 'edgerouter' AND \"interface\" =~ /^eth[0-9]$|^switch[0-9]\\.[0-9]{1,}$/) AND $timeFilter GROUP BY \"interface\")\nGROUP BY \"interface\"", 2063 | "rawQuery": true, 2064 | "refId": "C", 2065 | "resultFormat": "table" 2066 | }, 2067 | { 2068 | "alias": "", 2069 | "datasource": { 2070 | "type": "influxdb", 2071 | "uid": "PBB990B61CE1B21F8" 2072 | }, 2073 | "hide": false, 2074 | "query": "SELECT sum(\"bytes_sent\") AS data_out FROM\n(SELECT non_negative_difference(\"bytes_sent\") AS \"bytes_sent\" FROM \"net\" WHERE (\"host\" = 'edgerouter' AND \"interface\" =~ /^eth[0-9]$|^switch[0-9]\\.[0-9]{1,}$/) AND $timeFilter GROUP BY \"interface\")\nGROUP BY \"interface\"", 2075 | "rawQuery": true, 2076 | "refId": "D", 2077 | "resultFormat": "table" 2078 | } 2079 | ], 2080 | "transformations": [ 2081 | { 2082 | "id": "seriesToColumns", 2083 | "options": { 2084 | "byField": "interface" 2085 | } 2086 | }, 2087 | { 2088 | "id": "calculateField", 2089 | "options": { 2090 | "alias": "status", 2091 | "mode": "reduceRow", 2092 | "reduce": { 2093 | "include": [ 2094 | "type", 2095 | "state" 2096 | ], 2097 | "reducer": "sum" 2098 | }, 2099 | "replaceFields": false 2100 | } 2101 | }, 2102 | { 2103 | "id": "organize", 2104 | "options": { 2105 | "excludeByName": { 2106 | "Time 1": true, 2107 | "Time 2": true, 2108 | "Time 3": true, 2109 | "Time 4": true, 2110 | "bytes_sent": false, 2111 | "state": true, 2112 | "type": true 2113 | }, 2114 | "indexByName": { 2115 | "Time 1": 5, 2116 | "Time 2": 6, 2117 | "Time 3": 9, 2118 | "Time 4": 11, 2119 | "data_in": 10, 2120 | "data_out": 12, 2121 | "description": 13, 2122 | "interface": 0, 2123 | "rx": 7, 2124 | "speed": 4, 2125 | "state": 2, 2126 | "status": 1, 2127 | "tx": 8, 2128 | "type": 3 2129 | }, 2130 | "renameByName": { 2131 | "bytes_recv": "RX", 2132 | "bytes_sent": "TX", 2133 | "data_in": "Received", 2134 | "data_out": "Sent", 2135 | "description": "Description", 2136 | "icon": "Status", 2137 | "in": "In", 2138 | "interface": "Interface", 2139 | "out": "Out", 2140 | "packets_recv": "In", 2141 | "packets_sent": "Out", 2142 | "rx": "RX", 2143 | "speed": "Speed", 2144 | "state": "", 2145 | "status": "Status", 2146 | "tx": "TX", 2147 | "type": "" 2148 | } 2149 | } 2150 | } 2151 | ], 2152 | "type": "table" 2153 | }, 2154 | { 2155 | "datasource": { 2156 | "type": "influxdb", 2157 | "uid": "PBB990B61CE1B21F8" 2158 | }, 2159 | "fieldConfig": { 2160 | "defaults": { 2161 | "color": { 2162 | "mode": "thresholds", 2163 | "seriesBy": "last" 2164 | }, 2165 | "custom": { 2166 | "axisLabel": "", 2167 | "axisPlacement": "auto", 2168 | "barAlignment": 0, 2169 | "drawStyle": "line", 2170 | "fillOpacity": 15, 2171 | "gradientMode": "scheme", 2172 | "hideFrom": { 2173 | "legend": false, 2174 | "tooltip": false, 2175 | "viz": false 2176 | }, 2177 | "lineInterpolation": "stepBefore", 2178 | "lineStyle": { 2179 | "fill": "solid" 2180 | }, 2181 | "lineWidth": 1, 2182 | "pointSize": 5, 2183 | "scaleDistribution": { 2184 | "type": "linear" 2185 | }, 2186 | "showPoints": "never", 2187 | "spanNulls": true, 2188 | "stacking": { 2189 | "group": "A", 2190 | "mode": "none" 2191 | }, 2192 | "thresholdsStyle": { 2193 | "mode": "off" 2194 | } 2195 | }, 2196 | "mappings": [], 2197 | "thresholds": { 2198 | "mode": "absolute", 2199 | "steps": [ 2200 | { 2201 | "color": "#01874d", 2202 | "value": null 2203 | }, 2204 | { 2205 | "color": "#348d3e", 2206 | "value": -100 2207 | }, 2208 | { 2209 | "color": "#68942e", 2210 | "value": -75 2211 | }, 2212 | { 2213 | "color": "#cc9e0f", 2214 | "value": -50 2215 | }, 2216 | { 2217 | "color": "#ffa400", 2218 | "value": -25 2219 | }, 2220 | { 2221 | "color": "#044fbf", 2222 | "value": 0 2223 | }, 2224 | { 2225 | "color": "#363f99", 2226 | "value": 25 2227 | }, 2228 | { 2229 | "color": "#822860", 2230 | "value": 50 2231 | }, 2232 | { 2233 | "color": "#cd1026", 2234 | "value": 75 2235 | }, 2236 | { 2237 | "color": "#d60000", 2238 | "value": 100 2239 | } 2240 | ] 2241 | }, 2242 | "unit": "pps" 2243 | }, 2244 | "overrides": [] 2245 | }, 2246 | "gridPos": { 2247 | "h": 11, 2248 | "w": 9, 2249 | "x": 15, 2250 | "y": 12 2251 | }, 2252 | "id": 47, 2253 | "maxDataPoints": 150, 2254 | "options": { 2255 | "legend": { 2256 | "calcs": [ 2257 | "last" 2258 | ], 2259 | "displayMode": "hidden", 2260 | "placement": "bottom" 2261 | }, 2262 | "tooltip": { 2263 | "mode": "multi" 2264 | } 2265 | }, 2266 | "targets": [ 2267 | { 2268 | "alias": "$tag_interface", 2269 | "datasource": { 2270 | "type": "influxdb", 2271 | "uid": "PBB990B61CE1B21F8" 2272 | }, 2273 | "groupBy": [ 2274 | { 2275 | "params": [ 2276 | "$__interval" 2277 | ], 2278 | "type": "time" 2279 | }, 2280 | { 2281 | "params": [ 2282 | "interface" 2283 | ], 2284 | "type": "tag" 2285 | }, 2286 | { 2287 | "params": [ 2288 | "null" 2289 | ], 2290 | "type": "fill" 2291 | } 2292 | ], 2293 | "hide": false, 2294 | "measurement": "net", 2295 | "orderByTime": "ASC", 2296 | "policy": "default", 2297 | "query": "SELECT non_negative_derivative(last(\"packets_recv\"), 1s) FROM \"net\" WHERE (\"host\" = 'edgerouter' AND \"interface\" =~ /^eth[0-9]{1,}$|^switch[0-9]\\.[0-9]{1,}$/ AND \"packets_recv\" > 0) AND $timeFilter GROUP BY time($__interval), \"interface\" fill(null)", 2298 | "rawQuery": true, 2299 | "refId": "A", 2300 | "resultFormat": "time_series", 2301 | "select": [ 2302 | [ 2303 | { 2304 | "params": [ 2305 | "packets_recv" 2306 | ], 2307 | "type": "field" 2308 | }, 2309 | { 2310 | "params": [], 2311 | "type": "last" 2312 | }, 2313 | { 2314 | "params": [ 2315 | "1s" 2316 | ], 2317 | "type": "non_negative_derivative" 2318 | } 2319 | ] 2320 | ], 2321 | "tags": [ 2322 | { 2323 | "key": "host", 2324 | "operator": "=", 2325 | "value": "edgerouter" 2326 | }, 2327 | { 2328 | "condition": "AND", 2329 | "key": "interface", 2330 | "operator": "=~", 2331 | "value": "/^eth[0-9]{1,}$|^switch[0-9]\\.[0-9]{1,}$/" 2332 | } 2333 | ] 2334 | }, 2335 | { 2336 | "alias": "$tag_interface", 2337 | "datasource": { 2338 | "type": "influxdb", 2339 | "uid": "PBB990B61CE1B21F8" 2340 | }, 2341 | "groupBy": [ 2342 | { 2343 | "params": [ 2344 | "$__interval" 2345 | ], 2346 | "type": "time" 2347 | }, 2348 | { 2349 | "params": [ 2350 | "interface" 2351 | ], 2352 | "type": "tag" 2353 | }, 2354 | { 2355 | "params": [ 2356 | "null" 2357 | ], 2358 | "type": "fill" 2359 | } 2360 | ], 2361 | "hide": false, 2362 | "measurement": "net", 2363 | "orderByTime": "ASC", 2364 | "policy": "default", 2365 | "query": "SELECT non_negative_derivative(last(\"packets_sent\"), 1s) * -1 FROM \"net\" WHERE (\"host\" = 'edgerouter' AND \"interface\" =~ /^eth[0-9]{1,}$|^switch[0-9]\\.[0-9]{1,}$/ AND \"packets_sent\" > 0) AND $timeFilter GROUP BY time($__interval), \"interface\" fill(null)", 2366 | "rawQuery": true, 2367 | "refId": "B", 2368 | "resultFormat": "time_series", 2369 | "select": [ 2370 | [ 2371 | { 2372 | "params": [ 2373 | "packets_sent" 2374 | ], 2375 | "type": "field" 2376 | }, 2377 | { 2378 | "params": [], 2379 | "type": "last" 2380 | }, 2381 | { 2382 | "params": [ 2383 | "1s" 2384 | ], 2385 | "type": "non_negative_derivative" 2386 | }, 2387 | { 2388 | "params": [ 2389 | "* -1" 2390 | ], 2391 | "type": "math" 2392 | } 2393 | ] 2394 | ], 2395 | "tags": [ 2396 | { 2397 | "key": "host", 2398 | "operator": "=", 2399 | "value": "edgerouter" 2400 | }, 2401 | { 2402 | "condition": "AND", 2403 | "key": "interface", 2404 | "operator": "=~", 2405 | "value": "/^eth[0-9]{1,}$|^switch[0-9]\\.[0-9]{1,}$/" 2406 | } 2407 | ] 2408 | } 2409 | ], 2410 | "title": "Packets", 2411 | "transformations": [], 2412 | "transparent": true, 2413 | "type": "timeseries" 2414 | } 2415 | ], 2416 | "refresh": "5s", 2417 | "schemaVersion": 34, 2418 | "style": "dark", 2419 | "tags": [], 2420 | "templating": { 2421 | "list": [] 2422 | }, 2423 | "time": { 2424 | "from": "now-2d", 2425 | "to": "now" 2426 | }, 2427 | "timepicker": { 2428 | "refresh_intervals": [ 2429 | "5s" 2430 | ] 2431 | }, 2432 | "timezone": "utc", 2433 | "title": "EdgeRouter", 2434 | "uid": "bnYaTifnk", 2435 | "version": 1, 2436 | "weekStart": "" 2437 | } 2438 | --------------------------------------------------------------------------------