Il monitoraggio delle applicazioni end-to-end è tanto vasto quanto essenziale nel monitoraggio delle infrastrutture. Ne abbiamo parlato nella parte precedente, intitolata "Monitoraggio E2E: Assicuratevi che le vostre applicazioni siano in esecuzione". Questo era il "cosa", mentre il presente articolo è il "come".
Tratteremo due argomenti principali: come impostare la macchina di sviluppo in modo da poter avviare, eseguire il debug e sviluppare facilmente un test di Robot Framework in VS Code. In secondo luogo, vedremo come eseguire tutti i passaggi necessari per integrare il test in Checkmk utilizzando lo scheduler Robotmk.
Nota: L'articolo si basa sulla versione 2 di Robotmk, che fa parte di Checkmk dalla versione 2.3. Questa versione si concentra sugli host Windows come nodi di test; se avete bisogno di eseguire i test su host Linux, la versione 1 di Robotmk è ancora disponibile come MKP e può essere scaricata dalla pagina Checkmk Exchange.
In breve: ecco come funziona Robotmk v2
- Sul lato client, Robotmk non è più un plug-in asincrono affiancato all'agente Checkmk.
- Lo scheduler legge le configurazioni di esecuzione (chiamate "piani") da un file di configurazione JSON. I piani sono configurati tramite la regola bakery.
- Ogni piano può essere eseguito nel suo intervallo individuale. Ciò consente esecuzioni parallele, ma è supportata anche l'esecuzione sequenziale.
- Nessun problema di installazione di Python grazie all'integrazione dello strumento open source RCC.
- Lo scheduler, il plug-in agente, il binario RCC e la configurazione JSON vengono distribuiti insieme al pacchetto MSI.
- Il plug-in dell'agente Robotmk è responsabile della lettura dei risultati dei piani eseguiti e del loro passaggio nell'output dell'agente.
- Il concetto di servizi di scheduler, piano e test consente notifiche ben mirate e differenziate.
Configurazione della macchina
Il nostro esempio inizia su una macchina virtuale Windows 11 nuova di zecca, senza Python, Robot Framework o librerie correlate installate. Questo ambiente incontaminato è fondamentale perché rispecchia lo scenario di un autore di test che vuole avviare un test di Robot Framework con VS Code.
Sulla macchina è installato solo l'agente Checkmk Vanilla per un monitoraggio di base:

In questo esempio, la macchina servirà per due scopi:
- è l'host dove inizieremo e svilupperemo il test con VS Code
- è anche il "nodo di test Robotmk" monitorato.
In realtà, si tratterà probabilmente di due macchine diverse.
Anatomia di un file di suite di Robot Framework
Esaminiamo un test web di base basato sulla libreria Browser per Robot Framework. È possibile scaricare l'esempio da qui:
https://github.com/Checkmk/robotmk-examples/tree/main/templates/web
Per una prima esecuzione manuale, è bene salvare la directory nella cartella Documenti, ad esempio:

È altamente consigliabile mantenere le suite del Robot Framework in cartelle dedicate. Questo non solo aiuta a gestire le suite, ma semplifica anche l'integrazione con altri strumenti o il controllo di versione con git. Nel nostro caso, nella cartella Documenti, c'è una sottocartella denominata cmk_google_search
che contiene la suite Robot Framework di esempio.
Il file cmk_google_search.robot
all'interno della cartella è chiamato "suite di Robot Framework". Nella terminologia di Robot Framework, una "suite" è una raccolta di casi di test.
Per modificare i file della suite di Robot Framework è possibile utilizzare qualsiasi editor di testo. Per una migliore esperienza utente e per la possibilità di eseguire e debuggare i test, si consiglia vivamente di installare VS Code e, al suo interno, l'ottima estensione RobotCode. Questa estensione fornisce completamento del codice, debug, refactoring e altro ancora per facilitare il lavoro sulle suite di test di Robot Framework.
Ecco come appare una suite di Robot Framework in VS Code. Probabilmente noterete che ci sono linee blu con stelle; esse contrassegnano le diverse sezioni con il loro significato speciale:

- Impostazioni: È il luogo in cui è possibile scrivere la documentazione, importare una o più delle innumerevoli librerie open source o fare riferimento a file di risorse - un trucco intelligente per creare codice manutenibile e riutilizzabile, tra l'altro.
- Variabili: Come suggerisce il nome, questa sezione serve a creare variabili a livello di suite, il che significa che possono essere accessibili (e modificate) in tutti i casi di test. Ad esempio,
${SEARCH_ENGINE}
contiene l'URL del motore di ricerca, mentre${SEARCH_TERM}
contiene la stringa da ricercare. - Casi di test: Dove si arriva alla prova dei fatti. Basta scrivere il nome del caso di test e, con un'indentazione, le parole chiave che devono essere eseguite.
- Parole chiave: Le parole chiave utilizzate in questo esempio provengono tutte dalla libreria del browser. Solo la parola chiave "Sleep" proviene dalla libreria "Builtin the Image in" del Robot Framework. Suggerimento: i casi di test possono essere ulteriormente semplificati definendo le parole chiave dell'utente.
Questo è praticamente tutto! Le due parti principali dell'articolo che seguono si concentrano su come lavorare con la suite come utente e su come configurare Robotmk per utilizzarla.
In entrambi i casi, lo strumento "RCC" svolge un ruolo molto importante, che spiegheremo per primo.
Il ruolo di RCC in Robotmk
Robot Framework e le sue librerie sono per la maggior parte scritte in Python, con una minoranza di esse in JavaScript. Per far funzionare Robot Framework, è necessario installare manualmente gli interpreti Python e JavaScript e i relativi pacchetti sul nodo di test. Le cose si complicano quando ogni suite RF ha altre dipendenze: senza "scripting foo", non è possibile utilizzare più ambienti su una singola macchina, anche nei casi in cui non necessitano di un insieme imprevedibile di linguaggi di scripting.
In qualsiasi scenario di test, anche la coerenza è fondamentale. È necessario assicurarsi che le configurazioni degli ambienti siano standardizzate tra le varie macchine di test e che possano essere facilmente ricreate in modo prevedibile. Per usare un famoso detto: deve "funzionare anche sulla tua macchina"...
Questo è ciò che lo strumento RCC fa per noi: crea automaticamente gli ambienti in base a un file di dipendenze conda.yaml
Avviare i test a mano
Il primo passo è scaricare RCC dalla pagina di download ufficiale.
Al momento in cui scriviamo, la versione 17.18 è l'ultima versione stabile da utilizzare.
Inserite il file rcc.exe
in una cartella bin
, ad esempio sotto la cartella del profilo utente di Windows:
c:\Users\simon_meggle\bin
Aggiungete quindi questo percorso alla variabile d'ambiente utente %PATH%
nelle "Impostazioni avanzate" del sistema Windows:

Proviamo a vedere se RCC è in grado di creare l'ambiente per la nostra suite di esempio.
Aprite un nuovo CMD nella cartella dell'esempio e digitate:
rcc task shell
Cosa fa questo comando?
Legge le specifiche dell'ambiente dal file conda.yaml
, crea l'ambiente (operazione che può richiedere alcuni minuti) e vi porta direttamente nell'ambiente attivato. "Attivato" qui significa che, magicamente, ora potete eseguire Python, Node.js, robot - qualsiasi cosa abbiate specificato di installare nel file conda.yaml
.
Da un ambiente attivato, il modo più semplice per eseguire Robot Framework è la riga di comando. Provate e stupitevi:
robot tests.robot
Funziona, ma il divertimento inizia quando si usa VS Code come editor. Dato che si è già in un ambiente attivato, ha senso chiamare VS Code direttamente da qui e tutto il lavoro è fatto:
code .
Il che significa: aprire la cartella corrente (=il punto), in VS Code.
Si noterà che l'editor ora mostra due pulsanti verdi "play" e l'icona della provetta sul lato sinistro rivela una struttura ad albero del file della suite e dei suoi test.

Premendo uno di questi pulsanti "play" si avvierà il test come da linea di comando.
Congratulazioni: ora siete pronti a diventare sviluppatori di test per Robot Framework!
Eseguire i test con Robotmk
Ora veniamo alla parte veramente interessante: come insegnare a Checkmk a eseguire un test di Robot Framework in modo da poterne integrare lo stato nel monitoraggio?
L'integrazione inizia generando un nuovo pacchetto agente che contiene lo scheduler Robotmk, il plug-in agente Robotmk, il binario RCC e un file di configurazione che specifica le suite da eseguire.
La regola di pianificazione di Robotmk
La regola responsabile "Robotmk scheduler (Windows)" per questo compito può essere trovata cercando il termine "robot" nel menu Setup:

Inizialmente è necessario limitare l'ambito della regola a specifici host o etichette di host per garantire che i test vengano eseguiti solo se necessario. In secondo luogo, impostare la directory di base su c:\robots all'inizio della regola.
La regola bakery di Robotmk v2 è abbastanza simile a quella di Robotmk v1. Il cambiamento più importante è che in questa pagina non si parla più di "suite", ma di "piani".
Qual è la differenza tra una suite e un "piano"?
Una "suite" si riferisce sempre a ciò che è rappresentato da un file .robot come abbiamo visto sopra. In parole povere, è qualcosa che Robot Framework può eseguire direttamente.
Un "piano" definisce tutte le impostazioni e i parametri per Robotmk per eseguire una suite. Contiene il percorso della suite e le impostazioni relative a Checkmk.
Per prima cosa, esaminiamo rapidamente i campi più importanti di un piano:
- Nome dell'applicazione: impostate un nome arbitrario dell'applicazione che si sta testando.
- Variante: nel caso in cui si voglia eseguire la stessa suite più volte, ma con parametri diversi, è necessario compilare il campo variante, in modo che Checkmk possa distinguere tra loro.
- Percorso relativo al file o alla cartella della suite di test: Impostate il percorso alla cartella della suite di Robot Framework o direttamente a uno specifico file `.robot`, relativamente alla directory di base.
- Limite per tentativo: per impostazione predefinita, Robotmk esegue una suite esattamente una volta, il che viene chiamato "tentativo". Il timeout specifica per quanto tempo è consentito eseguire tale tentativo.
- Riesecuzioni di Robot Framework: Robotmk può rieseguire una suite fallita un certo numero di volte se uno o più test sono falliti. Il risultato finale viene calcolato da tutti i risultati dei tentativi. È possibile scegliere tra due strategie, incrementale (riesecuzione di singoli test) e completa (se i test dipendono l'uno dall'altro, viene rieseguita la suite completa).
- Impostazione automatica dell'ambiente (tramite RCC): Per i sistemi senza un ambiente Python preinstallato, configurate RCC per impostare automaticamente l'ambiente necessario. Questo include la specificazione del percorso relativo al file di configurazione principale di RCC robot.yaml, che RCC usa per costruire l'ambiente, eseguire i task e gli script. Maggiori informazioni su cosa sia questo file possono essere lette nella pagina della documentazione ufficiale.
- Parametri di Robot Framework: consente di impostare i parametri della riga di comando più comuni per Robot Framework. Forse il più importante è "Variabili". Consente di specificare le variabili che fanno poi parte dell'ambito globale/suite nell'esecuzione della suite. Ricordate la variabile "SEARCH_TERM" nel file
.robot
? Sovrascriviamola con "Checkmk Conference", come mostrato nella schermata. Invece della query predefinita definita nel file della suite, il test utilizzerà ora il valore della variabile specificato in Checkmk. Una cosa fantastica!
Ci si può chiedere dove sia possibile impostare l'intervallo per il piano. Dobbiamo spiegare un concetto di livello superiore chiamato "gruppi di piani paralleli". Un piano fa sempre parte di un gruppo, che ha un intervallo di esecuzione individuale.
I piani all'interno dello stesso gruppo vengono eseguiti uno dopo l'altro (da qui il nome "sequenziale" nell'opzione dell'interfaccia utente). Questo è utile se si hanno test che accedono alla stessa risorsa, ma non è consentito l'accesso parallelo. L'esempio più famoso è quello dei test basati su desktop. Immaginate due test RF in esecuzione contemporaneamente che si contendono il mouse sul desktop...!
I piani di diversi gruppi possono essere eseguiti individualmente e in parallelo. L'unica limitazione da tenere presente sono le risorse della macchina: per Robotmk consigliamo almeno 8 GB di RAM e 4, meglio 8 vCPU. Anche se le esecuzioni parallele funzionano con questa configurazione, non si sa se le scarse risorse della macchina le rallenteranno! È quindi meglio fornire subito alla macchina una quantità generosa di risorse, per evitare di cadere in questa trappola.
Infine, salvate e applicate la regola. Andate alla Bakery e create un nuovo pacchetto MSI:

