NERDBUDE

[ code. keyboards. terminals. cyber. ]

[HOWTO] [WHOAMI] [PODCAST] [ENGLISH]

Podstats

Der ein oder andere hat ja mitbekommen, dass es den Click! Clack! Hack! Podcast gibt. Unbedingt abonieren, wenn ihr das noch nicht gemacht habt.
Wenn man podcastet will man natürlich auch wissen, ob und wie oft man gehört wird.
Nun gibt es die Möglichkeit Wordpress oder ähnliche CMS zu verwenden die einem in Verbindung mit Podlove-Plugins alles fertig zur Verfügung stellen.
Naja - wer die Nerdbude kennt, dem ist klar, dass das nicht in Frage kommt.
(Podlove ist natürlich trotzdem unterstützenswert - keine Frage)

Ich habe auf Github ein PODCAST REPO begonnen.
Dort findet sich alles was man zum DIY Podcasten braucht.
Unteranderem auch eine Möglichkeit Statistiken zu bekommen.

Übersicht

Um Statistiken (Downloads, Player, etc.) von seinem Podcast zu bekommen, benutzen Wordpress und Co. Datenbanken.
Kann man machen. Muss man aber nicht. Ich will hier eigentlich alles so klein halten wie möglich, also kein Wordpress und keine DB.
Was also steht zur Verfügung um an Statistiken zu kommen?
Wenn der Webspace-Provider schon Logs schreibt, dann nutzen wir die doch auch.
(Vorab: Die IP-Adressen werden anonymisiert.)
Zusätzlich braucht es für Visualisierung noch separate Software in Form von GoAccess.

Log-Files

Der Provider muss, dank Gesetzeslage, Access-Logs schreiben.
In diesen Logs befinden sich natürlich auch die Zugriffe auf die einzelnen Podcast-Episoden.
Man muss sie nur filtern.
So sieht ein Entry im Access-Log aus den man haben will:

anon - - [04/Mar/2021:23:23:00 +0100] "GET /podcast/audio/CCH_001.mp3 HTTP/2.0" 200 11376985 "-" "Pocket Casts"

Der Aufbau:
[IP] - - [DATE:TIME] [FILE] [HTTP CODE] [FILESIZE] [CLIENT]

Der Aufbau wird später noch wichtig zu Analyse.
Nun befinden sich im Logfile aber auch noch andere Zugriffe die für den Podcast nicht relevant sind.
Dazu hab ich ein kleines Shell script im Repository, dass die Logfile aufsplittet.

Zuerst werden nur die Einträge rausgefiltert die sich auf des Verzeichnis mit den Episoden beziehen:

BASH
grep "/podcast/audio" $newlog > filtered.log 


Hier werden per grep alle Einträge die "/podcast/audio" enthalten, aus der Logfile in eine temporäre filtered.log geschrieben.
Dadurch bekommen wir alle Einträge die sich auf die Episoden beziehen und werfen den Rest weg.
Danach wird nach Episoden gefiltert, sprich alle Einträge für jede einzelne Episode.

BASH
grep "GET /podcast/audio/CCH_000.mp3" filtered.log > f000.log


Hier holt grep die Lines aus der filtered.log die, die Episode enthält und schreibt sie in eine neue temporäre Log-File die episodenspeziefisch ist (f000.log).
Das wird nun für jede Episode gemacht, so das man einen Log Katalog bekommt mit allen Episoden (f000.log, f001.log usw.).
Weiter gehts mit den Downloads.

BASH
  grep "200 234223" f000.log > fs000.log
  


Hier greift sich grep alle Lines mit dem HTTP Code 200 (für Download) und die komplette Dateigröße in Byte (233223) aus dem File "f000.log" und schreibt sie wiederum in die temoräre "fs000.log"
Damit bekommen wir nur die Einträge für abgeschlossene Downloads.
Nun wird der Inhalt der temporären "fs000.log" an die episode0.log angefügt:

BASH
  cat fs000.log episode0.log > episode0.log
  


Cat liest den Inhalt aus "fs000.log" und "episodeo.log" und schreibt beide Inhalte in "episode0.log". So bekommt man die gesamten Log Einträge seit anbeginn.
Zum Schluss fügen wir noch alle verfügbaren Episoden-Logs zu einem Master zusammen:


BASH
    cat fs000.log fs001.log fs002.log > fsmaster.log
    cat master.log fsmaster.log > final_master.log
  


Hier auch wieder alle temporären Episoden-Logs (fs000.log, fs001.log etc) werden in eine temporäre Master-Log-File geschrieben (fsmaster.log)
und anschliesend in die final_master.log geschrieben, so das man eine Log-File hat in der alle Episoden-Downloads drin sind.

Anschließend werden noch die temporären log-files gelöscht, da wir die nicht mehr brauchen.

Wem das alles zu viel Aufwand ist, benutzt die "sortlog.sh" im Repository.

An dieser Stelle sind die Log-Files fertig.


Dashboard

Nun sehen Statistiken besser aus, wenn man sie in einem schönen Dashboard hat.
Es gibt Möglichkeiten sich das ganze mit Grafana und ähnlichen Tools darstellen zu lassen, allerdings hängt auch auch eine DB dran und das ist für meinen kleinen Podcast mit Kanonen auf Spatzen geschossen.
Deswegen bemühen wir ein Tool namens "GoAccess" - ein kleiner feiner Log-File-Viewer der vorrangig im Terminal läuft aber auch die Möglichkeit eines HTML-Dashboards zur Verfügung stellt.
Damit GoAccess mit den Log-Files umgehen kann, müssen Parameter mitgegeben werden. In meinem Fall (Beispiel siehe oben) sehe das so aus:

BASH
goaccess master.log --log-format='%h %^[%d:%t %^] "%r" %s %D "%u"' --date-format=%d/%b/%Y --time-format=%T --no-ip-validation


Das startet GoAccess im Terminal mit der master.log.
Das HTML Dashboard lässt sich mit den folgenden Parametern starten:


BASH
goaccess master.log --log-format='%h %^[%d:%t %^] "%r" %s %D "%u"' --date-format=%d/%b/%Y --time-format=%T --no-ip-validation -o /home/ph_0x17/dashboard.html --real-time-html


Nun sieht man im Terminal, dass ein kleiner Dashboard-Server gestartet wird.
Unter: /home/ph_0x17/dashboard.html ist das Dashboard per Browser erreichbar.
Taddaaaa! Statistiken!


Viel Spaß damit.



//EOF