From 4b9f15f5a65b0bbdb32c216cf4c6efaa88309387 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sun, 3 Mar 2024 16:00:54 +0100 Subject: [PATCH] feat: add wireguard plugin --- .../example-graphs/wireguard_peer_count.png | Bin 0 -> 16403 bytes .../example-graphs/wireguard_peer_traffic.png | Bin 0 -> 26492 bytes plugins/wireguard/wireguard_ | 187 ++++++++++++++++++ 3 files changed, 187 insertions(+) create mode 100644 plugins/wireguard/example-graphs/wireguard_peer_count.png create mode 100644 plugins/wireguard/example-graphs/wireguard_peer_traffic.png create mode 100644 plugins/wireguard/wireguard_ diff --git a/plugins/wireguard/example-graphs/wireguard_peer_count.png b/plugins/wireguard/example-graphs/wireguard_peer_count.png new file mode 100644 index 0000000000000000000000000000000000000000..a109bf8d91782e887b30e438d360bbc37510e9ba GIT binary patch literal 16403 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 F{~vM#Z*Bkp literal 0 HcmV?d00001 diff --git a/plugins/wireguard/example-graphs/wireguard_peer_traffic.png b/plugins/wireguard/example-graphs/wireguard_peer_traffic.png new file mode 100644 index 0000000000000000000000000000000000000000..654b8235d66c99b0779cad851f09ef9a321dee59 GIT binary patch literal 26492 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 literal 0 HcmV?d00001 diff --git a/plugins/wireguard/wireguard_ b/plugins/wireguard/wireguard_ new file mode 100644 index 00000000..10d4ec96 --- /dev/null +++ b/plugins/wireguard/wireguard_ @@ -0,0 +1,187 @@ +#!/bin/bash +# -*- sh -*- + +set -e + +: << =cut + +=head1 NAME + +wireguard_ - Wildcard-plugin to monitor wireguard peer count and traffic + +=head1 CONFIGURATION + +This plugin does not normally require configuration. + +The plugin needs to run as root to be able to call the wg show +command. This is configured like this: + + [wireguard_*] + user root + +This is a wildcard plugin which by default monitors all wireguard +interfaces. To monitor a single wireguard interface, link +wireguard_ to this file. For example, + + ln -s /usr/share/munin/plugins/wireguard_ \ + /etc/munin/plugins/wireguard_wg0 + +will monitor wg0. + + +=head1 AUTHOR + +Original author unknown + +Copyright (C) 2024 pimlie + +=head1 LICENSE + +MIT + +=head1 MAGIC MARKERS + + #%# family=auto + #%# capabilities=autoconf suggest + +=cut + +. "$MUNIN_LIBDIR/plugins/plugin.sh" + +INTERFACE=${0##*wireguard_} + +function wg_exists { + command -v wg >/dev/null + return $? +} + +function wg_interfaces { + show_all=$1 + for iface in $(wg show interfaces | tr " " "\n"); do + # Filter interfaces if needed + if [ -z "$show_all" ] \ + && [ -n "$INTERFACE" ] \ + && [ "$INTERFACE" != "$iface" ]; then + continue + fi + + echo "$iface" + done +} + +function wg_peers { + iface=$1 + + # From wg 8 manpage: + # If dump is specified, then several lines are printed; the first contains + # in order separated by tab: private-key, public-key, listen-port, fwmark. + # Subsequent lines are printed for each peer and contain in order separated + # by tab: public-key, preshared-key, endpoint, allowed-ips, latest-handshake, + # transfer-rx, transfer-tx, persistent-keepalive + for line in $(wg show "$iface" dump | tr '\t' ';'); do + column_count=$(awk -F';' '{print NF}' <<< "$line") + if [ "$column_count" -ne 8 ]; then + # First line of dump contains interface info, ignore this line + continue + fi + + echo "$line" + done +} + +function safe_peer_id { + unsafe_peer_id=$1 + + echo "${unsafe_peer_id//[.:]/_}" +} + +case $1 in + autoconf) + if wg_exists; then + echo "yes" + else + echo "no (wg command not found)" + fi + ;; + suggest) + if wg_exists; then + wg_interfaces 1 + fi + ;; + config) + # Config for peer count per interface graph + cat << EOF +multigraph wireguard_peercount +graph_title interface peer count +graph_vlabel Number of peers +graph_category wireguard +graph_info This graph shows the number of peers per wireguard interface +EOF + + for iface in $(wg_interfaces); do + # List config for all interfaces + cat <