1. Introduction


In the early days of software engineering, understanding whether an application was functioning properly was a relatively straightforward task. A single monolithic server ran on a physical machine, and developers could easily remote into that server, inspect a plain-text log file, and check CPU or memory usage using basic...