Elasticsearch como gerenciar seus logs com logstash e kibana

Preview:

Citation preview

Elasticsearch - Como gerenciar seus logs com

Logstash e KibanaLuiz Henrique Zambom Santana

Campus Party – 2015#CPRecife4

Recife-PE, 23/07/2015

Quem sou eu?

• Doutorando na UFSC• Consultor e programador freelancer• Trabalhando com Elasticsearch desde 2013 (versão 0.9.x)• Autor de artigos, Blog (luizsantana.info) e livros

Agenda

• Big Data e NoSQL• Porque Elasticsearch?• ELK• Exemplo• Conclusões• Futuro

Big Data

Qual é o problema?

100 ms

150 ms

200 ms

NoSQL

Sadalage e Fowler, 2012(http://martinfowler.com/books/nosql.html)

Not only SQL

Nathan Marz, 2014(http://www.slideshare.net/nathanmarz/runaway-complexity-in-big-data-and-a-plan-to-stop-it)

Relational databases will be a footnote in history

Por que Elasticsearch?• Tempo real• Flexível• Livre de esquema e muito escalável

• Iniciado por Shay Banon em 2010• Desenvolvido pela comunidade• Código aberto em:

• https://github.com/elastic/elasticsearch

• Atualmente apoiado pela Elastic

Kibana e Logstash

• Também são produtos da Elastic, mas incialmente projetos da comunidade• O Kibana facilita a visualização dos dados indexados no Elasticsearch• Enquanto o Logstash ajuda na indexação

Kibana por Rashid Khan

Logstash por Jordan Sissel

ELK

• Log• Informação sobre um evento

• Logstash• Elasticsearch• Kibana

Logs

• Segundo a Wikipedia:“In computing, a logfile is a file that records either events that occur in an

operating system or other software runs, or messages between different users of a communication software. Logging is the act of keeping a log. In the simplest

case, messages are written to a single logfile.”

• Basicamente um registro de evento

Exemplo

• Logs dos deslocamentos de ônibus no Rio de Janeiro• http://

dadosabertos.rio.rj.gov.br/apiTransporte/apresentacao/rest/index.cfm/obterTodasPosicoes

• Infelizmente não encontrei informações sobre Recife :(• http://dados.recife.pe.gov.br/• MASSS... a solução é genérica• Poderia ser aplicada também para:

• São Paulo• http://www.sptrans.com.br/desenvolvedores/APIOlhoVivo.aspx

• Os códigos de busca estão no seguinte Gist:• https://gist.github.com/lhzsantana/ad15ed27a3191f0a68f8

Receber os dados de log

• Na API de dados abertos do Rio, eles têm o seguinte formato:dataHora,ordem,linha,latitude,longitude,velocidade

07-13-2015 00:00:29,B63056,,"-22.8676","-43.2585",0

07-13-2015 00:44:12,D53744,846,"-22.88271","-43.49538",30

07-13-2015 01:35:11,A37510,,"-22.81443","-43.325508",0

07-13-2015 02:44:19,B42537,,"-22.8764","-43.3296",0

07-13-2015 03:01:52,D87185,,"-22.916969","-43.608009",0

Download e Instalação

• Simplesmente baixar e desempacotar• Elasticsearch

• https://www.elastic.co/downloads/elasticsearch• Versão 1.6.0

• Logstash• https://www.elastic.co/downloads/logstash• Versão 1.5.2

• Kibana• https://www.elastic.co/downloads/kibana• Versão 4.1.1

• Em produção não é tão simples:• http://logz.io/blog/deploy-elk-production/

Conceitos

• Cluster• Lucene• Índice• Mapeamento• Tipo Lucene Banco de dados relacional (BDR)

Índice (Index) Esquema

Type Tabela

Documento (JSON) Linha

Campo (Field) Coluna

Mapeamento (Mapping) Estrutura da tabela

Query DSL SQL

Iniciar o Elasticsearch e o Kibana

Sense

Verificar

• http://localhost:9200/ • http://localhost:5601/

Criar índice e mapeamento no Elasticsearch

PUT campuspartyPOST /campusparty/onibus-csv/_mapping{ "onibus-csv": { "properties": { "linha": { "type": "string" }, "dataHora": { "type": "date" }, "velocidade": { "type": "double" }, "localizacao": { "type": "geo_point" } }}}

Lembrando...

• Na API de dados abertos do Rio, eles têm o seguinte formato:dataHora,ordem,linha,latitude,longitude,velocidade

07-13-2015 00:00:29,B63056,,"-22.8676","-43.2585",0

07-13-2015 00:44:12,D53744,846,"-22.88271","-43.49538",30

07-13-2015 01:35:11,A37510,,"-22.81443","-43.325508",0

07-13-2015 02:44:19,B42537,,"-22.8764","-43.3296",0

07-13-2015 03:01:52,D87185,,"-22.916969","-43.608009",0

Pipeline do Logstash

Inputs generate events, filters modify them, outputs ship them elsewhere.

Modificar o arquivo do logstash.conf

• Três partes:• Input• Filter (optativo)• Output

• Nessa apresentação, usamos:• Input

• File• Filter

• CSV• Mutate

• Output• Elasticsearch

input {

...

}

filter {

...

}

output {

...

}

Input

file {

path => "c:/tmp/onibus.csv"

type => "onibus-csv"

start_position => "beginning"

sincedb_path => "/dev/null"

}

Durante o desenvolvimento

Filtros

filter {

csv {

columns => ["datahora","ordem","linha","latitude","longitude","velocidade"]

separator => ","

}

date {

match => ["datahora","MM-dd-YYYY HH:mm:ss"]

locale => "br"

target => "@timestamp"

}

...

}

Filtros

filter {

...

if [velocidade]=="0" {

drop{}

}

mutate {

convert => [ "velocidade", "float" ]

}

...

}

Filtros

filter {

...

if [latitude] and [longitude] {

mutate {

add_field => [ "[location]", "%{longitude}" ]

add_field => [ "[location]", "%{latitude}" ]

}

mutate {

convert => [ "[location]", "float" ]

}

}

...

}

Output

elasticsearch {

host => "localhost"

index => “campusparty"

protocol => "http"

}

stdout {

codec => rubydebug

}

Iniciar o Logstash• logstash agent -f logstash.conf -l log1.txt –debug• -l é a saída de logs• -debug o nível do log

Verificar dados

• Verificar o Elasticsearch

Consultas – Agregação por linha

GET campusparty/_search{ "size": 0, "query": { "match_all": {} }, "aggs": { "products": { "terms": { "field": "linha", "size": 5 }}}}

Consultas – Agregação por horário

GET campusparty/_search{ "size": 0, "query": { "filtered": { "query": { "match_all": {} }}}, "aggs" : { "articles_over_time" : { "date_histogram" : { "field" : "@timestamp", "interval" : “5m"}}}}

Consultas – Filtro por posição

GET campusparty/_search{ "query": { "filtered": { "query": { "match_all": {} }, "filter": { "geo_distance": { "distance": "1km", "localizacao": { "lat": -22.90340110, "lon": -43.1916759 }}}}}}

Kibana

• Adicionar um novo índice, em Settings

Kibana

• Um gráfico de barras que mostre o número de leituras para cada linha de ônibus.

Kibana

• Leituras por horário

Kibana

• Um Tile com a posição geográfica

Kibana

• Um Tile com a posição geográfica combinado com a velocidade

Kibana

• Combinar as informações em um dashboard

Adicionar a uma página HTML

Acessar com Java, PHP, Javascript…

• Java• http://

www.devmedia.com.br/elasticsearch-realizando-buscas-no-big-data/32180

• PHP• http://

www.devmedia.com.br/elasticsearch-desenvolvendo-big-data-com-php/31609

• Javascript• No livro e breve na Devmedia

Exemplo de cliente

Arquiteturas

• Com o Redis

Arquiteturas

• Para Streaming

Arquiteturas

Arquiteturas

• Arquitetura Lambda

Conclusões

• Muitos outros casos de uso• O Elasticsarch é muito estável e fácil de começar a usar

• Cuidado com essa facilidade, em produção pode se tornar um problema

• Novos projetos estão tornando o ES ainda mais completo• Watcher• Shield

• O Elasticsearch 2.0 beta 1 vai estar disponível logo:• Usa o Lucene 5.2.1• Filtros e querys serão uma coisa só• Compressão vs. Velocidade de escrita• Etc...

Futuro

• Aprofundamento• Tipos, analisadores e buscas avançadas• Ferramentas e plug-ins• Clientes

• Arquiteturas complexas• Redis• Hadoop• Apache Spark (Java Magazine 142)

• Expandir o exemplo com outros dados abertos• Posição de pontos de ônibus• Criminalidade• Número de acidentes

Obrigado!Luiz Henrique Zambom Santana

lhzsantana@gmail.comhttps://twitter.com/LuizHZSantana

Elasticsearch - Como gerenciar seus logscom Logstash e Kibana

(23/07/2015)

Recommended