Descubra o Opensearch: a ferramenta opensource para análise de logs e monitoramento

Descubra o Opensearch: a ferramenta opensource para análise de logs e monitoramento

Heeey!

Podemos nos referir ao Opensearch como um fork do Elasticsearch e Kibana 7.10. Basicamente, o Opensearch é uma ferramente de monitoração de aplicação e análise de logs totalmente opensource (mas neste post vamos explorar um pouco mais sobre demais recursos que a ferramenta oferece).

Antes de tudo, vamos entender um pouco mais sobre o que a própria AWS nos conta sobre a ferramenta:

O que é Opensearch?

O OpenSearch é um conjunto distribuído de pesquisa e análise de código aberto usado para uma ampla variedade de casos de uso, como monitoramento de aplicações em tempo real, análise de logs e pesquisa de sites. O OpenSearch fornece um sistema altamente escalável para fornecer acesso rápido e resposta a grandes volumes de dados com uma ferramenta de visualização integrada, o OpenSearch Dashboards, que facilita a exploração de dados pelos usuários.
Assim como o Elasticsearch, o Opensearch oferece um mecanismo de pesquisa de texto completo distribuído baseado no Apache Lucene com uma interface de API RESTful e suporte para documentos JSON.

 

Qual a ideia por trás da criação?

Em 2021 a Elastic mudou a licença de software permissiva ALv2 para a Elastic License v2 (ELv2) and SSPL, essas licenças não seguem firmemente a ideia do Open Source e não oferecem as mesmas liberdades para os usuários. Logo, o opensearch virou um fork do Elasticsearch e Kibana na versão 7.10. Com o objetivo de oferecer uma ferramenta totalmente opensource para a comunidade.

 

Principais recursos do Opensearch que não fazem parte da licença free do Elasticsearch

RecursoBenefício
Segurança avançadaOferece recursos de criptografia, autenticação, autorização e auditoria. Eles incluem integrações com Active Directory, LDAP, SAML, Kerberos, tokens da Web JSON
Geração de relatóriosAgende, exporte e compartilhe relatórios de painéis, pesquisas salvas, alertas e visualizações.
Detecção de anomaliasAproveite a detecção de anomalias de Machine Learning com base no algoritmo Random Cut Forest (RCF) para detectar anomalias automaticamente à medida que seus dados são ingeridos. Combine com Alertas para monitorar dados quase em tempo real e enviar notificações de alertas automaticamente.
Analisador de performance e framework RCAConsulte várias métricas e agregações de performance do cluster. Use o PerfTop, a interface de linha de comando (CLI) para exibir e analisar essas métricas rapidamente. Use a framework de análise de causas-raiz (RCA) para investigar problemas de performance e confiabilidade em clusters.
Trace AnalyticsIngere e visualize dados OpenTelemetry para aplicações distribuídas. Visualize o fluxo de eventos entre essas aplicações para identificar problemas de performance.
Geração de alertasMonitore dados automaticamente e envie notificações de alertas automaticamente para as partes interessadas. Crie condições de alerta altamente específicas usando a linguagem de consulta completa e os recursos de script do OpenSearch.

Vamos a prática!

Vamos subir o Opensearch e o Opensearch dashboards na versão de teste, esta versão, o Opensearch já provisiona todas as configurações de segurança (certificados).

Garanta que você tenha o docker-compose instalado.

Garanta que a variável vm.max_map_count esteja setada com o valor de 262144:

sysctl -w vm.max_map_count=262144

Essa configuração do sysctl não é permanente

 

Crie o arquivo docker-compose.yml:

