Pular para o conteúdo principal

2 publicações com a etiqueta "Tutoriais"

Ver todas as etiquetas

Troubleshooting de Low Disk no Amazon OpenSearch Service

· 7 min para ler
Ludmila Silva
Cloud & DevOps Engineer

Alertas de Low Disk são comuns em ambientes Amazon OpenSearch Service que recebem grandes volumes de logs, métricas e eventos.

Em um primeiro momento, o impulso pode ser aumentar o EBS. Mas antes de escalar o cluster, é necessário entendermos por que o armazenamento chegou ao limite e se existe outro fator pressionando o cluster.

Este artigo apresenta um processo simples e prático para investigar esse cenário.

Vamos ao troubleshooting.

O que é o OpenSearch Service?​

O Amazon OpenSearch Service é um serviço gerenciado da AWS, baseado no OpenSearch, que facilita a implantação, operação e escalabilidade, um mecanismo de busca e análise de código aberto. Ele permite que você armazene, pesquise e analise grandes volumes de dados em tempo real, oferecendo recursos como monitoramento de logs, análise de métricas e visualização de dados.

Ele é bastante utilizado em cenários como:

  • Centralização e análise de logs de aplicações e infraestrutura;
  • Observabilidade e troubleshooting de sistemas;
  • Análise de métricas e eventos;
  • SIEM e análise de segurança;
  • Busca textual e aplicações de pesquisa;
  • Monitoramento de ambientes distribuídos;
  • Análise de dados de aplicações.

Um cenário muito comum é a centralização de logs:

Aplicações / Containers / Infraestrutura
↓
Pipeline de ingestão
↓
Amazon OpenSearch
↓
OpenSearch Dashboards
↓
Busca / Métricas / Análise

Como esses ambientes podem receber milhões ou bilhões de documentos, a capacidade de storage, quantidade de shards, retenção e dimensionamento dos nodes precisam ser acompanhados continuamente.

É nesse contexto que alertas de Low Disk podem se tornar um grande gargalo operacional.

Troubleshooting de Low Disk​

1. Entenda o domínio​

Antes de alterar qualquer coisa, levante as informações sobre:

  • A versão do OpenSearch;
  • O tipo das instâncias (se é serverless ou provisionado);
  • A quantidade de data nodes;
  • Tamanho e tipo do EBS por node;
  • Availability Zones;
  • UltraWarm/Cold, se utilizados.

Isso define a capacidade atual e ajuda a avaliar se o cluster está dimensionado corretamente para o workload.

2. Olhe a tendência, não apenas o valor atual​

No CloudWatch da AWS, comece a procurar por métricas como:

  • FreeStorageSpace
  • ClusterUsedSpace
  • ClusterIndexWritesBlocked
  • JVMMemoryPressure
  • CPUUtilization

O FreeStorageSpace é especialmente importante, mas o valor atual sozinho não conta a história.

Pergunte:

Quanto espaço estamos consumindo por dia?

Se o cluster tem 200 GiB livres, mas perde 50 GiB por dia, o problema não está resolvido. Existe uma tendência de crescimento que precisa ser corrigida. Também observe o mínimo por node, porque um único node pode estar muito mais cheio que os demais.

No OpenSearch Service, ClusterIndexWritesBlocked = 1 indica que o cluster está bloqueando operações de escrita. Entre as causas comuns estão pouco espaço de armazenamento e alta pressão de JVM. A AWS recomenda acompanhar essas métricas pelo CloudWatch.

3. Verifique o estado do cluster​

Se o OpenSearch Dashboards estiver disponível, alguns endpoints são úteis para a verificação do estado do cluster. Para isso, vá em Dev Tools e rode os seguintes comandos:

GET /_cluster/health
GET /_cat/allocation?v
GET /_cat/indices?v
GET /_cat/shards?v
GET /_cluster/stats