Dopo che il nuovo agente è stato installato e avviato, inizierà immediatamente robotmk_scheduler.exe
come sidecar process. E anche se questo processo venisse interrotto, l'agente CMK si occuperà sempre di eseguirlo e riavviarlo!
Prima scoperta: Il servizio di scheduler Robotmk
Un'esecuzione di discovery sull'host rivela un nuovo servizio, che rappresenta lo stato dello scheduler.
Attualmente, lo scheduler è impegnato nella creazione dell'ambiente da parte di RCC.
Vale la pena ricordare che la creazione dell'ambiente è sempre la prima attività dopo l'avvio dello scheduler. L'esecuzione del piano segue sempre dopo la creazione di tutti gli ambienti. Il motivo è semplice: questo processo richiede una notevole quantità di risorse di sistema; semplicemente non si vuole che questo influisca sul tempo di esecuzione/risultato dei test.

Seconda scoperta: Servizio di pianificazione e test
Dopo un po' di tempo, lo scheduler dovrebbe aver terminato la creazione dell'ambiente ed entrare nella sua seconda fase, che è la programmazione dei gruppi di piani.
Prima o poi, dopo la prima esecuzione, sarà possibile scoprire altri due servizi:

Robotmk v2 scopre per impostazione predefinita tutti i casi di test di una suite. Questi servizi sono quelli che rappresentano realmente lo stato di ciò che interessa: i test.
I servizi di pianificazione, a loro volta, sono rivolti agli amministratori: li informano su problemi interni come la creazione dell'ambiente, i risultati non aggiornati, ecc.
Con questa separazione di interessi - scheduler, piani e test - si ha il pieno controllo dei canali di notifica per le diverse parti interessate.
Soglie e dati sulle prestazioni
Cosa sarebbe il monitoraggio senza soglie? Il monitoraggio dei runtime all'interno di un test assume un ruolo speciale in Robotmk.
Robotmk sfrutta la caratteristica di Robot Framework di avere tutti gli elementi di una suite (cioè le sotto-suite, i test, le parole chiave e le sotto-parole chiave) con gli orari di inizio e fine già registrati nell'XML risultante. Poiché questo XML è stato trasportato alla pagina di Checkmk in formato grezzo, l'amministratore di Checkmk ha tutta la libertà di utilizzare questi dati per il monitoraggio dei tempi di esecuzione, come sempre in Checkmk, utilizzando le regole di monitoraggio.
È possibile trovare le regole di monitoraggio pertinenti nel menu di configurazione, cercando "robot":

Il fatto che sia possibile integrare i risultati dei test con Robot Framework in un sistema di monitoraggio è dovuto al fatto che Checkmk separa rigorosamente la raccolta dei dati dalla loro valutazione. Non è il plug-in sul client a essere parametrizzato, ma il controllo sul lato server che valuta i dati raccolti. Per inciso, questo è anche uno dei motivi per cui è esclusa la compatibilità con altri sistemi di monitoraggio come Naemon, Icinga2, Zabbix, ecc.
Riepilogo e conclusione
Questo articolo vi ha mostrato come muovere i primi passi con Robotmk per introdurre con successo il monitoraggio sintetico nella vostra azienda. Sono previsti altri articoli; fateci sapere cosa vi interessa di più.
In questa nuova versione 2, Robotmk copre tutte le caratteristiche della precedente versione 1. È stato fatto molto lavoro, abbiamo riprogrammato completamente lo strumento in Rust invece che in Python.
Con l'integrazione di RCC e l'esecuzione parallela dei test da parte dello scheduler, sono state gettate le basi per tutta una serie di ulteriori funzionalità che saranno introdotte nelle prossime versioni. Il lavoro per migliorare Robotmk e il monitoraggio sintetico con Checkmk non si ferma mai!
Informazioni sull'autore:
Il monitoraggio è sempre stato una costante nei 20 anni di carriera di Simon nel settore IT - prima come amministratore, poi come consulente e dal 2018 nella sua società ELABIT GmbH, che ha fondato per concentrarsi sul testing automatizzato delle applicazioni e sull'integrazione di tali test in Checkmk. La soluzione "Robotmk" è il risultato dei suoi sforzi ed è molto apprezzata dalla comunità Checkmk.
Quando non lavora in Checkmk come product manager, coordinando l'ulteriore sviluppo di Robotmk, aiuta i clienti di tutto il mondo a integrare il monitoraggio sintetico nel loro ambiente.