mon is a monitoring application that helps me achieve observability in my other apps. It also serves to demonstrate that concept of observability, which is a key focus area I always address in solution architectures.

My server hosting provider collects a few technical metrics:

  • Number of requests to the server (as a whole and per subdomain)
  • List of requested URLs and the returned HTTP status
  • Disk usage

While not entirely irrelevant, this data doesn’t tell me much about what’s going on the the apps running on the server. The rare HTTP errors returned don’t reveal errors in the apps, just connectivity errors and unrecognized URLs. And the data doesn’t reveal how any of the apps perform.

Therefore, I’m retrofitting my apps with observability features. They measure key activities as metrics and write them to the server along with log entries that tell me more about the measures activities. This helps me correlate the otherwise incomprehensible request logs with actual activity that I can trace to corresponding components in code segments in my apps.

Captured metrics and log entries contain no sensitive information about who’s using the apps, or from where, and no details about any information that passes through the apps. Only anonymous information like data package sizes and elapsed time so I can gain insights that enable me to fine-tune my designs.

Avoiding sensitive information in metrics and logs also means I can make mon available as any other public app, which makes it more easily available – and available to you, so you can see what is logged if you use any of my other apps.