Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

Ciao a tutti!

La nostra azienda è impegnata nello sviluppo di software e nel successivo supporto tecnico. Il supporto tecnico richiede non solo la correzione degli errori, ma anche il monitoraggio delle prestazioni delle nostre applicazioni.

Ad esempio, se uno dei servizi si è bloccato, è necessario registrare automaticamente questo problema e iniziare a risolverlo, anziché attendere che gli utenti insoddisfatti contattino il supporto tecnico.

Abbiamo una piccola azienda, non abbiamo le risorse per studiare e mantenere soluzioni complesse per il monitoraggio delle applicazioni, dovevamo trovare una soluzione semplice ed efficace.

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

Strategia di monitoraggio

Non è facile verificare la funzionalità di un'applicazione; questo compito non è banale, si potrebbe addirittura dire creativo. È particolarmente difficile verificare un sistema multi-link complesso.

Come puoi mangiare un elefante? Solo in parte! Usiamo questo approccio per monitorare le applicazioni.

L’essenza della nostra strategia di monitoraggio:

Suddividi la tua applicazione in componenti.
Creare controlli di controllo per ciascun componente.

Un componente è considerato operativo se tutte le sue verifiche di controllo vengono eseguite senza errori. Un'applicazione è considerata integra se tutti i suoi componenti sono funzionanti.

Pertanto, qualsiasi sistema può essere rappresentato come un albero di componenti. I componenti complessi vengono suddivisi in componenti più semplici. I componenti semplici hanno controlli.

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

I benchmark non hanno lo scopo di eseguire test funzionali, non sono test unitari. I controlli di controllo dovrebbero verificare come si sente il componente in questo momento, se ci sono tutte le risorse necessarie per il suo funzionamento e se ci sono problemi.

Non esistono miracoli; la maggior parte dei controlli dovrà essere sviluppata in modo indipendente. Ma non aver paura, perché nella maggior parte dei casi un controllo richiede 5-10 righe di codice, ma puoi implementare qualsiasi logica e capirai chiaramente come funziona il controllo.

Sistema di monitoraggio

Diciamo che abbiamo suddiviso l'applicazione in componenti, ideato e implementato controlli per ciascun componente, ma cosa fare con i risultati di questi controlli? Come facciamo a sapere se qualche controllo ha fallito?

Avremo bisogno di un sistema di monitoraggio. Ella svolgerà i seguenti compiti:

  • Ricevi i risultati dei test e usali per determinare lo stato dei componenti.
    Visivamente, sembra che venga evidenziato l'albero dei componenti. I componenti funzionali diventano verdi, quelli problematici diventano rossi.
  • Eseguire controlli generali fuori dagli schemi.
    Il sistema di monitoraggio può eseguire autonomamente alcuni controlli. Perché reinventare la ruota, usiamoli. Ad esempio, puoi verificare che una pagina di un sito web si stia aprendo o che il server stia eseguendo il ping.
  • Invia notifiche di problemi alle parti interessate.
  • Visualizzazione dei dati di monitoraggio, fornitura di report, grafici e statistiche.

Breve descrizione del sistema ASMO

È meglio spiegare con un esempio. Vediamo come è organizzato il monitoraggio delle prestazioni del sistema ASMO.

ASMO è un sistema di supporto meteorologico automatizzato. Il sistema aiuta gli specialisti dei servizi stradali a capire dove e quando è necessario trattare la strada con materiali antigelo. Il sistema raccoglie dati dai punti di controllo stradali. Un punto di controllo stradale è un luogo sulla strada in cui sono installate apparecchiature: una stazione meteorologica, una videocamera, ecc. Per prevedere situazioni pericolose, il sistema riceve previsioni meteorologiche da fonti esterne.

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

Quindi, la composizione del sistema è abbastanza tipica: sito web, agente, attrezzatura. Iniziamo il monitoraggio.

Suddividere il sistema in componenti

Nel sistema ASMO si possono distinguere i seguenti componenti:

1. Conto personale
Questa è un'applicazione web. Come minimo è necessario verificare che l'applicazione sia disponibile su Internet.

2. Banca dati
Nel database vengono archiviati dati importanti per la creazione di report ed è necessario assicurarsi che i backup del database vengano creati correttamente.

