Domanda

Al lavoro, stiamo costruendo un'applicazione distribuita (possibilmente su più macchine su una LAN, possibilmente successivamente su diversi continenti su una WAN + VPN). Non vogliamo file di registro locali per ogni macchina (riempiendo il suo disco e impossibile visualizzarli in aggregato), quindi dobbiamo centralizzare la registrazione sulla rete. La maggior parte dei registri non sarà importante, quindi UDP va bene per loro, ma alcuni sono avvisi importanti in perdita e devono essere consegnati in modo affidabile, implicando TCP. Siamo preoccupati di congestionare la rete se il protocollo di registrazione è troppo chiacchierone o di trascinare le app in una ricerca per indicizzazione se non risponde.

Alcune possibilità che ho considerato sono:

  • syslog (sembra perfetto, ma il mio capo ha un animus contro questo, quindi potrei non essere in grado di sceglierlo).
  • scriba da Facebook (ma sembra un po 'pesante con un server su ogni macchina - non tutti i messaggi di registro richiedono ultra affidabilità).
  • utilizzando una coda di messaggi come rabbitmq che può avere più code sintonizzate su diversi livelli di sicurezza delle transazioni.
  • nel peggiore dei casi, posso scriverne una mia da zero.

Hai altri suggerimenti? Quali soluzioni di registrazione centralizzata hai utilizzato e in che misura hanno funzionato?

Modifica: ero incline allo scriba, perché il suo design store-and-forward disaccoppia l'app in esecuzione dalla latenza della rete. Ma dopo aver faticato a installarlo, ho scoperto che (1) non è disponibile come pacchetto binario - oggigiorno è imperdonabile - e (2) dipende intimamente da una libreria (parsimonia) che non è nemmeno disponibile come pacchetto binario! E peggio di tutto, non si sarebbe nemmeno compilato correttamente. Questo non è un codice di qualità di rilascio, nemmeno in open source.

È stato utile?

Soluzione

Abbiamo utilizzato con successo ZeroMQ per i registri di uno scenario di applicazione distribuita come il tuo. È molto affidabile e incredibilmente veloce. Siamo passati a ZeroMQ dopo un'implementazione non di successo con Spread . Nella nostra configurazione un singolo server ZeroMQ è in grado di gestire più di 70 registri diversi da un'applicazione distribuita di media ad alta disponibilità. Riceve dati dalla LAN e via Internet.

Se hai bisogno di un confronto dettagliato del server code, guarda questa pagina dal wiki di Second Life .

Spero che sia d'aiuto!

Altri suggerimenti

Di recente ci sono diverse alternative. In particolare, Scribe non è più gestito. Facebook ha sviluppato il suo successore chiamato Caligraphus, e non è di provenienza aperta. Ecco un elenco di alternative.

  • syslog: installato in tutte le distribuzioni Linux
  • Fluentd : C + logger leggero basato su Ruby, che gestisce i log come stream JSON
  • Flume : sviluppato su Cloudera, scritto in Java e funziona bene con gli ecosistemi Hadoop
  • Apache Kafka : sviluppato su LinkedIn, architettura basata su pull
  • Scribe: di provenienza aperta da Facebook, ma non più gestito

Disclaimer: sono un committer del progetto Fluentd.

Syslog è utile se intendi concentrarti solo sui log dell'infrastruttura (ad esempio a livello di sistema). Ho sentito che KIWI Syslog Server è buono, anche se non l'ho provato da solo. D'altra parte, se si desidera registrare una roba relativa ad un'applicazione, un syslog non è forse l'opzione migliore per questo. Nel caso in cui utilizzi i servizi di registrazione di Apache (log4j, log4xxx e gli altri), allora logFaces sarebbe un buon soluzione in quanto costruita appositamente per l'aggregazione di più applicazioni in un unico posto. Funziona con connessioni TCP o UDP e ha un discreto visualizzatore di log e integrazione del database.

Divulgazione : sono l'autore di questo prodotto.

Gli altri esempi potrebbero essere fantastici, ma ho avuto fortuna con Syslog-NG . È estremamente flessibile e configurabile; anche se è abbastanza facile raccoglierlo e fare qualcosa di utile rapidamente.

Potresti anche prendere in considerazione l'utilizzo degli avvisi SNMP.

Ho esaminato tutte le alternative consigliate in questa discussione. Ho cercato qualcosa di basato su Python. Ho cercato su Google di più e trovato sentinella https://getsentry.com/welcome/ Open source, ben documentato. Dovrebbe essere affidabile per scopi commerciali in quanto esiste un'attività basata su questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top