Monitoraggio di un servizio Web

1

Non so come formulare correttamente questa domanda, quindi ti invitiamo a suggerire modifiche.

Ho aiutato a sviluppare un servizio RESTful interno a una società per cui lavoro, e sembra aver colpito un muro in termini di prestazioni senza saturare il canale di rete (credo). Ho bisogno di farlo funzionare più velocemente, ma non ho abbastanza dati per andare avanti. Come misuro, raccolgo e analizzo le metriche delle prestazioni come l'utilizzo della rete, del disco, della memoria e della CPU? In questo momento ho solo registri con data e ora in cui posso provare ad estrarre alcuni dati di temporizzazione analizzandoli, ma sembra che ci dovrebbe essere un modo più diretto. Inoltre dovrei rendere il sistema distribuito in futuro, dovrei aggregare questi dati in qualche modo su più macchine, e dovrei rendere questo processo asincrono e resistente ai problemi di rete.

Quali strumenti o approcci generali esistenti funzionano meglio in questo tipo di installazione? Gradirei ogni spintarella nella giusta direzione, non so dove guardare.

UPD: Mi rivolgo a FreeBSD, il mio box di sviluppo è un MacBook; le parti di sollevamento pesanti sono scritte in C ++, le parti talk-to-client sono scritte in PHP (attualmente Yii) gestite da Apache con un proxy nginx, anche se sto considerando di portarle in C ++ e suddividerle in più parti lungo la separazione di comandi e query linea di pensiero. Attualmente la coda dei comandi è gestita da PostgreSQL, ed è una delle cose che proverò a riscrivere da zero. C'è un supervisore semplicistico che mi permette di vedere il log di stderr del demone di sollevamento pesante in tempo reale, ma altrimenti non fa molto.

    
posta Alexei Averchenko 01.09.2015 - 20:11
fonte

2 risposte

1

Solitamente puoi raccogliere l'utilizzo di RAM / disco / CPU / rete dai dati SNMP, basta abilitare snmpd . Scegli la tua soluzione di monitoraggio; qualsiasi cosa, da qualcosa di piccolo come Monit o Icinga a qualcosa di grande come OpenNMS, ti mostrerà facilmente questi.

Scrivi di più sui log, almeno durante lo sviluppo e il test di carico; i timestamp scoprono molto. Ma questo potrebbe rallentare se il tuo collo di bottiglia è il disco.

Puoi raccogliere dati più dettagliati direttamente nel codice del programma e inserirli in un database in memoria come Redis o in un database di serie temporali appropriato come OpenTSDB . Questo dovrebbe essere relativamente facile da integrare nella parte C ++ e avere un impatto sulle prestazioni ragionevolmente ridotto.

    
risposta data 01.09.2015 - 21:28
fonte
-1

Penso che sia necessario isolare il tuo ambiente e implementare il tuo servizio web. Dopodiché, dividi il tuo servizio web in moduli per vedere quale modulo è il collo di bottiglia e risolverlo o esaminarlo. Non conosco i framework per farlo, ma puoi usare gli strumenti di riga di comando di Linux nel tuo ambiente isolato per farlo.

    
risposta data 01.09.2015 - 21:00
fonte

Leggi altre domande sui tag