YouTube-Monitoring mit check_logfiles

Anlässlich der neuen Videoserie "ConSol Monitoring Minutes" habe ich mir überlegt, wie man die Zahl der Zugriffe auf ein YouTube-Video mit einem Nagios-Plugin auslesen und mit PNP4Nagios aufzeichnen kann. Ein eigenes Plugin müsste dazu die Informationen herunterladen, Kennzahlen aus dem Resultat herausparsen, ausgeben und nicht zuletzt irgendwie auf Download-Fehler reagieren. Mit check_logfiles, einer kleinen Konfigurationsdatei und der YouTube-API ist das aber kein Problem.

So sieht die Konfigurationsdatei aus:

$prescript = 'wget';
$prescriptparams = '--quiet'.
    ' --output-document=/tmp/$CL_VIDEO$.xml'.
    ' http://gdata.youtube.com/feeds/api/videos?q=$CL_VIDEO$&v=2';
$scriptpath = "/usr/bin";
$options = "prescript,supersmartpostscript";

@searches = ({ tag => ‘$CL_VIDEO$’, logfile => ‘/tmp/$CL_VIDEO$.xml’, criticalpatterns => [‘statistics’, ‘rating’, ‘media:title’], options => "script,allyoucaneat", script => sub { my $line = $ENV{CHECK_LOGFILES_SERVICEOUTPUT}; if ($line =~ /viewCount=’(\d+)’/) { $CHECK_LOGFILES_PRIVATESTATE->{views} = $1; } if ($line =~ /numDislikes=’(\d+)’/) { $CHECK_LOGFILES_PRIVATESTATE->{dislikes} = $1; } if ($line =~ /numLikes=’(\d+)’/) { $CHECK_LOGFILES_PRIVATESTATE->{likes} = $1; } if ($line =~ /<media:title.?>(.?)</media:title>/) { $CHECK_LOGFILES_PRIVATESTATE->{title} = $1; } }, });

$postscript = sub { my $video = $ENV{CHECK_LOGFILES_VIDEO}; my $state = $CHECK_LOGFILES_PRIVATESTATE->{$video}; my $title = exists $state->{title} ? $state->{title} : "(unknown)"; my $views = exists $state->{views} ? $state->{views} : 0; my $likes = exists $state->{likes} ? $state->{likes} : 0; my $dislikes = exists $state->{dislikes} ? $state->{dislikes} : 0; my $popularity = ($likes + $dislikes) ? $likes * 100 / ($likes + $dislikes) : 100; printf "%s was viewed %d times | %s=%d popularity=%.02f%%\n", $title, $views, $video, $views, $popularity; unlink ‘/tmp/’.$video.’.xml’; return 0; };

Und so ruft man’s dann auf:

$ check_logfiles --config youtube.cfg --macro CL_VIDEO=1fk0V7M
OMD im Überblick - ConSol Monitoring Minutes 1/13 was viewed 77 times | 1J0V7M=77 popularity=100.00%


<br />Das ist noch ein bisschen mager, bei bekannteren Videos sehen die Zahlen schon imposanter aus. &quot;Gangnam Style&quot; hätte ich gern als Beispiel gezeigt, aber da hat die GEMA einen Riegel vorgeschoben. Das derzeit populärste Video bei YouTube ist aber auch nicht schlecht.

<div class="content"><!-- Generator: GNU source-highlight 3.1.7

by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite –>

$ check_logfiles –config youtube.cfg –macro CL_VIDEO=Gng3sPiJdzA
The Ultimate Girls Fail Compilation 2012 was viewed 67845545 times | Gng3sPiJdzA=67845545 popularity=86.39%


Mir ging es einfach nur darum, den Anstieg der Views aufzuzeichnen. Zwecks Alarmierung Schwellwerte zu setzen wäre aber auch kein Problem. Man erweitert dann das Postscript im Konfigfile folgendermassen:

<div class="content"><!-- Generator: GNU source-highlight 3.1.7

by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite –>

  printf "%s was viewed %d times | %s=%d popularity=%.02f%%\n",
$title, $views, $video, $views, $popularity;
if ($ENV{CHECK_LOGFILES_CRITICAL} &&
$views > $ENV{CHECK_LOGFILES_CRITICAL}) {
return 2;
} elsif ($ENV{CHECK_LOGFILES_WARNING} &&
$views > $ENV{CHECK_LOGFILES_WARNING}) {
return 1;
} else {
return 0;
}
};