O _cat/allocation ajuda a identificar a distribuição de shards e armazenamento entre os nodes. O _cat/indices ajuda a encontrar os maiores índices.

Se o Dashboards estiver indisponível e você não tiver acesso via API, não pare o troubleshooting: faça primeiro a análise pelo AWS Console/CLI e CloudWatch.

4. Procure a causa raiz​

Algumas perguntas nos ajudam a separar as hipóteses mais plausíveis:

4.1. Retenção​

Existem índices antigos que deveriam ter sido removidos?

4.2. Crescimento de ingestão​

A quantidade de dados aumentou recentemente?

4.3. Shards​

Existem shards muito grandes ou distribuição desequilibrada?

4.4. JVM​

Existe histórico de High JVM Usage ou Insufficient GC?

4.5. Capacidade​

O volume de dados cresceu além da capacidade atual do cluster?

Em incidentes reais, o alerta de Low Disk pode aparecer junto com eventos de alta pressão de JVM. Por isso, olhar apenas para o disco pode levar a uma conclusão incompleta.

5. Não ignore os shards​

Verifique a alocação de shards:

GET /_cat/allocation?v

e:

GET /_cat/shards?v

Procure por:

  • nodes com utilização muito diferente;
  • shards muito grandes;
  • muitos shards por node;
  • shards UNASSIGNED;
  • shards em INITIALIZING ou RELOCATING.

É importante validar o status do cluster, pois um cluster com status Yellow significa que os primaries estão alocados, mas existem replicas não alocadas. Falta de espaço também pode impedir a alocação de replicas. Já um cluster Red significa que existem primaries não alocados, o que é ainda mais crítico.

Por isso, Low Disk + status do cluster + muitos shards unassigned merece investigação antes de qualquer alteração.

6. Verifique o ISM​

Para índices temporais, como logs, o Index State Management (ISM) é uma das primeiras coisas a verificar.

Pergunte:

  • Existem policies?
  • Os índices estão associados às policies?
  • Existem ações falhando?
  • O rollover está funcionando?
  • A transição para delete está funcionando?
  • Existem índices muito mais antigos que a retenção esperada?

Um fluxo comum pode ser:

Hot
↓
Warm
↓
Delete

Se a transição para Delete não acontece, os índices continuam consumindo storage.

O ISM permite automatizar operações como rollover, migração entre tiers e exclusão de índices conforme idade, tamanho e outras condições.

7. Valide backup antes de apagar dados​

Antes de remover qualquer índice:

  • Existe snapshot válido?
  • Qual foi o último snapshot bem-sucedido?
  • Qual é a retenção?
  • O dado pode realmente ser descartado?

Low Disk não é motivo para apagar índices às cegas

A exclusão de um índice é uma operação destrutiva. Primeiro valide retenção, requisito de negócio e recuperação.

8. Escolha a remediação somente depois do diagnóstico​

Dependendo da causa encontrada, a remediação pode ser diferente:

Retenção incorreta

Corrija o ISM ou a retenção.

Crescimento anormal

Investigue a origem da ingestão antes de simplesmente aumentar capacidade.

Storage insuficiente

Aumente o armazenamento EBS quando o crescimento for legítimo.

Falta de capacidade de processamento

Avalie mais nodes ou instâncias maiores.

Problema de shards

Revise quantidade, tamanho e distribuição dos shards.

JVM pressure

Investigue shards, consultas, mappings, carga e dimensionamento das instâncias.

A AWS recomenda considerar instâncias maiores, mais instâncias ou mais armazenamento EBS para problemas de capacidade, dependendo da causa.

9. O principal aprendizado para esses casos​

Um alerta de Low Disk não significa automaticamente:

"Aumente o disco."

O fluxo deve ser:

Alerta
↓
Entender o domínio
↓
Analisar FreeStorageSpace
↓
Analisar tendência de crescimento
↓
Verificar write block e JVM
↓
Identificar índices e shards
↓
Verificar retenção e ISM
↓
Validar snapshots
↓
Identificar a causa
↓
Escolher a remediação

