# Check MK

Checkmk (in origine Check MK) è un software sviluppato nei linguaggi Python e C++ per il monitoraggio di infrastrutture informatiche. È utilizzato per il controllo di server, applicazioni, reti, infrastrutture cloud (pubbliche, private, ibride), container, memorie, database e sensori ambientali.
Checkmk è disponibile in quattro edizioni: un'edizione open source (Checkmk Raw Edition, CRE), un'edizione per imprese (Checkmk Enterprise Edition, CEE), un'edizione per imprese dotata di funzionalità cloud avanzate (Checkmk Cloud Edition, CCE), un'edizione commerciale per i fornitori di servizi gestiti (Checkmk Managed Services Edition, CME). Vengono inoltre offerti dispositivi fisici con vari dimensionamenti, in aggiunta ad un device virtuale, per semplificare l'amministrazione del sistema operativo sottostante attraverso un'interfaccia utente grafica e consentire soluzioni ad elevata disponibilità.
Gli agenti utilizzati da Checkmk per collezionare i dati sono disponibili per 11 piattaforme, incluso Windows.

## Storia

Checkmk nasce nel 2008 come agent sostitutivo inforcato da Inetd, e viene pubblicato nell'aprile 2009 sotto licenza GPL. Inizialmente basato su Nagios, è stato ampliato con una serie di nuovi componenti. L'edizione open source (Checkmk Raw Edition) continua a basarsi sul "motore" Nagios, e lo integra con una serie di componenti open source fornendo un sistema completo di monitoraggio.
Nel corso degli anni le edizioni commerciali di Checkmk si sono evolute in un vero e proprio sistema di monitoraggio autonomo - che ha via via sostituito tutti i componenti essenziali di Nagios con i propri - incluso il "motore" di monitoraggio che ora non è più Nagios ma CMC (Checkmk Micro Core). La maggior parte degli sviluppi per le edizioni commerciali, ed in particolare tutti i plug-in, sono disponibili anche nell’edizione Checkmk Raw.
Mentre in passato il software era stato progettato per il monitoraggio di ambienti on-premise di grandi dimensioni ed eterogenei, a partire dalla versione 1.5 (1.5p12) è inoltre supportato il monitoraggio dei servizi AWS, Azure, Docker e Kubernetes.
Checkmk è stato sviluppato da Checkmk GmbH a Monaco di Baviera, in Germania, che fino al 16 aprile 2019 operava con il nome di Mathias Kettner GmbH. Insieme alla modifica del nome dell'azienda, anche il nome del prodotto "Check MK" è stato cambiato in "Checkmk". Successivamente, il 14 aprile 2023, l'azienda è stata rinominata in Checkmk GmbH.
Checkmk GmbH segue un modello di business di tipo open core. L'edizione open source del software è disponibile con diverse licenze open source, principalmente GPLv2, mentre gran parte delle edizioni commerciali sono sotto licenza "Checkmk Enterprise License".

## Il prodotto

Checkmk combina tre tipi di monitoraggio IT:
* monitoraggio basato sullo stato (status-based), che tramite valori-soglia registra la “salute" di un dispositivo o di un'applicazione;
* monitoraggio basato su metriche, che consente la registrazione e l'analisi di grafici di serie temporali. Per la CEE è disponibile sia un sistema grafico basato su HTML5 sia un'integrazione con Grafana.
* monitoraggio basato su log e su eventi, in cui gli eventi chiave possono essere filtrati scatenando azioni di diverso tipo in base alle proprie esigenze.
Al fine di garantire un monitoraggio molto ampio, Checkmk attualmente utilizza oltre 1700 plug-in disponibili in tutte le edizioni con licenza GPLv2. Questi plug-in vengono mantenuti come parte del prodotto e regolarmente integrati con altri programmi o estensioni aggiuntive. È anche possibile collegare plug-in Nagios legacy esistenti.
Per semplificare l'installazione ed il funzionamento, tutti i componenti di Checkmk vengono già forniti in modo completamente integrato con il sistema. Una configurazione 1: n basata su regole ed un elevato grado di automazione accelerano significativamente i flussi di lavoro. Ciò comprende:
* rilevamento automatico di host (ove applicabile);
* rilevamento automatico di servizi
* configurazione automatizzata dei plug-in tramite valori-soglia e regole preconfigurate;
* aggiornamento automatico degli agenti (una funzionalità CEE);
* configurazione automatica e dinamica che consente il monitoraggio di servizi volatili con una durata di pochi secondi, ad esempio nell'ambiente Kubernetes (a partire da CEE v1.6)
* rilevamento automatico di tag ed etichette da fonti come Kubernetes, AWS e Azure (a partire da CEE v1.6).
Inoltre, sono disponibili playbook per l'uso di strumenti di configurazione e distribuzione come Ansible o Salt.
Checkmk viene spesso utilizzato in ambienti molto grandi con un elevato numero di siti da monitorare (ne è un esempio Faurecia, con le sue 300 filiali) o molti dispositivi (ad esempio Edeka che ne monitora più di 100.000). Ciò è possibile perché il microcore di Checkmk consuma molte meno risorse della CPU rispetto a Nagios, ed offre quindi prestazioni significativamente più elevate sullo stesso hardware. Inoltre, i dati non persistenti vengono archiviati nella memoria RAM, migliorando notevolmente i tempi di accesso.

