In the previous post, we talked about running Nagios container on Raspberry Pi for the first time.Nagios is a free and open source monitoring and alerting service which basically collects the statistics of your server using agents like nrpe, check_mk or using SNMP and sends the alert if the metric value is above the predefined threshold. It is a great tool for monitoring the nodes or monolithic application but with the advent of the 'microservices' architecture and Docker, monitoring the small piece of services running across the cluster becomes very important.With that also grows the need to monitor these services around the clock, to maintain the healthy functioning of the application.
One of the most talked-about monitoring tools are Prometheus & Grafana. Prometheus is an open-source systems monitoring and alerting toolkit written in Go. It is a next-generation monitoring system and well appreciated by Docker Core Engineering Team. It’s a service especially well designed for containers and provides perspective about the data intensiveness of this new age and how even Internet scale companies have had to adapt.
On the other hand, Grafana can be rightly called the face of Prometheus. It is also an open-source, general purpose dashboard and graph composer, which runs as a web application. It supports graphite, influxdb or opentsdb as backends. While Prometheus exposes some of its internals like settings and the stats it gathers via basic web front-ends, it delegates the heavy lifting of proper graphical displays and dashboards to Grafana. For anyone who want to collect metrics from the development environment to be graphed and measured, Prometheus as time series store and Grafana as a visualization tool is the perfect solution.
What's unique about Prometheus?
Prometheus is a self-hosted set of tools which collectively provide metrics storage, aggregation, visualization and alerting. Usually most of the available monitoring tools are push based, i.e. agents on the monitored servers talk to a central server (or set of servers) and send out their metrics. Prometheus is little different on this aspect - It is a pull based server which expects monitored servers to provide a web interface from which it can scrape data. This is a unique characteristic of Prometheus.
The main features of Prometheus can be summed below:
- Decentralized architecture
- Scalable data collection
- Powerful Query language (leverages the data model for meaningful alerting (including easy silencing) and graphing (for dashboards and for ad-hoc exploration).
- A multi-dimensional data model.( data can be sliced and diced at will, along dimensions like instance, service, endpoint, and method)
- No reliance on distributed storage; single server nodes are autonomous.
- Time series collection happens via a pull model over HTTP.
- Pushing time series is supported via an intermediary gateway.
- Targets are discovered via service discovery or static configuration.
- Multiple modes of graphing and dashboard support.
You can deep dive more into its architecture at https://prometheus.io/docs/introduction/overview/#architecture.
I was in need of lightweight monitoring tool like Prometheus and Fancy UI like Grafana for my Raspberry Pi which I can spin up as Docker container in few seconds and then grow /spread it across the cluster primarily to test it for Docker 1.12 Swarm Mode. Unfortunately, I didn't find any Docker image for Prometheus. I decided to build one for myself to explore it on Raspberry Pi 3 box.
After spending considerable amount of time on Pi box, I was able to build the first Prometheus Docker image and pushed it to Dockerhub. In case you are interested, check out my github page : https://github.com/ajeetraina/prometheus-armv7 to build and run your own Prometheus container.
[Thanks to Alex Ellis, #Docker Captain for reviewing this container and cleaning the Dockerfile.]
Running Prometheus & Grafana Docker Image on Raspberry Pi
Follow the below command to spin up Prometheus container on the fly:
Luckily, there was already a Grafana ARM image available in Dockerhub which I spent no minute to spin up easily as shown below:
You can also use docker-compose to bring up both the container in a single shot as shown:
pi@raspberrypi:~/testingPi $ cat docker-compose.yml
Ensure that you have either sample or your own customized prometheus.yml file under / directory to run this container.
Just one command and you are ready to spin up both the containers as shown below:
That's it. Browse to http://<ipaddress>:9090 to check out the Prometheus UI.
Also, Browse to http://<ipaddress>:3000 to open up fancy Grafana UI as shown below. Supply admin/collabnix as credentials to enter into Grafana UI.
Importing Prometheus Data into Grafana
Once you login into Grafana UI, click on Data Sources followed by "Add Data Source" button. You will find the below screen:
Next, Let's import the prometheus into Grafana dashboard:
I firmly believe that the newly built Prometheus container is sure to help developers to monitor their microservice application on top of Raspberry Pi box.In the next post, I will talk about the other available data sources and how it integrates with Prometheus and Grafana as a monitoring stack in detail.