3. Server
Per server intendiamo l'hardware su cui vengono eseguite le applicazioni. È necessario verificare lo stato di HDD, RAM, CPU.

4. Agente
Questo è un servizio Windows che esegue molte attività diverse in base a una pianificazione. Come minimo, è necessario verificare che il servizio sia in esecuzione.

5. Compito dell'agente
Sapere solo che un agente sta lavorando non è sufficiente. Un agente può lavorare, ma non eseguire i compiti assegnati. Suddividiamo il componente dell'agente in attività e controlliamo se ciascuna attività dell'agente funziona correttamente.

6. Punti di controllo stradale (contenitore di tutti i PPM)
Ci sono molti punti di controllo stradale, quindi combiniamo tutti gli MPC in un unico componente. Ciò renderà più comoda la lettura dei dati di monitoraggio. Visualizzando lo stato del componente “sistema ASMO”, sarà subito chiaro dove sono i problemi: nelle applicazioni, nell'hardware o nel massimo sistema di controllo.

7. Punto di controllo stradale (un limite massimo)
Considereremo questo componente riparabile se tutti i dispositivi su questo MPC sono riparabili.

8. Dispositivo
Si tratta di una videocamera o stazione meteorologica installata al limite massimo di concentrazione. È necessario verificare che il dispositivo funzioni correttamente.

Nel sistema di monitoraggio, l'albero dei componenti sarà simile a questo:

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

Monitoraggio delle applicazioni Web

Quindi, abbiamo diviso il sistema in componenti, ora dobbiamo elaborare i controlli per ciascun componente.

Per monitorare un'applicazione web utilizziamo i seguenti controlli:

1. Controllare l'apertura della pagina principale
Questo controllo viene eseguito dal sistema di monitoraggio. Per eseguirlo indichiamo l'indirizzo della pagina, il frammento di risposta atteso e il tempo massimo di esecuzione della richiesta.

2. Verifica della scadenza del pagamento del dominio
Un controllo molto importante. Quando un dominio rimane non pagato, gli utenti non possono aprire il sito. La risoluzione del problema potrebbe richiedere diversi giorni, perché... Le modifiche DNS non vengono applicate immediatamente.

3. Verifica del certificato SSL
Al giorno d'oggi quasi tutti i siti web utilizzano il protocollo https per l'accesso. Affinché il protocollo funzioni correttamente, è necessario un certificato SSL valido.

Di seguito è riportata la componente “Account personale” nel sistema di monitoraggio:

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

Tutti i controlli di cui sopra funzioneranno per la maggior parte delle applicazioni e non richiedono codifica. Questo è molto interessante perché puoi iniziare a monitorare qualsiasi applicazione web in 5 minuti. Di seguito sono riportati ulteriori controlli che possono essere eseguiti per un'applicazione Web, ma la loro implementazione è più complessa e specifica dell'applicazione, quindi non li tratteremo in questo articolo.

Cos'altro puoi controllare?

Per monitorare in modo più completo la tua applicazione web, puoi eseguire i seguenti controlli:

  • Numero di errori JavaScript per periodo
  • Numero di errori lato applicazione web (back-end) per il periodo
  • Numero di risposte dell'applicazione web non riuscite (codice di risposta 404, 500, ecc.)
  • Tempo medio di esecuzione della query

Monitoraggio di un servizio Windows (agente)

Nel sistema ASMO, l'agente svolge il ruolo di un pianificatore di attività, che esegue attività pianificate in background.

Se tutte le attività dell'agente vengono completate correttamente, l'agente funziona correttamente. Si scopre che per monitorare un agente è necessario monitorarne le attività. Pertanto, dividiamo la componente “Agente” in compiti. Per ogni attività, creeremo un componente separato nel sistema di monitoraggio, dove il componente “Agente” sarà il “genitore”.

Dividiamo il componente Agente in componenti figli (attività):

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

Quindi, abbiamo scomposto una componente complessa in diverse componenti semplici. Ora dobbiamo elaborare i controlli per ogni componente semplice. Tieni presente che il componente genitore “Agente” non avrà alcun controllo, poiché il sistema di monitoraggio calcolerà il suo stato in modo indipendente in base allo stato dei suoi componenti figli. In altre parole, se tutte le attività vengono completate correttamente, l'agente viene eseguito correttamente.

