A Plausible Minimal Implementation
Arguably, just dumping log data to disk is one solution, and itâs what most mobile applications do (using âdebug logsâ). But most failures require correlation of events from two nodes. This means searching lots of debug logs by hand to find the ones that matter. Itâs not a very clever approach.
We want to send log data somewhere central, either immediately or opportunistically (i.e., store and forward). For now, letâs focus on immediate logging. My first idea, when it comes to sending data, is to use Zyre for this: just send log data to a group called âLOG,â and hope someone collects it.
But using Zyre to log Zyre itself is a Catch-22. Who logs the logger? What if we want a verbose log of every message sent? Do we include logging messages in that, or not? It quickly gets messy. We want a logging protocol thatâs independent of Zyreâs main ZRE protocol. The simplest approach is a PUB-SUB protocol, where all nodes publish log data on a PUB socket and a collector picks that up via a SUB socket (Figure 8-3).
Figure 8-3. Distributed log collection
The collector can, of course, run on any node. This gives us a nice range of use cases:
A passive log collector that stores log data on disk for eventual statistical analysis. This would be a PC with sufficient hard disk space for weeks or months of log data.
A collector that stores log data into ...
Get ZeroMQ now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.