## Componenti
### Il Monitoring Core ("Checkmk Microcore - CMC")

Le edizioni commerciali di Checkmk utilizzano il proprio core di monitoraggio, scritto in C ++. Questo fornisce prestazioni molto più elevate rispetto al core Nagios. Inoltre, a partire dalla versione 1.6 consente la registrazione dinamica di oggetti con una breve durata, come le classi container. Ciò è possibile perché, diversamente dal core Nagios, Checkmk Microcore non richiede un riavvio quando si apportano modifiche alla configurazione. La versione open source "Checkmk Raw Edition" attualmente utilizza ancora il core Nagios.

### Configurazione e controllo

Il software offre il rilevamento automatico dei servizi e la generazione della relativa configurazione, utilizzando un proprio metodo per l'esecuzione dei controlli. Durante il periodo di osservazione ogni host viene contattato una sola volta. I risultati dei controlli vengono trasmessi al nucleo di monitoraggio sotto forma di controlli passivi. Ciò migliora significativamente le prestazioni sul server di monitoraggio, nonché sugli host monitorati.
Checkmk utilizza diversi metodi per accedere ai dati nei sistemi di destinazione. Questi includono agenti installati nel sistema di destinazione, agenti “speciali” in esecuzione sul server di monitoraggio che comunicano con l'API del sistema di destinazione, API SNMP per il monitoraggio di dispositivi di rete e stampanti, nonché protocolli HTTP/TCP TCP con cui comunicare con servizi web. Nella sua impostazione predefinita, Checkmk segue il "principio pull", con cui i dati vengono esplicitamente interrogati dal sistema di monitoraggio per identificare rapidamente sistemi che improvvisamente si guastano e non rispondono alla richiesta "pull". In alternativa è possibile configurare una "push" con la quale il sistema trasferisce i propri dati direttamente a Checkmk o ad un host intermedio.

### Interfaccia dati ("Livestatus")

Livestatus è l'interfaccia principale di Checkmk. Fornisce accesso in tempo reale a tutti i dati degli host e dei servizi monitorati. I dati vengono recuperati direttamente dalla RAM, evitando un lento accesso al disco rigido e consentendo un rapido accesso alle informazioni senza sovraccaricare troppo il sistema, il tutto tramite un semplice protocollo adatto a tutti i linguaggi di programmazione e senza richiedere speciali librerie.

### Web-GUI ("Multisite")

Multisite è la GUI web di Checkmk. Oltre ad avere un layout di pagina rapido, offre viste e dashboard definibili dall'utente, monitoraggio distribuito integrando più istanze di monitoraggio tramite Livestatus, integrazione di NagVis, una connessione LDAP integrata, accesso ai dati di stato tramite servizi Web e molto altro. Dashboard e viste possono essere differenziate per vari utenti o gruppi di utenti, ad esempio configurazioni specifiche di vSphere per amministratori VMware. La GUI Web è attualmente disponibile in diverse lingue.

### Amministrazione web ("WATO")

Il sistema di amministrazione Web rende un sistema basato su Checkmk completamente gestibile tramite il browser. Ciò include la gestione di utenti, ruoli, gruppi, ed altro ancora. Le autorizzazioni possono essere concesse in modo granulare usando un concetto di ruolo. A tale scopo è possibile utilizzare controlli di accesso basati sul ruolo (LDAP, AD) esistenti. WATO funziona in base alle regole, in modo che la configurazione rimanga intuitiva anche in ambienti complessi senza richiedere sforzi eccessivi. Il rilevamento e la configurazione automatica, nonché l'aggiornamento automatico degli agenti, accelerano ulteriormente il processo di configurazione. È inoltre disponibile un'API HTTP che può essere utilizzata per l'integrazione con i sistemi CMDBs al fine di velocizzare la configurazione.