Esistono più di cento attività nel sistema ASMO, è davvero necessario elaborare controlli univoci per ciascuna attività? Naturalmente, il controllo sarà migliore se creiamo e implementiamo i nostri controlli speciali per ogni attività dell'agente, ma nella maggior parte dei casi è sufficiente utilizzare controlli universali.

Il sistema ASMO utilizza solo controlli universali per le attività e questo è sufficiente per monitorare le prestazioni del sistema.

Controllo dei progressi
Il controllo più semplice ed efficace è il controllo di esecuzione. Il controllo verifica che l'attività venga completata senza errori. Tutte le attività hanno questo controllo.

Controlla l'algoritmo

Dopo l'esecuzione di ogni attività, è necessario inviare il risultato del controllo SUCCESSO al sistema di monitoraggio se l'esecuzione dell'attività è andata a buon fine, oppure ERRORE se l'esecuzione è stata completata con un errore.

Questo controllo può rilevare i seguenti problemi:

  1. L'attività viene eseguita ma non riesce con un errore.
  2. L'esecuzione dell'attività è stata interrotta, ad esempio è stata bloccata.

Diamo un'occhiata a come questi problemi vengono risolti in modo più dettagliato.

Problema 1: l'attività viene eseguita ma non riesce con un errore
Di seguito è riportato un caso in cui l'attività viene eseguita ma non riesce tra le 14:00 e le 16:00.

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

La figura mostra che quando un'attività fallisce, viene immediatamente inviato un segnale al sistema di monitoraggio e lo stato del controllo corrispondente nel sistema di monitoraggio diventa allarme.

Tieni presente che nel sistema di monitoraggio lo stato del componente dipende dallo stato di verifica. Lo stato di allarme del controllo cambierà tutti i componenti di livello superiore in allarme, vedere la figura seguente.

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

Problema 2: l'esecuzione dell'attività è stata interrotta (congelata)
Come farà il sistema di monitoraggio a capire che un'attività è bloccata?

Il risultato del controllo ha un periodo di validità, ad esempio 1 ora. Se passa un'ora e non ci sono nuovi risultati del test, il sistema di monitoraggio imposterà lo stato del test su allarme.

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

