We have come a long way in the world of computing. From having computers that fill up entire rooms or buildings while performing relatively basic actions to having complex machines that literally fit in our pockets and palms, this advancement has been nothing short of breathless. With an emphasis placed on speed and efficiency, computers and the applications running on these computers have been tailored to ensure optimal use of resources, be these resources hardware or software resources. These optimization efforts, over time, have gradually pushed us to the cutting edge technologies we have today, and although this is more physically evident in computer hardware transition over time, it is perfectly mirrored in modern software development methodology.
Containers are an embodiment of this modern software development methodology. Their self contained nature makes resource optimization a breeze, allowing for fractions of applications or entire applications to coexist independent of each other on a single host. Their host-independence also allows for an unparalleled flexibility for containerized applications, this is because an application running in a “container” can literally be “picked up” from one host and dropped in another host with a different underlying operating system, and the application will continue to work flawlessly. But, as much as containers are revolutionary technology, we still have to monitor our applications running inside them in order to better fine tune their performance, or troubleshoot errors before or when they occur.
In this article, we will give an introduction into container monitoring, focusing specifically on Docker Monitoring as Docker containers account for the lion's share of the container ecosystem. This article is an introductory level article - for more detail check out: Docker Monitoring Tools, How to build optimal Docker Images and Monitoring Docker Containers using cAdvisor.
MetricFire is a monitoring software built on open source Prometheus, Graphite, and Grafana. We directly work with monitoring Docker containers on a daily basis. If you're looking for a partner to help monitor your Docker containers, book a demo with the MetricFire team. We're here to help! You can also get on to the MetricFire platform by signing up for a free trial, and try the platform out for yourself!
Containers and Docker
A container represents an independent piece of software that houses application code alongside all its dependencies as a single unit. This single unit is a light-weight, isolated, self contained environment, which means the application can run quickly and reliably, independent of the computing environment that houses it. Containerized software is achieved when independent parts of an application, or entire applications, are packaged in a self contained unit (a “container”) alongside everything they need to run and maintain successful execution.
The container already has everything it needs within itself, and as such, does not rely on the host operating system for any of these resources. This abstraction allows containers to run virtually anywhere, provided there is a container engine/runtime in place.
Today, there are a huge variety of container runtimes from which to choose from, but by far the most popular and most widely adopted is Docker. Docker, simply put, is an open source platform for developing, shipping, and running containers. Docker allows developers to isolate and package application code and their dependencies into containers, and deploy these containers anywhere which has a Docker Engine running. This could be in a local environment, in the cloud, or anything in between.
The applications that can be run on these containers can range from simple microservices, to independent parts of applications, to entire applications - the possibilities are literally endless.
However, as with all software applications, applications running inside containers also need to be monitored. Monitoring software applications is essential to keeping these applications healthy, ensuring proper resource optimization and improving overall performance. This may be done through the collection of metrics that tell you how well or how poorly your application is performing, or application logs providing details of everything happening in your application at any given time.
This is fairly straightforward with traditional software applications, but with the extra abstraction involved with containers, one might assume that it is more difficult to monitor containerized applications.
This assumption, however, is definitely not the case when it comes to monitoring Docker containers. Docker provides a wide array of monitoring options out of the box, either using its Docker Stats api or allowing for the installation of monitoring agents into running containers, all of which provide monitoring capabilities with minimal effort. Also, Docker’s sheer popularity has fueled integration efforts with most major monitoring and alerting software.
Today, major monitoring systems like Prometheus, cAdvisor, ScoutAPM, Datadog, Sysdig and MetricFire all integrate seamlessly with Docker and make monitoring Docker containers a breeze. As such, it combines the best of some of the aforementioned monitoring systems as managed services, in a single cloud based application, taking your monitoring capabilities to whole new heights.
All these options pose another problem, choice. How do you choose what’s best for your docker monitoring use case? This article was meant to provide an introduction into the world of Docker Monitoring. To answer the problem of choice, checkout our article Docker Monitoring Tools.
Monitoring Docker containers can be easy if you choose the right tools. MetricFire provides easy integrations with Docker so you can manage your Docker containers. To find out more about monitoring Docker, get onto a demo with the MetricFire team and we'll help you set up your Docker monitoring. You can also sign up for a free trial and try out Hosted Prometheus and Grafana on your own!