The Project
The scope of this project was two-fold, I needed to modernize our Continuous Integration process and monitor the health of our systems.
Containerize
I had many years of experience with Docker before this project started, so I didn’t need to spend a lot of time on research and discovery. I started very similar to the Azure Migration I had just completed by identifying the priority and criticality of the service, which microservices could be built with a Dockerfile, and which were going to use an image from Docker Hub.
I created an outline for the order in which services would be containerized and tested to ensure they would work alongside the services still in the legacy environment. After that came the actual migration, which went smoothly.
Continuous Integration
To better automate the process for building, I set up a custom CI process using ansible and bash to build the new images and push them to production. This laid the foundation for later when I implemented a proper CI Pipeline.
Monitor
Once I had migrated our services to Docker, it was simple to add in monitoring. I decided to use Prometheus which integrated nicely with containers, and of course the entire system ran in Docker. Using a combination of Prometheus, Grafana, Alert Manager and Blackbox Exporter, I created a robust monitoring system that is still used today.
Wrap Up
With the ability to easily deploy any service on any VM, the environment was resistant to critical system failures. Pairing that with Prometheus I was able to catch most problems before they went critical, and stopped getting calls in the middle of the night.