2013-06-25 20 views
6

Ho bisogno di aiuto per valutare quale sarà il corretto design di un'applicazione a matrice intrecciata. O qualsiasi URL per aiutarti a farlo.python, twistedmatrix ... registrazione tramite socket

  • sfondo: io uso la capacità di registrazione incluso con twistedmatrix utilizzando FileLogObserver, e un costume DailyLogFile per propage e salvare i dati di file system e per la successiva analisi.

Ora, ho intenzione di usare molte differenti tali applicazioni che faranno di posti di lavoro e la loro inviati i messaggi del registro come evento programmato in molti file di log intrecciati (file distinti). Così i miei eventi sono composti da (timestamp, data)

ho bisogno di un modo di leggere ogni di questa messaggi registrati (timestamp, data) in tempo reale e centralizzare caso raggruppandole in base tempo, che sta avendo alcuni calcoli e di gruppo per il tutti gli eventi che hanno esattamente lo stesso timestamp.

ho ragione di supporre che posso farlo con funzionalità di log intrecciati?

come lo progetteresti in modo semplice?

il mio attuale pensiero era quello di costruire un logger con socket twisted e duplicare il processo di registrazione in modo che ogni evento fosse inviato al registratore di file (ho bisogno della cronologia separata) ma anche tramite il socket a un ricevitore (ora ho bisogno anche di tempo reale). Se sto scavando a destra in questo modo, qualcuno ha uno scheletro per un tale registratore di prese twistato? come posso incatenare due logger da twisted?

per l'altra parte quale dovrebbe essere il ricevitore del logger corretto?

poichè anch'io propagherò i dati calcolati/aggregati attraverso un server lighstreamer utilizzando lo schema seguente possono esserci alcune difficoltà che potrei non aver visto, che necessiteranno di qualche meccanismo di threading o altro mecanismo per evitare alcune chiamate di rete bloccanti?

feed = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
feed.connect(("localhost",MYPORT)) 

feed.send(mytimestamp, myeventdata) 

come una figura che potrebbe essere schematizzato come: con la (quasi tutto in tempo reale)

producerTimedEventLog1 --->| 
producerTimedEventLog2 --->| 
...      |---> loggerReceiverComputingData ---> lighstreamer process ---> mozilla or whatever webclient 
...      | 
producerTimedEventLognN--->| 

ogni producerTimedEventLognN anche la registrazione in un file.

Mi interessa ogni idee utili :)

migliori saluti

+0

Tutto ciò che devi sapere? –

risposta

3

Ho capito che più computer (computer indipendenti) sono coinvolti nel sistema, giusto? Quindi, prima di tutto, è necessario assicurarsi che gli orologi delle varie macchine che inviano gli eventi siano sincronizzati in una certa misura. Tuttavia, poiché ci sarà sempre un errore di sincronizzazione temporale, devi decidere cosa intendi con "tutti gli eventi che hanno esattamente lo stesso timestamp".Dal mio punto di vista, è necessario definire un valore delta temporale arbitrario. Quindi devi semplicemente definire tutti gli eventi con data/ora all'interno di questo delta temporale per essere accaduti "allo stesso tempo".

In secondo luogo, se ho capito bene, vuoi che i "produttori" inviino i loro eventi a un "raccoglitore" via TCP. Ciò solleva la questione se sia già in atto un certo protocollo di comunicazione in cima al quale si potrebbe semplicemente aggiungere la comunicazione di eventi con data e ora, o se è necessario stabilire un livello di comunicazione indipendente (un socket TCP distinto sul collector).

In ogni caso, è possibile creare una semplice classe di eventi che memorizzi il messaggio di evento (il messaggio di registro e tutti i dati richiesti) nonché il timestamp di creazione. I produttori creano esempi di questa classe. È quindi possibile utilizzare pickle per trasmettere un determinato evento tramite un flusso di byte (connessione TCP) al raccoglitore. Il collezionista può annullarlo ed elaborarlo.

Essere consapevoli del fatto che la risoluzione di time.time() su Linux è superiore a quella di Windows.

2

Si potrebbe aggiungere PythonLoggingObserver oltre al tuo FileLogObserver. Quindi configura il logger python per inviare messaggi a syslog. Syslog potrebbe essere configurato per inviare messaggi al server centrale. Sul server centrale è possibile salvare i messaggi nel file di registro e disporre di un altro file di registro per la lettura dell'app con LogReader.

Avrete bisogno di NTP per sincronizzare anche gli orologi.