Murder Mystery

Cloud Native: More Services, More Layers, More Challenges

Before Kubernetes

Before the era of cloud native, diagnosing and debugging systems was relatively straightforward. There was typically a monolithic application (or small number of applications) and so the search space for the problem was constrained primarily by the size of a single code base. Applications were also typically executed as a standalone process on a virtual machine. Viewing logs or attaching a remote debugger was often as simple as SSHing into the machine.

After Kubernetes

All of this changed with the adoption of microservices, containers, and Kubernetes. These new architectures and technologies enable rapid evolution of systems, but the cost is often related to increased complexity and reduced understandability. This can lead to the “whodunnit” style of bug hunting!

Locating an issue in a system composed of ten microservices now means that there are ten code bases where a potential bug could be lurking. And this isn’t counting the integrations and gaps between services where bugs can also hide. Containerizing applications and running them via Kubernetes also adds additional layers of complexity for viewing logs and debugging, and the applications can be rescheduled at a moment's notice.

Traditional
Cloud Native
Number of Services1 (or a small number)Many
Infrastructure LayersVMVM, Kubernetes, containers
Log AccessTail single processTail multiple processes, or logs shipped to centralized location
Correlation of User RequestsSingle/multiple threads in single processMultiple threads in multiple processes separate by network boundaries
DebuggingDebug locally running instances, or open ports in VM to enable remote debuggingOpen ports in firewall, VPC, K8s and containers to enable remote debugging
Traditional
Cloud Native
Number of Services
1 (or a small number)Many
Infrastructure Layers
VMVM, Kubernetes, containers
Log Access
Tail single processTail multiple processes, or logs shipped to centralized location
Correlation of User Requests
Single/multiple threads in single processMultiple threads in multiple processes separate by network boundaries
Debugging
Debug locally running instances, or open ports in VM to enable remote debuggingOpen ports in firewall, VPC, K8s and containers to enable remote debugging

Become a Cloud Native Sherlock Holmes

Being able to effectively debug services in Kubernetes is not dependent on a single tool or technique. A combination of approaches is required (and made easier by free, community tools):

  • Service Insight
  • System Visualization
  • Correlating User Requests
  • Centralized Log Management
  • Kubernetes-Native Debugging
Wheel
More

Related Resources