![]() |
This article is currently under construction and is being expanded on a regular basis. |
![]() |
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. |
![]() |
Questo articolo è attualmente in costruzione e viene ampliato regolarmente. |
1. Gli elementi essenziali per il monitoraggio dei file di log
La storia del monitoraggio dei file di log è una storia piena di malintesi. I malintesi iniziano già quando guardiamo cosa sono le voci di log e cosa, invece, visualizzano i servizi in esecuzione con Checkmk. Le linee o le voci dei file di log sono "per natura" basate su eventi. Per saperne di più sulla differenza tra eventi e stati, leggi l'articolo Principi di base del monitoraggio con Checkmk.
In Checkmk aggiriamo questo problema definendo quando un servizio che mappa uno o più file di log assume uno stato critico. Di regola, definiamo "diventa critico" quando il file di log contiene messaggi che sono
nuovi,
non confermati e
critici.
Anche l'uso di logwatch deve essere moderato. Logwatch è adatto per un uso limitato e non per l'elaborazione di gigabyte o terabyte di file di log. Esistono sicuramente strumenti più adatti a questo scopo. Consigliamo vivamente di usare logwatch solo su base ad hoc e non di routine. Come vedrai più avanti in questo articolo, è facile effettuare una parte importante del pre-filtraggio sull'host monitorato.
2. Prerequisiti
Logwatch è un programma Python e quindi richiede un ambiente Python sull'host. Python è già installato nella maggior parte delle distribuzioni Linux e da qualche tempo anche Solaris include Python 3.x. Se vuoi monitorare i file di log su un host Windows, ci sono vari modi per farlo.
Gli utenti delle nostre edizioni commerciali possono configurare comodamente logwatch tramite GUI e, utilizzando l'Agent bakery, inserire il plug-in nel pacchetto dell'agente. Non appena Checkmk si accorge che stai configurando un plug-in dell'agente basato su Python per un host Windows, l'agente riceverà anche un ambiente virtuale Python (venv
).
Se stai utilizzando una delle nostre edizioni commerciali ma non l'Agent bakery, consulta la sezione seguente per i tuoi host Windows.
2.1. Python per Windows in Checkmk Raw
Installazione di Checkmk Python (venv
)
Il pacchetto di installazione dell'agente Checkmk Raw per Windows non contiene un ambiente Python. Tuttavia, un file corrispondente è già disponibile sul tuo server Checkmk. Puoi trovare questo file chiamato python-3.cab
nella directory ~/share/check_mk/agents/windows
o in Checkmk tramite Setup > Agents > Windows > Windows Agent. Copia questo file nel tuo host Windows nella directory C:\Program Files (x86)\checkmk\service\install
.
Esiste già un file con questo nome e una dimensione di 0 byte. Devi sovrascrivere questo file con la versione del server Checkmk. Poi riavvia il servizio agente Checkmk. In Windows PowerShell con diritti di amministratore, puoi farlo con il seguente comando:
net stop checkmkservice; net start checkmkservice
Una volta riavviato il servizio di Windows, l'ambiente virtuale Python sarà stato installato automaticamente.
Installazione di un Python completo
In alternativa, puoi anche scaricare e installare un pacchetto Python completo da python.org. Assicurati di attivare le seguenti opzioni durante l'installazione:
Install Python 3.x for all users. In questo modo si attiverà automaticamente anche l'opzione Precompile standard library, che è una buona cosa.
Add Python to environment variables
Se vuoi iniziare i test subito dopo l'installazione di Python, è essenziale riavviare checkmkservice
tramite il Task Manager di Windows o con i comandi indicati sopra, altrimenti il servizio non saprà delle nuove variabili d'ambiente.
3. Monitoraggio dei file di log
3.1. Installazione sull'host
Inizia installando il plug-in dell'agente. Per farlo, copia il file ~/share/check_mk/agents/plugins/mk_logwatch.py
dal server Checkmk all'host nella directory /usr/lib/check_mk_agent/plugins/
(Linux) o C:\ProgramData\checkmk\agent\plugins
(Windows). Assicurati che il file sia eseguibile sull'host. Ulteriori informazioni su questo passaggio sono disponibili nella sezione "Installazione manuale" negli articoli Monitor Linux e Monitor Windows.
Gli utenti delle nostre edizioni commerciali possono selezionare Text logfiles (Linux, Solaris, Windows) durante la configurazione della regola Deploy the Logwatch plugin and its configuration per distribuire automaticamente il plug-in dell'agente con l'agente stesso.
3.2. Configurazione di Logwatch
In linea con le considerazioni iniziali, logwatch non monitora ogni cosa senza essere stato configurato. Pertanto, dopo aver installato il plug-in dell'agente, è essenziale creare un file di configurazione per l'host da monitorare.
Configurazione attraverso l'agent bakery
Nelle edizioni commerciali, per prima cosa richiama la regola per il plug-in dell'agente Setup > Agents > Windows, Linux, Solaris, AIX > Agent rules > Text logfiles (Linux, Solaris, Windows). L'impostazione predefinita Deploy the Logwatch plugin and its configuration dovrebbe normalmente essere lasciata così com'è. Tuttavia, se vuoi o devi trasferire il file di configurazione logwatch.cfg
all'host in un modo diverso, l'opzione Deploy the Logwatch plugin without configuration è ancora disponibile.
Continua con l'opzione Retention period. Il valore predefinito è di un minuto, che corrisponde anche all'intervallo di controllo preimpostato in Checkmk. Questo valore dovrebbe essere sempre almeno uguale all'intervallo di controllo. Questa opzione serve principalmente a garantire che non vengano persi messaggi di log a causa del rilevamento di un servizio o dell'esecuzione manuale di cmk -d myhost
. Ulteriori dettagli sono disponibili nell'aiuto inline dell'opzione e nel Werk #14451 con cui è stata introdotta questa opzione.
Ora arriva la sezione della regola in cui le cose si fanno davvero interessanti:Configure a logfile section. Inizieremo direttamente con il più grande ostacolo degli ultimi anni. Nel campo Patterns for logfiles to monitor dovrai specificare i file di log che vuoi monitorare. Puoi farlo individualmente ed esplicitamente o con i cosiddetti modelli glob (glob in breve). Qui stiamo usando il modulo Python glob
, per il quale esiste una documentazione dettagliata su docs.python.org. Tuttavia, vorremmo fornirti alcuni esempi utili proprio qui.
Ad esempio, se inserisci qui /var/log/my.log
, logwatch monitorerà solo questo singolo file di log. Se invece inserisci qui /var/log/*log
, logwatch monitorerà tutti i file che terminano con la stringa di caratteri log
e che si trovano direttamente nella directory /var/log
.
Se vuoi monitorare i file di log in tutte le sottodirectory dirette di /var/
, puoi farlo con il seguente glob, ad esempio: /var/*/*log
. Non offriamo esplicitamente il glob **
per la ricerca ricorsiva in una struttura di directory, perché ci ritroveremmo con un elenco di risultati troppo grande e troppo velocemente e lasceremmo alle spalle lo scopo reale di logwatch.
La tabella seguente ti fornisce alcuni esempi utili di come puoi utilizzare i globi per monitorare effettivamente i file da monitorare senza doverli specificare tutti singolarmente:
Schema Glob | Spiegazione | Esempio |
---|---|---|
|
Tutti i file in |
|
|
Tutti i file in tutte le sottodirectory dirette di |
|
|
Tutti i file in |
|
|
Tutti i file in |
|
Quindi, per quanto riguarda i file che vengono "abbinati" nel primo passaggio, non utilizziamo espressioni regolari e questo potrebbe essere sufficiente per raggiungere tutti i file che desideri.
Tuttavia, se ora hai bisogno di filtrare ulteriormente, puoi utilizzare l'opzione Regular expression for logfile filtering per applicare le espressioni regolari ai risultati del passo 1 in un secondo passo.
Se hai raccolto tutti i file /var/log/
e le sue sottodirectory dirette nel primo passaggio con /var/log/
e /var/log/*/*
, puoi utilizzare l'espressione regolare error.log$|err$
per ridurre l'elenco dei risultati a tutti i file che terminano con err.log
o err
. Attenzione: Il "punto" (.) è ancora una volta un carattere arbitrario e potrebbe, ad esempio, lasciare i file /var/log/apache2/error.log
, /var/log/mail.err
e /var/log/cups/error_log
.
Come puoi vedere, ti abbiamo già fornito due strumenti validi e potenti per la selezione dei file da monitorare, in modo che logwatch possa controllare anche gli altri parametri e contenuti in modo molto rapido nella fase successiva, utilizzando un elenco di file gestibile. Puoi approfondire la tua conoscenza di quest'ultimo aspetto nell'articolo Espressioni regolari in Checkmk.
Con l'opzione Restrict the length of the lines puoi indicare a logwatch di troncare le righe troppo lunghe dopo il numero di caratteri specificato.
La seguente opzione Watch the total size of the log file è utile per riconoscere una rotazione difettosa dei log. Se imposti 100 MiB, riceverai un avviso ogni volta che un determinato file di log avrà superato la dimensione specificata.
Il numero massimo di righe che logwatch controlla per ogni esecuzione e per ogni file può essere limitato con Restrict number of processed messages per cycle e con Restrict runtime of logfile parsing puoi assicurarti che logwatch non si soffermi troppo a lungo su un singolo file che potrebbe essere stato invaso da migliaia e migliaia di nuove voci dall'ultimo controllo.
Se attivi una delle ultime due opzioni, devi anche specificare cosa succede se il limite specificato viene superato. Con l'impostazione predefinita, il servizio associato diventa critico e ricevi un messaggio che ti informa che sono state saltate delle righe o che è stato superato il tempo massimo di esecuzione.
Handling of context messages È un'opzione con la quale il volume dei dati trasferiti può diventare molto grande molto rapidamente. Quindi pensa bene se per te è importante solo il messaggio di log che ritieni debba generare un CRIT o un WARN o se tutte le righe che sono state aggiunte dall'ultima esecuzione di logwatch devono essere trasferite al server Checkmk. Per i file di log di piccole dimensioni che crescono solo di poche righe al minuto, l'impostazione Do transfer context non presenta certamente problemi. Tuttavia, se su un host vengono monitorati 50 file di log che improvvisamente contengono 100.000 nuove righe con una lunghezza di 500 caratteri, siamo già nell'ordine dei gigabyte. In un evento del genere, potrebbe essere sufficiente vedere che è stato aggiunto un gran numero di nuovi messaggi dall'ultimo controllo per avviare un controllo direttamente sull'host interessato.
Se hai bisogno del contesto, cioè delle righe prima e dopo il messaggio di log che ti interessa, puoi limitarlo a un certo numero di righe prima e dopo con l'opzione Limit the amount of context data sent to the monitoring server.
Con Limit the amount of data sent to the monitoring server puoi limitare la dimensione dei dati trasferiti in generale.
Process new logfiles from the beginning Questo a volte suscita stupore, perché logwatch non "riconosce" i problemi presenti nei file di log e li trasmette al server Checkmk. A nostro avviso, nulla è più vecchio del giornale di ieri e lo stesso vale per i messaggi di log che erano già presenti in un file di log prima della prima esecuzione di logwatch. Durante questa prima esecuzione, logwatch non fa altro che prendere nota del numero di righe già presenti nel rispettivo file di log. Solo durante la seconda esecuzione i file vengono controllati per verificarne il contenuto, ovvero le righe appena aggiunte.
Logwatch si basa sull'effettiva capacità di leggere i file di log. Sotto il cofano, logwatch fa di tutto per riconoscere la codifica di ogni file di log. Tuttavia, le codifiche dei caratteri troppo esotiche possono causare problemi. Se puoi specificare la codifica dei caratteri dei file di log monitorati, UTF-8 è un'ottima scelta. Se questo non è possibile e logwatch non riesce a scoprire la codifica, puoi specificarla esplicitamente con Codec that should be used to decode the matching files.
Con Duplicated messages management, se attivi questa opzione, puoi ancora una volta risparmiare un po' di banda e l'output successivo in Checkmk sarà anche più leggibile. Se attivi Filter out consecutive duplicated messages in the agent output, Logwatch conta quante volte una riga è stata ripetuta e lo scrive di conseguenza nell'output invece di ripetere le righe.
Infine, le righe dei file di log che ti interessano vengono ora descritte utilizzando un'espressione regolare e assegnate a uno stato. Se vuoi che ogni riga contenente la parola panic
porti a un CRIT in Checkmk, è sufficiente inserire panic
nel campo Pattern(Regex) dopo aver fatto clic su Add message pattern sotto Regular expressions for message classification. Le funzioni delle altre opzioni offerte sono già descritte in modo molto dettagliato nell'aiuto inline a questo punto e non vengono duplicate qui.
Un punto da notare: lo stato OK può sembrare confuso a prima vista. Viene utilizzato per trasferire le righe da un file di log al server Checkmk per poi effettuare la classificazione finale. Questo ci porta a un punto importante che dimostra quanto logwatch possa essere flessibile se usato correttamente.
Tutte le opzioni spiegate in questa sezione diventano voci nel file di configurazione già citato, che viene memorizzato sul rispettivo host. Se ora vuoi apportare delle modifiche alla classificazione di alcuni messaggi, dovrai prima modificare la regola, quindi creare l'agente e installarlo.
In alternativa, puoi prima trasferire tutti i messaggi interessanti al server Checkmk (ad esempio con lo stato OK ) e poi sul server Checkmk (ri)classificarli con la regola Logfile patterns. In questo modo puoi risparmiarti la fatica di preparare e distribuire il nuovo agente e, dopo aver personalizzato la regola di cui sopra, dovrai attivare rapidamente le modifiche solo una volta. Puoi scoprire come fare esattamente nel capitolo Riclassificazione con modelli di file di log.
Configurazione manuale
In Checkmk Raw puoi configurare il plug-in dell'agente come al solito tramite un file di testo. Di regola, logwatch cerca un file chiamato logwatch.cfg
nelle directory /etc/check_mk
(Linux) o c:\ProgramData\checkmk\agent\config\
(Windows). Una configurazione (quasi) minima potrebbe essere la seguente:
"/var/log/my.log" overflow=C nocontext=True
C a critical message
W something that should only trigger a warning
Per prima cosa, inserisci sempre un pattern glob, seguito da tutte le opzioni da applicare, seguito - con un rientro di uno spazio - da una lettera che rappresenta lo stato o la funzione desiderata e infine da un'espressione regolare che viene confrontata con ogni riga del file di log. Con la configurazione precedente, tutte le nuove righe aggiunte al file di log /var/log/my.log
dall'ultima esecuzione di logwatch verrebbero controllate per i due pattern a critical message
e something that should only trigger a warning
.
Puoi trovare un esempio di configurazione molto completo applicabile a un utente dell'istanza nel file ~/share/check_mk/agents/cfg_examples/logwatch.cfg
.
Poiché tutte le opzioni che si possono specificare in un file di configurazione di questo tipo sono già state spiegate nella sezione Configurazione tramite l'agent bakery, qui di seguito ne seguirà solo un elenco e una breve descrizione. Per una spiegazione dettagliata, fai riferimento alla sezione precedente.
Opzione in logwatch.cfg
|
Controparte | Esempio | Nota |
---|---|---|---|
|
Regular expression for logfile filtering |
|
|
|
Codec that should be used to decode the matching files |
|
|
|
Restrict number of processed messages per cycle |
|
|
|
Restrict runtime of logfile parsing |
|
|
|
In caso di overflow |
|
|
|
Restrict the length of the lines |
|
|
|
Limit the amount of data sent to the monitoring server |
|
Dimensione indicata in byte |
|
Duplicated messages management |
|
|
|
Handling of context messages |
|
|
|
Limit the amount of context data sent to the monitoring server |
|
4. Raggruppamento dei file di log
Il controllo appartenente al plug-in dell'agente logwatch
normalmente crea un servizio separato per ogni file di log. Definendo i gruppi di servizi utilizzando la regola Logfile Grouping, puoi passare al controllo logwatch_groups
.
Ulteriori informazioni saranno presto aggiunte. Fino ad allora, consulta l'aiuto inline della regola Logfile Grouping.
5. Riclassificazione con i modelli dei file di log
Questa sezione verrà aggiunta presto. Fino ad allora, consulta l'aiuto inline della regola Logfile patterns.
6. Inoltro alla Console degli Eventi
Oltre al processo diretto dei messaggi di log in Checkmk e all'eventuale riclassificazione con la regola Logfile patterns, esiste anche la possibilità di inoltrare le linee di registro ottenute da logwatch alla Console degli Eventi. Questa operazione viene eseguita con la regola Logwatch Event Console Forwarding ed è descritta nell'articolo La Console degli Eventi.
7. Logwatch nel monitoraggio
Nel monitoraggio, la visualizzazione varia a seconda del plug-in di controllo utilizzato.
Se utilizzi logwatch
o logwatch_groups
, dopo il necessario rilevamento del servizio, troverai un servizio per file di log o per gruppo di servizi (vedi Raggruppamento di file di log) che inizia con Log
, seguito dal percorso completo del file o dal nome del gruppo.
Se inoltri i tuoi messaggi di log alla Console degli Eventi, vedrai un servizio per ogni inoltro, a seconda del set di regole logwatch Event Console Forwarding, che ti informa sul numero di messaggi di log inoltrati. Nel caso dell'inoltro in bundle tramite il plugin logwatch_ec
, questo servizio si chiama Log Forwarding. Se utilizzi l'opzione Separate check e quindi il plugin logwatch_ec_single
, il nome del servizio inizia anch'esso con Log
seguito dal percorso del file di log. Questo servizio ti informa anche sul numero di messaggi inoltrati e se un file di log non può essere letto.
8. File e directory
Tutti i percorsi del server Checkmk sono specificati relativamente alla directory dell'istanza (es. /omd/sites/mysite
).
Posizione | Percorso | Significato |
---|---|---|
Server Checkmk |
|
file di configurazione di esempio |
Server Checkmk |
|
Plugin per agenti di Python 3 con spiegazioni |
Server Checkmk |
|
Plugin per agenti Python 2 con spiegazioni |
Host Linux |
|
File di configurazione - creato dall'agent bakery o manualmente |
Host Linux |
|
File di stato di mk_logwatch |
Linux host |
|
Posizione dei singoli batch che mk_logwatch crea per ogni query |
Host Windows |
|
File di configurazione - creato dall'Agent bakery o manualmente |
Host Windows |
|
Posizione di archiviazione dei file di stato di mk_logwatch |
Host Windows |
|
Percorso di archiviazione dei singoli batch che mk_logwatch crea per ogni query |