Monitoring service

Icinga Prometheus Zabbix
Category Time series (TSDB ) optimized for handling time series data, arrays of numbers indexed by time (a datetime). Functional database model, or the functional model for short, is different from but complementary to, the relational model.
Fully open-source Yes Yes Yes
License GPL 2.0 Apache 2.0 GPL 2.0
Installation Precompiled binaries available. Distribution packages available for Debian, CentOS, RHEL, Oracle Linux, and Ubuntu
Database Own database optimized for time series data RDBMS (MySQL, PostgreSQL, Oracle, sqlite)
Discovery DNS, consul, kubernetes, etc Agents on nodes, snmp, etc.
Agent platform support FreeBSD, HP-UX, Linux, NetBSD, OpenBSD, Solaris, Windows
Data-collection Pull/Push (preferable pull) Pull/Push (preferable pull)
Communication protocol HTTP TCP
Admin REST API Yes No Yes
Admin UI Yes (plugin) No Yes
Monitoring UI Yes No Yes
Analytics UI Yes (plugin) Yes, Grafana Yes
Analytics API Yes Yes
Language(s) C++, PHP Go C, PHP
Notifications UI, e-mail, SMS Email, PagerDuty, Slack UI, e-mail,
Query language own functional expression language SQL
Passive moitoring (agentless) yes yes
Active monitoring (agent) yes yes yes
Linux system monitoring yes yes yes
Windows system monitoring yes yes
Server load yes yes yes
Network I/O yes yes yes
Disk I/O yes yes yes
Web service monitoring yes yes
Database service monitoring yes yes

Sources

Icinga

Prometheus

Zabbix

Conclusions

Zabbix

Pros:

  • Open source https://zabbix.org/wiki/Get_Zabbix.
  • Web interface for configuration.
  • Alerts in e-mail and/or SMS.
  • Native agent available on Windows, OS X, Linux, FreeBSD, etc.
  • A lot of monitoring scripts. https://github.com/monitoringartist/zabbix-community-repos

Cons:

  • Documentation (not good). Hard find details (in opposite Prometheus documentation).
  • Uses a relation databases for store time series data (like MySQL). DB schema https://www.zabbix.org/wiki/File:Zabbix_db_schema-2.4.3-MySQL.svg.

Prometheus

Pros:

  • Open source https://github.com/prometheus/prometheus.
  • Time series DB (performance optimized for time series data).
  • Easy setup: single binary just drop on server .
  • Alerting in Email, PagerDuty, Slack, etc. and very flexible rules.
  • A lot of exporters https://prometheus.io/docs/instrumenting/exporters.
  • Configuration files that make setup by Chef or Ansible very flexible.
  • Visualization works by modules, can choose Graphana, PromDash or write own working with query language.

Cons:

  • Do not have web interface for configuration. But that make easy setup by Chef or Ansible.

Based on pros and cons of both tool and target that was set by story/research “Study what monitoring service to be used”, recommendation to use Prometheus as modern tool with good architecture (modules), great performance and great documentation.

Prometheus is a open source monitoring system that includes built-in and active scraping, storing, querying, graphing, and alerting based on time series data.

Architecture: Prometheus servers run independently of each other and only rely on their local storage for their core functionality: scraping, rule processing, and alerting.

Data model: Most important aspects is its multi-dimensional data model (OpenTSDB) along with the accompanying query language. This allows easy filtering, grouping, and matching by these labels via in the query language.

Scalable: Hundreds of thousands of samples per second. Millions of time series. On a single monitoring server (running many servers is easy too).

Storage: Prometheus own database optimized for time series data that can allow work with millions of time series.

Discovery: targets are discovered via service discovery or static configuration (DNS, consul, kubernetes, etc.).

Visualization: multiple modes of graphing and dashboarding support (Graphana, PromDash, etc.).

Alerting: Separated into two parts. Alerting rules in Prometheus servers send alerts to an Alertmanager. The Alertmanager then manages those alerts, including silencing, inhibition, aggregation and sending out notifications via methods such as email, PagerDuty and Slack.

Client libraries: Go, Java, Ruby, Python, Node.js, etc.