Em ambientes OpenSearch, diferentes sinais podem aparecer ao mesmo tempo: Low Disk, pressão de JVM, shards não alocados, write blocks e problemas de configuração.

O principal aprendizado é simples:

Use o Low Disk como ponto de partida para a sua investigação, não como diagnóstico final.

Checklist rápido​

[ ] Versão / instance type
[ ] Data nodes / EBS / AZ / UltraWarm

[ ] FreeStorageSpace
[ ] FreeStorageSpace por node
[ ] Tendência de 24h / 7d
[ ] ClusterUsedSpace
[ ] ClusterIndexWritesBlocked
[ ] JVMMemoryPressure
[ ] CPUUtilization

[ ] Cluster health
[ ] Shard allocation
[ ] Maiores índices
[ ] Shards UNASSIGNED
[ ] Shards muito grandes

[ ] Retenção
[ ] ISM
[ ] Snapshots

[ ] Configuration change em andamento?
[ ] Identificar causa
[ ] Remediar com segurança
[ ] Escalar quando necessário

Considerações finais​

TO troubleshooting de Low Disk no Amazon OpenSearch Service vai além de acompanhar o espaço livre, pois é importante entender a relação entre storage, ingestão, shards, retenção, ISM, JVM e capacidade do cluster antes de tomar uma ação. Uma abordagem estruturada reduz o risco de resolver apenas o sintoma e ajuda a construir ambientes OpenSearch mais previsíveis, resilientes e fáceis de operar.

Referências​

Ler artigo

Como configurar um blog Ghost em uma VM Ubuntu

· 12 min para ler
Ludmila Silva
Cloud & DevOps Engineer

O objetivo deste artigo é descrever um passo a passo de como criar uma máquina virtual (VM) Linux Ubuntu na Azure, através do Portal do Azure, e configurar o CMS Ghost para criar um blog pessoal. Inclusive, o Ghost é o CMS usado neste blog 😁

O intuito aqui apresentar algumas funções básicas de criação uma máquina virtual em um provedor de serviços de computação em Nuvem, realizar o acesso à VM pelo SSH, configuração do webserver Nginx e outras ferramentas, e a instalação e configuração do CMS Ghost.

Vamos lá?

O que é o Ghost?​

O Ghost é um CMS - Content Management System (Sistema de Gerenciamento de Conteúdo) que fornece ferramentas para publicar conteúdo, compartilhar e fomentar o seu negócio através de websites. Trata-se de uma alternativa open source ao Wordpress, que é o CMS mais famoso e mais utilizado atualmente.

O Ghost possui uma interface intuitiva e fácil de usar, permitindo publicar um site em poucos cliques. Baseado em NodeJS, é rápido, seguro, SEO friendly, responsivo e permite diversas integrações com várias APIs.

Para quem busca desempenho, segurança e economia, o Ghost é uma excelente opção. Há a versão paga, onde você pode hospedá-lo em uma plataforma gerenciada pelo Ghost (assim como o Wordpress), ou auto-hospedar em um servidor próprio, como em um VPS, por exemplo.

Se você é outsider e gosta de usar ferramentas "diferentonas", o Ghost é uma boa ideia. 😅

Especificações do Ghost​

De acordo com a documentação do Ghost, esses são os requisitos mínimos para a instalação do CMS:

  • Sistema operacional: Ubuntu 16.04, Ubuntu 18.04, Ubuntu 20.04 ou Ubuntu 22.04
  • Nginx (mínimo versão 1.9.5 para SSL)
  • Versão suportada do Node.js (a recomendada é a v16)
  • MySQL 8
  • Systemd
  • Um servidor com no mínimo 1GB de memória RAM
  • Um domínio registrado

Passo a passo​

1) Criar uma conta no Portal Azure​

