SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
Primeiros PassosPrimeiros Passos
Com ElasticsearchCom Elasticsearch
Anael Carvalho
<anael.ferraz.carvalho@gmail.com>
Roteiro
1. Introdução
2. Conceitos básicos
3. Instalação
4. Interagindo
5. Indexando documentos
6. Failover e scaling
7. Buscas
8. Stack ELK
9. Kibana
10. Logstash
11. Elasticsearch em produção
12. Monitoramento
13. Referências
Repositório GitHub
http://bit.ly/1LpVa4f
Introdução
● Mecanismo de busca e análise
– Textual, estruturada, analítica, etc
– “Quase“ tempo real
● Código aberto
– Baseado no Apache Lucene
– Licença Apache 2
● Distribuído
● Altamente escalável
Introdução (cont.)
● “Esconde“ a complexidade do Lucene atrás de um pacote
simplificado
– API RESTful para comunicação
– Configuração padrão sensata
– Escalabilidade
● Ao mesmo tempo, flexível o suficiente para permitir
configurações e funcionalidades avançadas
– Controle de relevância, busca por proximidade,
analisadores de línguas, etc
● Usado por Wikipedia, Stack Exchange, GitHub, etc
Conceitos básicos
● Orientado a documentos
– Dados são guardados e indexados como documentos
– JSON é usado como formato para serialização
– A busca, pois, é feita por documentos baseada em seu
conteúdo
● Qual a diferença para outras soluções NoSQL?
– Todos os campos do documento são indexados por
padrão (solução voltada para busca!)
● Índice invertido
Conceitos básicos (cont.)
● Documentos são classificados com um tipo
– Pode ser pensado como a “classe“ do documento
– Cada tipo possui um nome (por ex. usuário) e um
mapeamento
– O mapeamento descreve a estrutura do documento (campos,
tipo de dados, etc), algo como um schema!
●
Documentos são guardados em índices
– Análogo a um banco de dados!
– Cada índice pode ter um ou mais tipos
– Podemos pensar nos tipos como tabelas!
Conceitos básicos (cont.)
RDBMS Elasticsearch
Banco de Dados Índices
Tabelas Tipos
Linhas Documentos
Colunas Campos do
documento
Conceitos básicos (cont.)
● Shards
– Cada índice pode ter um ou mais shards
– “Partição“ do índice que contém os dados (documentos)
● Internamente, cada shard é uma instância do Lucene
– Pode ser classificado como primário ou réplica
● O número de shards primários é definido na criação do
índice, não podendo mais ser alterado
● O número de shards de réplica pode ser alterado a
qualquer momento
● Cada documento pertence a apenas um shard primário
Conceitos básicos (cont.)
● Nó
– Uma instância do Elasticsearch
– Armazena um ou mais shards
● Cluster
– Grupamento de um ou mais nós
● Apenas um nó mestre existe por cluster
– Responsável por tarefas “globais“
● Criar/deletar índices, adicionar/remover nós do cluster, etc
– Qualquer nó do cluster pode se transformar em mestre
● Podemos falar com qualquer nó do cluster, inclusive com o mestre
Conceitos básicos (cont.)
Instalação
DEMONSTRAÇÃO
Interagindo
● API RESTful
– Padrão porta 9200
● API Java
– Cliente “nó“
● Cria uma instância do elasticsearch e se associa ao
cluster, porém não armazena dados
– Cliente “transporte“
● Comunica-se remotamente com algum nó do cluster
– Vantagens e desvantagens
Indexando documentos
● Utiliza-se a API de Indexação
– Com id auto-gerado:
● POST /{indice}/{tipo}
– Com id externo
● PUT /{indice}/{tipo}/{id}
● Documentos são imutáveis – para alterá-los é necessário substituir todo
o conteúdo
– Usa-se o endpoint com o id interno:
● PUT /{indice}/{tipo}/{id}
– Endpoint _update existe para facilitar o processo:
● POST /{indice}/{tipo}/{id}/_update
Indexando documentos (cont.)
● Como saber se um documento existe?
– Podemos utilizar o método HEAD
● HEAD /{indice}/{tipo}/{id}
● Como garantir que um documento será criado em vez de
atualizado?
– Usa-se o endpoint _create:
● PUT /{indice}/{tipo}/{id}/_create
● Como deletar um documento?
– Método DELETE
● DELETE /{indice}/{tipo}/{id}
Indexando documentos (cont.)
● Como garantir a consistência das atualizações?
– Elasticsearch cria um campo de versão para cada
documento (“_version“)
– A aplicação pode passar como parâmetro a versão
para aplicar as atualizações de dados
● PUT /{indice}/{tipo}/{id}?version=1
– Caso a versão tenha sido alterada, a requisição falha
com status 409 Conflict
Indexando documentos (cont.)
DEMONSTRAÇÃO
Failover e scaling
● Basta iniciar novas instâncias do Elasticsearch para escalar
● Shards de réplica nunca ficam no mesmo nó que contém o shard
primário
● Cluster automaticamente migra os shards entre os nós, mantendo
os dados balanceados
● Em caso de falha de algum nó, os shards de réplica dos shards
primários contidos no nó que falhou são promovidos a primários e
novos shards de réplica são criados
– Cluster é rebalanceado
● Em caso de falha do nó mestre, processo de eleição define o novo
nó mestre
Failover e scaling
Status do Cluster
Verde Shards primários e de
réplica ativos
Amarelo Shards primários ativos
porém nem todas as
réplicas estão ativas. Em
caso de falha de algum nó
corremos risco de perda de
dados!
Vermelho Nem todos os shards
primários estão ativos.
Faltam dados aos índices!
Failover e scaling (cont.)
DEMONSTRAÇÃO
Buscas
● Funcionalidade principal da ferramenta
● Busca estruturada
– Busca por algum campo específico ordenando resultados por
algum outro campo
– Similar a uma query SQL
● Busca textual
– Encontrar documentos que contenham certas palavras-
chaves, ordenando por relevância
● Busca mista
– Combinação entre os dois anteriores
Buscas (cont.)
● Dois jeitos possíveis:
– Busca via URI
● Geralmente usada para testes ou buscas simples
● Opções limitadas
● GET /{indice}/{tipo}/_search?q={query}
– Busca via Request Body
● Utiliza Query DSL
– Linguagem de query específica do Elasticsearch
– Define uma série de queries e filtros e permite a combinação
dos mesmos
● POST|GET /{indice}/{tipo}/_search
Buscas (cont.)
● Filtro
– Usado para buscar campos que contém valores exatos
– Buscas que podem ser respondidas com sim ou não
– Exemplos: terms, range, exists, bool, etc
● Query
– Usado para buscas textuais
– Buscas cujo resultado dependam de relevância
– Exemplos: match, bool, etc
Buscas (cont.)
● Analisadores
– Quando um documento é indexado, os campos texto são “quebrados“
em termos que podem ser buscados
– A “quebra“ é feita por um analisador
● É possível criar novos ou usar algum pré-definido
● Analisador padrão é aplicado a todos os campos textos caso
nenhum seja definido
– A associação é feita no mapeamento dos tipos
– Posteriormente, a busca feita no campo deve passar pelo mesmo
analisador para garantir a consistência dos resultados
● Paginação
– Padrão de 10 resultados por página
Buscas (cont.)
● Ordenação
– Feita por algum campo específico ou por relevância
● Relevância
– Cada documento voltará com um campo especial chamado
“_score“ que contém um decimal representando a relevância
– Quanto maior o número, maior a relevância
– Relevância é calculada de acordo com um algoritmo de
similaridade
– O algoritmo padrão utilizado é o Term Frequency/Inverse
Document Frequency (TF/IDF)
Buscas (cont.)
DEMONSTRAÇÃO
Stack ELK
● O Elasticsearch pode ser utilizado em conjunto com outras
duas ferramentas, que juntas formam o stack ELK
– Elasticsearch
– Logstash
– Kibana
Kibana
● Plataforma de análise e visualização de dados
● Podemos criar e armazenar queries customizadas,
visualizações de acordo com widgets pré-definidos, e
dashboards para visualização de dados em tempo real
● Fácil configuração e utilização
Kibana
DEMONSTRAÇÃO
Logstash
● Ferramenta para coleta, processamento e entrega de dados de
fontes variadas para locais diversos
● Entradas
– Arquivos, HTTP, TCP, stdin, SQS, Twitter, Redis, etc
● Filtros
– CSV, XML, JSON, Grok, etc
● Mais de 120 expressões Grok pré-definidas para parsing
de entradas
● Saídas
– Elasticsearch, stdout, S3, arquivos, MongoDB, etc
Logstash
DEMONSTRAÇÃO
Elasticsearch em produção
● Preferir memória a capacidade de processamento
– 8GB a 64GB
● Disco quase sempre será o gargalo, usar SSD se possível
● Nomear cluster e nós
● Mudar diretório de armazenamento de dados
● Desabilitar multicast
● No mínimo 3 nós
– Tentar evitar a situação de “split brain“
– Setar o parâmetro “minimum_master_nodes“ de modo a ter um
quórum de metade mais um do número total de nós
Elasticsearch em produção
● JVM – Dar apenas metade da memória disponível
– A outra metade será usada pelo Lucene, que consome
do SO
– Não ultrapassar 32GB
● Desabilitar ou reduzir swap
● Aumentar o número de file descriptors (64.000)
● Para grande quantidade de nós, verificar configurações de
recuperação
Monitoramento & Troubleshooting
● Plugin Marvel
● Saúde do cluster
– GET _cluster/health
● Saúde dos índices
– GET _cluster/health?level=indices
● Saúde dos shards
– GET _cluster/health?level=shards
Monitoramento & Troubleshooting
● Status dos nós
– GET _nodes/stats
● Status do cluster (agregação dos nós)
– GET _cluster/stats
● Status dos índices
– GET {indice}/_stats
Referências
● https://www.elastic.co/guide/en/elasticsearch/reference/cur
rent/index.html
● https://www.elastic.co/guide/en/kibana/current/index.html
● https://www.elastic.co/guide/en/logstash/current/index.html
● Elasticsearch, The Definitive Guide (Clinton Gormley &
Zachary Tong – O'Reilly Media – ISBN 9781449358549)
PERGUNTAS
FIM

Mais conteúdo relacionado

Mais procurados

Stream processing using Kafka
Stream processing using KafkaStream processing using Kafka
Stream processing using KafkaKnoldus Inc.
 
Toi uu hoa he thong 30 trieu nguoi dung
Toi uu hoa he thong 30 trieu nguoi dungToi uu hoa he thong 30 trieu nguoi dung
Toi uu hoa he thong 30 trieu nguoi dungIT Expert Club
 
Terraform modules restructured
Terraform modules restructuredTerraform modules restructured
Terraform modules restructuredAmi Mahloof
 
PLPgSqL- Datatypes, Language structure.pptx
PLPgSqL- Datatypes, Language structure.pptxPLPgSqL- Datatypes, Language structure.pptx
PLPgSqL- Datatypes, Language structure.pptxjohnwick814916
 
Transactions and Concurrency Control Patterns
Transactions and Concurrency Control PatternsTransactions and Concurrency Control Patterns
Transactions and Concurrency Control PatternsJ On The Beach
 
What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019
What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019
What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019confluent
 
Analytics with Apache Superset and ClickHouse - DoK Talks #151
Analytics with Apache Superset and ClickHouse - DoK Talks #151Analytics with Apache Superset and ClickHouse - DoK Talks #151
Analytics with Apache Superset and ClickHouse - DoK Talks #151DoKC
 
Java concurrency - Thread pools
Java concurrency - Thread poolsJava concurrency - Thread pools
Java concurrency - Thread poolsmaksym220889
 
CDC Stream Processing With Apache Flink With Timo Walther | Current 2022
CDC Stream Processing With Apache Flink With Timo Walther | Current 2022CDC Stream Processing With Apache Flink With Timo Walther | Current 2022
CDC Stream Processing With Apache Flink With Timo Walther | Current 2022HostedbyConfluent
 
Apache Camel K - Copenhagen
Apache Camel K - CopenhagenApache Camel K - Copenhagen
Apache Camel K - CopenhagenClaus Ibsen
 
Monitoring Kafka w/ Prometheus
Monitoring Kafka w/ PrometheusMonitoring Kafka w/ Prometheus
Monitoring Kafka w/ Prometheuskawamuray
 
How to Avoid Common Mistakes When Using Reactor Netty
How to Avoid Common Mistakes When Using Reactor NettyHow to Avoid Common Mistakes When Using Reactor Netty
How to Avoid Common Mistakes When Using Reactor NettyVMware Tanzu
 
What’s the Best PostgreSQL High Availability Framework? PAF vs. repmgr vs. Pa...
What’s the Best PostgreSQL High Availability Framework? PAF vs. repmgr vs. Pa...What’s the Best PostgreSQL High Availability Framework? PAF vs. repmgr vs. Pa...
What’s the Best PostgreSQL High Availability Framework? PAF vs. repmgr vs. Pa...ScaleGrid.io
 
Data weave 2.0 advanced (recursion, pattern matching)
Data weave 2.0   advanced (recursion, pattern matching)Data weave 2.0   advanced (recursion, pattern matching)
Data weave 2.0 advanced (recursion, pattern matching)ManjuKumara GH
 
Apache Camel v3, Camel K and Camel Quarkus
Apache Camel v3, Camel K and Camel QuarkusApache Camel v3, Camel K and Camel Quarkus
Apache Camel v3, Camel K and Camel QuarkusClaus Ibsen
 
The Anatomy of TYPO3 Sitepackages
The Anatomy of TYPO3 SitepackagesThe Anatomy of TYPO3 Sitepackages
The Anatomy of TYPO3 SitepackagesBenjamin Kott
 

Mais procurados (20)

Stream processing using Kafka
Stream processing using KafkaStream processing using Kafka
Stream processing using Kafka
 
Toi uu hoa he thong 30 trieu nguoi dung
Toi uu hoa he thong 30 trieu nguoi dungToi uu hoa he thong 30 trieu nguoi dung
Toi uu hoa he thong 30 trieu nguoi dung
 
Terraform modules restructured
Terraform modules restructuredTerraform modules restructured
Terraform modules restructured
 
PLPgSqL- Datatypes, Language structure.pptx
PLPgSqL- Datatypes, Language structure.pptxPLPgSqL- Datatypes, Language structure.pptx
PLPgSqL- Datatypes, Language structure.pptx
 
Transactions and Concurrency Control Patterns
Transactions and Concurrency Control PatternsTransactions and Concurrency Control Patterns
Transactions and Concurrency Control Patterns
 
What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019
What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019
What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019
 
Apache Kafka
Apache KafkaApache Kafka
Apache Kafka
 
Analytics with Apache Superset and ClickHouse - DoK Talks #151
Analytics with Apache Superset and ClickHouse - DoK Talks #151Analytics with Apache Superset and ClickHouse - DoK Talks #151
Analytics with Apache Superset and ClickHouse - DoK Talks #151
 
Java concurrency - Thread pools
Java concurrency - Thread poolsJava concurrency - Thread pools
Java concurrency - Thread pools
 
CDC Stream Processing With Apache Flink With Timo Walther | Current 2022
CDC Stream Processing With Apache Flink With Timo Walther | Current 2022CDC Stream Processing With Apache Flink With Timo Walther | Current 2022
CDC Stream Processing With Apache Flink With Timo Walther | Current 2022
 
Apache Camel K - Copenhagen
Apache Camel K - CopenhagenApache Camel K - Copenhagen
Apache Camel K - Copenhagen
 
Monitoring Kafka w/ Prometheus
Monitoring Kafka w/ PrometheusMonitoring Kafka w/ Prometheus
Monitoring Kafka w/ Prometheus
 
How to Avoid Common Mistakes When Using Reactor Netty
How to Avoid Common Mistakes When Using Reactor NettyHow to Avoid Common Mistakes When Using Reactor Netty
How to Avoid Common Mistakes When Using Reactor Netty
 
CockroachDB
CockroachDBCockroachDB
CockroachDB
 
What’s the Best PostgreSQL High Availability Framework? PAF vs. repmgr vs. Pa...
What’s the Best PostgreSQL High Availability Framework? PAF vs. repmgr vs. Pa...What’s the Best PostgreSQL High Availability Framework? PAF vs. repmgr vs. Pa...
What’s the Best PostgreSQL High Availability Framework? PAF vs. repmgr vs. Pa...
 
Data weave 2.0 advanced (recursion, pattern matching)
Data weave 2.0   advanced (recursion, pattern matching)Data weave 2.0   advanced (recursion, pattern matching)
Data weave 2.0 advanced (recursion, pattern matching)
 
Envoy and Kafka
Envoy and KafkaEnvoy and Kafka
Envoy and Kafka
 
Apache Camel v3, Camel K and Camel Quarkus
Apache Camel v3, Camel K and Camel QuarkusApache Camel v3, Camel K and Camel Quarkus
Apache Camel v3, Camel K and Camel Quarkus
 
The Anatomy of TYPO3 Sitepackages
The Anatomy of TYPO3 SitepackagesThe Anatomy of TYPO3 Sitepackages
The Anatomy of TYPO3 Sitepackages
 
Protocol Buffers
Protocol BuffersProtocol Buffers
Protocol Buffers
 

Destaque

Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasWaldemar Neto
 
Fazendo mágica com ElasticSearch
Fazendo mágica com ElasticSearchFazendo mágica com ElasticSearch
Fazendo mágica com ElasticSearchPedro Franceschi
 
Elasticsearch como gerenciar seus logs com logstash e kibana
Elasticsearch   como gerenciar seus logs com logstash e kibanaElasticsearch   como gerenciar seus logs com logstash e kibana
Elasticsearch como gerenciar seus logs com logstash e kibanaLuiz Henrique Zambom Santana
 
Capítulo 03 - Formulários, menus e navegação entre telas
Capítulo 03 - Formulários, menus e navegação entre telasCapítulo 03 - Formulários, menus e navegação entre telas
Capítulo 03 - Formulários, menus e navegação entre telasMarcio Palheta
 
Capítulo 01 - Fundamentos de Android e o HelloWorld
Capítulo 01 - Fundamentos de Android e o HelloWorldCapítulo 01 - Fundamentos de Android e o HelloWorld
Capítulo 01 - Fundamentos de Android e o HelloWorldMarcio Palheta
 

Destaque (7)

Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscas
 
Fazendo mágica com ElasticSearch
Fazendo mágica com ElasticSearchFazendo mágica com ElasticSearch
Fazendo mágica com ElasticSearch
 
Elasticsearch como gerenciar seus logs com logstash e kibana
Elasticsearch   como gerenciar seus logs com logstash e kibanaElasticsearch   como gerenciar seus logs com logstash e kibana
Elasticsearch como gerenciar seus logs com logstash e kibana
 
Capítulo 03 - Formulários, menus e navegação entre telas
Capítulo 03 - Formulários, menus e navegação entre telasCapítulo 03 - Formulários, menus e navegação entre telas
Capítulo 03 - Formulários, menus e navegação entre telas
 
Capítulo 01 - Fundamentos de Android e o HelloWorld
Capítulo 01 - Fundamentos de Android e o HelloWorldCapítulo 01 - Fundamentos de Android e o HelloWorld
Capítulo 01 - Fundamentos de Android e o HelloWorld
 
Elasticsearch
ElasticsearchElasticsearch
Elasticsearch
 

Semelhante a Primeiros Passos com Elasticsearch

Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Tchelinux
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearchtdc-globalcode
 
Android DevConference - Elastic Search como ferramenta de busca em aplicações...
Android DevConference - Elastic Search como ferramenta de busca em aplicações...Android DevConference - Elastic Search como ferramenta de busca em aplicações...
Android DevConference - Elastic Search como ferramenta de busca em aplicações...iMasters
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordtchandy
 
Elastic MeetUp Porto Alegre
Elastic MeetUp Porto AlegreElastic MeetUp Porto Alegre
Elastic MeetUp Porto AlegreRafael Gomes
 
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...tdc-globalcode
 
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017Thiago Barradas
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open sourceRodrigo Aurélio
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfArleiEvaristo
 
DBA Brasil 2.0 NOSql Apache Cassandra para DBAs
DBA Brasil 2.0   NOSql Apache Cassandra para DBAsDBA Brasil 2.0   NOSql Apache Cassandra para DBAs
DBA Brasil 2.0 NOSql Apache Cassandra para DBAsRonaldo Leite Martins
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensAlessandro Binhara
 
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...Aryel Tupinambá
 
Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...
Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...
Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...Jeronimo Zucco
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation FrameworkLeandro Domingues
 
PostgreSQL Conceitos e aplicações - FSA
PostgreSQL  Conceitos e aplicações - FSAPostgreSQL  Conceitos e aplicações - FSA
PostgreSQL Conceitos e aplicações - FSAFabio Telles Rodriguez
 
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTIOracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTIFernando Ike
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Marcos William Valentini
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Marcos William Valentini
 

Semelhante a Primeiros Passos com Elasticsearch (20)

Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
 
Android DevConference - Elastic Search como ferramenta de busca em aplicações...
Android DevConference - Elastic Search como ferramenta de busca em aplicações...Android DevConference - Elastic Search como ferramenta de busca em aplicações...
Android DevConference - Elastic Search como ferramenta de busca em aplicações...
 
PostgreSQL Conceitos e aplicações
PostgreSQL  Conceitos e aplicaçõesPostgreSQL  Conceitos e aplicações
PostgreSQL Conceitos e aplicações
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecord
 
Pos-QCon-BigData
Pos-QCon-BigDataPos-QCon-BigData
Pos-QCon-BigData
 
Elastic MeetUp Porto Alegre
Elastic MeetUp Porto AlegreElastic MeetUp Porto Alegre
Elastic MeetUp Porto Alegre
 
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
 
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open source
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdf
 
DBA Brasil 2.0 NOSql Apache Cassandra para DBAs
DBA Brasil 2.0   NOSql Apache Cassandra para DBAsDBA Brasil 2.0   NOSql Apache Cassandra para DBAs
DBA Brasil 2.0 NOSql Apache Cassandra para DBAs
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvens
 
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
 
Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...
Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...
Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation Framework
 
PostgreSQL Conceitos e aplicações - FSA
PostgreSQL  Conceitos e aplicações - FSAPostgreSQL  Conceitos e aplicações - FSA
PostgreSQL Conceitos e aplicações - FSA
 
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTIOracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
 

Primeiros Passos com Elasticsearch

  • 1. Primeiros PassosPrimeiros Passos Com ElasticsearchCom Elasticsearch Anael Carvalho <anael.ferraz.carvalho@gmail.com>
  • 2. Roteiro 1. Introdução 2. Conceitos básicos 3. Instalação 4. Interagindo 5. Indexando documentos 6. Failover e scaling 7. Buscas 8. Stack ELK 9. Kibana 10. Logstash 11. Elasticsearch em produção 12. Monitoramento 13. Referências
  • 4. Introdução ● Mecanismo de busca e análise – Textual, estruturada, analítica, etc – “Quase“ tempo real ● Código aberto – Baseado no Apache Lucene – Licença Apache 2 ● Distribuído ● Altamente escalável
  • 5. Introdução (cont.) ● “Esconde“ a complexidade do Lucene atrás de um pacote simplificado – API RESTful para comunicação – Configuração padrão sensata – Escalabilidade ● Ao mesmo tempo, flexível o suficiente para permitir configurações e funcionalidades avançadas – Controle de relevância, busca por proximidade, analisadores de línguas, etc ● Usado por Wikipedia, Stack Exchange, GitHub, etc
  • 6. Conceitos básicos ● Orientado a documentos – Dados são guardados e indexados como documentos – JSON é usado como formato para serialização – A busca, pois, é feita por documentos baseada em seu conteúdo ● Qual a diferença para outras soluções NoSQL? – Todos os campos do documento são indexados por padrão (solução voltada para busca!) ● Índice invertido
  • 7. Conceitos básicos (cont.) ● Documentos são classificados com um tipo – Pode ser pensado como a “classe“ do documento – Cada tipo possui um nome (por ex. usuário) e um mapeamento – O mapeamento descreve a estrutura do documento (campos, tipo de dados, etc), algo como um schema! ● Documentos são guardados em índices – Análogo a um banco de dados! – Cada índice pode ter um ou mais tipos – Podemos pensar nos tipos como tabelas!
  • 8. Conceitos básicos (cont.) RDBMS Elasticsearch Banco de Dados Índices Tabelas Tipos Linhas Documentos Colunas Campos do documento
  • 9. Conceitos básicos (cont.) ● Shards – Cada índice pode ter um ou mais shards – “Partição“ do índice que contém os dados (documentos) ● Internamente, cada shard é uma instância do Lucene – Pode ser classificado como primário ou réplica ● O número de shards primários é definido na criação do índice, não podendo mais ser alterado ● O número de shards de réplica pode ser alterado a qualquer momento ● Cada documento pertence a apenas um shard primário
  • 10. Conceitos básicos (cont.) ● Nó – Uma instância do Elasticsearch – Armazena um ou mais shards ● Cluster – Grupamento de um ou mais nós ● Apenas um nó mestre existe por cluster – Responsável por tarefas “globais“ ● Criar/deletar índices, adicionar/remover nós do cluster, etc – Qualquer nó do cluster pode se transformar em mestre ● Podemos falar com qualquer nó do cluster, inclusive com o mestre
  • 13. Interagindo ● API RESTful – Padrão porta 9200 ● API Java – Cliente “nó“ ● Cria uma instância do elasticsearch e se associa ao cluster, porém não armazena dados – Cliente “transporte“ ● Comunica-se remotamente com algum nó do cluster – Vantagens e desvantagens
  • 14. Indexando documentos ● Utiliza-se a API de Indexação – Com id auto-gerado: ● POST /{indice}/{tipo} – Com id externo ● PUT /{indice}/{tipo}/{id} ● Documentos são imutáveis – para alterá-los é necessário substituir todo o conteúdo – Usa-se o endpoint com o id interno: ● PUT /{indice}/{tipo}/{id} – Endpoint _update existe para facilitar o processo: ● POST /{indice}/{tipo}/{id}/_update
  • 15. Indexando documentos (cont.) ● Como saber se um documento existe? – Podemos utilizar o método HEAD ● HEAD /{indice}/{tipo}/{id} ● Como garantir que um documento será criado em vez de atualizado? – Usa-se o endpoint _create: ● PUT /{indice}/{tipo}/{id}/_create ● Como deletar um documento? – Método DELETE ● DELETE /{indice}/{tipo}/{id}
  • 16. Indexando documentos (cont.) ● Como garantir a consistência das atualizações? – Elasticsearch cria um campo de versão para cada documento (“_version“) – A aplicação pode passar como parâmetro a versão para aplicar as atualizações de dados ● PUT /{indice}/{tipo}/{id}?version=1 – Caso a versão tenha sido alterada, a requisição falha com status 409 Conflict
  • 18. Failover e scaling ● Basta iniciar novas instâncias do Elasticsearch para escalar ● Shards de réplica nunca ficam no mesmo nó que contém o shard primário ● Cluster automaticamente migra os shards entre os nós, mantendo os dados balanceados ● Em caso de falha de algum nó, os shards de réplica dos shards primários contidos no nó que falhou são promovidos a primários e novos shards de réplica são criados – Cluster é rebalanceado ● Em caso de falha do nó mestre, processo de eleição define o novo nó mestre
  • 19. Failover e scaling Status do Cluster Verde Shards primários e de réplica ativos Amarelo Shards primários ativos porém nem todas as réplicas estão ativas. Em caso de falha de algum nó corremos risco de perda de dados! Vermelho Nem todos os shards primários estão ativos. Faltam dados aos índices!
  • 20. Failover e scaling (cont.) DEMONSTRAÇÃO
  • 21. Buscas ● Funcionalidade principal da ferramenta ● Busca estruturada – Busca por algum campo específico ordenando resultados por algum outro campo – Similar a uma query SQL ● Busca textual – Encontrar documentos que contenham certas palavras- chaves, ordenando por relevância ● Busca mista – Combinação entre os dois anteriores
  • 22. Buscas (cont.) ● Dois jeitos possíveis: – Busca via URI ● Geralmente usada para testes ou buscas simples ● Opções limitadas ● GET /{indice}/{tipo}/_search?q={query} – Busca via Request Body ● Utiliza Query DSL – Linguagem de query específica do Elasticsearch – Define uma série de queries e filtros e permite a combinação dos mesmos ● POST|GET /{indice}/{tipo}/_search
  • 23. Buscas (cont.) ● Filtro – Usado para buscar campos que contém valores exatos – Buscas que podem ser respondidas com sim ou não – Exemplos: terms, range, exists, bool, etc ● Query – Usado para buscas textuais – Buscas cujo resultado dependam de relevância – Exemplos: match, bool, etc
  • 24. Buscas (cont.) ● Analisadores – Quando um documento é indexado, os campos texto são “quebrados“ em termos que podem ser buscados – A “quebra“ é feita por um analisador ● É possível criar novos ou usar algum pré-definido ● Analisador padrão é aplicado a todos os campos textos caso nenhum seja definido – A associação é feita no mapeamento dos tipos – Posteriormente, a busca feita no campo deve passar pelo mesmo analisador para garantir a consistência dos resultados ● Paginação – Padrão de 10 resultados por página
  • 25. Buscas (cont.) ● Ordenação – Feita por algum campo específico ou por relevância ● Relevância – Cada documento voltará com um campo especial chamado “_score“ que contém um decimal representando a relevância – Quanto maior o número, maior a relevância – Relevância é calculada de acordo com um algoritmo de similaridade – O algoritmo padrão utilizado é o Term Frequency/Inverse Document Frequency (TF/IDF)
  • 27. Stack ELK ● O Elasticsearch pode ser utilizado em conjunto com outras duas ferramentas, que juntas formam o stack ELK – Elasticsearch – Logstash – Kibana
  • 28. Kibana ● Plataforma de análise e visualização de dados ● Podemos criar e armazenar queries customizadas, visualizações de acordo com widgets pré-definidos, e dashboards para visualização de dados em tempo real ● Fácil configuração e utilização
  • 30. Logstash ● Ferramenta para coleta, processamento e entrega de dados de fontes variadas para locais diversos ● Entradas – Arquivos, HTTP, TCP, stdin, SQS, Twitter, Redis, etc ● Filtros – CSV, XML, JSON, Grok, etc ● Mais de 120 expressões Grok pré-definidas para parsing de entradas ● Saídas – Elasticsearch, stdout, S3, arquivos, MongoDB, etc
  • 32. Elasticsearch em produção ● Preferir memória a capacidade de processamento – 8GB a 64GB ● Disco quase sempre será o gargalo, usar SSD se possível ● Nomear cluster e nós ● Mudar diretório de armazenamento de dados ● Desabilitar multicast ● No mínimo 3 nós – Tentar evitar a situação de “split brain“ – Setar o parâmetro “minimum_master_nodes“ de modo a ter um quórum de metade mais um do número total de nós
  • 33. Elasticsearch em produção ● JVM – Dar apenas metade da memória disponível – A outra metade será usada pelo Lucene, que consome do SO – Não ultrapassar 32GB ● Desabilitar ou reduzir swap ● Aumentar o número de file descriptors (64.000) ● Para grande quantidade de nós, verificar configurações de recuperação
  • 34. Monitoramento & Troubleshooting ● Plugin Marvel ● Saúde do cluster – GET _cluster/health ● Saúde dos índices – GET _cluster/health?level=indices ● Saúde dos shards – GET _cluster/health?level=shards
  • 35. Monitoramento & Troubleshooting ● Status dos nós – GET _nodes/stats ● Status do cluster (agregação dos nós) – GET _cluster/stats ● Status dos índices – GET {indice}/_stats
  • 36. Referências ● https://www.elastic.co/guide/en/elasticsearch/reference/cur rent/index.html ● https://www.elastic.co/guide/en/kibana/current/index.html ● https://www.elastic.co/guide/en/logstash/current/index.html ● Elasticsearch, The Definitive Guide (Clinton Gormley & Zachary Tong – O'Reilly Media – ISBN 9781449358549)
  • 38. FIM