View
184
Download
0
Category
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
Outras referências
• http://www.devmedia.com.br/space/luiz-henrique-zambom-santana
• Essa apresentação está disponível em:
• http://pt.slideshare.net/LuizHenriqueZambomSa/elasticsearch-como-gerenciar-seus-logs-com-logstash-e-kibana
• Os códigos de busca estão no seguinte Gist:
• https://gist.github.com/lhzsantana/ad15ed27a3191f0a68f8
Obrigado!Luiz Henrique Zambom Santana
lhzsantana@gmail.comhttps://twitter.com/LuizHZSantana
Elasticsearch - Como gerenciar seus logscom Logstash e Kibana
(23/07/2015)
Recommended