Tracking Kids Grades With Zabbix

There are plenty of Zabbix resources online so I won’t be rehashing a ‘how-to’. Instead, I’ll detail some of the more unique tasks I’ve managed to pull off with custom scripting.

Once I had the idea, how to setup Zabbix was pretty straightforward:

  • Create each kid as a ‘host’
  • Use discovery to auto-create the items for their class names
  • A separate script to pull the grade for a given class name
The host entry

Point the host to whichever one has the scripts to scrape the grades web site. Speaking of which, the scraping script is the most complicated part of this setup. I wrote mine in python using selenium to automate the process of logging in and navigating to the grades URL. Obviously this will only work for the one school system it’s written for, so it’s not universal. I found a feedback page for the creators of the site and suggested an API, to which they said they’ve passed to the developers. We are now 6 years later, and not only is there still to mention of an API but it looks like they’ve completely removed the feedback forum entirely. You are on your own for this part.

Once setup, I ended by dumping the grades into a CSV file:

Dance PE MS 1,87.50
Choir Intermediate MS 2,91.46
Theatre Arts MS 2,73.93
Language Arts 7,95.54
Math 7 Accel,73.23
Science 7,82.02
TX Hist and Geo,70.50

Now we can setup the discovery script, the items for discovered classes, and triggers for low grades. An added bonus: I can also setup a cron job to check for failing classes, and block internet access accordingly.

The discovery items

With the data flowing into Zabbix, now we can make it pretty in Grafana:

The goal finalized!

It’s been interesting to look at how her grades shift around over time.

Now I should go help her out with those bottom three classes.