tdc2012

Post on 17-Jul-2015

1.138 views 0 download

Transcript of tdc2012

Um Case de Arquitetura Distribuída para Indexação, Armazenamento e

Análise de Logs em Tempo Real

Juan Lopes

COMPLEX EVENT PROCESSING

TIME SERIESREAL-TIME

LOGS

CENTENAS DE SERVIDORES

marvin@goldenheart ~ $ ssh root@deepthought****WELCOME TO 1 OF YOUR 38,157,987 SERVERS. TRY THE VEAL. IT'S THE BEST IN THIS FARM.****

root@deepthought ~ $ tail -f /var/log.txt

COMO ACESSAR OS LOGS?

COMO "DEBUGAR"?

CENTRALIZARINDEXAR

3TB / DIA

3TB / DIA10.000.000.000 MSGS / DIA

36 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/dia500MB < 3TB :(

JAVA

HOTSPOT

java.util.concurrent

VISÃO GERAL

Indexar

Armazenar

Interpretarmensagens

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>

CHAVE: VALOR

<34>Oct 11 22:14:15 mymachine su: 'su root' failed for lonvick on /dev/pts/8

message

facility AUTH

severity CRITICAL

host mymachine

process su

date 20121011

time 221415

text su, root, failed, for, lonvick, on, /dev/pts/8

?

MG4JEgothor

NutchOxyus

BDDBotZilverline

YaCyCompass

LiusRegain

PiscatorHounderHSearch

<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

Bufferizar

Indexar

Armazenar

Interpretar

VISÃO GERAL

<DOC, FREQ, POSITION*>

1, 4 ➜ 5, 6, 10, 203, 1 ➜ 409, 4 ➜ 6, 7, 8, 9

SCORES NÃO IMPORTAM

INDEXAÇÃOField

DocumentIndexWriter

BUSCAQueryParserQueryIndexSearcher

NORMAL

INDEXAÇÃOTokenStream

DocumentIndexWriter

BUSCATermPositionsFieldCacheIndexReader

HARDCORE

CULPA DA WIDESCREEN

CULPA DA WIDESCREEN

Jersey (REST API)Backbone.jsCometD

WEB INTERFACE

Jersey (REST API)Backbone.jsCometD

WEB INTERFACE

engine browser

"app:apache http 404"?

"OK. listen: /comet/1234568790abcdef"

CULPA DA WIDESCREEN

CULPA DA WIDESCREEN

Cara e coragemHttpClientCometD

COMMAND-LINE INTERFACE

/intelie/lognit-cli

REALTIME (AKA TAIL -F)

EVENTS

subscriber

LIGHTWEIGHT TERM TRIE

ABRAÇOABRIGOCHOCOLATE

<RAIZ>

ABR

AÇO IGO

CHOCOLATE

AGREGAÇÃO (AKA WC -L)

EVENTS

http

~10.000 eventos / segundo

http => count()

1 evento / segundo

http => count()by host

~100 eventos / segundo

http => count()by host

every 30 seconds

~100 eventos / 30 segundos

http => avg(cputime#)by host

every 30 seconds

~100 eventos / 30 segundos

CULPA DA WIDESCREEN

CULPA DA WIDESCREEN

É PRECISO

ESCALAR

taxa de leituraMODERADA

taxa de escritaALTÍSSIMA

dependência entre os dados

BAIXA

SHARDING

LoadBalancer

engine

engine

engine

UDP/TCP 514

Cluster

engine

engineengine

Cluster

engine

engineengine

Cluster

engine

engineengine

HTTP

usuário

WebServer

Broker

Cluster

engine

engineengine

HTTP

usuário

WebServer

Cluster

HTTP

usuário

Multicast

engine

engine

engine

MULTICAST

JChannel 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);}

STACK CONFIGURÁVEL

TUDO ESTÁ DISTRIBUÍDO

last 10 "http_status:404"

10

10

10

10

usuário

engine

engine

engine

mergesort, take 10

BUSCA

engine

engine

engine

last 10 "http_status:404"

before {id:84324814}

10

10

10

10

usuário

mergesort, take 10

BUSCA

http 200 => count() by host

host count

foo 1234

bar 2345

baz 3456

AGREGAÇÃO

count() + count() + count()

engine engine engine

AGREGAÇÃO

http 200 => avg(time) by host

host avg_time

foo 0.888889

bar 0.224568

baz 5.623424

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)

AGREGAÇÃO

engine engine engine

sum(time) + sum(time) + sum(time)count(time) + count(time) + count(time)

AGREGAÇÃO

engine engine engine

E EM PRODUÇÃO?

3.5BI DE MENSAGENS

1TB DE DADOS ORIGINAIS

180GB DE ÍNDICE

3 SERVIDORES (LOAD < 0.2)

UMA ÚLTIMA COISA

1700+ TESTS

99% LINESCOVERED

OBRIGADO!

/juanplopes

@juanplopes

intelie.com.br