version: '3'
services:
  opensearch-node1:
    image: opensearchproject/opensearch:latest
    container_name: opensearch-node1
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-node1
      - discovery.seed_hosts=opensearch-node1,opensearch-node2
      - cluster.initial_master_nodes=opensearch-node1,opensearch-node2
      - bootstrap.memory_lock=true
      - "OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g" 
    ulimits:
      memlock:
        soft: -1
        hard: -1
    image: opensearchproject/opensearch:latest
    container_name: opensearch-node1
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-node1
      - discovery.seed_hosts=opensearch-node1,opensearch-node2
      - cluster.initial_master_nodes=opensearch-node1,opensearch-node2
      - bootstrap.memory_lock=true # along with
      nofile:
        soft: 65536 
        hard: 65536
    volumes:
      - opensearch-data1:/usr/share/opensearch/data
    ports:
      - 9200:9200
      - 9600:9600
    networks:
      - opensearch-net
  opensearch-node2:
    image: opensearchproject/opensearch:latest
    container_name: opensearch-node2
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-node2
      - discovery.seed_hosts=opensearch-node1,opensearch-node2
      - cluster.initial_master_nodes=opensearch-node1,opensearch-node2
      - bootstrap.memory_lock=true
      - "OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - opensearch-data2:/usr/share/opensearch/data
    networks:
      - opensearch-net
  opensearch-dashboards:
    image: opensearchproject/opensearch-dashboards:latest
    container_name: opensearch-dashboards
    ports:
      - 5601:5601
    expose:
      - "5601"
    environment:
      OPENSEARCH_HOSTS: '["https://opensearch-node1:9200","https://opensearch-node2:9200"]'
    networks:
      - opensearch-net

volumes:
  opensearch-data1:
  opensearch-data2:

networks:
  opensearch-net:

 

Assim que salvar o arquivo, suba todos os serviços:

docker-compose up -d

Temos que ter 3 containers rodando, dois opensearch e um opensearch Dashboards

CONTAINER ID   IMAGE                                            COMMAND                  CREATED         STATUS              PORTS                                                                                                      NAMES
7e1de85c3f8c   opensearchproject/opensearch-dashboards:latest   "./opensearch-dashbo…"   2 minutes ago   Up About a minute   0.0.0.0:5601->5601/tcp, :::5601->5601/tcp                                                                  opensearch-dashboards
40b047a9123e   opensearchproject/opensearch:latest              "./opensearch-docker…"   2 minutes ago   Up About a minute   9200/tcp, 9300/tcp, 9600/tcp, 9650/tcp                                                                     opensearch-node2
c72ebd7f6e3b   opensearchproject/opensearch:latest              "./opensearch-docker…"   2 minutes ago   Up About a minute   0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 9300/tcp, 0.0.0.0:9600->9600/tcp, :::9600->9600/tcp, 9650/tcp   opensearch-node1

Agora basta acessar o Opensearch Dashboard na porta 5601:
Opensearch Dashboards

Você consegue acessar com user admin, senha admin.

Inserindo dados para visualização

Para visualizar dados eu importei alguns dados.

No Menu lateral, na área de Management, selecione o Dev Tools.

Através do Dev Tools, é possível realizar requisições direto no nós de Opensearch.

Os nossos documentos não tem nenhum campo do tipo datetime (ele é necessário para uma melhor visualização e análise), então primeiro vamos criar uma pipeline que irá criar o campo “indexed_at” em todo arquivo que for adicionado:

PUT /_ingest/pipeline/timestamp
{
  "description": "Adicionando o campo indexed_at nos documentos",
  "processors": [
    {
      "set": {
        "field": "indexed_at",
        "value": "{{_ingest.timestamp}}"
      }
    }
  ]
}

 

Vamos criar o índice e definir essa pipeline como default:

PUT /movies
{
  "settings": {
    "index.default_pipeline": "timestamp"
  }
}

 

Vamos adicionar um bulk request para criar alguns documentos no índice movies:

PUT /movies/_bulk/
{ "index":{} }
{ "title" : " Predestination", "year":2014 , "genre":["Action", "Drama", "Sci-Fi"] }
{ "index":{} }
{ "title" : "Star Wars: Episode VII - The Force Awakens", "year":2015 , "genre":["Action", "Adventure", "Fantasy", "Sci-Fi"] }
{ "index":{} }
{ "title" : "Interstellar", "year":2014 , "genre":["Sci-Fi", "Adventure", "Drama"] }
{ "index":{} }
{ "title" : "Venom", "year":2018 , "genre":["Action", " Adventure", "Sci-Fi"] }
{ "index":{} }
{ "title" : "A Quiet Place Part II", "year":2020 , "genre":["Horror", "Sci-Fi", "Drama"] }
{ "index":{} }
{ "title" : "Donnie Darko", "year":2001 , "genre":["Drama", "Sci-Fi", "Mistery"] }
{ "index":{} }
{ "title" : "Black Widow", "year":2021 , "genre":["Action", " Adventure", "Sci-Fi"] }
{ "index":{} }
{ "title" : "Nobody", "year":2021 , "genre":["Action", "Drama", "Crime"] }
{ "index":{} }
{ "title" : "The Dark Knight", "year":2008 , "genre":["Action", "Drama", "Crime"] }
{ "index":{} }
{ "title" : "Inception", "year":2010 , "genre":["Action", " Adventure", "Sci-Fi"] }
{ "index":{} }
{ "title" : " The Matrix", "year":1999 , "genre":["Action",  "Sci-Fi"] }
{ "index":{} }
{ "title" : "Avatar", "year":2009 , "genre":["Action", " Adventure", "Fantasy"] }
{ "index":{} }
{ "title" : "Ex Machina", "year":2014 , "genre":["Action", " Adventure", "Sci-Fi"] }
{ "index":{} }
{ "title" : " The Hobbit: An Unexpected Journey", "year":2012 , "genre":[" Adventure", "Fantasy"] }
{ "index":{} }
{ "title" : "Wonder Woman", "year":2017 , "genre":["Action", " Adventure", "Fantasy"] }

Clique em um ícone de play para enviar a requisição:
Opensearch Dashboards-Dev Tools

Configurando Index Pattern

Ao retornar no Discover aparecerá uma página para criar o Index Pattern, clique em Create index pattern:

Index pattern name: movies*

Time field: indexed_at

Clique em Create Index pattern

Aparecerá todos os campos existentes neste index, podemos alterar o modo de visualização. Por exemplo:

Acesse o campo year e clique no ícone de editar:

Format: Number
Numeral.js format pattern: 0

Opensearch Dashboards- movies-fields

Clique em Save field

Após retornar para o Discover, já conseguimos visualizar os documentos que adicionamos:
Opensearch Dashboards-Discover

Um recurso que faz falta no Opensearch Dashboard é o Lens. Não foi possível inseri-lo porque esta feature do Kibana não é Open Source.

Espero que tenham gostado da ferramenta!

Líder em Treinamento e serviços de Consultoria, Suporte e Implantação para o mundo open source. Conheça nossas soluções:

CURSOSCONSULTORIA

Anterior MLOps: A chave para o sucesso na implantação de Machine Learning
Próxima Descubra como implementar uma governança ágil na Cloud com o novo ebook da 4Linux

About author

Thaynara Mendes
Thaynara Mendes 4 posts

Formada em Ciência da Computação. Apaixonada por Linux e café. Atuou na área de desenvolvimento back-end com a linguagem Python e atua como Devops na 4linux, possui a cerficação LPIC-1 e ministra aula do curso de Infraestrutura Ágil com Práticas DevOps e Especialista em Elastic Stack.

View all posts by this author →

Você pode gostar também

Infraestrutura TI

Guia passo a passo para configurar um ReplicatSet no MongoDB

O MongoDB é um banco com foco em escalabilidade horizontal, sendo assim ele possui um recurso chamado ReplicatSet que serve para replicar os dados em um cluster de servidores para

Notícias

Descubra as vantagens do Linux e como migrar facilmente para ele

O Linux é um sistema operacional que tem ganhado popularidade entre usuários comuns, principalmente por ser gratuito e de código aberto. Mas o que exatamente o Linux pode oferecer para

Infraestrutura TI

Conhecendo o kernel Linux pelo /proc (parte 5) – Recursos da memória virtual

No post anterior vimos comportamentos relacionados ao uso de memória de virtual, como a “sobre-alocação” de memória, uso de SWAP, estouro de memória RAM e o que pode ocorrer em