### Alert e notifiche

Il sistema offre la possibilità di impostare e configurare diverse opzioni di notifica, con settaggi differenti per ogni utente. Ad esempio, le email possono essere inviate in qualsiasi momento della giornata, ma le notifiche via SMS si riservano solo per questioni di primaria importanza durante l'orario non lavorativo. Le notifiche possono inoltre essere differenziate in base ai team di competenza (ad esempio, per informare lo storage administrator del guasto di un hard disk), ed il sistema consente di raggruppare notifiche identiche in modo che nessun utente le riceva più volte all'interno dello stesso canale. Inoltre, gli utenti possono liberamente configurare le impostazioni di notifica. In ambienti più vasti, gli alert possono essere gestiti centralmente. Per i problemi rilevati, possono essere attivati automaticamente tramite script. Checkmk include integrazioni con sistemi di comunicazione e-mail SMS, e soluzioni di gestione dei servizi di comunicazione IT come Slack, Jira, PagerDuty, OpsGenie, VictorOps e ServiceNow.

### Business Intelligence

Il modulo BI è integrato nell'interfaccia utente grafica. Mostra lo stato generale dei processi aziendali, la loro dipendenza da applicazioni complesse ed elementi dell'infrastruttura IT ricavati da singoli host e servizi, basandosi su regole. Può anche essere usato per rappresentare applicazioni costituite da microservizi, che a loro volta sono costituiti da pod e distribuzioni di Kubernetes. Inoltre, gli scenari peggiori possono essere simulati in tempo reale e i dati storici possono essere analizzati per comprendere le cause del degrado delle prestazioni.

### Event Console

La Event Console integra l'elaborazione dei messaggi di log e delle trap SNMP nel monitoraggio. È configurato tramite un set flessibile di regole e decide se i messaggi in arrivo devono essere eliminati o come devono essere classificati. Può contare, correlare, aspettarsi messaggi, riscriverli ed altro ancora. Voci simili possono essere raggruppate in un singolo evento (esempio: tentativi di login falliti) per tenere traccia degli eventi. Ha anche un programma syslog incorporato che riceve i messaggi direttamente sulla porta 514, ed un ricevitore trap SNMP che riceve trap sulla porta 162.

### Metrics Graphing

Le edizioni Checkmk commerciali utilizzano il proprio sistema metrico e grafico. Ciò consente di analizzare le metriche delle serie temporali su lunghi intervalli utilizzando grafici HTML5 interattivi. I dati possono essere importati da una varietà di fonti ed in più formati di metriche (JSON, XML, SNMP ecc.) ed archiviati sul disco di un dispositivo di archiviazione dati a lungo termine.
In alternativa, Graphite o InfluxDB possono essere collegati tramite un'interfaccia di esportazione. Dalla versione CEE 1.5p16 è inoltre disponibile un plug-in per l'integrazione dei dati direttamente da Checkmk in Grafana a scopo di visualizzazione. La Checkmk Raw Edition attualmente utilizza PNP4Nagios come sistema grafico.

### Reporting

ll reporting permette la consegna diretta di report PDF, anche automaticamente, a intervalli regolari. Include la possibilità di richiamare gli storici della disponibilità di un dato prodotto, con un semplice click, su qualsiasi intervallo di tempo. I calcoli della disponibilità possono escludere tempi non monitorati o ignorare brevi intervalli. Oltre ai calcoli sulla disponibilità, i report includono anche i dati sugli SLA in cui è possibile monitorare SLA complessi. Il servizio di reporting è disponibile solo nelle versioni commerciali di Checkmk.

### Monitoraggio hardware/software

Il sistema di monitoraggio hardware / software gestisce l'inventario di tutti gli hardware ed i software installati su dispositivi e sistemi. Questo può essere utilizzato, ad esempio, per monitorare le modifiche relative ad hardware e software, per verificare la presenza di aggiornamenti di sicurezza installati e per eseguire un update di dati statici con parametri dinamici (ad esempio, aggiornando le attuali statistiche sull'utilizzo del disco in base ai dati di monitoraggio). Il database di gestione della configurazione (CMDB) i-doit ha una integrazione che consente lo scambio di dati CMDB con i dati di monitoraggio.