This is a machine translation based on the English version of the article. It might or might not have already been subject to text preparation. If you find errors, please file a GitHub issue that states the paragraph that has to be improved. |
1. Introduzione
Checkmk di solito accede agli host monitorati in modalità pull tramite una connessione TCP alla porta 6556. A partire dalla versione 2.1.0, nella maggior parte dei casi l'Agent Controller ascolta su questa porta, inoltrando l'output dell'agente tramite una connessione crittografata TLS. Checkmk 2.2.0 ha introdotto l'opzione alternativa per selezionare la direzione di trasmissione con la modalità push.
Esistono tuttavia ambienti — ad esempio, container ridotti all’osso, sistemi legacy o embedded — in cui non è possibile utilizzare l’Agent Controller.
In questi casi viene applicata la modalità legacy, in cui (x)inetd esegue lo script agente dopo aver stabilito una connessione, l’output dell’agente viene trasferito in chiaro e la connessione viene chiusa immediatamente dopo.
In molte situazioni, le politiche di sicurezza potrebbero richiedere che azioni come la trasmissione di dati in chiaro vengano evitate. Ad esempio, i livelli di riempimento dei file system potrebbero essere di scarsa utilità per un aggressore, ma le tabelle dei processi o gli elenchi degli aggiornamenti mancanti potrebbero aiutare a mirare un attacco. Inoltre, la pratica di aprire porte aggiuntive dovrebbe essere evitata a favore dell’utilizzo dei canali di comunicazione esistenti.
I metodi universali per collegare tali procedure di trasferimento a Checkmk sono i programmi di origine dati. L'idea è molto semplice: si passa un comando come testo a Checkmk. Invece di connettersi alla porta 6556, Checkmk esegue questo comando. Questo produce i dati dell'agente Checkmk sull'output standard, che vengono poi elaborati da Checkmk esattamente come se provenissero da un agente "normale". Poiché le modifiche alle sorgenti dati di solito riguardano solo i trasporti, è importante lasciare l'host su API integrations if configured, else Checkmk agent nella GUI di Setup.
La modularità di Checkmk ti aiuta a soddisfare questi requisiti trasmettendo l'output in chiaro dell'agente tramite mezzi di trasporto arbitrari. In definitiva, l'output in chiaro dello script agente può essere trasportato con qualsiasi mezzo: diretto o indiretto, pull o push. Ecco alcuni esempi su come far arrivare i dati dell'agente al server Checkmk:
via e-mail
tramite accesso HTTP dal server
tramite upload HTTP dall'host
tramite accesso a un file che è stato copiato sul server utilizzando
rsyncoscptramite uno script che utilizza HTTP per recuperare i dati da un servizio web
Un altro ambito di applicazione dei programmi di origine dati sono i sistemi che non consentono l'installazione di agenti ma forniscono dati di stato tramite API REST o un'interfaccia Telnet. In questi casi, puoi scrivere un programma di origine dati che interroga l'interfaccia esistente e genera l'output dell'agente dai dati ottenuti.
2. Scrivere programmi di origine dati
2.1. Il programma più semplice possibile
Scrivere e installare un programma di origine dati non è difficile.
Puoi usare qualsiasi linguaggio di script e di programmazione supportato da Linux.
È meglio salvare il programma nella directory ~/local/bin/, dove verrà sempre trovato automaticamente senza bisogno di specificare un percorso dati.
Il seguente primo esempio molto semplice si chiama myds e genera dati di monitoraggio semplici e fittizi.
Invece di integrare un nuovo percorso di trasporto, genera i dati di monitoraggio autonomamente.
Questi consistono in una sezione <<<df>>> , che contiene le
informazioni relative a un singolo file system, ha una dimensione di 100 kB e il nome My_Disk.
È codificato come uno shell script di tre righe:
Non dimenticare di rendere il programma eseguibile:
Ora crea un host di prova in Setup – ad esempio, myserver125.
Questo non richiede un indirizzo IP.
Per evitare che Checkmk tenti di risolvere myserver125 tramite DNS, inserisci questo nome come "indirizzo IP" esplicito.
Aggiungi quindi una regola nel set di regole Setup > Agents > Other integrations > Individual program call instead of agent access che si applica a questo host e inserisci myds come programma eseguibile:

Quando ora vai alla configurazione dei servizi dell'host nella GUI di Setup, dovrebbe esserci un elenco di un solo servizio pronto per iniziare il monitoraggio:

Aggiungi questo servizio al monitoraggio, attiva le modifiche e il tuo primo programma di origine dati sarà in esecuzione.
Per fare una prova, non appena modifichi i dati generati dal programma, il prossimo check del file system di My_Disk lo mostrerà immediatamente.
2.2. Diagnosi degli errori
Se qualcosa non funziona correttamente, puoi controllare la configurazione dell'host digitando cmk -D nella riga di comando e verificando se la tua regola ha effetto:
Con un cmk -d puoi avviare il recupero dei dati dell'agente e l'esecuzione del tuo programma:
Un -ve duplicato dovrebbe generare un messaggio che indica che il tuo programma verrà richiamato:
2.3. Trasferimento del nome host
Il programma del nostro esempio funziona davvero, ma non è molto utile perché produce sempre gli stessi dati, indipendentemente dall'host per cui viene richiamato.
Un programma vero e proprio che, ad esempio, recupera dati via HTTP da qualche parte, richiede almeno il nome dell'host da cui deve recuperare i dati.
Codificando $HOSTNAME$ come segnaposto nella riga di comando puoi consentire il trasferimento di questo dato:

In questo esempio il programma myds riceve il nome host come primo argomento.
Il seguente esempio di programma lo genera per il test sotto forma di un check locale.
Tramite $1 prende il primo argomento e lo salva per utilizzarlo come panoramica nella variabile $HOST_NAME.
Questo verrà poi inserito nell'output del plug-in di controllo del check locale:
La scoperta del servizio troverà quindi un nuovo servizio di tipo local, nel cui output sarà visibile il nome host:

Da qui il passo verso un vero e proprio programma di origine dati è breve: ad esempio, un programma che recupera dati tramite HTTP utilizzando il comando curl.
Nella riga di comando di un programma di origine dati sono consentiti i seguenti segnaposto:
|
Il nome host come configurato in Setup. |
|
L'indirizzo IP dell'host su cui verrà effettuato il monitoraggio. |
|
L'elenco di tutti i tag host, separati da spazi – racchiudi questo argomento tra virgolette per evitare che venga suddiviso dalla shell. |
Se hai un doppio monitoraggio che utilizza IPv4 e IPv6, le seguenti macro potrebbero interessarti:
|
L'indirizzo IPv4 dell'host |
|
L'indirizzo IPv6 dell'host |
|
Il numero |
2.4. Gestione degli errori
Indipendentemente dalla tua attuale occupazione nel settore IT, gran parte del tuo tempo sarà dedicato alla gestione di errori e problemi. I programmi di origine dati non ne sono esenti. Soprattutto per i programmi che forniscono dati attraverso le reti, è irrealistico aspettarsi che siano privi di errori.
Affinché Checkmk possa comunicare un errore al tuo programma in modo corretto, vale quanto segue:
Qualsiasi codice di uscita diverso da
0sarà considerato un errore.I messaggi di errore devono essere inviati sul canale di errore standard (
stderr).
Se un programma di origine dati fallisce,
Checkmk scarta tutti i dati degli utenti dell'output,
Checkmk imposta il servizio Check_MK su CRIT e identifica i dati provenienti da
stderrcome un errore,e i servizi effettivi rimangono nel loro stato precedente (e col tempo diventeranno obsoleti).
Possiamo modificare l'esempio sopra riportato in modo che simuli un errore.
Con il reindirizzamento >&2 il testo verrà deviato a stderr , e exit 1 imposta il codice di uscita del programma su 1:
Come servizio Check_MK, apparirà così:

Se stai scrivendo il tuo programma come shell script, puoi inserire l'opzione set -e proprio all'inizio:
Non appena un'istruzione genera un errore (cioè il codice di uscita non è 0), la shell si interrompe immediatamente e restituisce il codice di uscita 1.
Hai quindi una gestione generica degli errori e non devi controllare il successo di ogni singola istruzione.
3. Special agents
Checkmk include una serie di programmi di origine dati più comunemente utilizzati. Questi special agents sono descritti in un articolo a parte.
4. File e directory
| Percorso | Funzione |
|---|---|
|
Il repository per i propri programmi e script che dovrebbero trovarsi nel percorso di ricerca e che possono essere eseguiti direttamente senza specificare il percorso. Se un programma si trova sia in |
