Checkmk
to checkmk.com
Important

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. Perché prendersi la briga di creare i propri checks?

Grazie al gran numero di plug-in di controllo forniti di serie, Checkmk è già in grado di monitorare una grande quantità di dati rilevanti. Tuttavia, ogni ambiente IT è unico, quindi spesso sorgono esigenze molto specifiche. Con i controlli locali, puoi creare i tuoi servizi in modo semplice e veloce apportando piccole estensioni all'agente sull'host di destinazione.

Questi plug-in locali si differenziano dagli altri controlli per un aspetto importante: il loro stato viene determinato direttamente sull'host da cui vengono recuperati i dati.

Questo elimina la necessità di creare controlli utilizzando Python e ti lascia completamente libero nella scelta del linguaggio di scripting. I controlli locali offrono inoltre una grande libertà agli amministratori di server. Gli amministratori del monitoraggio devono solo decidere se includere nuovi controlli locali come servizi.

Tip

Puoi combinare il meccanismo fornito dai check locali con tutti i metodi supportati da Checkmk per il trasporto dei dati dell'agente: programmi di origine dati, special agents, dati piggyback e file di spool. I dati provenienti da tutte le fonti vengono uniti, ma si verificheranno conflitti se il nome del servizio viene (inavvertitamente) assegnato due volte — per questo motivo, assicurati che i nomi di ogni servizio siano univoci.

2. Scrivere un semplice check locale

2.1. Creazione dello script

Un check locale può essere scritto in qualsiasi linguaggio di programmazione supportato dall'host di destinazione. Lo script deve essere strutturato in modo che ogni check produca una riga di stato composta da quattro parti. Ecco un esempio:

0 "My service" myvalue=73 My output text which may contain spaces

Le quattro parti sono separate da spazi e hanno i seguenti significati:

Valore di esempio Significato Descrizione

0

Stato

Lo stato del servizio è indicato da un numero: 0 per OK, 1 per WARN, 2 per CRIT e 3 per SCONOSCIUTO. In alternativa, lo stato può anche essere calcolato dinamicamente: in tal caso il numero viene sostituito da un P.

"My service"

Nome del servizio

Il nome del servizio come mostrato in Checkmk, nell'output del check tra virgolette doppie.

myvalue=73;65;75

Valore e metriche

Valori delle metriche per i dati. Maggiori informazioni sulla struttura sono disponibili nel capitolo sulle metriche. In alternativa, è possibile inserire un segno meno se il check non produce metriche.

My output text which may contain spaces

Dettagli dello stato

Dettagli dello stato così come verranno visualizzati in Checkmk nel campo "Summary". Questa parte può contenere anche spazi vuoti.

Important

Fino a Checkmk 2.4.0 p4 deve esserci sempre esattamente uno spazio (0x20 ASCII) tra le quattro parti di questo output. A partire da 2.4.0 p5 sono consentiti più spazi. All'interno dei dettagli dello stato, è possibile utilizzare qualsiasi numero di spazi di qualsiasi tipo. Le deviazioni dalla specifica appena descritta potrebbero funzionare, ma non è garantito che lo facciano. Fino a Checkmk 2.4.0 p4 le righe che non possono essere analizzate verranno semplicemente ignorate. Con 2.4.0 p5 e versioni UP, verrà creato un servizio con lo stato CRIT e i dettagli relativi ai problemi rilevati.

Se non sei sicuro di un possibile output, puoi semplicemente testarlo scrivendo un piccolo script con il comando echo. Inserisci l'output che vuoi testare nel comando echo. Il nostro esempio usa le virgolette doppie all'esterno, poiché le variabili all'interno (variabili d'ambiente e quelle impostate nello script) vengono valutate. Di conseguenza, devi racchiudere le virgolette del nome del servizio con \ in modo che questi caratteri non vengano interpretati dalla shell come l'inizio e la fine di una stringa (e quindi rimossi dall'output):

mylocalcheck
#!/bin/bash
echo "0 \"My 1st service\" - This static service is always OK"
Copia il contenuto del file negli appunti
Contenuto del file copiato con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Per gli host Windows, uno script del genere sarà molto simile a questo:

