Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

tdc2012

1,855 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

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

×