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
Livestatus è l'interfaccia più importante di Checkmk. È il modo più veloce per ottenere tutti i dati degli host e dei servizi monitorati, compresi i dati in tempo reale. Ad esempio, i dati della panoramica vengono recuperati direttamente tramite questa interfaccia. Poiché vengono letti direttamente dalla RAM, si evita l'accesso lento al disco rigido, garantendo così un accesso rapido al monitoraggio senza sovraccaricare il sistema.
Per strutturare i dati, questi sono organizzati in tabelle e colonne.
La tabella "hosts" include, ad esempio, le colonne "name", "
state" e molte altre. Ogni riga nella tabella "hosts"
rappresenta un host, la tabella "services" un servizio,
e così via. In questo modo i dati possono essere facilmente cercati e recuperati.
Questo articolo dovrebbe aiutarti a utilizzare questa interfaccia per le tue query, estensioni e personalizzazioni. Come utente dell'istanza puoi – utilizzando copia e incolla – testare direttamente tutte le query e i comandi presenti in questo articolo.
2. Il Livestatus Query Language (LQL)
2.1. Usare l'LQL nella shell
L'accesso a Livestatus avviene tramite un socket Unix utilizzando il Livestatus Query Language (LQL). La sua sintassi si basa su HTTP.
Tramite la riga di comando ci sono diversi modi per accedere all'interfaccia.
Una possibilità è usare i comandi printf e unixcat per
inviare un'istruzione al socket. Lo strumento unixcat è già incluso
in Checkmk per l'utente instance. Importante: tutti gli input al socket
distinguono tra maiuscole e minuscole, quindi bisogna sempre tenerlo presente:
L'interfaccia richiede che tutti i comandi e le intestazioni siano su una riga separata. Puoi contrassegnare
tale interruzione di riga con \n. In alternativa al comando sopra,
puoi anche usare il comando di script lq, che ti risparmia un po' di
lavoro completando automaticamente alcuni campi durante l'inserimento:
Oppure puoi avviare il flusso di immissione interattivo e inserire il comando seguito dall'intestazione. Con una riga vuota esegui il comando con la sua intestazione, e con un'ulteriore riga l'accesso al socket viene terminato. Nota che nell'esempio, tutto ciò che precede la riga vuota appartiene al comando, e tutto ciò che si trova tra la prima e la seconda riga vuota è la risposta:
Gli esempi seguenti vengono sempre eseguiti con il comando lq – nel modulo diretto
quando la query è breve, e come flusso di immissione per query più lunghe.
Comandi LQL
Nei primi esempi hai già visto il primo dei due comandi:
con GET puoi richiamare tutte le tabelle disponibili. Nella guida ai comandi
trovi un elenco completo, con una descrizione, di tutte le tabelle disponibili,
e questo articolo contiene anche una spiegazione generale
sull'uso di Livestatus.
Con COMMAND puoi inviare comandi direttamente al core,
ad esempio per impostare un tempo di manutenzione programmata o per disattivare completamente le notifiche.
Un elenco di tutti i comandi disponibili si trova comunque nella guida ai comandi
alla voce Comandi.
Intestazioni LQL
Per ogni comando GET puoi inserire varie intestazioni per limitare i risultati di una query, per visualizzare solo colonne specifiche di una tabella e molto altro ancora. Di seguito sono riportate le due intestazioni più importanti:
| Intestazione | Descrizione |
|---|---|
Colonne |
La query restituirà solo le colonne specificate. |
Filtro |
Verranno visualizzate solo le voci che soddisfano una condizione specifica. |
Qui trovi un elenco di tutte le intestazioni, ciascuna con una breve descrizione.
Mostra colonne e tabelle disponibili
Non sarà possibile ricordare tutte le tabelle e le loro colonne,
e l'accesso a questo manuale (con i riferimenti nella versione online) potrebbe non
essere sempre possibile. È tuttavia possibile creare rapidamente una query che
fornisca le informazioni desiderate. Per ricevere un elenco di tutte le tabelle disponibili,
invia la seguente query ed elimina le righe duplicate nell'output con
sort. Nell'output puoi effettuare la visualizzazione delle prime quattro righe come esempio:
Per una query su tutte le colonne di una tabella devi ovviamente specificarle.
Sostituisci hosts con la tabella desiderata. Anche qui le prime quattro
righe dell'output possono essere oggetto di visualizzazione come esempio:
2.2. Utilizzo di LQL in Python
Dato che Checkmk si basa in gran parte su Python, gli script in questo linguaggio sono molto pratici. Lo script seguente può essere usato come base per accedere al socket Livestatus:
2.3. Utilizzo dell'API Livestatus
Checkmk fornisce anche un'API per il linguaggio di programmazione Python, che semplifica l'accesso a Livestatus. Per questa API è disponibile un codice di esempio che ne spiega l'utilizzo. Puoi trovare questa API su GitHub.
3. Query semplici
3.1. Query su colonne (Columns)
Negli esempi che abbiamo visto finora, sono state interrogate TUTTE le informazioni per TUTTI gli host.
In pratica, però, probabilmente ti serviranno solo colonne specifiche.
Con l'intestazione Columns già menzionata, l'output
può essere limitato a questa colonna. I nomi delle singole colonne saranno separati da
un semplice carattere spazio.
Come puoi vedere, in una riga i singoli valori sono separati da un punto e virgola.
Se si utilizzano queste intestazioni, l'intestazione verrà omessa nell'output. È possibile reinserirla nell'output con l'intestazione ColumnHeaders. |
3.2. Impostazione di un filtro semplice
Per limitare la query a righe specifiche, è possibile filtrare le colonne in base a contenuti specifici. Se si desidera cercare solo servizi con uno stato specifico, è possibile farlo con un filtro:
Nell'esempio verranno cercati tutti i servizi con stato "CRIT" e verranno visualizzati il nome host, la descrizione del servizio e il suo stato. Questi filtri possono ovviamente essere combinati e limitati ai servizi con stato "CRIT" che non sono ancora stati sottoposti a conferma:
Come puoi vedere, puoi anche filtrare per colonne che non sono presenti nell'elenco di Columns.
Operatori ed espressioni regolari
Finora sono stati filtrati solo i numeri corrispondenti. Il risultato intermedio di una query può anche essere cercato per "minore di" con numeri o per stringhe di caratteri. Gli operatori disponibili si trovano nel capitolo Operatori nella guida ai comandi. Così puoi, ad esempio, filtrare per espressioni regolari nelle colonne:
Con l'operatore giusto puoi cercare nelle colonne in vari modi.
Livestatus interpreterà sempre un'espressione del genere come "può apparire ovunque
nella colonna", a meno che non sia stato definito diversamente.
Indica l'inizio di una riga, ad esempio, con il carattere ^,
e la fine di una riga con il carattere $. Un elenco completo di
tutti i caratteri speciali nelle espressioni regolari di Checkmk si trova nell'
articolo dedicato alle espressioni regolari.
3.3. Ordinamento dell’output (OrderBy)
Puoi usare l'intestazione OrderBy per ordinare l'output in base al contenuto di qualsiasi colonna o anche ai valori di qualsiasi chiave del dizionario.
Questo ti permette di creare un elenco alfabetico di tutti gli host, ad esempio:
Implicitamente, l'output viene ordinato in ordine crescente (asc) come previsto.
Tuttavia, puoi anche specificare esplicitamente l'ordinamento desiderato e invertirlo specificando desc`:
Con query leggermente più lunghe e ordinando, ad esempio, i dati sulla performance, è possibile creare interessanti elenchi. Nell'esempio seguente, gli host vengono visualizzati in ordine decrescente in base al loro tempo di attività:
4. Query complesse
4.1. Filtri per gli elenchi
Alcune colonne di una tabella restituiscono non solo un singolo valore, ma un intero elenco di valori.
Affinché tale elenco possa essere cercato in modo efficace, in questi casi gli
operatori hanno un'altra funzione. Un elenco completo degli operatori è disponibile
alla voce Operatori per elenchi.
Ad esempio, l'operatore >= ha la funzione "contiene". Con questo
potresti, ad esempio, cercare contatti specifici:
Come si può vedere nell'esempio sopra, i contatti saranno elencati, separati da virgole,
nella colonna contacts. Questo permette di distinguerli chiaramente
in modo che non sembrino l'inizio di un'altra colonna. Una caratteristica speciale dell'operatore di uguaglianza
è che checka se un elenco è vuoto:
4.2. Combinazione dei filtri
Diversi filtri sono già stati combinati in precedenza. Sembrerebbe intuitivo che i dati debbano passare attraverso tutti i filtri per essere visualizzati. I filtri saranno quindi collegati dall'operazione logica "e". Per collegare determinati filtri con un "o" logico, alla fine della stringa del filtro digita "o:" seguito da un numero intero. Il contatore specifica quante delle ultime righe possono essere combinate con un "o". In questo modo è possibile formare gruppi e combinarli come richiesto. Ecco un semplice esempio. Qui vengono combinati due filtri in modo che vengano visualizzati tutti i servizi che hanno lo stato " WARN" o "SCONOSCIUTO":
Il risultato di una combinazione può anche essere negato, oppure i gruppi possono a loro volta essere
combinati in altri gruppi. Nell'esempio vengono visualizzati tutti i servizi il cui stato
non è OK e la cui descrizione inizia con Filesystem oppure
che hanno uno stato diverso da SCONOSCIUTO:
4.3. Specificare un formato di output
Il formato di output può essere specificato in due modi. Un metodo consiste nel ridefinire i separatori utilizzati nell'output standard. L'altro metodo consiste nell'effettuare l'output in conformità con i formati Python o JSON.
Personalizzazione dicsv
Come già descritto, puoi personalizzare con precisione il formato di output standard
csv (minuscolo!) e definire come i singoli elementi
devono essere separati l'uno dall'altro.
Checkmk riconosce quattro diversi separatori per strutturare i dati.
Dopo i due punti, inserisci un valore ASCII standard appropriato in modo che il
filtro sia strutturato come segue:
Separators: 10 59 44 124Questi separatori hanno le seguenti funzioni:
Separatore per i set di dati:
10(interruzione di riga)Separatore per le colonne in un set di dati:
59(punto e virgola)Separatore per gli elementi in un elenco:
44(virgola)Separatore per gli elementi in un elenco di servizi:
124(barra verticale)
Ciascuno di questi valori può essere selezionato per strutturare l'output come desideri. Nell'esempio seguente le singole colonne di un set di dati sono state separate con un tabulatore (9) anziché con un punto e virgola (59):
L'ordine dei separatori è fisso e non può essere modificato. |
Modifica dei formati di output
Oltre a generare output in formato csv, Livestatus può anche generare output
in altri formati. Questi hanno il vantaggio di essere più facili e puliti da analizzare
nei linguaggi di programmazione di livello superiore.
Di conseguenza, gli output possono essere codificati nei seguenti formati:
| Formato | Descrizione |
|---|---|
Python |
Genera un output sotto forma di elenco compatibile con la versione 2.x. Il testo è formattato in Unicode. |
python3 |
Genera anch'esso un output sotto forma di elenco, tenendo conto delle modifiche nel tipo di dati – ad esempio, la conversione automatica del testo in Unicode. |
json |
Anche in questo caso l'output verrà generato come elenco, ma verrà utilizzato solo un formato compatibile con json. |
CSV |
Formatta l'output in conformità con RFC-4180. |
csv |
Vedi personalizzazione di |
Non confondere l'CSV Format con l'output csv
di Livestatus, che viene utilizzato se non è stato specificato alcun formato di output.
È quindi assolutamente essenziale rispettare la maiuscola/minuscola.
Per la personalizzazione, alla fine specifica OutputFormat invece di Separator:
5. Come recuperare le statistiche (Stats)
5.1. Introduzione
Ci saranno situazioni in cui non ti interessa lo stato di un
singolo servizio o di un gruppo di servizi. Molto più importante è il numero di servizi
con uno stato "WARN" (in esecuzione), o il numero di database sottoposti a monitoraggio.
Livestatus è in grado di generare e visualizzare statistiche con Stats.
5.2. Numeri
L'Overviewe riceve i dati recuperando le statistiche relative a host, servizi ed eventi tramite Livestatus e visualizzandole nell'interfaccia di Checkmk. Con l'accesso diretto a Livestatus puoi creare il tuo riepilogo personalizzato:
A proposito, queste statistiche possono essere combinate con tutti i filtri.
5.3. Raggruppamento
Le statistiche possono anche essere combinate con l'and/or. Le intestazioni vengono quindi
chiamate StatsAnd o StatsOr. Usa StatsNegate se l'
output deve essere invertito. Nell'esempio verrà visualizzato il numero totale di host
(l'Stats iniziale) e, in aggiunta, l'output includerà il conteggio
degli host contrassegnati come stale e che non sono nell'elenco del tempo di manutenzione programmata (le statistiche 2 e 3 sono collegate con un 'AND' logico):
Non farti confondere dalle varie opzioni per combinare i
risultati dei filtri e delle statistiche.
Mentre tutti gli host che soddisfano le condizioni verranno visualizzati con l'intestazione "
Filter", con le statistiche l'output sarà
la somma di quante volte si applica il filtro "Stats".
5.4. Minimo, massimo, media, ecc.
È anche possibile eseguire calcoli sui valori e, ad esempio, visualizzare un valore medio o un valore massimo. Un elenco completo di tutti i possibili operatori è disponibile qui.
Nell'esempio seguente l'output fornirà un elenco dei tempi medi, minimi e massimi richiesti dai plug-in di controllo di un host per calcolare uno stato:
I calcoli con le metriche vengono handle in modo un po' speciale.
Anche qui sono disponibili tutte le funzioni con l'intestazione Stats.
Queste vengono però applicate singolarmente a tutte le metriche di un servizio.
Ad esempio, nell'esempio seguente verranno sommate le metriche relative all'utilizzo della CPU di un gruppo di host:
6. Limitare l'output (Limit)
Il numero di righe in un output può essere limitato intenzionalmente. Questo può essere utile se, ad esempio, vuoi solo vedere se riesci a ottenere una risposta a una query Livestatus, ma vuoi evitare di ottenere un output di più pagine:
Tieni presente che questo limite funziona anche quando è combinato con altre intestazioni.
Se, ad esempio, con Stat conti quanti host hanno uno stato UP,
e limiti l'output a 10, verranno presi in considerazione solo i primi 10 host.
7. Limiti di tempo (Timelimit)
Non solo è possibile limitare il numero di righe da visualizzare, ma anche il tempo massimo che una query può impiegare per l'esecuzione. Questa opzione può impedire che una query Livestatus blocchi una connessione all'infinito se per qualche motivo si blocca. La restrizione temporale specifica il tempo massimo in secondi che una query può impiegare per il processo:
8. Attivazione delle intestazioni delle colonne (ColumnHeaders)
Con l'opzione "ColumnHeaders" è possibile aggiungere i nomi delle colonne all'output.
Normalmente questi vengono omessi per semplificare il processo successivo:
9. Autorizzazioni (AuthUser)
Se vuoi rendere disponibili degli script in base allo stato di attività (Livestatus), l'utente
dovrebbe probabilmente vedere solo i dati per i quali è autorizzato.
Checkmk fornisce l'intestazione AuthUser per questa funzione,
con la restrizione che non può essere utilizzata nelle seguenti tabelle:
columnscommandscontactscontactgroupseventconsoleruleseventconsolestatusstatustimeperiods
Al contrario, questa intestazione può essere utilizzata in tutte le tabelle che accedono alle tabelle hosts
o services. A quali di queste un utente è autorizzato dipende
dai gruppi di contatto dell'utente.
In questo modo una query produrrà solo i dati che il contatto è autorizzato a vedere.
Nota qui la differenza tra le impostazioni di permesso di strict eloose
:
10. Ritardi temporali (Wait)
Con l'intestazione Wait puoi creare query per specifici set di dati senza dover sapere se i prerequisiti per i dati sono stati soddisfatti. Questo può essere utile quando, ad esempio, hai bisogno di dati di confronto per una specifica situazione di errore, ma non vuoi sovraccaricare il sistema in modo continuo e inutile. Le informazioni verranno quindi recuperate solo quando sono davvero necessarie.
Un elenco completo delle intestazioni Wait è disponibile qui.
Nell'esempio seguente verrà visualizzato il servizio "Disk IO SUMMARY" per un server ESXi
non appena lo stato del servizio "CPU load" cambia in una specifica
CRIT della VM. Con l'intestazione "WaitTimeout", la query verrà quindi eseguita
se la condizione non è stata soddisfatta dopo 10000 millisecondi.
Questo impedisce che la connessione Livestatus rimanga bloccata per molto tempo:
Un'ulteriore applicazione consiste nel combinare questo con un comando. Puoi inviare un comando e recuperare i risultati non appena sono disponibili. Nell'esempio seguente vogliamo interrogare e visualizzare i dati attuali di un servizio. Per farlo, prima verrà inviato il comando, poi verrà emessa una query. Questo checka se i dati del servizio Check_MK sono più recenti di quelli presenti in un determinato momento. Non appena la condizione preliminare sarà soddisfatta, verrà visualizzato lo stato del servizio Memory.
Tieni presente che il timestamp utilizzato in |
11. Fusi orari (ora locale)
Molti ambienti di monitoraggio interrogano host e servizi a livello globale. In questi casi si può rapidamente verificare una situazione in cui le istanze di monitoraggio distribuite operano in fusi orari diversi. Poiché Checkmk utilizza il tempo Unix – che è indipendente dai fusi orari – questo non dovrebbe essere un problema.
Se tuttavia un server dovesse essere assegnato a un fuso orario errato,
questa differenza può essere compensata con l'intestazione Localtime.
Fornisci anche l'ora corrente alla query. Checkmk arrotonderà autonomamente
alla mezz'ora successiva e correggerà la differenza.
Puoi fornire l'ora automaticamente se esegui la query direttamente:
Altrimenti fornisci il risultato di date +%s se vuoi utilizzare lo stream di input:
12. Codici di stato (ResponseHeader)
Se scrivi un'API, probabilmente vorrai ricevere un codice di stato come risposta,
in modo da poter processare meglio l'output.
L'intestazione ResponseHeader supporta i valori off (Standard)
e fixed16 e, con questi, fornisce un messaggio di stato
lungo esattamente 16 byte nella prima riga della risposta.
In caso di errore, le righe successive conterranno una descrizione completa
del codice di errore. Queste sono quindi molto utili anche per cercare
l'errore nei risultati della query.
Il rapporto di stato nella prima riga combina quanto segue:
Byte 1-3: Il codice di stato. La tabella completa dei codici possibili è disponibile qui.
Byte 4: un semplice carattere spazio (carattere ASCII: 32)
Byte 5-15: La lunghezza della risposta effettiva come numero intero. I byte non necessari sono riempiti con caratteri di spaziatura.
Byte 16: un avanzamento riga (carattere ASCII: 10)
Nell'esempio seguente eseguiremo una query errata in cui un filtro è in realtà codificato erroneamente con un nome di colonna.
In caso di errore, il formato di output è sempre un messaggio di errore in forma di testo. Questo vale indipendentemente da eventuali modifiche che potresti aver apportato.
13. Mantenere attiva una connessione (KeepAlive)
Soprattutto con gli script che stabiliscono una connessione Livestatus attraverso la
rete, potresti voler mantenere aperto il canale per
risparmiare l'overhead generato dal ripetuto stabilimento della connessione.
Puoi farlo con l'intestazione KeepAlive, e in questo modo
riuscirai a riservare un canale.
A proposito: dopo un comando, una connessione Livestatus
rimane sempre aperta. Non è necessario inserire alcuna intestazione aggiuntiva per questo.
Poiché il canale è bloccato per altri processi per tutta la durata della connessione, può diventare un problema se non ci sono altre connessioni disponibili. Gli altri processi devono quindi attendere fino a quando una connessione non si libera. Nella configurazione standard Checkmk tiene pronte 20 connessioni: aumenta il numero massimo di queste connessioni secondo necessità con Setup > General > Global Settings > Monitoring Core > Maximum concurrent Livestatus connections. |
Combina sempre KeepAlive con Response header ,
per poter distinguere correttamente le singole risposte l'una dall'altra:
Assicurati che non ci sia una riga vuota tra la prima risposta e la seconda richiesta. Non appena un'intestazione viene omessa da una query, dopo l'output successivo la connessione verrà chiusa come al solito dalla riga vuota.
14. Recupero dei log
14.1. Panoramica
Con la tabella log in Livestatus hai accesso diretto alla cronologia di monitoraggio del nucleo di monitoraggio,
così puoi filtrare comodamente eventi specifici usando l'LQL.
Le tabelle di disponibilità, ad esempio, vengono generate con l'aiuto di queste tabelle.
Per migliorare la panoramica e restringere una query per argomento, hai accesso
alle seguenti classi di log:
| Classe | Descrizione |
|---|---|
0 |
Tutti i messaggi non coperti da altre classi |
1 |
Avvisi relativi a host e servizi |
2 |
Eventi importanti del programma |
3 |
Notifiche |
4 |
Controlli passivi |
5 |
Comandi esterni |
6 |
Voci di stato iniziali o attuali (ad es. dopo una rotazione dei log) |
7 |
Modifiche allo stato del programma |
Semplicemente utilizzando queste classi di log puoi già limitare molto bene il tipo di voce di log da visualizzare. Il periodo di tempo preso in considerazione nella query verrà ulteriormente limitato. Questo è importante perché altrimenti verrebbe cercata l'intera cronologia dell'istanza – il che potrebbe logicamente rallentare notevolmente il sistema a causa del flusso di informazioni.
Un'ulteriore restrizione sensata dell'output sono i (Columns)
che devono essere visualizzati per una voce.
Nell'esempio qui sotto cercheremo tutte le notifiche che sono state
registrate nell'ultima ora:
Assicurati che nella modalità interattiva del flusso di voci non sia possibile utilizzare nessuna delle variabili usate nell'esempio, e limita sempre le query a un periodo di tempo. |
14.2. Configurazione della cronologia di monitoraggio
È possibile influenzare la rotazione dei file e le loro dimensioni massime. Puoi inoltre specificare quante righe di un file devono essere lette prima che Checkmk interrompa l'operazione. Tutto ciò può influire sulla performance delle tue query, a seconda della struttura dell'istanza. Sono disponibili i seguenti tre parametri, che puoi trovare e personalizzare in Setup > General > Global Settings > Monitoring Core:
| Nome | Descrizione |
|---|---|
History log rotation: Regular interval of rotations |
Qui è possibile definire in quale periodo di tempo la cronologia deve essere continuata in un nuovo file. |
History log rotation: Rotate by size (Limit of the size) |
Indipendentemente dal periodo di tempo, qui si definisce la dimensione massima di un file. La dimensione rappresenta un compromesso tra la velocità di lettura possibile e gli I/O possibili. |
Maximum number of parsed lines per log file |
Quando viene letto il numero specificato di righe, la lettura del file si interrompe. Questo evita i timeout se, per qualsiasi motivo, un file diventa molto grande. |
15. Check della disponibilità
Con la tabella statehist puoi interrogare i dati grezzi sulla disponibilità
di host e servizi, e quindi avere accesso a tutte le informazioni
utilizzate dalla visualizzazione della disponibilità dell'interfaccia.
Inserisci sempre un periodo di tempo, altrimenti verranno cercati tutti i log disponibili,
il che può mettere a dura prova il sistema.
Si applicano anche le seguenti specifiche aggiuntive:
Il periodo di tempo in cui un host/servizio aveva uno stato particolare può essere visualizzato come valore assoluto o come tempo Unix, ma anche come valore relativo e come percentuale del periodo di tempo interrogato.
Durante i periodi in cui un host/servizio non è stato sottoposto a monitoraggio, lo stato sarà "
-1".
Verificare se, quando e per quanto tempo un host/servizio è stato monitorato è possibile in Checkmk grazie alla registrazione dello stato iniziale. In questo modo non solo puoi vedere quale stato era presente in un momento specifico, ma puoi anche risalire a verificare se in quel momento era effettivamente monitorato. Importante: questa registrazione è attiva anche con un Nagios-Core. Qui però può essere disattivata:
log_initial_states=0Nell'esempio qui sotto puoi vedere come appaiono la query di una ripartizione percentuale e i tempi assoluti per un determinato stato. Come periodo di tempo sono state specificate le ultime 24 ore e la query è stata limitata alla disponibilità di un servizio su un determinato host:
Come recuperare un elenco completo delle colonne disponibili è spiegato più dettagliatamente nella Guida ai comandi.
16. Variabili in Livestatus
In vari punti dell'interfaccia di Checkmk puoi usare le variabili per
effettuare assegnazioni basate sul contesto. Alcuni di questi dati sono recuperabili anche tramite
Livestatus. Poiché anche queste variabili devono essere risolte,
i valori di queste colonne vengono duplicati in una tabella:
una volta come voce letterale e una volta con la variabile
sostituita dal valore appropriato.
Un esempio è la colonna "notes_url", che restituisce un URL
con la variabile:
Se invece, invece di questo, interroghi la colonna note_url_expanded,
riceverai il valore effettivo della macro:
17. Utilizzo di Livestatus tramite rete
17.1. Connessioni tramite TCP/IP
Per accedere a Livestatus tramite la rete, puoi collegare il socket Unix del processo live status a una porta TCP. In questo modo puoi eseguire script su macchine remote e raccogliere i dati direttamente dal luogo in cui devono essere elaborati.
Quando un'istanza è disattivata, l'accesso tramite TCP può essere abilitato con il comando
omd:
Una volta avviata l'istanza, Livestatus via TCP è solitamente attivo sulla porta predefinita 6557. Per i server Checkmk con più istanze che utilizzano Livestatus via TCP, viene scelta la porta inutilizzata immediatamente superiore.
Tutte le impostazioni, come la porta e gli indirizzi IP autorizzati, possono essere configurate tramite omd config.
In alternativa, queste impostazioni possono essere effettuate nel Setup.
In Checkmk la crittografia SSL della comunicazione Livestatus è abilitata di default:

Test della connessione SSL locale
Livestatus utilizza un certificato generato automaticamente al momento della creazione dell'istanza.
Questo certificato si trova nel file var/ssl/ca-certificates.crt insieme a tutti gli altri certificati CA considerati attendibili dall'istanza.
Affinché lo strumento da riga di comando openssl s_client possa convalidare il certificato utilizzato dal server Livestatus, questo file deve essere designato come File dell'Autorità di Certificazione.
Abbiamo notevolmente abbreviato l'output della chiamata al comando qui; […] mostra le omissioni:
Non appena non ci sono più output, puoi eseguire i comandi LQL in modo interattivo e terminare l'interazione con una riga vuota (premi due volte Enter).
Se funziona, puoi anche reindirizzare le query Livestatus e utilizzare il parametro aggiuntivo -quiet per sopprimere l'output di debug:
L'output che precede i quattro nomi host viene scritto su STDERR dal comando openssl.
Può essere soppresso aggiungendo 2>/dev/null.
Accesso remoto a Livestatus
Se accedi a Livestatus da macchine remote, non dovresti usare l'intero elenco di certificati considerati attendibili dall'istanza Checkmk su quelle macchine. Leggi invece il certificato della CA dell'istanza solo dal Setup.
Per farlo, vai su Global Settings > Site management > Trusted certificate authorities for SSL.
Qui puoi copiare e incollare il certificato utilizzato dall’istanza CA.
Copia il testo completo del primo certificato sotto Content of CRT/PEM file in un file — nel nostro esempio usiamo /tmp/mysite_ca.pem.

Se l'host remoto è stato ora abilitato per l'accesso a Livestatus, le query Livestatus tramite script saranno possibili con questo file di certificato:
Nota: il file del certificato non fornisce l'autenticazione, ma garantisce solo la crittografia del trasporto! La protezione dell'accesso è regolata esclusivamente tramite gli indirizzi IP autorizzati ad accedere alla porta Livestatus.
Livestatus con stunnel
Se vuoi rendere disponibile la porta Livestatus remota crittografata come porta locale non crittografata, puoi usare il programma stunnel.
[pinning client]
client = yes
accept = 0.0.0.0:6557
connect = <myremotesiteip>:6557
verifyPeer = yes
CAfile = /etc/stunnel/myremotesite.pemDopo il riavvio di stunnel, è possibile l'accesso non crittografato alla porta locale.
SSL negli script
Se vuoi usare degli script per accedere a Livestatus tramite SSL, evita di usare openssl s_client.
Lo scopo principale di questo strumento è testare la creazione della connessione e il debug delle catene di certificati.
Per verificare se l'output previsto è completo in caso di errori di connessione, ti consigliamo di valutare l'intestazione della risposta.
Un'API ben mantenuta che supporta SSL e la valutazione delle intestazioni è quella per Python, che puoi trovare su GitHub.
17.2. Connessioni tramite SSH
Se è necessario accedere a Livestatus dall'esterno della tua rete locale, la protezione dell'accesso basata esclusivamente sugli indirizzi IP potrebbe non essere pratica. Il modo più semplice per ottenere un accesso autenticato in questo caso è utilizzare Secure Shell.
Con SSH, hai la possibilità di passare un comando che verrà eseguito sul server remoto:
In alternativa, puoi inoltrare la porta di Livestatus all'host su cui stai lavorando tramite un tunnel SSH:
Se la connessione è stata stabilita, in una seconda sessione della console puoi verificare se è possibile accedere con openssl s_client:
Se questo test ha esito positivo, qualsiasi script che hai scritto per l'accesso diretto alla rete Livestatus può essere utilizzato su localhost.
18. Comandi di impostazione
18.1. Panoramica
Livestatus non serve solo per le query sui dati,
ma anche per inviare comandi direttamente al core (CMC o Nagios).
Un comando corretto include sempre un timestamp: in realtà può essere qualsiasi cosa tu voglia.
Dato che verrà utilizzato anche nei log per tracciare l'
ora dell'elaborazione, però, è meglio inserire l'ora nel modo più preciso possibile.
I comandi senza timestamp verranno ignorati, senza generare un messaggio di errore
, ma solo con una semplice voce nell'cmc.log
Affinché il timestamp sia il più preciso possibile, si consiglia di non impostare il comando nel flusso di input, ma piuttosto di emetterlo direttamente. In tale situazione è possibile anche accedere alle variabili e fornire l'ora attuale:
Questo formato funziona sia con il Nagios-Core nell'
Comunità Checkmk sia con il CMC nelle edizioni commerciali.
Nei due core, tuttavia, i comandi si sovrappongono solo in parte.
Un elenco completo dei comandi per il Nagios-Core è disponibile direttamente sul
sito web di Nagios.
I comandi disponibili per il CMC sono riportati nel
Riferimento ai comandi.
18.2. Funzionalità speciali in Nagios
Nell'elenco dei comandi la sintassi ha la seguente forma:
#!/bin/sh
# This is a sample shell script showing how you can submit the CHANGE_CUSTOM_HOST_VAR command
# to Nagios. Adjust variables to fit your environment as necessary.
now=`date +%s`
commandfile='/usr/local/nagios/var/rw/nagios.cmd'
/bin/printf "[%lu] CHANGE_CUSTOM_HOST_VAR;host1;_SOMEVAR;SOMEVALUE\n" $now > $commandfileCome hai imparato, Checkmk utilizza un formato molto più semplice per l'emissione dei comandi. Per rendere il formato Nagios compatibile con Checkmk, ti servono semplicemente il comando, il timestamp e, se applicabile, le variabili:
19. File e directory
| Percorso | Funzione |
|---|---|
|
La socket Unix attraverso la quale vengono inviati query e comandi. |
|
Comando di script per semplificare l'invio di query e comandi al socket Unix in Livestatus. |
|
Il file di log del CMC, in cui, insieme ad altri dati, vengono documentate le query/i comandi. |
|
Il file di log del CMC, in cui vengono registrate tutte le modifiche che si verificano durante il funzionamento del core – ad esempio, cambiamenti nello stato di un host/servizio. |
|
I file di log dell' |
|
Il file di log di Nagios-Core, in cui, insieme ad altri dati, sono documentate le query/i comandi. |
|
I file di log di |
|
In questa directory puoi trovare una serie di esempi di query Livestatus che puoi provare. Gli esempi si basano sul comando dello script |