Caso você já tenha uma conta criada no Azure, pule essa etapa. Caso você não tenha uma conta, será necessário criá-la no Portal do Azure.

No Azure, ao criar uma conta nova você vai receber um crédito de $200 para usar e testar os serviços por 30 dias. Além disso, após os 30 dias você pode utilizar serviços populares por 12 meses gratuitamente, tais como:

  • VMs Linux: 750 horas de máquinas virtuais com capacidade de intermitência B1s;
  • Banco de dados SQL: 250 GB de instância S0 com dez unidades de transação de banco de dados;
  • Armazenamento de Blobs do Azure;
  • Azure Functions: 1 milhão de solicitações;
  • Entre outros serviços.

Você pode conferir os serviços gratuitos clicando aqui.

No meu caso, eu já utilizo uma conta de estudante da Microsoft vinculada ao Azure, que disponibiliza $100 em créditos para uso.

2) Criar uma VM na Azure​

Após ter criado a sua conta no Azure, você vai criar a máquina virtual (VM). No portal do Azure, clique em “Criar um recurso”, conforme imagem:

Há também a opção “Máquina virtual” que vai seguir o mesmo caminho.

3) Configurar a VM​

Em seguida, vamos configurar a nossa máquina virtual para atender as especificações do Ghost.

Primeiramente: No Azure, nada se cria se você não tiver um grupo de recursos na sua assinatura. Dessa forma, caso você não tenha um Grupo de recursos, clique em “Criar novo” e forneça um nome para o seu grupo.

Na opção Detalhes da instância, são solicitados alguns dados de configuração da máquina virtual. Eu optei pelas seguintes configurações:

  • Nome da máquina virtual: vm-ghost (fique livre para escolher o nome da vm)
  • Região: (US) East US
  • Opções de disponibilidade: Zona 1
  • Tipo de Segurança: Padrão
  • Imagem: Ubuntu Server 20.04 LTS
  • Tamanho: Standard B1ms (1 vcpus, 2 GiB de memória)

🚨

Optei por uma instância com 2GiB de memória. Até poderia usar a padrão B1 com 1GiB, mas pode ocorrer um gargalo durante a instalação do Ghost, alegando falta de memória. Há como contornar isso, mas fica para outro post. 

Vamos seguir com o passo a passo:

Conta de administrador

Aqui vamos escolher gerar um par de chaves SSH para acessar a máquina virtual. As configurações foram:

  • Tipo de autenticação: Chave pública de SSH
  • Nome de usuário: azureuser (fique livre para escolher o nome)
  • Origem de chave SSH pública: Gerar um novo par de chaves
  • Nome do par de chaves: myKey (fique livre para escolher o nome das chaves)

Regras de portas de entrada

  • Portas de entrada públicas: Permitir portas selecionadas
  • Selecione as portas de entrada: SSH (22), HTTP (80) e HTTPS (443)

Na aba DISCOS, optei pelo Tipo de Disco de SO como SSD Standard com redundância local. A partir daí, você pode avançar com as opções até chegar em “Revisar + criar”.

4) Gere a chave privada​

Após clicar em “criar” para criar a sua VM, será exibido na tela um aviso para gerar um par de chaves SSH. Clique em “Baixar chave privada e criar recurso”. Será baixado um arquivo em formato .pem.

E voilá! A VM foi criada!

Clique em “Ir para o recurso” para visualizar as informações da sua VM.

5) Conectar à VM​

Depois de acessar as informações da VM, você vai copiar o endereço de IP público da máquina:

Caso você esteja no Linux ou MacOs, você deve alterar a permissão do arquivo de chave .pem para 400, com o comando:

## Alterar permissões da chave .pem
chmod 400 nome_da_chave.pem

Para se conectar à VM, use o comando:

ssh -i nome_da_chave.pem nome-do-usuário@ip-publico-da-VM

