Monitorando o ElasticSearch em Produção

Como criar de maneira fácil e rápida um monitoramento abrangente em seu cluster de ElasticSearch de Produção com o open-source Cérebro e com o New Relic.

por Allan Sene 29/10/2017 ~ 5 min. / 990 palavras

Que o ElasticSearch é uma ferramenta incrível, você já deve saber ou ao menos ouvido falar. O não te disseram é que, mesmo com uma resiliência incrível e elasticidade que está cravada no nome, o ES, se não acompanhado de perto, pode criar vários problemas. Principalmente porque normalmente ele é o cara que vai receber imensas porradas de indexação e deve ser capaz de executar analytics/searches num piscar de olhos para se dar o real valor como Data Store distribuído.

Shay: era pra ser um livro de receitas pra esposa… ❤

Logo, pra ficar ligado no que ocorre dentro do seu cluster, sem ter que ficar chamando as APIs — muito úteis em várias situações— você precisa de ferramentas de monitoramento que lhe dê respostas rápidas e visualizações simples de se entender.

Por que não usar o Monitoring (Marvel)?

Marvel era um nome tão mais legal :(

O primeiro grande motivo de não sugerir o Monitoring, *antigo *Marvel, plugin de monitoramento que a própria Elastic disponibiliza por meio do X-Pack, é que ele completão é pago e caro. :/

Até tem uma versão free, que você consegue com a licença básica, mas ela é limitada drasticamente após 30 dias. O Marvel utiliza a própria API do Elastic para pegar dados do cluster e indexa tais retornos no próprio ES, nos índices .monitoring. Estes índices são rotacionados de 7 em 7 dias. Então se alguma coisa ocorreu no seu cluster há mais de uma semana, já era…

$> sudo service elasticsearch stop

O segundo motivo é que, se você já roda um cluster de ES em produção, vai ter um trabalho do cão pra instalar o Monitoring. Como ele roda como parte do X-Pack, é necessário sua instalação em todos nós do cluster. E isso envolve um** fucking full cluster restart!*** *Cara… com 1 nó em produção já é MUITO cagaço fazer isso, imagina com 10 nós com 10Tb de dados e 1bi de docs e 10k indexações por minuto?! Não, você não vai querer fazer isso!

Use o Cérebro!

Com esse tanto de API REST supimpa que o ElasticSearch nos oferece, é claaaro que alguém ia começar a construir um negócio open-source pra galera. Esse projeto é o Cérebro! O inexorável Leonardo Menezes começou por conta própria fazer um p#$% projeto de monitoramento e administração do ElasticSearch, o antigo Kopf. Tudo usando as facilidades da API do ES e seu profundo conhecimento de JS e Scala! ❤

Funcionalidades

No Cérebro temos 2 telas de monitoramento:

  • Overview: traz dados de **todos **índices e quais nós estes tem shards e réplicas alocadas. Nessa tela você pode fazer roteamento de shards com apenas um fucking clique:

Cada quadradinho verde desses é um shard, primário ou réplica.

  • Nodes: traz as estatísticas de sistema dos nós, como load, cpu, espaço em disco e uptime:

Além delas tem a sessão REST, que é a mesma coisa do DevTools do Kibana, e More: com ferramentas administrativas avançadas como gerenciamento de snapshots, aliases, cluster settings e etc — muito cuidado por aí!

Instalação

É incrível, não é?! E como instalar esse negócio lindo? Simples demais:

wget https://github.com/lmenezes/cerebro/releases/download/v0.7.0/cerebro-0.7.0.zip

unzip cerebro-0.7.0.zip .

./cerebro-0.7.0/bin/cerebro
  • Acessar https://localhost:9000 e apontar pra algum nó de seu cluster, de preferência um mais sussa, como um nó master elegível ou um client/coordinator - *https://meu.no.sussa:9200/.

Pronto! Seu cluster tá lá, intacto, sem restart nenhum.

Pois é… a gente ainda não tem os gráficos de memória, indexações, buscas e JVM, muito importantes pra um bom monitoramento. A gente podia coletar isso tudo com Logstash e visualizar no Kibana, que é o que o Marvel faz, né. Mas vai dar um traaaampo… :/

New Relic: uma Relíquia de Monitoramentos

Agora eu te pergunto: pra quê cê vai se preocupar em coletar seus próprios logs e fazer dashboards se alguém já faz isso muito melhor que você? Duvida?! Ah… então venha ver o New Relic: maravilha dos monitoramentos! Várias empresas mundialmente conhecidas usam o New Relic para monitorar seus sistemas, inclusive a MaxMilhas.

Ele tem de tudo! Desde tracking transação a transação de aplicações web e non-web (como sistemas de filas, crons…) até plugins que qualquer um pode fazer. É aí que resolvemos nosso problema.

Plugin do ElasticSearch

No New Relic, temos um plugin que faz o todos os monitoramentos do Marvel e melhor: com persistência de 3 meses. Além das informações básicas de numero de requests e total de documentos, ele traz detalhes dos hosts como I/O, Memória e CPU, Thread Pool das Requisições de Busca e Indexação, dados do Heap da JVM e mais. Além de poder filtrar por nós, e escolher as faixas temporais dos gráficos:

Única coisa que você precisa é do coletor do New Relic rodando em algum lugar que consegue acessar uma máquina do seu cluster, para ele fazer requisições para as APIs do ES. Sua instalação é também muito simples e não requer nenhuma ação no cluster. Tem um Docker que roda tudo:

docker run -e "ES_HOST=<nó_sussa_do_cluster" -e "NEW_RELIC_LICENSE_KEY=<sua_licença>" s12v/newrelic-elasticsearch

Obviamente, sugiro que você coloque tanto o coletor do New Relic quanto o Cérebro em máquinas separadas do cluster: primeiro pra você não ficar no escuro nas horas do disastres e segundo para não contaminar as métricas.

Ah… mas o New Relic é pago… :|

Sim, é. Mas é BEM mais barato que a licença do X-Pack ou do que você construir tudo na mão, até usando a stack ELK. O New Relic tem um free tier bem generoso.

Antes de sair testando e construindo ferramentas escaláveis, é fundamental que você avalie formas de mantê-las, pois com certeza vão crescer algum dia.

Vai sempre ter um ponto de inflexão, onde não há como utilizar só os bons e velhos ps | grepe top para gerir sua infra.

Curtiu essa dica? Então compartilhe e recomende esse artigo pros seus colegas. Quer sugerir um outro assunto? Comente aí embaixo! E não deixe de me seguir para acompanhar mais paradas legais sobre dados! Abração!