Een “kritische” blogpost schrijven over een open source dashboard omgeving waar veel tijd en energie in gestopt wordt en gratis aan mij beschikbaar wordt gesteld, dat voelt natuurlijk als het spreekwoordelijk gegeven paard in de bek kijken. Zie dit dus dan ook niet als een blogpost over waarom Metabase slecht zou zijn of waarom jij er niets aan zou hebben. Ik beschrijf uitsluitend waarom hij voor onze pilot/demonstrator niet de geschikte oplossing is.
Hiernaast zie je de afbeelding van de infrastructuur die we daarbij hadden, met een omgeving die leermaterialen uitlevert (Moodle), leermaterialen die deels door Xerte geleverd worden, data die via xAPI in een Learning Locker learning record store (LRS) worden opgeslagen en waarbij Redash gebruikt wordt als tool om daar dashboards voor docenten of studenten bij te maken.
Redash kan daarbij gebruik maken van de aggregation API van Learning Locker, maar het doorsturen van de queries gaat nogal ingewikkeld en via onleesbare, lange URLs. Daar komt bij dat een aantal van de visualisaties die ik zou willen maken niet in Redash beschikbaar zijn. Het is mogelijk om zelf aanvullende visualisaties te ontwikkelen voor Redash, maar dat gaat qua complexiteit ruim boven de technische zaken die we in de pilot kunnen en willen realiseren.
Deze blogpost is uitsluitend bedoeld om voor mezelf op een rijtje te zetten waarom ook Metabase niet de problemen oplost waar we met Redash tegenaan lopen. Niet meer dan dat.
Metabase installatie en eerste indrukken
Installeren van Metabase zodat je ermee aan de slag kunt is relatief eenvoudig als je al Docker gebruikt, de instructies staan hier. Er zijn veel overeenkomsten tussen Metabase en Redash, een van de coole features is toch wel de X-Ray optie van Metabase.
Daarbij kun je van elke tabel in je database een automatisch gegenereerde set grafieken en statistieken te zien krijgen. Daar kun je dan ook weer op inzoomen, het ingezoomde resultaat vergelijken met de rest van de data in de tabel, het resultaat opslaan als een nieuw dashboard waarna je dat dashboard weer kunt tweaken naar je eigen wensen. Kortom, als je vragen hebt over je data, niet precies weet welke queries daar antwoord op kunnen geven, gewoon gevoel wilt krijgen voor de data, dan werkt dit heel erg goed!
Het uiteindelijke dashboard was overigens wel zo complex dat mijn Metabase installatie het er heel erg zwaar mee kreeg, maar dat terzijde, het resultaat leverde overzichten op die ik waarschijnlijk zelf nooit had kunnen samenstellen. Heel veel van de grafieken op dat dashboard waren niet zinvol (het aantal statements uitgezet naar de waarde voor de xAPI versie die aan een statement gekoppeld is bv), het is dus ook meer een “alles wat je zelf niet wist dat je mogelijk wilde weten over…” overzicht. Ik was begonnen aan het verwijderen van “niet nuttige” grafieken toen ik er uiteindelijk achter kwam waarom het scherm zo zwaar was: het is een enorm overzicht van grafieken op tijd, totaal grafieken en tabellen.
Metabase verbinden met Learning Locker – poging 1
Redash heeft de mogelijkheid om gebruik te maken van de HTTP/JSON aggregatie API van Learning Locker. Het is een beetje omslachtig, je met een Mongo DB query in de vorm van een JSON statement omzetten naar een onleesbare URL en die dan doorgeven als bron voor een query. Het resultaat wordt dan zo goed en zo kwaad als kan in een tabel gestopt in Redash.
Metabase heeft die mogelijkheid niet. Via de beschrijving van dit probleem op Github kwam ik bij de tip om ClickHouse te gebruiken (het installeren van het prototype van de HTTP-connector die daar genoemd wordt ging mijn kennis van Metabase te boven).
Wil je de conclusie alleen weten: het werkt niet!
Daar achter komen kostte een beetje meer tijd: er is een connector/driver om clickhouse aan Metabase te koppelen. Dit is niet standaard geïnstalleerd, maar is hier te vinden. Hoewel je hem niet nodig hebt moet je wél de Clickhouse server installeren. Dat kan ook via Docker. Metabase heeft die server alleen nodig voor het maken van de initiële verbinding, ook als je daarna geen data uit de databases in ClickHouse gebruikt.
Installeren kan via:
sudo docker run -d -p 9090:9000 -p 8123:8123 --name some-clickhouse-server --ulimit nofile=262144:262144 yandex/clickhouse-server
Staren van Metabase met verwijzing naar de plugin, een persistent database buiten de Docker image kan dan via:
sudo docker run -d -p 3030:3000 \
-v /volume1/docker/metabase/metabase-data:/metabase-data \
-v /volume1/docker/metabase/plugins:/plugins \
-e "MB_DB_FILE=/metabase-data/metabase.db" \
--name metabase metabase/metabase
Je kunt dan een nieuw databasetype ClickHouse toevoegen, als naam heb ik ClickHouse gekozen, de database name kun je leeg laten, Host was het IP-adres van de Dockerserver voor de clickhouse-server, poort= “8123”, Database gebruikernaam is “default”. Maar als je dan een selectstatement wilt toevoegen volgens het voorbeeld dat je hier ziet dan blijkt dat de url() bron van ClickHouse niet de mogelijkheid om ook authenticatie-informatie mee te geven (iets wat je bij Redash wél kunt doen) en dan krijgt Metabase dus geen data terug van Learning Locker.
Metabase verbinden met Learning Locker – poging 2
Natuurlijk was ik niet voor één gat te vangen. Metabase heeft ook rechtstreekse ondersteuning voor de database waar Learning Locker gebruik van maakt: MongoDB. En als je er voor zorgt dat de Metabase docker image gebruik maakt van hetzelfde netwerk als de MongoDB server die Learning Locker gebruikt, dan kun je die databaseverbinding rechtstreeks toevoegen. Voor het Host-ip adres moet je even in Docker kijken, de databasenaam is learninglocker_v2 en voor het overige hoef je niets toe te voegen.
Deze rechtstreeks verbinding vergt wel enige discipline! Het wordt als optie genoemd in de Learning Locker documentaties, maar je hebt nu rechtstreeks toegang tot alle tabellen van Learning Locker. Het heeft twee belangrijke voordelen: Metabase kan de X-Ray functionaliteit toepassen op de tabellen en je dus helpen met het maken van overzichten én je kunt queries maken die leesbaar zijn.
Zoals je hierboven in de afbeelding kunt zien, gebruik je dus geen SQL maar JSON statements om de queries voor MongoDB samen te stellen. Helaas blijkt dit toch nog allemaal heel ingewikkeld en moeizaam met veel debuggen (lees: het gaat vaak fout en dan ben je op zoek naar wat niet klopte in je JSON statement).
Terug naar Redash en MongoDB
Met de kennis van Metabase op zak, toch weer terug naar Redash en daar ook de rechtstreekse MongoDB koppeling opgezet. Hier met de connection string zoals bij de setup van Learning Locker: mongodb://172.24.0.11:27017/learninglocker_v2
Het IP-adres is het interne Docker IP-adres, daarnaast zijn MongoDB en Redash aan hetzelfde Docker-netwerk gekoppeld.
Het voordeel ook hier is dat je nu bij het maken van de queries de verschillende MongoDB tabellen kunt zien, dat je de JSON queries netjes kunt opmaken en direct kunt testen en aanpassen.
Blijft de uitdaging dat het gewoon niet gemakkelijk is om ze goed op te bouwen, zeker niet als je het vergelijkt met de mooie grafische editor dit je bij Metabase hebt voor SQL-tabellen:
Daar kun je tabellen grafisch koppelen, filteren, sorteren etc.
Openstaande wensen
Na deze testen staan nog steeds een aantal belangrijke wensen open:
- Gebrek aan de gewenste/benodigde visualisaties: zoals bv de visualisatie zoals wél aanwezig in het dashboard van Xerte en de betaalde versie van Learning Locker waarbij je kunt zien of iemand een activity voltooid heeft of niet.
Gekoppelde visualisaties, waarbij je bv kunt inzoomen, vanuit de visualisatie kunt kiezen om snel alles van één student of juist alle studenten maar dan voor één interactie te zien is in Redash ingewikkeld, bij Metabase lijkt het te kunnen, maar heb ik het voor handgemaakte dashboards ook nog niet gezien. - Eenvoudigere verwerking van de Learning Locker / MongoDB data is daarnaast ook welkom. Ik had al even gekeken naar MongoDB Compass, maar dat is een lokale installatie en die kon geen verbinding krijgen met mijn MongoDB installatie op Learning Locker. Toen dat wel lukte bleek dat de syntax die Compass oplevert wél gelijk is aan die in Metabase, maar net weer een beetje afwijkt van Redash. Zo fijn al die standaarden.
Mongo-Express is een alternatief dat in Docker draait maar levensgevaarlijk is met al die grote “verwijder” knoppen. En qua ondersteuning voor het maken van queries leverde het geen voordeel op.
Voorzichtige conclusie is wel dat op basis van de open source / vrij te gebruiken oplossingen tot nu toe, maatwerk bij een dashboard haast noodzakelijk lijkt.
Ook Metabase is het net niet….maar wel weer leerzaam! https://t.co/Rd5oHQUIt7
Ken je de tooling van Q-Sense? Daar werk ik nu mee samen bij de OU. Niet open source, wellicht wel bruikbaan voor jullie: https://www.q-sense.net/
Niet bruikbaar in deze context / voor dit project: niet alleen is hun product niet open source, meer dan een YouTube filmpje met een soort “dit is het idee achter ons product” is er aan info niet beschikbaar.Natuurlijk zullen ze ongetwijfeld bereid zijn om me meer te vertellen als ik ze mail/benader, maar dat is voor nu dan eigenlijk al een paar stappen teveel werk qua verzamelen van info.Ben dus wel benieuwd hoe de OU ze gevonden zou hebben als ze niet in Heerlen hadden gezeten.