Um Case de Arquitetura Distribuídapara Indexação, Armazenamento e Análise de Logs em Tempo Real         Juan Lopes
COMPLEX EVENT   PROCESSING
TIME SERIESREAL-TIME
LOGS
CENTENAS DESERVIDORES
marvin@goldenheart ~ $ ssh root@deepthought****WELCOME TO 1 OF YOUR 38,157,987 SERVERS.TRY THE VEAL. ITS THE BEST IN THIS ...
COMO"DEBUGAR"?
CENTRALIZAR  INDEXAR
3TB / DIA
3TB / DIA10.000.000.000 MSGS / DIA36 MB / SEGUNDO
TWITTER400.000.000 MSGS / DIAEM JUNHO/2012
LOGGLYAmplamente utilizadoPrimeira opção para cloudMaior plano não-custom: 12GB/diaPreço: $1,779/mês
GRAYLOG2Open SourceSelf-hostedArquitetura de partes móveisMongoDBElasticSearchAMQP
SPLUNKFamoso na área de BigDataDestinado ao mundo EnterpriseMuitos gráficos e relatórios$6,000 one-time fee: 500MB/dia500M...
JAVA
HOTSPOT
java.util.concurrent
VISÃO GERAL                            Armazenar  mensagens   Interpretar                             Indexar
RFC 3164: SYSLOG <34>Oct 11 22:14:15 mymachine su: su root failed for lonvick on /dev/pts/8 <priority = facility*8+severit...
CHAVE: VALORmessage    <34>Oct 11 22:14:15 mymachine su: su root           failed for lonvick on /dev/pts/8text       su, ...
?
MG4J Egothor    Nutch    Oxyus  BDDBotZilverline     YaCyCompass      Lius   Regain Piscator Hounder HSearch
<FIELD:CONTENT, DOC*>TEXT:ABACAXI ➜ 1, 3, 9TEXT:BANANA ➜ 2, 3, 10, 42TEXT:CAJU ➜ 3, 11, 50
BAIXA ENTROPIA
<10% de termos únicosmenor overhead por mensagem        MESSAGE BAG
VISÃO GERAL                            Armazenar Interpretar   Bufferizar                             Indexar
<DOC, FREQ, POSITION*>1, 4 ➜ 5, 6, 10, 203, 1 ➜ 409, 4 ➜ 6, 7, 8, 9
SCORES NÃO  IMPORTAM
NORMALINDEXAÇÃO      BUSCA       Field   QueryParser   Document    Query IndexWriter   IndexSearcher
HARDCORE INDEXAÇÃO       BUSCATokenStream      TermPositions     Document    FieldCache   IndexWriter   IndexReader
CULPA DA WIDESCREENCULPA DA WIDESCREEN
WEB INTERFACEJersey (REST API)Backbone.jsCometD
WEB INTERFACEJersey (REST API)Backbone.jsCometD           "app:apache     http 404"?               engine                 ...
CULPA DA WIDESCREENCULPA DA WIDESCREEN
COMMAND-LINE INTERFACECara e coragemHttpClientCometD       /intelie/lognit-cli
REALTIME (AKA TAIL -F)          EVENTS                   subscriber
LIGHTWEIGHT TERM TRIEABRAÇOABRIGOCHOCOLATE                          <RAIZ>                  ABR              CHOCOLATE    ...
AGREGAÇÃO (AKA WC -L)         EVENTS
~10.000 eventos / segundohttp
1 evento / segundohttp => count()
~100 eventos / segundohttp => count()    by host
~100 eventos / 30 segundos http => count()     by hostevery 30 seconds
~100 eventos / 30 segundoshttp => avg(cputime#)        by host   every 30 seconds
CULPA DA WIDESCREENCULPA DA WIDESCREEN
É PRECISOESCALAR
taxa de leitura      MODERADA taxa de escrita   ALTÍSSIMAdependência entre os dados         BAIXA
SHARDING                         engine                LoadUDP/TCP 514              engine              Balancer          ...
Clusterengineengine   engine
Clusterengine                   engineengine
Clusterengine                    Web     HTTP                   Serverengine   engine                    usuário          ...
Clusterengine                    Web     HTTP                   Serverengine   engine                    usuário
Clusterengine         Multicast   engine   HTTPengine                               usuário
MULTICASTJChannel channel = new JChannel();channel.setReceiver(new ReceiverAdapter() {    public void receive(Message msg)...
STACK CONFIGURÁVEL
TUDO ESTÁ DISTRIBUÍDO
BUSCA engine           10                   mergesort, take 10          10    last 10 "http_status:   10 engine           ...
BUSCA engine           10                    mergesort, take 10          10    last 10 "http_status:    10 engine         ...
AGREGAÇÃO        http 200 => count() by host host                count foo                 1234 bar                 2345 b...
AGREGAÇÃO   count() + count() + count()  engine      engine       engine
AGREGAÇÃO        http 200 => avg(time) by host host                 avg_time foo                  0.888889 bar            ...
AGREGAÇÃO   avg(time) + avg(time) + avg(time)                   ?  engine         engine         engine
AGREGAÇÃO    sum(time) + sum(time) + sum(time) count(time) + count(time) + count(time)  engine          engine         eng...
AGREGAÇÃO    sum(time) + sum(time) + sum(time) count(time) + count(time) + count(time)  engine          engine         eng...
E EM PRODUÇÃO?
3.5BI DE MENSAGENS1TB DE DADOS ORIGINAIS    180GB DE ÍNDICE3 SERVIDORES (LOAD < 0.2)
UMA ÚLTIMA COISA
1700+          TESTS99%LINESCOVERED
OBRIGADO!     /juanplopes     @juanplopes     intelie.com.br
tdc2012
tdc2012
tdc2012
tdc2012
tdc2012
tdc2012
Upcoming SlideShare
Loading in …5
×

tdc2012

1,538 views
1,424 views

Published on

Um Case de Arquitetura Distribuída
para Indexação, Armazenamento e
Análise de Logs em Tempo Real

Published in: Technology, Design
1 Comment
3 Likes
Statistics
Notes
No Downloads
Views
Total views
1,538
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
6
Comments
1
Likes
3
Embeds 0
No embeds

No notes for slide

tdc2012

  1. 1. Um Case de Arquitetura Distribuídapara Indexação, Armazenamento e Análise de Logs em Tempo Real Juan Lopes
  2. 2. COMPLEX EVENT PROCESSING
  3. 3. TIME SERIESREAL-TIME
  4. 4. LOGS
  5. 5. CENTENAS DESERVIDORES
  6. 6. marvin@goldenheart ~ $ ssh root@deepthought****WELCOME TO 1 OF YOUR 38,157,987 SERVERS.TRY THE VEAL. ITS THE BEST IN THIS FARM.****root@deepthought ~ $ tail -f /var/log.txt COMO ACESSAR OS LOGS?
  7. 7. COMO"DEBUGAR"?
  8. 8. CENTRALIZAR INDEXAR
  9. 9. 3TB / DIA
  10. 10. 3TB / DIA10.000.000.000 MSGS / DIA36 MB / SEGUNDO
  11. 11. TWITTER400.000.000 MSGS / DIAEM JUNHO/2012
  12. 12. LOGGLYAmplamente utilizadoPrimeira opção para cloudMaior plano não-custom: 12GB/diaPreço: $1,779/mês
  13. 13. GRAYLOG2Open SourceSelf-hostedArquitetura de partes móveisMongoDBElasticSearchAMQP
  14. 14. SPLUNKFamoso na área de BigDataDestinado ao mundo EnterpriseMuitos gráficos e relatórios$6,000 one-time fee: 500MB/dia500MB < 3TB :(
  15. 15. JAVA
  16. 16. HOTSPOT
  17. 17. java.util.concurrent
  18. 18. VISÃO GERAL Armazenar mensagens Interpretar Indexar
  19. 19. RFC 3164: SYSLOG <34>Oct 11 22:14:15 mymachine su: su root failed for lonvick on /dev/pts/8 <priority = facility*8+severity> <date/time> <host> <process> <message>
  20. 20. CHAVE: VALORmessage <34>Oct 11 22:14:15 mymachine su: su root failed for lonvick on /dev/pts/8text su, root, failed, for, lonvick, on, /dev/pts/8facility AUTHseverity CRITICALdate 20121011time 221415host mymachineprocess su
  21. 21. ?
  22. 22. MG4J Egothor Nutch Oxyus BDDBotZilverline YaCyCompass Lius Regain Piscator Hounder HSearch
  23. 23. <FIELD:CONTENT, DOC*>TEXT:ABACAXI ➜ 1, 3, 9TEXT:BANANA ➜ 2, 3, 10, 42TEXT:CAJU ➜ 3, 11, 50
  24. 24. BAIXA ENTROPIA
  25. 25. <10% de termos únicosmenor overhead por mensagem MESSAGE BAG
  26. 26. VISÃO GERAL Armazenar Interpretar Bufferizar Indexar
  27. 27. <DOC, FREQ, POSITION*>1, 4 ➜ 5, 6, 10, 203, 1 ➜ 409, 4 ➜ 6, 7, 8, 9
  28. 28. SCORES NÃO IMPORTAM
  29. 29. NORMALINDEXAÇÃO BUSCA Field QueryParser Document Query IndexWriter IndexSearcher
  30. 30. HARDCORE INDEXAÇÃO BUSCATokenStream TermPositions Document FieldCache IndexWriter IndexReader
  31. 31. CULPA DA WIDESCREENCULPA DA WIDESCREEN
  32. 32. WEB INTERFACEJersey (REST API)Backbone.jsCometD
  33. 33. WEB INTERFACEJersey (REST API)Backbone.jsCometD "app:apache http 404"? engine browser "OK. listen: /comet/1234568790abcdef"
  34. 34. CULPA DA WIDESCREENCULPA DA WIDESCREEN
  35. 35. COMMAND-LINE INTERFACECara e coragemHttpClientCometD /intelie/lognit-cli
  36. 36. REALTIME (AKA TAIL -F) EVENTS subscriber
  37. 37. LIGHTWEIGHT TERM TRIEABRAÇOABRIGOCHOCOLATE <RAIZ> ABR CHOCOLATE AÇO IGO
  38. 38. AGREGAÇÃO (AKA WC -L) EVENTS
  39. 39. ~10.000 eventos / segundohttp
  40. 40. 1 evento / segundohttp => count()
  41. 41. ~100 eventos / segundohttp => count() by host
  42. 42. ~100 eventos / 30 segundos http => count() by hostevery 30 seconds
  43. 43. ~100 eventos / 30 segundoshttp => avg(cputime#) by host every 30 seconds
  44. 44. CULPA DA WIDESCREENCULPA DA WIDESCREEN
  45. 45. É PRECISOESCALAR
  46. 46. taxa de leitura MODERADA taxa de escrita ALTÍSSIMAdependência entre os dados BAIXA
  47. 47. SHARDING engine LoadUDP/TCP 514 engine Balancer engine
  48. 48. Clusterengineengine engine
  49. 49. Clusterengine engineengine
  50. 50. Clusterengine Web HTTP Serverengine engine usuário Broker
  51. 51. Clusterengine Web HTTP Serverengine engine usuário
  52. 52. Clusterengine Multicast engine HTTPengine usuário
  53. 53. MULTICASTJChannel channel = new JChannel();channel.setReceiver(new ReceiverAdapter() { public void receive(Message msg) { System.out.println( msg.getSrc() + ": " + msg.getObject()); }});channel.connect("meuCanalDeChat");BufferedReader reader = new BufferedReader( new InputStreamReader(System.in));while(true) { String line = reader.readLine(); channel.send(null, line);}
  54. 54. STACK CONFIGURÁVEL
  55. 55. TUDO ESTÁ DISTRIBUÍDO
  56. 56. BUSCA engine 10 mergesort, take 10 10 last 10 "http_status: 10 engine 404" usuário 10 engine
  57. 57. BUSCA engine 10 mergesort, take 10 10 last 10 "http_status: 10 engine 404" before {id:84324814} usuário 10 engine
  58. 58. AGREGAÇÃO http 200 => count() by host host count foo 1234 bar 2345 baz 3456
  59. 59. AGREGAÇÃO count() + count() + count() engine engine engine
  60. 60. AGREGAÇÃO http 200 => avg(time) by host host avg_time foo 0.888889 bar 0.224568 baz 5.623424
  61. 61. AGREGAÇÃO avg(time) + avg(time) + avg(time) ? engine engine engine
  62. 62. AGREGAÇÃO sum(time) + sum(time) + sum(time) count(time) + count(time) + count(time) engine engine engine
  63. 63. AGREGAÇÃO sum(time) + sum(time) + sum(time) count(time) + count(time) + count(time) engine engine engine
  64. 64. E EM PRODUÇÃO?
  65. 65. 3.5BI DE MENSAGENS1TB DE DADOS ORIGINAIS 180GB DE ÍNDICE3 SERVIDORES (LOAD < 0.2)
  66. 66. UMA ÚLTIMA COISA
  67. 67. 1700+ TESTS99%LINESCOVERED
  68. 68. OBRIGADO! /juanplopes @juanplopes intelie.com.br

×