diff --git a/plugins/syncthing/example-graphs/strelaysrv_-1.png b/plugins/syncthing/example-graphs/strelaysrv_-1.png new file mode 100644 index 00000000..ea26f57d Binary files /dev/null and b/plugins/syncthing/example-graphs/strelaysrv_-1.png differ diff --git a/plugins/syncthing/example-graphs/strelaysrv_-2.png b/plugins/syncthing/example-graphs/strelaysrv_-2.png new file mode 100644 index 00000000..69f583eb Binary files /dev/null and b/plugins/syncthing/example-graphs/strelaysrv_-2.png differ diff --git a/plugins/syncthing/example-graphs/strelaysrv_-3.png b/plugins/syncthing/example-graphs/strelaysrv_-3.png new file mode 100644 index 00000000..9c82f011 Binary files /dev/null and b/plugins/syncthing/example-graphs/strelaysrv_-3.png differ diff --git a/plugins/syncthing/example-graphs/strelaysrv_-4.png b/plugins/syncthing/example-graphs/strelaysrv_-4.png new file mode 100644 index 00000000..244e3eda Binary files /dev/null and b/plugins/syncthing/example-graphs/strelaysrv_-4.png differ diff --git a/plugins/syncthing/example-graphs/syncthing_-1.png b/plugins/syncthing/example-graphs/syncthing_-1.png new file mode 100644 index 00000000..a71e34d2 Binary files /dev/null and b/plugins/syncthing/example-graphs/syncthing_-1.png differ diff --git a/plugins/syncthing/example-graphs/syncthing_-2.png b/plugins/syncthing/example-graphs/syncthing_-2.png new file mode 100644 index 00000000..a333f2a5 Binary files /dev/null and b/plugins/syncthing/example-graphs/syncthing_-2.png differ diff --git a/plugins/syncthing/example-graphs/syncthing_-3.png b/plugins/syncthing/example-graphs/syncthing_-3.png new file mode 100644 index 00000000..a1704be9 Binary files /dev/null and b/plugins/syncthing/example-graphs/syncthing_-3.png differ diff --git a/plugins/syncthing/example-graphs/syncthing_-4.png b/plugins/syncthing/example-graphs/syncthing_-4.png new file mode 100644 index 00000000..41dc6637 Binary files /dev/null and b/plugins/syncthing/example-graphs/syncthing_-4.png differ diff --git a/plugins/syncthing/example-graphs/syncthing_-5.png b/plugins/syncthing/example-graphs/syncthing_-5.png new file mode 100644 index 00000000..73a640dd Binary files /dev/null and b/plugins/syncthing/example-graphs/syncthing_-5.png differ diff --git a/plugins/syncthing/strelaysrv_ b/plugins/syncthing/strelaysrv_ new file mode 100755 index 00000000..5a30f27b --- /dev/null +++ b/plugins/syncthing/strelaysrv_ @@ -0,0 +1,160 @@ +#!/bin/sh +: <<=cut +=head1 NAME +strelaysrv_ - Plugin to monitor Syncthing relay server + +=head1 DESCRIPTION +This plugin gathers metrics from a Syncthing relay server. + +This plugin requires the jq utility : https://stedolan.github.io/jq/ +This plugin requires the curl utility : https://curl.haxx.se/ + +Available plugins : +strelaysrv_goroutine # +strelaysrv_num # +strelaysrv_proxied # +strelaysrv_transfer # +strelaysrv_uptime # + +=head1 CONFIGURATION +To make the plugin connect to the Syncthing relay server one has to use this type of +configuration +[strelaysrv_*] + +env.syncthing_relaysrv_host 127.0.0.1 +env.syncthing_relaysrv_port 22070 + +=head1 AUTHOR +Pierre-Alain TORET + +=head1 LICENSE +MIT +=cut + +syncthing_relaysrv_host=${syncthing_relaysrv_host:-} +syncthing_relaysrv_port=${syncthing_relaysrv_port:-} + +getstatus() { + "$CURL" -s "http://$syncthing_relaysrv_host:$syncthing_relaysrv_port/status" +} + +num() { + case $1 in + config) + cat <<'EOM' +graph_title Syncthing relay numbers +graph_category network +graph_vlabel numbers +strelaysrv_num_sessions.label sessions +strelaysrv_num_connections.label connections +strelaysrv_num_pending.label pending session keys +strelaysrv_num_proxies.label proxies +EOM + exit 0;; + *) + STATUS=$(getstatus) + NS=$(echo "$STATUS" | $JQ '.numActiveSessions ') + NC=$(echo "$STATUS" | $JQ '.numConnections ') + NK=$(echo "$STATUS" | $JQ '.numPendingSessionKeys ') + NP=$(echo "$STATUS" | $JQ '.numProxies ') + printf "strelaysrv_num_sessions.value %s\n" "$NS" + printf "strelaysrv_num_connections.value %s\n" "$NC" + printf "strelaysrv_num_pending.value %s\n" "$NK" + printf "strelaysrv_num_proxies.value %s\n" "$NP" + esac +} + +uptime() { + case $1 in + config) + cat <<'EOM' +graph_title Syncthing relay uptime +graph_vlabel uptime in seconds +graph_category network +strelaysrv_uptime.label uptime +EOM + exit 0;; + *) + STATUS=$(getstatus) + UPTIME=$(echo "$STATUS" | "$JQ" '.uptimeSeconds') + printf "strelaysrv_uptime.value %s\n" "$UPTIME" + esac +} + +goroutine() { + case $1 in + config) + cat <<'EOM' +graph_title Syncthing relay go routines +graph_vlabel number of go routines +graph_category network +strelaysrv_goroutine.label routines +EOM + exit 0;; + *) + STATUS=$(getstatus) + GOROUTINE=$(echo "$STATUS" | "$JQ" '.goNumRoutine') + printf "strelaysrv_goroutine.value %s\n" "$GOROUTINE" + esac +} + +proxied() { + case $1 in + config) + cat <<'EOM' +graph_title Syncthing relay total proxied bits +graph_category network +graph_vlabel bits +graph_args --base 1000 +strelaysrv_proxied.label bits +strelaysrv_proxied.cdef strelaysrv_proxied,8,* +EOM + exit 0;; + *) + STATUS=$(getstatus) + BP=$(echo "$STATUS" | "$JQ" '.bytesProxied ') + printf "strelaysrv_proxied.value %s\n" "$BP" + esac +} + +transfer() { + case $1 in + config) + cat <<'EOM' +graph_title Syncthing relay transfer rate +graph_category network +graph_vlabel bps +graph_args --base 1000 +strelaysrv_transfer.label bps +strelaysrv_transfer.cdef strelaysrv_transfer,1000,* +EOM + exit 0;; + *) + STATUS=$(getstatus) + TRANSFER=$(echo "$STATUS" | "$JQ" '.kbps10s1m5m15m30m60m[2] ') + printf "strelaysrv_transfer.value %s\n" "$TRANSFER" + esac +} + +cd "$(dirname "$0")" || exit + +CURL=$(which curl) +JQ=$(which jq) + +case $(basename "$0") in + strelaysrv_num) + num "$1" + exit 0;; + strelaysrv_uptime) + uptime "$1" + exit 0;; + strelaysrv_goroutine) + goroutine "$1" + exit 0;; + strelaysrv_proxied) + proxied "$1" + exit 0;; + strelaysrv_transfer) + transfer "$1" + exit 0;; +esac diff --git a/plugins/syncthing/syncthing_ b/plugins/syncthing/syncthing_ new file mode 100755 index 00000000..7bfd0cd0 --- /dev/null +++ b/plugins/syncthing/syncthing_ @@ -0,0 +1,171 @@ +#!/bin/sh +# -*- sh -*- +: <<=cut +=head1 NAME +syncthing_ - Plugin to monitor Syncthing server + +=head1 DESCRIPTION +This plugin gathers metrics from a Syncthing server. + +This plugin requires the jq utility : https://stedolan.github.io/jq/ +This plugin requires the cURL utility : https://curl.haxx.se/ + +Available plugins : +syncthing_cpu # +syncthing_mem # +syncthing_goroutine # +syncthing_transfer # +syncthing_uptime # + +=head1 CONFIGURATION +To make the plugin connect to the Syncthing server one has to use this type of +configuration +[syncthing_*] + +env.syncthing_apikey myapikey0123456789 +env.syncthing_host 127.0.0.1 +env.syncthing_port 8384 +env.syncthing_proto http + +=head1 AUTHOR +Pierre-Alain TORET + +=head1 LICENSE +MIT +=cut + +syncthing_apikey=${syncthing_apikey:-} +syncthing_proto=${syncthing_proto:-} +syncthing_host=${syncthing_host:-} +syncthing_port=${syncthing_port:-} + +getstatus() { + "$CURL" -s -X GET -H "X-API-Key: $syncthing_apikey" "$syncthing_proto://$syncthing_host:$syncthing_port/rest/system/status" +} + +cpu() { + case $1 in + config) + cat <<'EOM' +graph_title Syncthing server cpu usage +graph_args -u 100 +graph_vlabel % +graph_category network +syncthing_cpu.label cpu +EOM + exit 0;; + *) + STATUS=$(getstatus) + CPU=$(echo "$STATUS" | "$JQ" '.cpuPercent') + printf "syncthing_cpu.value %s\n" "$CPU" + esac +} + +mem() { + case $1 in + config) + cat <<'EOM' +graph_title Syncthing server memory +graph_category network +graph_order syncthing_mem_all syncthing_mem_sys +graph_args --base 1000 +graph_vlabel bits +syncthing_mem_all.label allocated +syncthing_mem_all.cdef syncthing_mem_all,8,* +syncthing_mem_sys.label obtained +syncthing_mem_sys.cdef syncthing_mem_sys,8,* +EOM + exit 0;; + *) + STATUS=$(getstatus) + ALL=$(echo "$STATUS" | "$JQ" '.alloc') + SYS=$(echo "$STATUS" | "$JQ" '.sys') + printf "syncthing_mem_all.value %s\n" "$ALL" + printf "syncthing_mem_sys.value %s\n" "$SYS" + esac +} + +uptime() { + case $1 in + config) + cat <<'EOM' +graph_title Syncthing server uptime +graph_vlabel uptime in seconds +graph_category network +syncthing_uptime.label uptime +EOM + exit 0;; + *) + STATUS=$(getstatus) + UPTIME=$(echo "$STATUS" | "$JQ" '.uptime') + printf "syncthing_uptime.value %s\n" "$UPTIME" + esac +} + +goroutine() { + case $1 in + config) + cat <<'EOM' +graph_title Syncthing server go routines +graph_vlabel number of go routines +graph_category network +syncthing_goroutine.label routines +EOM + exit 0;; + *) + STATUS=$(getstatus) + GOROUTINES=$(echo "$STATUS" | "$JQ" '.goroutines') + printf "syncthing_goroutine.value %s\n" "$GOROUTINES" + esac +} + +transfer() { + case $1 in + config) + cat <<'EOM' +graph_title Syncthing server total transfer +graph_category network +graph_order syncthing_transfer_down syncthing_transfer_up +graph_args --base 1000 +graph_vlabel bits in (-) / out (+) per ${graph_period} +syncthing_transfer_down.label received +syncthing_transfer_down.type COUNTER +syncthing_transfer_down.graph no +syncthing_transfer_down.cdef syncthing_transfer_down,8,* +syncthing_transfer_up.label bps +syncthing_transfer_up.type COUNTER +syncthing_transfer_up.negative syncthing_transfer_down +syncthing_transfer_up.cdef syncthing_transfer_up,8,* +EOM + exit 0;; + *) + CONNECTIONS=$("$CURL" -s -X GET -H "X-API-Key: $syncthing_apikey" "$syncthing_proto://$syncthing_host:$syncthing_port/rest/system/connections") + IBT=$(echo "$CONNECTIONS" | "$JQ" '.total | .inBytesTotal') + OBT=$(echo "$CONNECTIONS" | "$JQ" '.total | .outBytesTotal') + printf "syncthing_transfer_up.value %s\n" "$IBT" + printf "syncthing_transfer_down.value %s\n" "$OBT" + esac +} + +cd "$(dirname "$0")" || exit + +CURL=$(which curl) +JQ=$(which jq) + +case $(basename "$0") in + syncthing_cpu) + cpu "$1" + exit 0;; + syncthing_mem) + mem "$1" + exit 0;; + syncthing_uptime) + uptime "$1" + exit 0;; + syncthing_goroutine) + goroutine "$1" + exit 0;; + syncthing_transfer) + transfer "$1" + exit 0;; +esac