Munin plugin Teamspeak 3 Bandwidth

Door MrOizo2005 op vrijdag 25 november 2011 00:30 - Reacties (4)
Categorie: Munin, Views: 3.952

Ik zag opeens dat ik genoeg Karma punten had voor een Tweakers Blog, dus ik dacht wat houd me tegen. Ik zal de blog later wel een beetje opfleuren.

Ik maak zelf al een tijd gebruik van Munin (http://munin-monitoring.org), en de laatste 2 maanden kan ik daar al niks submitten aan plugins. Dus heb ik het besloten om het hier maar neer te zetten. In de hoop dat andere mensen er ook iets aan hebben.

Er bestond al een lange tijd een plugin om teamspeak users te meten en in een grafiek te zetten, maar ik was eigenlijk wel benieuwd naar het data verbruik. Vandaar dat ik even aan de gang ben gegaan.

De plugin is een aangepaste versie van de bestaande teamspeak_users plugin dus grotendeels van de credits gaat ook uit naar hem.

Ik hoop dat me eerste blog post een beetje in smaak valt en wie weet wat er nog komen gaat.


Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/perl -w
# teamspeak_bandwidth.pl
# Munin Plugin for Teamspeak3 bandwidth
# displays the bandwidth on TS3 servers
#
# This plugin is modified from Tim Wulkau (Teamspeak Users) plugin.
# So most of the credits go to him.

#######################################################
#
# by Oizopower
#
# 25.11.11 - v0.1
#            -initial release
#
######################################################

use strict;
use Net::Telnet;

# CONFIG HERE!
my $hostname = "IP VAN DE SERVER";    # serveraddress
my $port = 10011;              # querryport (default: 10011)
my @serverids = (1);           # array of virtualserverids (1,2,3,4,...) 

my $username = "ServerQuery Username";            # only set if the default queryuser hasn?t enough rights (should work without this)
my $password = "ServerQuery Password";

# SCRIPT START!
if ($ARGV[0] and $ARGV[0] eq "autoconf") { print "yes\n"; exit 0; }

if(exists $ARGV[0] and $ARGV[0] eq "config")
{
  print "graph_title Teamspeak Bandwidth\n";
  print "graph_vlabel Teamspeak Bandwidth in MB\n";
  print "graph_category Teamspeak\n";
  print "graph_info This graph shows the bandwidth on a Teamspeak3 server\n";

  foreach my $server (@serverids)
  {
    print "sendID$server.label Send on ServerID $server\n";
    print "sendID$server.type GAUGE\n";

    print "receivedID$server.label Received on ServerID $server\n";
    print "receivedID$server.type GAUGE\n";
  }
  exit 0;
}
else
{                              
  my $telnet = new Net::Telnet(Timeout=>5, Errmode=>"return", Prompt=>"/\r/"); 
    if (!$telnet->open(Host=>$hostname, Port=>$port)) {
    die exit;
  } 
  $telnet->waitfor("/Welcome to the TeamSpeak 3 ServerQuery interface/");
  foreach my $server (@serverids)
  {
    $telnet->cmd("use sid=$server");
    $telnet->waitfor("/error id=0 msg=ok/");
    if($username && $password) {
      $telnet->cmd("login $username $password");
      $telnet->waitfor("/error id=0 msg=ok/");
    }
    $telnet->cmd("serverinfo");
    
    my $received = 0;
    my $send = 0;

    my $line = $telnet->getline(Timeout=>5);
    if ($line =~ m/connection_bytes_received_total=(\d+) /) {
      $received = $1;
    }
    if ($line =~ m/connection_bytes_sent_total=(\d+) /) {
      $send = $1;
    }
    $telnet->waitfor("/error id=0 msg=ok/");
    
    print "sendID$server.value ";
    printf("%.2f", (-($send/1024)/1024));
    print "\n";

    print "receivedID$server.value ";
    printf("%.2f", (($received/1024)/1024));
    print "\n";
  }  
  $telnet->close;
}
exit;

Volgende: Newznab+ installatie (ubuntu / nginx / percona) 12-'12 Newznab+ installatie (ubuntu / nginx / percona)

Reacties


Door Tweakers user Gieltje, vrijdag 25 november 2011 01:29

./teamspeak_bandwidth
Use of uninitialized value $line in pattern match (m//) at ./teamspeak_bandwidth line 70.
Use of uninitialized value $line in pattern match (m//) at ./teamspeak_bandwidth line 73.
sendID1.value -0.00
receivedID1.value 0.00

code:
1
my $line = $telnet->getline(Timeout=>5) || '';



Om te voorkomen dat er 945m gebruikers online zijn (alleen snel getest, ik ga nu slapen):
code:
1
2
3
print "$server.value ";
    printf("%.0f", ($clients - $queryclients));
    print "\n";



Voor de ipv6 gebruikers vergeet ::1 niet te whitelisten op je ts3 server.

edit: munin 1.4.6, het is een perl mededeling dat de variabele niet aangemaakt word indien het telnet commando niet lukt. (munin-run doet hetzelfde).

[Reactie gewijzigd op vrijdag 25 november 2011 15:19]


Door Tweakers user MrOizo2005, vrijdag 25 november 2011 08:33

Bovenstaand is voor het teamspeak_users script? Ik vraag me alleen af waarom je de bovenstaande error krijgt "Use of uninitialized value $line in pattern match".

Welke munin versie maak je gebruik en draai hem eens via "munin-run teamspeak_bandwidth"

Door Tweakers user Kain_niaK, zondag 27 november 2011 11:17

Haha, ik zat net een G15 plugin te installeren die een Teamspeak DLL gebruikt terwijl foobar Flat Beat aan het spelen was en toen ik mijn pagina F5'de stond jouw post bovenaan.
Typisch :+

Door Tweakers user MrOizo2005, zondag 27 november 2011 14:17

Gieltje schreef op vrijdag 25 november 2011 @ 01:29:
edit: munin 1.4.6, het is een perl mededeling dat de variabele niet aangemaakt word indien het telnet commando niet lukt. (munin-run doet hetzelfde).
Dat verklaart het denk ik wel, ik gebruik zelf munin 1.4.5 zal binnenkort eens een update doen en de foutjes eruit halen ;).
Kain schreef op zondag 27 november 2011 @ 11:17:
Haha, ik zat net een G15 plugin te installeren die een Teamspeak DLL gebruikt terwijl foobar Flat Beat aan het spelen was en toen ik mijn pagina F5'de stond jouw post bovenaan.
Typisch :+
haha toeval? :P

[Reactie gewijzigd op zondag 27 november 2011 14:17]


Reageren is niet meer mogelijk