Caso esteja no Windows, abra um terminal - pode ser o CMD ou o PowerShell. Você vai usar o seguinte comando - lembrando de substituir o caminho para onde está localizada a sua chave .pem e o IP para o IP público da sua VM:

ssh -i ~/Downloads/myKey.pem azureuser@ip-publico-da-VM

Caso você tenha feito o acesso com sucesso, você receberá uma mensagem similar da imagem abaixo:

6) Crie um novo usuário​

Após se conectar à VM, entre no usuário root e crie um novo usuário, que será nosso user padrão para configurar as intalações e gerenciar o Ghost:

## Acessar usuário root
sudo su

## Criar um novo usuário
adduser nome_do_usuário

Agora, dê privilégios de superuser para o novo usuário criado, e alterne seu acesso para o usuário:

## Privilégios de superuser
usermod -aG sudo nome_do_usuário

## Alternar para o user criado
su - nome_do_usuário

7) Instalar o Nginx​

Agora, faça um update e um upgrade dos pacotes no Linux:

sudo apt-get update && sudo apt-get upgrade -y

Em seguida, instale o Nginx com os comandos:

sudo apt-get install nginx -y

## Opcional
sudo ufw allow 'Nginx Full'

Se tudo ocorreu bem com a instalação do Nginx, ao acessar o IP público da VM no seu navegador você vai ver a mensagem:

8) Instalar o MySQL​

Agora, entre com o seguinte comando no terminal para instalar o MySQL:

sudo apt-get install mysql-server -y

9) Instalar o Node.Js​

Em sequência, vamos instalar o Node.Js com os comandos:

# Fazer curl na versão recomendada do node
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash

# Instalando o node
sudo apt-get install nodejs -y

10) Abrir as portas do webserver​

O Iptables é um firewall importante no Linux e, muitas vezes, por definição o acesso à determinadas portas não é permitido. Portanto, use os comandos a seguir para abrir as portas 80 e 443, caso seja necessário:

sudo apt-get install iptables-persistent

# HTTP :80
sudo iptables -I INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

# HTTPS : 443
sudo iptables -I INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

# Salve as configurações
sudo netfilter-persistent save

11) Instalando o Ghost​

Agora, vamos criar um usuário no MySQL para o Ghost.

# Inicializar o MySQL
sudo mysql

# Criar um DB user com senha
create user 'ghost'@'localhost' identified by 'Senha1234';

# Dar todos os privilégios para o usuário
grant all privileges on *.* to 'ghost'@'localhost';

# Criar uma DB para o Ghost
create database ghost;

# Atualizar as permissões
flush privileges;

# Sair do MySql
exit

Instale o Ghost-CLI

#Instalar CLI
sudo npm install ghost-cli@latest -g

Crie um novo diretório com o comando mkdir:

# Criar um diretorio para o ghost
sudo mkdir -p /var/www/ghost

# Setar o usuário dono do diretório
sudo chown nome_de_usuario:nome_de_usuario /var/www/ghost

# Alterar as permissões
sudo chmod 775 /var/www/ghost

# Navegar até o diretório criado
cd /var/www/ghost

# Iniciar a instalação do ghost
ghost install

Aguarde até que o Ghost termine de ser instalado.

12) Configurações da instalação​

Após a instalação, o sistema vai pedir algumas configurações:

  • Blog URL: caso você possua um domínio registrado, pode inseri-lo nesse campo. Se não tiver, deixe o IP da sua máquina virtual mesmo. No meu caso, usei o endereço https://ludsilva.tech - sim, com https mesmo! Não precisa se preocupar com o certificado SSL, pois ele será configurado posteriormente.
  • MySQL hostname: hostname - por padrão, é o hostname
  • MySQL username / password: use o usuário e senha criados anteriormente para o MySQL
  • Ghost database name: ghost - use o nome do banco de dados criado no MySQL
  • Set up a ghost MySQL user? ghost - utilize o nome do user criado no MySQL
  • Set up NGINX? Selecione "Y"
  • Set up SSL? Selecione "Y"
  • Enter your email - forneça um e-mail para o certificado SSL
  • Set up systemd? - Selecione "Y"