Nella foto sopra, le luci sono state spente alle 14:00. Alle 15:00, il sistema di monitoraggio rileverà che il risultato del test (dalle 14:00) è scadente, perché Il tempo di pertinenza è scaduto (un'ora), ma non ci sono nuovi risultati e il controllo passerà allo stato di allarme.

Alle 16:00 le luci si riaccenderanno, il programma completerà l'attività e invierà il risultato dell'esecuzione al sistema di monitoraggio, lo stato del test diventerà nuovamente di successo.

Quale tempo di pertinenza del controllo dovrei utilizzare?

Il tempo di pertinenza deve essere maggiore del periodo di esecuzione dell'attività. Consiglio di impostare il tempo di pertinenza 2-3 volte più lungo del periodo di esecuzione dell'attività. Ciò è necessario per evitare di ricevere false notifiche quando, ad esempio, un'attività ha richiesto più tempo del solito o qualcuno ha ricaricato il programma.

Controllo dei progressi

Il sistema ASMO dispone di un'attività "Carica previsione", che tenta di scaricare una nuova previsione da una fonte esterna una volta ogni ora. Non si conosce l'ora esatta in cui appare una nuova previsione nel sistema esterno, ma è noto che ciò accade 2 volte al giorno. Si scopre che se non ci sono nuove previsioni per diverse ore, allora questo è normale, ma se non ci sono nuove previsioni per più di un giorno, allora qualcosa si è rotto da qualche parte. Ad esempio, il formato dei dati in un sistema di previsione esterno potrebbe cambiare, motivo per cui ASMO non vedrà un nuovo rilascio di previsioni.

Controlla l'algoritmo

L'attività invia il risultato del controllo di SUCCESSO al sistema di monitoraggio quando riesce a ottenere progressi (scaricando una nuova previsione meteorologica). Se non si verifica alcun progresso o si verifica un errore, non viene inviato nulla al sistema di monitoraggio.

Il controllo deve avere un intervallo di pertinenza tale che durante questo tempo sia garantito di ricevere nuovi progressi.

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

Tieni presente che verremo a conoscenza del problema con un ritardo, poiché il sistema di monitoraggio attende fino alla scadenza del periodo di validità dell'ultimo risultato della scansione. Pertanto, non è necessario che il periodo di validità dell'assegno sia troppo lungo.

Monitoraggio della banca dati

Per controllare il database nel sistema ASMO, eseguiamo i seguenti controlli:

  1. Verifica della creazione del backup
  2. Controllo dello spazio libero su disco

Verifica della creazione del backup
Nella maggior parte delle applicazioni, è importante disporre di backup del database aggiornati in modo che, in caso di guasto del server, sia possibile distribuire il programma su un nuovo server.

ASMO crea una copia di backup una volta alla settimana e la invia allo storage. Quando questa procedura viene completata con successo, il risultato del controllo di successo viene inviato al sistema di monitoraggio. Il risultato della verifica è valido per 9 giorni. Quelli. Per controllare la creazione dei backup, viene utilizzato il meccanismo del "controllo dell'avanzamento", di cui abbiamo discusso in precedenza.

Controllo dello spazio libero su disco
Se non c'è abbastanza spazio libero sul disco, il database non sarà in grado di funzionare correttamente, quindi è importante controllare la quantità di spazio libero.

È conveniente utilizzare le metriche per verificare i parametri numerici.

Metrica è una variabile numerica, il cui valore viene trasmesso al sistema di monitoraggio. Il sistema di monitoraggio verifica i valori di soglia e calcola lo stato metrico.

Di seguito è riportata un'immagine di come appare il componente "Database" nel sistema di monitoraggio:

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

Monitoraggio del server

Per monitorare il server utilizziamo i seguenti controlli e metriche:

1. Spazio libero su disco
Se lo spazio su disco si esaurisce, l'applicazione non sarà in grado di funzionare. Utilizziamo 2 valori di soglia: il primo livello è ATTENZIONE, il secondo livello è ALLARME.

2. Valore RAM medio in percentuale all'ora
Usiamo la media oraria perché... non siamo interessati alle razze rare.

3. Percentuale media di CPU all'ora
Usiamo la media oraria perché... non siamo interessati alle razze rare.

4. Controllo del ping
Verifica che il server sia online. Il sistema di monitoraggio può eseguire questo controllo; non è necessario scrivere codice.

Di seguito è riportata un'immagine di come appare il componente "Server" nel sistema di monitoraggio:

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

Monitoraggio delle apparecchiature

Ti dirò come si ottengono i dati. Per ogni punto di controllo stradale (MPC) è presente un compito nel pianificatore delle attività, ad esempio "Rilievo MPC M2 km 200". L'attività riceve dati da tutti i dispositivi MPC ogni 30 minuti.

Problema del canale di comunicazione
La maggior parte delle apparecchiature si trova fuori città, per la trasmissione dei dati viene utilizzata la rete GSM, che non funziona stabilmente (c'è una rete o non ce n'è).

A causa dei frequenti guasti della rete, inizialmente il controllo del sondaggio MPC nel monitoraggio si presentava così:

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

È diventato chiaro che questa non era un'opzione funzionante, perché c'erano molte false notifiche di problemi. Successivamente si è deciso di utilizzare un “controllo di avanzamento” per ciascun dispositivo, ovvero Solo il segnale di successo viene inviato al sistema di monitoraggio quando il dispositivo viene interrogato senza errori. Il tempo di pertinenza è stato impostato su 5 ore.

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

Ora il monitoraggio invia notifiche sui problemi solo quando non è possibile interrogare il dispositivo per più di 5 ore. Con un alto grado di probabilità non si tratta di falsi allarmi, ma di problemi reali.

Di seguito è riportata un'immagine di come appare l'apparecchiatura nel sistema di monitoraggio:

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

Importante!
Quando la rete GSM smette di funzionare, tutti i dispositivi MDC non vengono interrogati. Per ridurre il numero di e-mail dal sistema di monitoraggio, i nostri ingegneri si iscrivono alle notifiche sui problemi dei componenti con il tipo "MPC" anziché "Dispositivo". Ciò consente di ricevere una notifica per ciascun MPC, anziché ricevere una notifica separata per ciascun dispositivo.

Schema definitivo di monitoraggio ASMO

Mettiamo tutto insieme e vediamo che tipo di schema di monitoraggio abbiamo.

Mangiamo l'elefante in parti. Strategia di monitoraggio dell'integrità dell'applicazione con esempi

conclusione

Riassumiamo.
Cosa ci ha dato il monitoraggio delle performance di ASMO?

1. Il tempo di eliminazione dei difetti è diminuito
Abbiamo già sentito parlare di difetti da parte degli utenti, ma non tutti gli utenti segnalano difetti. È successo che siamo venuti a conoscenza del malfunzionamento di un componente del sistema una settimana dopo la sua comparsa. Ora il sistema di monitoraggio ci avvisa dei problemi non appena viene rilevato un problema.

2. La stabilità del sistema è aumentata
Poiché i difetti hanno iniziato a essere eliminati prima, il sistema nel suo insieme ha iniziato a funzionare in modo molto più stabile.

3. Ridurre il numero di chiamate al supporto tecnico
Molti problemi vengono ora risolti prima ancora che gli utenti se ne accorgano. Gli utenti hanno iniziato a contattare il supporto tecnico meno spesso. Tutto ciò ha un buon effetto sulla nostra reputazione.

4. Aumentare la fidelizzazione dei clienti e degli utenti
Il cliente ha notato cambiamenti positivi nella stabilità del sistema. Gli utenti riscontrano meno problemi nell'utilizzo del sistema.

5. Ridurre i costi del supporto tecnico
Abbiamo smesso di eseguire qualsiasi controllo manuale. Ora tutti i controlli sono automatizzati. In precedenza, venivamo a conoscenza dei problemi dagli utenti; spesso era difficile capire di quale problema stesse parlando. Ora la maggior parte dei problemi vengono segnalati dal sistema di monitoraggio; le notifiche contengono dati tecnici, che chiariscono sempre cosa è andato storto e dove.

Importante!
Non è possibile installare il sistema di monitoraggio sullo stesso server su cui vengono eseguite le applicazioni. Se il server non funziona, le applicazioni smetteranno di funzionare e non ci sarà nessuno a avvisarlo.

Il sistema di monitoraggio deve essere eseguito su un server separato in un altro data center.

Se non desideri utilizzare un server dedicato in un nuovo data center, puoi utilizzare un sistema di monitoraggio cloud. La nostra azienda utilizza il sistema di monitoraggio cloud Zidium, ma puoi utilizzare qualsiasi altro sistema di monitoraggio. Il costo di un sistema di monitoraggio cloud è inferiore rispetto al noleggio di un nuovo server.

Raccomandazioni:

  1. Suddividere applicazioni e sistemi sotto forma di albero di componenti nel modo più dettagliato possibile, così sarà conveniente capire dove e cosa è rotto e il controllo sarà più completo.
  2. Per verificare la funzionalità di un componente, utilizzare i test. È meglio utilizzare molti controlli semplici piuttosto che uno complesso.
  3. Configura le soglie metriche sul lato del sistema di monitoraggio, anziché scriverle nel codice. Ciò ti eviterà di dover ricompilare, riconfigurare o riavviare l'applicazione.
  4. Per i controlli personalizzati, utilizza un margine di pertinenza per evitare di ricevere false notifiche perché il completamento di alcuni controlli ha richiesto un po' più tempo del solito.
  5. Prova a far diventare rossi i componenti del sistema di monitoraggio solo quando c'è sicuramente un problema. Se diventano rossi per niente, smetterai di prestare attenzione alle notifiche del sistema di monitoraggio, il suo significato andrà perso.

Se non stai ancora utilizzando un sistema di monitoraggio, inizia! Non è così difficile come sembra. Divertiti guardando l'albero degli ingredienti verdi che hai coltivato tu stesso.

Buona fortuna.

Fonte: habr.com

Aggiungi un commento