BIN
plugins/syncthing/example-graphs/strelaysrv_-1.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
plugins/syncthing/example-graphs/strelaysrv_-2.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
plugins/syncthing/example-graphs/strelaysrv_-3.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
plugins/syncthing/example-graphs/strelaysrv_-4.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
plugins/syncthing/example-graphs/syncthing_-1.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
plugins/syncthing/example-graphs/syncthing_-2.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
plugins/syncthing/example-graphs/syncthing_-3.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
plugins/syncthing/example-graphs/syncthing_-4.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
plugins/syncthing/example-graphs/syncthing_-5.png
Normal file
After Width: | Height: | Size: 15 KiB |
160
plugins/syncthing/strelaysrv_
Executable file
|
@ -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 <pierre-alain.toret@protonmail.com>
|
||||||
|
|
||||||
|
=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
|
171
plugins/syncthing/syncthing_
Executable file
|
@ -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 <pierre-alain.toret@protonmail.com>
|
||||||
|
|
||||||
|
=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
|