Ao final do processo, se tudo ocorrer bem, você vai conseguir acessar o blog pelo pelo ip_da_vm/ghost

Se você utilizou um domínio já registrado, falta o último passo antes de acessar seu blog: configurar os apontamentos DNS.

13) Configurar o DNS (opcional)​

Caso você possua um domínio registrado, é hora de configurar os apontamentos DNS para que quando você digite o endereço no navegador, você seja redirecionado para o seu blog Ghost.

💡

O domínio de testes que utilizei foi criado gratuitamente com o GitHub Student Developer Pack.

Para facilitar esse processo, vamos somente configurar o apontamento do tipo A, que vai utilizar o IP público da VM criada no Azure.

No meu caso, eu utilizo a Umbler como zona de DNS do meu domínio. Outra dica é deixar na CloudFlare. Por facilidade de uso, evito deixar no RegistroBr caso seja um domínio nacional (de extensão .br) ou em outros provedores. A interface da Umbler é bem amigável, e a da CloudFlare permite inserir apontamentos do tipo AAAA. Fica a sua critério escolher qual lhe atende melhor.

Como meu domínio já estava adicionado, só precisei logar no painel Umbler e clicar em "Domínio":

Em seguida, clicar em "Editor de DNS":

Depois, clicar no botão "+ Adicionar":

E criar um apontamento com os seguintes valores:

  • Tipo: A
  • Nome: deixar em branco ou colocar @
  • Dados: o IP da VM no Azure
  • TTL: 1 hora

Clique em "Salvar", e seu apontamento foi criado com sucesso.

Com o apontamento criado, é só esperar a propagação - que pode levar até 48 horas (é uma média, vai depender da extensão do seu domínio).

14) Acessando o site​

Ao acessar o seu site (pelo domínio ou pelo IP), será apresentada essa página aqui:

15) Criando seu login​

O próximo passo é criar o seu login. Por isso acesse seudominio.com/ghost ou ip_da_vm/ghost

No primeiro acesso, o sistema vai pedir para você criar um usuário e algums informações iniciais para o seu blog:

  • Site title: você vai escolher o título do seu site
  • Full name: o seu nome
  • Email address: o seu endereço de e-mail para realizar o login no Ghost
  • Password: a sua senha

16) Agora, é só aproveitar​

Após o login, você será redirecionado para o Dashboard do Ghost. Fique à vontade para experimentar as funcionalidades e configurar o seu blog da forma que desejar.

Aproveite para explorar a documentação do Ghost (que está linkada no final deste post).

💡

Lembre-se que você está no período de testes do Azure (caso tenha criado uma nova conta). Então, não se esqueça de encerrar a sua instância para são ser cobrado!

Caso queira usar uma VM 100% gratuita, recomendo dar uma olhada no Free Tier da Oracle Cloud.

Extra: troubleshooting para alguns problemas comuns​

Em alguns casos, na instalação do Ghost podem ocorrer alguns problemas. O primeiro deles é alegar "falta de memória" - principalmente se você estiver usando uma máquina virtual com 1GB de RAM.

Para contornar esse entrave, no momento de instalar o Ghost use o comando:

## Caso apresente erro de memória
ghost install --no-check-mem

É comum também ocorrer bugs durante a configuração do certificado SSL ou até mesmo problemas de causas desconhecidas. Para contornar, siga o passo a passo:

## Desinstale o Ghost
ghost uninstal

## Remova a pasta criada
sudo rm -R /ghost

E siga novamente os passos para criar uma nova pasta a partir do item 11 deste tutorial.

Por fim, bons estudos!


Referências​

Ler artigo