mylocalcheck.bat
@echo off
echo 0 "My 1st service" - This static service is always OK

Entrambi gli script producono lo stesso risultato nell'output:

0 "My 1st service" - This static service is always OK

Per Checkmk è rilevante solo questo output, non come l'hai creato.

A proposito: puoi scrivere un numero qualsiasi di output in uno script. Ogni riga di output avrà un proprio servizio creato in Checkmk. Pertanto, non sono ammessi caratteri di nuova riga nell'output, a meno che non siano mascherati, ad esempio per un output su più righe in Checkmk.

Come verificare se lo script locale verrà richiamato correttamente dall'agente è spiegato nell'Analisi degli errori.

Important

Se si utilizza il Nagios core (sempre nella Comunità Checkmk), i seguenti caratteri speciali non sono ammessi nel nome del servizio :
`;~!$%^&*|\'"<>?,()=
Se questi caratteri compaiono comunque nei nomi dei servizi, vengono semplicemente rimossi in Checkmk.
Nelle edizioni commerciali con Checkmk Micro Core (CMC), il punto e virgola (; ) non è ammesso nel nome. Il simbolo del dollaro ($ ) viene visualizzato solo se preceduto dall'escaping con una barra rovesciata (\ ).
Quanto segue vale per tutte le edizioni: Se nel nome del servizio compaiono virgolette singole, il servizio non verrà trovato dal riconoscimento dei servizi!

2.2. Distribuzione dello script

Una volta scritto lo script, puoi distribuirlo agli host appropriati. Il percorso da usare dipenderà dal sistema operativo. Trovi un elenco dei nomi dei percorsi nella sezione File e directory qui sotto.

Non dimenticare di rendere lo script eseguibile sui sistemi Unix-like. Il percorso mostrato in questo esempio è per Linux (pacchetto agente con impostazioni predefinite):

root@linux# chmod +x /usr/lib/check_mk_agent/local/mylocalcheck
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Se utilizzi agent bakery, lo script può essere distribuito con una procedura rule-based. Maggiori informazioni sulla creazione di regole sono disponibili nel capitolo Distribuzione tramite agent bakery.

2.3. Aggiunta del servizio al monitoraggio

Ad ogni avvio dell’agente Checkmk, il check locale contenuto nello script verrà eseguito e aggiunto all’output dell’agente. Anche la scoperta del servizio funziona automaticamente come per gli altri servizi:

The local check found by the service discovery.

Una volta che il servizio è stato aggiunto al monitoraggio e le modifiche sono state attivate, l'implementazione del servizio creato autonomamente con l'aiuto di un check locale sarà completa. Se dovesse sorgere un problema durante la scoperta del servizio, l'Analisi degli errori può essere d'aiuto.

3. Metriche

3.1. Definizione delle metriche

Puoi definire le metriche anche in un check locale. La sintassi più breve possibile per i dati delle metriche è:

metricname=value

dove value è il valore corrente.

La sintassi completa per i dati delle metriche è:

metricname=value;warn;crit;min;max

Qui, warn e crit definiscono i valori di threshold (superiori). Affinché questi valori di threshold vengano visualizzati nel grafico, è necessario attivare il calcolo dinamico (stato P). Lo stato viene quindi calcolato utilizzando Checkmk. Gli ultimi parametri specificati per min e max fissano l'intervallo di valori.

Un esempio completo potrebbe quindi apparire così:

count=73;80;90;0;100

I valori sono separati da punti e virgola. Se un valore non è richiesto, il campo rimane vuoto o viene omesso alla fine, come nei seguenti casi per warn, crit e max:

count=42;;;0
Tip

Nelle edizioni commerciali i valori per min e max possono essere definiti, ma solo per motivi di compatibilità. Limitare il grafico associato a un intervallo di valori specifico non ha alcun effetto nelle edizioni commerciali.

3.2. Nomi e unità utilizzati dalle metriche

Le definizioni delle metriche per i controlli locali non differiscono da quelle per altri tipi di controlli. In definitiva, hai tre opzioni per assegnare unità e nomi di facile comprensione alle metriche:

  • Accedi alle definizioni di metriche esistenti che "si adattano" allo scopo richiesto.

  • Creare le proprie metriche in modo ad hoc e univoco — questo è spesso sufficiente per i contatori puri.

  • Creare le proprie metriche e memorizzare una definizione di metrica: questo offre la massima flessibilità.

Utilizzo delle definizioni delle metriche esistenti

Il modo più semplice per ottenere unità adeguate, una legenda regolata automaticamente e spesso un Perf-O-Meter è utilizzare le definizioni delle metriche esistenti. In questo articolo, alcuni esempi utilizzano gli identificatori humidity o temperature. Esistono definizioni predefinite per entrambe (umidità e temperatura), che forniscono alle metriche le unità corrette. In entrambi i casi, la definizione della metrica fornisce un Perf-O-Meter e le legende dei grafici mostrano quindi i gradi Celsius e l'umidità relativa in percentuale.

Le definizioni delle metriche più importanti si trovano su ~/lib/python3/cmk/plugins/collection/graphing (GitHub), altre su ~/lib/python3/cmk/plugins/*/graphing (GitHub) e le unità utilizzate su ~/lib/python3/cmk/gui/plugins/metrics/unit.py (GitHub). Spesso vale la pena cercare definizioni di metriche che abbiano una corrispondenza esatta, poiché Checkmk fornisce anche grafici combinati per metriche correlate.

Definizione di metriche ad hoc

Nei primi esempi mostrati in questo articolo per le metriche abbiamo usato nomi come myvalue, count o metricname. Senza una definizione di metrica adeguata, questi nomi vengono visualizzati con l'iniziale maiuscola nella legenda del grafico e i trattini bassi vengono sostituiti da spazi. Così, outgoing_queue_size diventa il facilmente leggibile Outgoing queue size. Poiché un semplice contatore non richiede un'unità, l'identificatore scelto in modo sensato soddisfa già il suo scopo in questo caso senza bisogno di una definizione metrica aggiuntiva. Se le unità sono effettivamente necessarie, potresti doverle includere nel nome.

Diventa problematico se il tentativo di definire una metrica ad hoc ha inavvertitamente l'effetto spiegato nell'ultima sezione e assegna una definizione di metrica esistente. La massima confusione può verificarsi soprattutto quando le unità non corrispondono, ad esempio, una metrica fornita utilizza una scala percentuale con numeri in virgola mobile tra 0 e 100 %, ma l'intervallo di valori del tuo check locale fornisce un numero aperto come numero in virgola fissa. Oppure hai una coda per le richieste correnti (Current requests queue), che vuoi semplicemente chiamare current: il risultato sarebbe l'assegnazione della definizione della metrica per l'amperaggio.

Quindi, current_requests_queue sarebbe una scelta molto migliore in questo caso. Puoi stare completamente tranquillo con un prefisso aggiuntivo, ad esempio: mycompany_current_requests_queue.

Scrivere le tue definizioni di metrica

Se hai requisiti particolari, ad esempio hai bisogno di grafici con una legenda e un Perf-O-Meter, ti serviranno le tue definizioni di metriche. Leggi il capitolo sulle metriche nell'articolo sulla programmazione dei plug-in di controllo basati su agenti

3.3. Metriche multiple

Puoi anche generare più metriche. Nelle definizioni queste sono separate dal carattere "pipe" (|), ad esempio in questo modo:

count1=42|count2=23

Sugli host Windows devi anteporre a queste pipe nello script un accento circonflesso (^) in modo che queste pipe compaiano anche nell'output:

mylocalcheck.bat
@echo off
echo 0 "My 2nd service" count1=42^|count2=23 A service with 2 graphs

Un output completo con due metriche avrà quindi un aspetto simile a questo:

root@linux# /usr/lib/check_mk_agent/local/mylocalcheck
0 "My 2nd service" count1=42|count2=23 A service with 2 graphs
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Una volta aggiunto anche il nuovo servizio al monitoraggio, nell'elenco dei servizi vedrai il testo relativo ai dettagli dello stato nel campo Summary. Cliccando sul servizio verrà visualizzata la pagina con i dettagli del servizio. Le metriche sono mostrate nel campo Details, e sotto vedrai i grafici del servizio generati automaticamente da Checkmk:

The service details with the two graphs.
Tip

Questo esempio utilizza una valutazione sull'host (0, 1 o 2) invece del calcolo dinamico (P). Eventuali valori di threshold aggiuntivi superati verrebbero ignorati qui nel grafico.

3.4. Calcolo dinamico dello stato

Nelle sezioni precedenti hai imparato come fornire valori per le metriche e usarli per generare grafici. Il passo logico successivo è ora quello di utilizzare i valori di soglia passati in aggiunta per un calcolo dinamico dello stato del servizio. Questo è esattamente ciò che Checkmk consente per rendere la preparazione dei dati ricevuti coerente con molti degli stati generati tramite i plug-in.

Se nel primo campo dell'output, che determina lo stato, inserisci la lettera P invece di un numero, lo stato del servizio verrà calcolato in base ai valori di soglia passati. Oltre al valore effettivo, i valori di soglia trasferiti vengono quindi visualizzati anche come una linea gialla e una rossa nel grafico.

Tip

Questo calcolo dinamico non significa che i valori di soglia possano essere modificati tramite le regole di monitoraggio definite in Checkmk. Per il calcolo effettivo vengono sempre utilizzati i valori di soglia forniti nel check locale.

L'output apparirà quindi così:

root@linux# /usr/lib/check_mk_agent/local/mylocalcheck
P "My 1st dynamic service" count=40;30;50 Result is computed from two threshold values
P "My 2nd dynamic service" - Result is computed with no values
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

… e la visualizzazione in una visualizzazione di servizio come questa:

“The service list with two dynamically calculated services.”

Questa visualizzazione differisce dalla precedente per due aspetti:

  • Per i servizi nello stato "WARN" o "CRIT", la scheda "Summary" del servizio mostra tutte le informazioni importanti relative alle metriche (nome, valore, thresholds). Ciò significa che puoi sempre vedere come questo stato è stato calcolato a partire da un valore. Per tutti gli altri stati, le informazioni sulle metriche vengono visualizzate solo nel campo "Details".

  • Se non vengono trasferite metriche, lo stato del servizio sarà sempre "OK".

Alternanza tra valutazione dinamica e statica dello stato

Può essere utile switchare dalla valutazione dinamica a quella statica dello stato nello script che fornisce il check locale. Prendiamo ad esempio uno script di backup che scrive un file di spool nel formato di un check locale. La valutazione dello stato in base alla durata del backup dovrebbe essere dinamica, e lo script dovrebbe quindi scrivere "P":

P "Backup stuff" duration=2342;1800;3600 Successfully created the backup. Good luck restoring.

Tuttavia, se il backup fallisce dopo poco tempo, lo stato è determinato dal valore di ritorno dello script di backup e non dai valori di threshold. In questo caso, lo script deve impostare lo stato in modo statico con un numero:

2 "Backup stuff" duration=123;1800;3600 Backup failed. Nuff said.

In questo caso, è semplicemente logico che nel grafico non vengano visualizzati valori di soglia, poiché non si tratta della durata richiesta fino al backup (fallito), ma del fatto che il backup non è andato a buon fine.

3.5. Valori di threshold superiori e inferiori

Alcuni parametri non hanno solo soglie superiori, ma anche soglie inferiori. Un esempio è la registrazione dell'umidità. In questi casi, il check locale offre la possibilità di inserire due valori di soglia per ciascuno degli stati "WARN" e "CRIT". Questi sono separati da due punti e rappresentano rispettivamente i valori di soglia inferiore e superiore.

Nella sintassi generale appare così:

metricname=value;warn_lower:warn_upper;crit_lower:crit_upper

… nell'esempio come questo:

root@linux# /usr/lib/check_mk_agent/local/mylocalcheck
P "My 3rd service" humidity=37;40:60;30:70 A service with lower and upper thresholds
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

… e nella visualizzazione di una visualizzazione di servizio come questa:

A service with state evaluation from lower and upper threshold values.

Se ti interessano solo i valori di threshold inferiori, ometti i campi relativi ai valori di threshold superiori:

root@linux# /usr/lib/check_mk_agent/local/mylocalcheck
P "My 4th dynamic service" count_lower=37;40:;30: A service with lower thresholds only
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Con questo output, specifichi che il servizio deve diventare "WARN" se il valore è inferiore a 40 e "CRIT" se è inferiore a 30: il servizio riceverà quindi lo stato "WARN" se il valore specificato è 37.

Tip

Il sistema di metriche e grafici in Checkmk è limitato alle soglie superiori per motivi di semplicità. Ciò significa che, mentre la determinazione dello stato del servizio funziona come previsto, le informazioni visualizzate nel componente di metriche e grafici ignorano le soglie inferiori. Per questo motivo, elementi come le linee gialle e rosse nei grafici, i Perf-O-Meter e gli "Service performance data" sono completamente assenti nella GUI di Checkmk quando vengono utilizzate solo le soglie inferiori.

3.6. Uscite su più righe

È disponibile anche l'opzione per distribuire un output su più righe. Poiché Checkmk gira su Linux, puoi utilizzare la sequenza di escape '\n' per forzare un'interruzione di riga. Anche se, a causa del linguaggio di scripting, la barra rovesciata stessa deve essere preceduta da un carattere di escape, verrà interpretata correttamente da Checkmk:

root@linux# /usr/lib/check_mk_agent/local/mylocalcheck
P "My service" humidity=37;40:60;30:70 My service output\nA line with details\nAnother line with details
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Nei dettagli del servizio queste righe aggiuntive saranno visibili sotto l'Summary:

“The service details with a multi-line output.”

4. Esecuzione asincrona

L'output dei controlli locali, come quello dei plug-in dell'agente, può essere memorizzato nella cache. Questo può essere necessario se uno script ha un tempo di elaborazione più lungo. Uno script di questo tipo viene quindi eseguito in modo asincrono e solo in un intervallo di tempo definito, e l'ultimo output viene memorizzato nella cache. Se l'agente viene interrogato nuovamente prima che scada il tempo, utilizza questa cache per il check locale e la restituisce nell'output dell'agente.

Tip

La memorizzazione nella cache è disponibile solo per AIX, FreeBSD, Linux, OpenWrt e Windows. Su altre piattaforme, usa i cronjob in combinazione con la directory spool.

4.1. Configurazione di Linux

Su Linux o su un altro sistema operativo Unix-like, qualsiasi plug-in può essere eseguito in modo asincrono. Per un check locale, la configurazione necessaria è molto simile a quella di un plug-in. Per farlo, crea una sottodirectory con il nome corrispondente al numero di secondi per cui vuoi che l'output venga memorizzato nella cache e inserisci il tuo script in quella sottodirectory.

Nell'esempio seguente, il check locale verrà eseguito solo ogni 10 minuti (600 secondi):

root@linux# /usr/lib/check_mk_agent/local/600/mylocalcheck
2 "My cached service" count=4 Some output of a long running script
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

I dati memorizzati nella cache vengono scritti in una directory di cache.

Per un servizio che fornisce dati memorizzati nella cache, le informazioni specifiche della cache vengono aggiunte alla visualizzazione del servizio:

“A service that outputs cached data.”

4.2. Configurazione di Windows

Su Windows, la configurazione è analoga a quella di un plug-in dell'agente. Invece di utilizzare una sottodirectory speciale come su Linux & Co, le opzioni vengono impostate in un file di configurazione:

C:\ProgramData\Checkmk\agent\check_mk.user.yml
local:
    enabled: yes
    execution:
        - pattern     : $CUSTOM_LOCAL_PATH$\mylocalcheck.bat
          async       : yes
          run         : yes
          cache_age   : 600
Copia il contenuto del file negli appunti
Contenuto del file copiato con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Come puoi vedere sopra, su Windows puoi configurare separatamente l'esecuzione asincrona (con async) e l'intervallo di tempo (con cache_age).

In alternativa, su Windows puoi anche effettuare la configurazione in agent bakery.

5. Distribuzione tramite agent bakery

CEE Se stai già utilizzando Agent Bakery nelle edizioni commerciali, puoi distribuire gli script con i controlli locali a diversi host anche in questo modo.

Per farlo, crea prima la directory custom sul server Checkmk come utente dell’istanza sotto ~/local/share/check_mk/agents/ e al suo interno una struttura di sottodirectory per ogni pacchetto di check locali:

OMD[mysite]:~$ cd ~/local/share/check_mk/agents
OMD[mysite]:~/local/share/check_mk/agents$ mkdir -p custom/mycustompackage/lib/local/
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

La directory del pacchetto nell'esempio sopra è mycustompackage. Sotto di essa, la directory lib contrassegna lo script come plug-in di controllo o come check locale. La directory successiva local assegna poi il file in modo esplicito. Metti lo script con il check locale in questa directory.

Tip

Su Linux, puoi configurare l'esecuzione asincrona in modo analogo a quanto descritto nel capitolo precedente creando ora una directory sotto custom/mycustompackage/lib/local/ con il numero di secondi dell'intervallo di esecuzione e inserendo lì lo script. Su Windows, puoi utilizzare i set di regole Set execution mode for plug-ins and local checks e Set cache age for plug-ins and local checks. Questi e altri set di regole per i controlli locali su Windows sono disponibili nell'agent bakery alla voce Agent rules > Windows agent options.

Nell'ambiente di configurazione di Checkmk, la directory dei pacchetti mycustompackage verrà visualizzata come nuova opzione: Apri Setup > Agents > Windows, Linux, Solaris, AIX, crea una nuova regola con Agents > Agent rules > Generic agent options > Deploy custom files with agent e seleziona il pacchetto appena creato:

“Rule for storing the script files in a package directory.”

Checkmk integrerà quindi autonomamente il check locale nel pacchetto di installazione per il sistema operativo appropriato. Dopo che le modifiche sono state attivate e l'agente è stato aggiornato, la configurazione sarà completa. Ora basta solo distribuire gli agenti.

6. Analisi degli errori

6.1. Test dello script

Se riscontri dei problemi con uno script scritto da te, dovresti controllare le seguenti potenziali fonti di errore:

  • Lo script si trova nella directory corretta?

  • Lo script è eseguibile e i permessi di accesso sono corretti? Questo è particolarmente importante se non stai eseguendo l'agente o lo script con l'account root o LocalSystem.

  • L'output è conforme alla sintassi indicata? L'output del check locale deve essere conforme alla sintassi descritta nei capitoli Creazione dello script e Metriche. In caso contrario, non è possibile garantire un'esecuzione senza errori.

    Possono sorgere problemi ed errori in particolare quando un check locale è destinato a eseguire un'attività che richiede un plug-in di controllo completo, ad esempio quando l'output del check locale stesso contiene un header di sezione o la definizione di un nome host come quello utilizzato durante il trasporto di dati piggyback.

Tip

Su Linux, quando lo script agente o il plug-in dell'agente viene chiamato direttamente in una shell, potrebbero essere disponibili variabili d'ambiente diverse rispetto a quando vengono chiamati dall'Agent Controller dell'agente Checkmk. Su Windows, l'Agent Controller viene eseguito anche con l'account LocalSystem, ma la chiamata nel terminale viene effettuata con un utente normale o un amministratore. Oltre all'ambiente diverso, ciò può significare che mancano alcuni permessi. Per poter analizzare l'output del script agente in modo il più possibile simile alle condizioni in cui viene chiamato l'agente Checkmk, dovresti utilizzare l'Agent Controller in modalità dump, se possibile.

6.2. Testare l'output dell'agente sull'host di destinazione

Se lo script è corretto, l'agente può essere eseguito sull'host. Con sistemi operativi Unix-like come Linux, BSD, ecc., è disponibile il comando riportato di seguito. Con l'opzione -A è possibile specificare il numero di righe aggiuntive da visualizzare dopo un risultato positivo. Questo numero può essere personalizzato in base al numero di righe di output previste:

root@linux# cmk-agent-ctl dump | grep -v grep | grep -A2 "<<<local"
<<<local:sep(0)>>>
P "My service" humidity=37;40:60;30:70 My service output\nA line with details\nAnother line with details
cached(1618580356,600) 2 "My cached service" count=4 Some output of a long running script
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Nell'ultima riga, puoi riconoscere un servizio memorizzato nella cache grazie alle informazioni "cached" che precedono, con il tempo Unix corrente e l'intervallo di esecuzione in secondi.

Su Windows, puoi ottenere un risultato molto simile con PowerShell e la Cmdlet Select-String, proprio come con il comando grep su Linux. Nel comando seguente, le due cifre dopo il parametro Context determinano quante righe devono essere visualizzate prima e dopo il risultato:

PS C:\Program Files (x86)\checkmk\service> ./cmk-agent-ctl.exe dump | Select-String -Pattern "<<<local" -Context 0,3
<<<local:sep(0)>>>
0 "My 1st service" - This static service is always OK

cached(1618580520,600) 1 "My cached service on Windows" count=4 Some output of a long running script
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!
Tip

A seconda dell'ambiente, del linguaggio di programmazione utilizzato, della versione di Windows e di alcune altre condizioni, spesso ti trovi a dover gestire il set di caratteri UTF-16 in Windows. Inoltre, in questo ambiente si incontra spesso la combinazione di Carriage Return e Line Feed per le interruzioni di riga. Tuttavia, Checkmk, essendo un'applicazione Linux, si aspetta UTF-8 e semplici Line Feed senza se e senza ma. Il nostro articolo sulla directory spool include un capitolo che spiega come risolvere i problemi relativi al set di caratteri.

6.3. Testare l'output dell'agente sul server Checkmk

Come ultimo passo, l'elaborazione dell'output dello script può essere testata anche sul server Checkmk con il comando `cmk` — una volta per la scoperta del servizio:

OMD[mysite]:~$ cmk -IIv --detect-plugins=local mycmkserver
Discovering services and host labels on: mycmkserver
mycmkserver:
...
+ EXECUTING DISCOVERY PLUGINS (1)
  2 local
SUCCESS - Found 2 services, no host labels
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

… e anche l'elaborazione dell'output del servizio con un comando simile:

OMD[mysite]:~$ cmk -nv --detect-plugins=local mycmkserver
+ FETCHING DATA
Get piggybacked data
My cached service    Some output of a long running script(!!), Cache generated 6 minutes 30 seconds ago, cache interval: 10 minutes 0 seconds, elapsed cache lifespan: 68.71%
My service           My service output, Humidity: 37.00 (warn/crit below 40.00/30.00)(!)
[agent] Success, [piggyback] Success (but no data found for this host), execution time 3.3 sec ...
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Per entrambi i comandi abbiamo abbreviato l'output eliminando le righe non rilevanti per questo tema.

In alternativa, puoi aprire l'elenco dei servizi dell'host nel monitoraggio, andare all'Check_MKe del servizio e alla sua colonna "Icons". Lì puoi selezionare la voce di menu "Download agent output" per recuperare un file di testo contenente l'output completo dell'agente.

Se ci sono errori in un check locale, Checkmk li identificherà nell'output del servizio. Questo vale anche per metriche errate, per informazioni false o incomplete nell'output dello script o per uno stato non valido. Questi messaggi di errore dovrebbero aiutarti a identificare rapidamente gli errori in uno script.

7. File e directory

Tutti i percorsi specificati si riferiscono a pacchetti di installazione che sono stati creati con configurazioni standard. Se hai installato uno script agente non compresso o hai modificato le directory di installazione utilizzando una regola Bakery, cerca i percorsi nello script stesso o adatta i percorsi alla tua configurazione.

7.1. Directory dello script sull'host di destinazione

In queste directory si memorizzano i controlli locali. I controlli locali possono essere qualsiasi file eseguibile.

Percorso Sistema operativo

/usr/lib/check_mk_agent/local/

AIX, Linux e Solaris

%ProgramData%\checkmk\agent\local

Windows

7.2. Directory della cache sull'host di destinazione

I dati memorizzati nella cache delle singole sezioni, inclusa la sezione "local", vengono salvati qui e ricollegati all'agente ad ogni esecuzione, purché i dati siano validi.

Percorso Sistema operativo

/var/lib/check_mk_agent/cache/

AIX, Linux e Solaris


Last modified: Mon, 15 Dec 2025 20:51:39 GMT via commit f8bbb2e26
In questa pagina