About uptime mongers

DNS security and infrastructure monitoring built on boring tools that work

Why "mongers"?

Perl is special to me and the name is inspired by Perl Mongers — the worldwide community of Perl enthusiasts and practitioners. A "monger" isn't just someone who uses something, but someone who cares about doing it right.

uptime mongers: people who actually care that your infrastructure stays up.

Origin Story

Built on Pyng

uptime mongers is Pyng, offered as a hosted service. Pyng is a self-hosted monitoring system I built after using NodePing for almost a decade. I was very happy with NodePing, but I needed more powerful DNS checks.

So in 2023 I wrote a replacement in 1,350 lines of Python using just the standard Python library plus a bit of boring technology (ping, drill, curl, nc) that just works. kode24 wrote about it.

Development

Two Years Later

About a year after the initial prototype, when evaluating Twisted for some other unrelated tasks, I ported Pyng to Twisted, wrote documentation and published everything. Writing documentation has taken a lot of time.

Another year later, at a conference in November 2025, a friend tried to show me his new app and it was down! "I really need to add some monitoring," he muttered. I pulled out my laptop and added a Pyng check for him right there. When the app came up again, he was paged on his phone. I asked: "Would you pay for this?" "Heck, yes," he said. He said USD 15 was a fair price. And here we are.

Design

Claude Code Design Work

I'm an IT lawyer by profession; I do system administration and backend development as a hobby — not a designer. The backend, configuration, and raw HTML are all written in Emacs. Stuff I make works well, but looks ugly. When it was time to launch uptime mongers as a service, I needed a better front-end design.

I used Claude Code (yes, "AI") to clean up the CSS and polish the design. kode24 wrote about the design process.

I've been running this in production for my own monitoring for two years. It works.

Boring Technology

Tools that have worked for decades

Technical Stack

Unix Philosophy

Pyng is written in Python and tries hard not to reinvent the wheel, but rather uses tested command-line utilities: ping for ICMP checks, drill for DNS queries, curl for HTTP requests, netcat for TCP checks. Pyng orchestrates them with Python, handling scheduling, alerting and result validation.

Small tools doing one thing well. That's it.

Platform

OpenBSD & FreeBSD

uptime mongers is developed primarily on OpenBSD and runs in production on a mix of OpenBSD and FreeBSD.

There are no containers, no exotic dependencies, and no trendy frameworks that'll be abandoned next year — just solid, boring technology that's been working for decades.

Infrastructure

Self-Hosted on Hetzner

The service is self-hosted on Hetzner infrastructure using two VMs: one runs the master, another one runs all the commands.

uptime mongers is monitored by a Pyng instance running on my main server.

Supporting Good Folks

A few non-core dependencies I'm happy to support

Push Notifications

ntfy.sh

ntfy push alerts use ntfy.sh, run by its creator. I pay for an account to support the project.

Privacy Network

Mullvad

Mullvad is used for HTTP connections from different countries.

Email

Posteo

Email runs on Posteo, so I'm reachable even if my own mail server is down, and replies land reliably.

Live Examples

Real monitoring setups running on uptime mongers

DNS Security Monitoring

DNS Security

Norwegian ccTLD (.no)

DNS security monitoring for the .no zone.

DNS Security

uptime.is Domain

DNS delegation monitoring for uptime.is.

DNS Security

posteo.com Monitoring

DNS security monitoring for an email provider.

DNS Validation

DNSSEC Edge Cases

Lookup of a domain with invalid DNSSEC. Invalid DNSSEC returns no data and no failure unless configured otherwise — this check demonstrates that behaviour.

View Check →

HTTP Monitoring & Global Access

Global Reach

Hacker News Access

Testing accessibility from different continents and via Tor.

Multi-Protocol

uptime.is Connectivity

Testing IPv4, IPv6, and Tor accessibility.

HTTP

VG News

HTTP check of the Norwegian news site VG.

View Check →
HTTP

Runbox Email

Monitoring a Norwegian email provider's web front end.

View Check →
HTTP

Posteo Email

HTTP check of a German email provider with a custom User-Agent header (they block curl's default User-Agent).

View Check →
Platform

Friend's App Monitoring

Multi-location monitoring for a web app (the one that went down at the conference).

Infrastructure & Push Monitoring

Push Checks

Basic Push Monitoring

Heartbeat monitoring with payload validation.

View Check →
Advanced Push

System Reboot Detection

Detect reboots by monitoring boot time changes via push check.

View Check →
Meta Monitoring

Push Check Heartbeat

Chicken and egg: monitoring the monitor with a heartbeat sender.

View Check →
Network

Mullvad Gateway Tests

Testing VPN gateway connectivity for the command runner node.

DNS Service

uptime mongers DNS

Monitoring uptime mongers' own DNS service (TXT record lookup).

View Check →

Data Extraction & Validation

JSON Parsing

Mullvad WireGuard Relays

Advanced JSON selector to filter active relays in Frankfurt.

View Check →
JSON Validation

ntfy.sh Health Check

Extract and validate a JSON health attribute.

View Check →
HTML Parsing

Title Validation & Monitoring

Validate that the HTML title contains "Underskog" and monitor changes.

View Check →
API Monitoring

Mastodon & APIs

Monitor API endpoints and extract version info.

Platform Health Checks

CDN

Cloudflare Status

Is Cloudflare down? Quick check of the CDN.

View Check →
Cross-Check

TXT Record Validation

Verify Tor check status via a DNS TXT record lookup.

View Check →

Test & Demo Checks

Demo

Always Up

Demo check that's always passing (note the green clock!)

View Check →
Demo

Always Down

Demo check that's always failing (note the red clock!)

View Check →
Demo

Always Timing Out

Demo check that times out and shows as down

View Check →
Demo

Degraded Status

Demo check showing degraded state (note the orange clock!)

View Check →