Monitoramento em tempo real com
Elasticsearch e Kibana
Marcus Lacerda
❖ Formado UFU em 2002
❖ JAVA, .NET, JS, ESB (...)
❖ Arquiteto na Ci&T ~9 anos
❖ Bike e Kartista frustrado ;-)
marcus-lacerdaa
marcuslacerda
@mlacerda_cit
goo.gl/19asDo
CONTEXTO
Qual era nosso desafio?
+100
Linhas de
Código
1M
Funcionalidades
+39
Log
s
24x7
3k
600k
Usuários
Request /
Day
Operação
Qual era nosso desafio?
Você sabe o que acontece no
seu sistema em produção?
Quantos usuários diferentes
logaram na última semana?
Quais são as funcionalidades
mais utilizadas?
Quantos erros não tratados os
usuários estão recebendo?
Como responder essas perguntas?
SQL
Dispositivos
Integrações
Code Runtime
Monitoramento em
Tempo Real
Utilização
Integrações
SQL
Utilização
Dispositivos
Code Runtime
Monitoramento em
Tempo Real
Integrações
SQL
Utilização
Dispositivos
Code Runtime
Monitoramento em
Tempo Real
Codahale
Metrics
Vamos falar sobre:
ELASTICSEARCH
Opensource nosql database
Primeira release em 2010 por
@kimchy
Shay Banon
Elasticsearch
Elasticsearch
Poderosa ferramenta de pesquisa baseada no Apache
Lucene
Escalabilidade
● Distribuido
● Node Discovery
● Query distribuition
Elasticsearch
Node Node Node
GET /_search?q=age:18
RESTFul API: JSON in, JSON out
Elasticsearch
wget https://download.elastic.co/elasticsearch/...
tar -xf elasticsearch-1.7.2.tar.gz
cd elasticsearch-1.7.2
./bin/elasticsearch
GET localhost:9200
# 200 OK
{
"status" : 200,
"name" : "Armageddon",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "1.7.2",
"build_hash" : "e43676b1385b8125d647f593f7202acb...",
"build_timestamp" : "2015-09-14T09:49:53Z",
"build_snapshot" : false,
"lucene_version" : "4.10.4"
},
"tagline" : "You Know, for Search"
}
Como enviar um documento?
PUT <server:port>/index/type/id
PUT <server:port>/index/type/id
PUT <server:port>/index/type/id
where?
PUT <server:port>/twitter/type/id
PUT <server:port>/twitter/type/id
what?
PUT <server:port>/twitter/tweet/id
PUT <server:port>/twitter/tweet/id
which?
PUT <server:port>/twitter/tweet/1
PUT <server:port>/twitter/tweet/1 -d '
{
"created_at": "Oct/31/2015 16:30:12 +0000",
"text": "Introducing Elastic DevDay2015",
"user": {
"name": "Marcus Lacerda",
"screen_name": "mlacerda_cit"
},
"loc": {
"lat": 12.2,
"lon": 34.6
}
}
# 201 CREATED
{
"_index": "twitter",
"_type": "tweet",
"_id": "1",
"_version": 1,
"created": true
}
Como pesquisar?
GET /twitter/tweet/1
GET /twitter/_search
{
"query": {
/* Query DSL */
}
}
}
GET /twitter/_search
{
"query": {
"filtered" : {
"query" : {"match" : {"text" : "devday"}},
"filter" : { "geo_distance" : {
"distance" : "100km",
"coordinates.location" : [-40, -20]
}
}
}
}
}
# 200 OK
{
"took": 11,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 9,
"max_score": 3.1949658,
"hits": [
{...},
{...}
Hein?
Preciso usar
essa API
Rest na
munheca?
var node = new Uri("http://localhost:9200");
var config = new ConnectionConfiguration(node);
var client = new ElasticsearchClient(config);
PM > Install-Package Elasticsearch.Net
var myJson = @"{ ""text"" : ""hello world"" }";
client.Index("myindex","mytype","1", myJson);
.Net API
client.search({
q: 'devday'
}).then(function (body) {
var hits = body.hits.hits;
}, function (error) { … });
var client = new elasticsearch.Client({
host: 'localhost:9200'
});
var elasticsearch = require('elasticsearch');
Javascript API
REST API
● Microsoft .NET
● JavaScript
● Java (binary protocol)
● Ruby
● Python
● PHP
● Perl
● C++
Outras Bibliotecas
Integrações
SQL
Utilização
Dispositivos
Code Runtime
Monitoramento em
Tempo Real
LOGSTASH
INPUT OUTPUT
Simplifica a coleta dos dados
Inputs:
stdin
file
s3
jdbc
jmx
github
http
tcp
redis
twitter
... e outros
Outputs:
stout
file
s3
csv
email
elasticsearch
graphite
nagios
mongodb
redis
Inputs:
stdin
file
s3
jdbc
jmx
github
http
tcp
redis
twitter
... e outros
Outputs:
stout
file
s3
csv
email
elasticsearch
graphite
nagios
mongodb
redis
wget https://download.elastic.co/logstash/
tar -xf logstash-1.5.4.tar.gz
cd logstash-1.5.4/
./bin/logstash -e -d
'input {
file { ... }
}
output {
elasticsearch { ... }
}'
output {
elasticsearch {
host => "localhost"
port => "9200"
protocol => "http"
cluster => "elasticsearch"
index => "twitter-%{+YYYY.MM}"
document_type => "tweet"
}
}
input {
twitter {
consumer_key => "%KEY%"
consumer_secret => "%SECRET%"
oauth_token => "%TOK%"
oauth_token_secret => "%TOK%"
keywords => [
"#devday2015",
"#esdevday2015"
]
}
}
./bin/logstash -f twitter.conf
tweet suas dúvidas ou comentários durante o
evento com a hashtag:
#esdevday2015
#devday2015
@mlacerda_cit
SQL
Utilização
Dispositivos
Code Runtime
Monitoramento em
Tempo Real
Integrações
Utilização
CODAHALE METRICS
Java library que fornece um conjunto de
ferramentas poderosas para medir o
comportamento do seu código no ambiente de
produção
source: http://metrics.dropwizard.io
Codahale Metrics
Gauges
Counters
Histograms
Meters
Timers
MÉTRICAS
# Usuários Logados
Async reporter to elasticsearch
ELASTICSEARCH API /_bulk
Integrações
SQL
Utilização
Dispositivos
Code Runtime
Monitoramento em
Tempo Real
Code Runtime
Dispositivos
SQL
KIBANA
Permite analisar dados a partir Elasticsearch
AngularJS + NodeJS serverside
Kibana
Interface flexivel e fácil de
customizar
Possibilista análise
sofisticadas
Kibana
wget https://download.elastic.co/kibana/
tar -xf kibana.4.2.1.tar.gz
cd kibana.4.2.1
./bin/kibana
Kibana
Integrações
SQL
Utilização
Dispositivos
Code Runtime
Monitoramento em
Tempo Real
Integrações
SQL
Utilização
Dispositivos
Code Runtime
Monitoramento em
Tempo Real
NOSSOS EXEMPLOS!
Anomalia?
QUANTIDADE DE ERROS vistos pelos usuários
UTILIZAÇÃO: 2w PÓS GOLIVE
+50% em 3
funcionalidades
+80% c/ IE 11
Indicadores de Negócio
Degradação de
performance?
DEMO
GET /twitter/_search?q=devday2015
Perguntas?
Obrigado

Monitoramento em tempo real (DEVDAY2015)

Notas do Editor

  • #4 Conteúdo apresentado está disponível nesse link. Será divulgado no momento da apresentação no evento.
  • #6 Passar a ideia do projeto -> milhares de usuários conectados no sistema -> múltiplos dispositivos: mobile, browser, relogia -> centranas de integrações e APIs públicas Link com apresentação do Rodrigão (desafios) -> http://pt.slideshare.net/RodrigoStefaniDoming/qcon-rio-2015-arquitetura-incremental
  • #7 Características: O projeto tinha alguns requisitos bem cabulosos! 24x7, isso muda impacta bastante algumas decisões, principalemnte no sentido de quanto voce consegue mensurar dela. usuários simultaneos 1k, nessa era atual onde normalmente falamos de milhares/milhoes de usuários 1k parece pouco, mas temos que lembrar que este é um sistema, complexo, que executa regras de negócio, faz gestão, processa indicadores, para que esses 1k usuários que estão ativos 24hs pod dia 7 dias por semana. 300k requiests / dia. Para esse desafio nos acabamos precisando de
  • #8 PLATAFORMA: "a brincadeira começa quando os usuários começam a utilizar a sua plataforma". Como estar preparado para a vida real?
  • #11 Como permitir um trabalho de analitics e detecção de anomalias em tempo real? Precisamos de informações (estatística) sobre o que está acontecendo "dentro" da solução? Ter condições de analisar dados estátisticos para saber o que está acontecendo na solução e tomar medidas proativas durante a implantação. Técnica como: Capture domain events explicitly Real user monitoring Structured logging / events
  • #12 Como permitir um trabalho de analitics e detecção de anomalias em tempo real? Precisamos de informações (estatística) sobre o que está acontecendo "dentro" da solução? Ter condições de analisar dados estátisticos para saber o que está acontecendo na solução e tomar medidas proativas durante a implantação. Técnica como: Capture domain events explicitly Real user monitoring Structured logging / events
  • #13 Essas informações existem, mas geralmente estão desestruturadas LOGS da aplicação LOGS dos servidores Requests dos usuários SQL vs Requests Mais importante do que ter todas as perguntas antecipadamente era ter uma forma fácil de encontrar o que precisávamos
  • #14 Precisamos de informações (estatística) sobre o que está acontecendo "dentro" da solução? Ter condições de analisar dados estátisticos para saber o que está acontecendo na solução e tomar medidas proativas durante a implantação.
  • #15 Repositório central e estruturado das informações técnicas Plataforma flexível e poderosa de pesquisa que permitisse investigar o que está acontecendo Fazer o link com Sonar para análise estática de código que já é comum nos projetos quando se fala de Continuous Integration.
  • #16 Repositório central e estruturado das informações técnicas Plataforma flexível e poderosa de pesquisa que permitisse investigar o que está acontecendo Fazer o link com Sonar para análise estática de código que já é comum nos projetos quando se fala de Continuous Integration.
  • #19 ElasticSearch is an open source, RESTful search engine built on top of Apache Lucene and released under an Apache license. It is Java-based and can search and index document files in diverse formats. ElasticSearch has been compared to Apache Solr and offers several notable features: Provides a scalable search solution. Performs near-real-time searches. Provides support for multi-tenancy. Streamlines backup processes and ensures data integrity. An index can be easily recovered in a case of a server crash. Uses Javascript Object Notation (JSON) and Java application program interfaces (APIs). Automatically indexes JSON documents. Indexing uses unique type-level identifiers. Each index can have its own settings. Searches can be done with Lucene-based querystrings.
  • #20 Grandes players estão usando Stackoverflow usava Lucene.NET. Apos problemas de performance, mudou pra elastic (isso a uns 2 anos atras). -> http://meta.stackexchange.com/questions/160100/a-new-search-engine-for-stack-exchange -> http://highscalability.com/blog/2014/7/21/stackoverflow-update-560m-pageviews-a-month-25-servers-and-i.html -> Zendesk migrou do Solr para Elasticsearch depois de problemas para escalar seu produto https://www.elastic.co/elasticon/2015/sf/from-apache-to-solr-to-elasticsearch-evolution-zendesk-search-experience
  • #22 Compass foi descontinuado para dar vida ao Elasticsearch, com grande mindset deste ser realmente distribuido
  • #24 Precisa ter o java 7 instalado Baixar o elasticsearch no site e descompatar o zip Arquivo pequeno. Menos de 20 megas Executar o comando ./bin/elasticsearch
  • #47 Repositório central e estruturado das informações técnicas Plataforma flexível e poderosa de pesquisa que permitisse investigar o que está acontecendo Fazer o link com Sonar para análise estática de código que já é comum nos projetos quando se fala de Continuous Integration.
  • #48  Mostrar o pacote de instacal witix-dashbaord witix-client Mostrar elasticserach funcionando http://localhost:7001/witix/es http://localhost:7001/witix/head/ (backoffice de administracao)
  • #51 Caso mais comum Input (File) para Output (Elasticsearch)
  • #52 Precisa ter o java 7 instalado Vaixar o logstash no link logstash/logstash-1.5.4.zip e descompacta-lo Arquivo pequeno. Menos de 20 megas
  • #56 Repositório central e estruturado das informações técnicas Plataforma flexível e poderosa de pesquisa que permitisse investigar o que está acontecendo Fazer o link com Sonar para análise estática de código que já é comum nos projetos quando se fala de Continuous Integration.
  • #57  Mostrar o pacote de instacal witix-dashbaord witix-client Mostrar elasticserach funcionando http://localhost:7001/witix/es http://localhost:7001/witix/head/ (backoffice de administracao)
  • #62 Repositório central e estruturado das informações técnicas Plataforma flexível e poderosa de pesquisa que permitisse investigar o que está acontecendo Fazer o link com Sonar para análise estática de código que já é comum nos projetos quando se fala de Continuous Integration.
  • #68 Repositório central e estruturado das informações técnicas Plataforma flexível e poderosa de pesquisa que permitisse investigar o que está acontecendo Fazer o link com Sonar para análise estática de código que já é comum nos projetos quando se fala de Continuous Integration.
  • #69 Repositório central e estruturado das informações técnicas Plataforma flexível e poderosa de pesquisa que permitisse investigar o que está acontecendo Fazer o link com Sonar para análise estática de código que já é comum nos projetos quando se fala de Continuous Integration.
  • #73 Trabalho de analitics e detecção de anomalias em tempo real!