Lançador Produtos Bitnami Documentaçãoimaxe CLI Blog Contacto
imaxe global-alerts alertas v1.0.0

Um único ponto onde ouvir toda a tua frota

Publica os avisos importantes da instância —intrusões, disco cheio, um serviço em baixo— num tópico SNS partilhado. O operador e os restantes módulos usam-no como canal único: limiar de severidade, desduplicação e fila de repetição se o SNS não responder.

$ imaxe global-alerts send --severity critical "disco raiz a 95%"
Versão
v1.0.0
Subcomandos
8
Config
/etc/imaxe/global-alerts.yml
Requer root
sim
Transporte
Amazon SNS · função IAM

O que faz este módulo #

Uma instância tem muita coisa para contar: o fail2ban baniu um IP, o aide viu mudar um ficheiro do sistema, a cópia de segurança de ontem à noite falhou, o disco raiz vai nos 95 %. Se cada módulo avisa à sua maneira —um email aqui, uma linha de log ali— ninguém dá por nada, e com dez instâncias o problema multiplica-se por dez.

O módulo global-alerts é o barramento central de alertas do imaxe: um único comando por onde passam todos esses avisos e um único destino onde chegam, um tópico Amazon SNS partilhado por toda a tua frota. A partir daí o SNS distribui como quiseres: email, SMS, uma função Lambda, uma fila SQS, o teu sistema de piquete. Publica com a função IAM da instância (permissão sns:Publish), por isso não há nenhuma credencial a guardar. E filtra o ruído antes de enviar: um limiar de severidade descarta o que não chega ao nível que te interessa e uma janela de desduplicação evita que o mesmo alerta te acorde quarenta vezes.

Se o SNS não estiver disponível —rede em baixo, função ainda sem permissões, região inacessível— o alerta não se perde: fica em fila no disco e um timer do systemd repete-o a cada 5 minutos.

Antes de começar

Precisas do ARN de um tópico SNS (arn:aws:sns:região:conta:tópico) e que a instância possa publicar nele. Se lançaste a AMI a partir do lançador, o modelo de CloudFormation já cria o tópico, subscreve o teu email, cria a função IAM com sns:Publish e passa o ARN à instância como tag: o módulo configura-se sozinho e não há nada a fazer aqui.

Guia rápidotarefas passo a passo

Tarefas comuns #

Escolhe o que queres fazer. Cada receita traz o comando já escrito — troca o ARN e o texto pelos teus, e carrega em Copiar.

1

Definir o tópico SNS

Diz à instância onde tem de publicar os seus avisos.

Liga-te por SSH ao teu servidor com o utilizador ubuntu.

Aponta o módulo ao ARN do teu tópico. A região deduz-se do próprio ARN, por isso normalmente não é preciso indicá-la:

terminal
$ sudo imaxe global-alerts configure \
    --topic-arn arn:aws:sns:eu-west-1:123456789012:imaxe-alerts

Várias instâncias a publicar no mesmo tópico? Dá a cada uma uma etiqueta de origem reconhecível com --source (por omissão usa-se o hostname):

terminal
$ sudo imaxe global-alerts configure --source web-producao-1
A configuração fica em /etc/imaxe/global-alerts.yml e o envio fica ativado. Continua com a receita Enviar um alerta de teste.
2

Enviar um alerta de teste

Confirma que a função IAM publica mesmo antes de confiares no canal.

Publica um alerta de teste no tópico configurado:

terminal
$ sudo imaxe global-alerts test

O teste salta o limiar e a desduplicação —sai sempre— e, se algo falhar, devolve-te o erro real da AWS em vez de pôr em fila em silêncio. Vê a caixa do endereço subscrito ao tópico (e a pasta de spam).

Se vires o MessageId e o aviso te chegar, o canal funciona. Se sair AuthorizationError, falta à instância a permissão sns:Publish sobre esse tópico.
3

Enviar um alerta a partir de um script

O mesmo canal que os módulos usam, disponível para o que é teu.

Um alerta com a sua severidade e a sua origem:

terminal
$ sudo imaxe global-alerts send --severity critical \
    --source backup --subject "cópia falhada" \
    "a cópia noturna da base de dados terminou com erro"

Se o texto for gerado por outro comando, passa-o por stdin usando - como mensagem:

terminal
$ df -h / | sudo imaxe global-alerts send --severity warning -

Em algo que corre de poucos em poucos minutos, dá-lhe uma chave de desduplicação estável: dentro da janela configurada só sai o primeiro:

terminal
$ sudo imaxe global-alerts send --severity warning \
    --dedup-key disco-raiz-cheio "disco raiz a 95%"
O alerta viaja como JSON para o tópico, com a instância, a região e a marca temporal já incluídas. Sem --dedup-key o módulo deriva uma a partir de origem + severidade + assunto.
4

Ver o estado do barramento

Tópico, região, CLI da AWS e alertas pendentes, num relance.

Resumo do estado atual:

terminal
$ sudo imaxe global-alerts status

Para verificar que configuração manda mesmo —incluindo a que chega pelas tags da instância, que têm prioridade sobre o ficheiro—:

terminal
$ sudo imaxe global-alerts show
$ sudo imaxe global-alerts status --json
Saberás se há tópico configurado, em que região se publica e quantos alertas esperam na fila. Com --json, pronto para um painel ou um script.
5

Baixar o ruído

Sobe o limiar de severidade e alarga a janela de desduplicação.

Se só queres saber do que importa, descarta tudo o que esteja abaixo de warning:

terminal
$ sudo imaxe global-alerts configure --min-severity warning

A janela de desduplicação não tem flag: ajusta-se no ficheiro de configuração. Sobe-a se um mesmo alerta se repetir muito:

/etc/imaxe/global-alerts.yml
dedup_window: 1h   # 30s, 5m, 1h… (5m por omissão)
Os alertas abaixo do limiar são descartados antes de saírem (não vão para a fila) e os repetidos dentro da janela são suprimidos. O test continua a publicar sempre, por isso não perdes a forma de verificar o canal.
6

Ver a fila e repetir

O que ficou pendente quando o SNS não respondeu, e como forçar o envio.

Vê o que está pendente e as últimas chaves enviadas:

terminal
$ sudo imaxe global-alerts history

A repetição já é feita por um timer do systemd a cada 5 minutos, mas podes forçá-la depois de corrigires a permissão ou a rede:

terminal
$ sudo imaxe global-alerts flush
$ systemctl status imaxe-global-alerts-flush.timer
Verás quantos saíram e quantos continuam à espera. Se o primeiro voltar a falhar, a passagem para aí e deixa o resto para a tentativa seguinte: não se descarta nada.
7

Silenciar o módulo

Deixa de publicar sem perder a configuração.

Desativa o envio de alertas e retira o timer de repetição:

terminal
$ sudo imaxe global-alerts remove

O tópico, a região e o resto dos ajustes ficam no ficheiro: para voltar a ativá-lo basta um configure, que reabilita o módulo.

A instância deixa de publicar. Os send seguintes não falham: avisam por stderr que o módulo está desativado e terminam com código 0.
Sem função IAM não há alertas

O módulo publica com as credenciais da função da instância, não com chaves guardadas. Se a função não permitir sns:Publish sobre esse tópico, os alertas vão ficando em fila uns atrás dos outros sem nunca chegar. Um imaxe global-alerts test diz-to na hora, com o erro tal como a AWS o devolve.

Referência CLIcomandos, flags e ficheiros

Sinopse #

uso
imaxe global-alerts <subcomando> [--topic-arn ARN] [--severity NÍVEL] [flags]

Todos os subcomandos exigem privilégios de root (usa sudo) porque escrevem em /etc/imaxe/, mantêm o estado em /var/lib/imaxe/ e gerem uma unidade do systemd. Não há segredos a manusear: a publicação vai pela função IAM da instância. Junta --json a status, show, history ou flush para obteres saída legível por máquina.

Subcomandos #

SubcomandoO que fazFlags relevantes
statusEstado: tópico configurado, região efetiva, CLI da AWS disponível e alertas em fila.--json
configureFixa o tópico SNS e as opções de envio. Reabilita o módulo se estava desativado.--topic-arn, --region, --source, --min-severity
sendPublica um alerta. É o canal que o operador e os restantes módulos usam.--severity, --source, --subject, --dedup-key
testPublica um alerta de teste saltando limiar e desduplicação, e reporta o erro real se falhar.--severity
showMostra a configuração efetiva (ficheiro + tags da instância já aplicadas).--json
historyAlertas pendentes em fila e chaves de desduplicação enviadas recentemente.--json
flushRepete os alertas em fila. O timer do systemd também o executa.--json
removeDesativa o envio e retira o timer. Conserva a configuração.

Argumentos e flags #

FlagTipoPor omissãoDescrição
--topic-arn obrig.stringARN do tópico SNS de destino (arn:aws:sns:região:conta:tópico). Sem ele o módulo não pode publicar.
--regionstringdo ARNRegião da AWS. Se for omitida, deriva-se do ARN do tópico; se também não, do IMDS ou de AWS_REGION.
--sourcestringhostnameEtiqueta de origem. Em configure, a da instância; em send, a desse alerta em concreto (p. ex. o módulo que o emite).
--min-severitystringinfoLimiar: descarta os alertas abaixo deste nível. Valores: info, warning, critical.
--severitystringinfoEm send/test: nível deste alerta. Aceitam-se as formas curtas warn e crit.
--subjectstringda mensagemAssunto curto. Se for omitido, deriva-se da própria mensagem.
--dedup-keystringderivadaChave de desduplicação: suprime repetições dentro de dedup_window. Por omissão calcula-se com origem + severidade + assunto.
<mensagem> obrig.posicionalEm send: o texto do alerta, ou - para o ler do stdin.
--jsonboolfalseEm status, show, history e flush, emite o resultado como JSON no stdout.
Descartar não é falhar

Quando um alerta é descartado —módulo desativado, severidade abaixo do limiar ou duplicado dentro da janela— o send explica-o pelo stderr e termina com código 0. Assim o script que o emitiu não se parte por causa de um filtro que tu próprio configuraste.

Configuração por tags da instância #

Cada implantação precisa de apontar para o seu tópico, e reconstruir a AMI por causa disso não faria sentido. Por isso o módulo lê, além do ficheiro, as tags da instância com prefixo imaxe.global-alerts. por IMDSv2: se existirem, mandam sobre o YAML. É o que faz o modelo de CloudFormation do lançador, que além disso exige MetadataOptions.InstanceMetadataTags: enabled para que possam ser lidas.

TagEquivale aValores
imaxe.global-alerts.topic_arntopic_arnARN do tópico SNS de destino.
imaxe.global-alerts.regionregionRegião da AWS; vazia = deriva-se do ARN ou do IMDS.
imaxe.global-alerts.sourcesourceEtiqueta de origem; vazia = hostname.
imaxe.global-alerts.min_severitymin_severityinfo · warning · critical
imaxe.global-alerts.dedup_windowdedup_windowDuração: 30s, 5m, 1h
imaxe.global-alerts.enabledenabledtrue/false (também 1/0, yes/no, on/off).

Fora da AWS, ou com o IMDS bloqueado, a leitura falha em milissegundos e o módulo continua com o que diz o ficheiro. Para ver o que ficou mesmo ativo, imaxe global-alerts show.

Ficheiros e caminhos #

CaminhoConteúdo
/etc/imaxe/global-alerts.ymlConfiguração do módulo: tópico, região, origem, limiar e janela de desduplicação.
/var/lib/imaxe/state/global-alerts/spool/Fila de alertas pendentes, um por ficheiro .json, por ordem cronológica.
/var/lib/imaxe/state/global-alerts/sent.jsonRegisto de chaves de desduplicação com a hora do último envio.
/etc/systemd/system/imaxe-global-alerts-flush.timerTimer de repetição: arranca 2 min após o início e repete a cada 5 min.

Exemplo de global-alerts.yml:

/etc/imaxe/global-alerts.yml
enabled: true
topic_arn: arn:aws:sns:eu-west-1:123456789012:imaxe-alerts
region: ""            # vazia = deriva-se do ARN ou do IMDS
source: ""            # vazia = hostname da instância
min_severity: info
dedup_window: 5m

O estado (fila e registo de desduplicação) vive em /var/lib/imaxe/ e não em /etc/ de propósito: é estado, não configuração. Ambos os caminhos podem ser movidos com as variáveis de ambiente IMAXE_CONFIG_DIR e IMAXE_STATE_DIR.

Formato do alerta #

O corpo da mensagem SNS é JSON versionado (schema: 1), para que o subscritor o possa tratar com uma Lambda ou uma fila além de o ler por email:

corpo da mensagem
{
  "schema": 1,
  "severity": "critical",
  "source": "backup",
  "subject": "cópia falhada",
  "message": "a cópia noturna da base de dados terminou com erro",
  "host": "web-producao-1",
  "instance_id": "i-0abc123def4567890",
  "region": "eu-west-1",
  "ts": "2026-07-25T03:14:07Z",
  "dedup_key": "9f2c1b7e44a0d513"
}

O assunto da mensagem SNS compõe-se como [imaxe][severidade] host: assunto, limpo para ASCII imprimível e cortado a 100 caracteres, que é o limite que o SNS impõe.

Códigos de saída e logs #

Cada execução devolve um código que podes verificar com echo $? — útil para encadear em scripts:

0OKOperação concluída. Também quando o alerta é descartado ou posto em fila de propósito.
1ERRErro genérico: o teste não se conseguiu publicar, ou não se conseguiu publicar nem pôr em fila.
2USAGEArgumentos inválidos: flag desconhecida, falta a mensagem ou severidade não válida.
64NO TOPICNão há tópico SNS configurado, nem por ficheiro nem por tag.

O módulo também responde à verificação de saúde do imaxe: se estiver ativado mas sem tópico, o health falha, de modo que um imaxe health o denuncia antes de ser preciso o primeiro alerta.

terminal
$ sudo imaxe global-alerts test; echo "saída: $?"
$ journalctl -u imaxe-global-alerts-flush.service -n 50

Resolução de problemas #

SintomaCausa provávelSolução
Sai NO TOPIC (código 64)Nem o ficheiro nem as tags trazem um ARN de tópico.Lança configure --topic-arn …, ou confirma que a instância tem a tag imaxe.global-alerts.topic_arn e as tags ativadas nos metadados.
«SNS indisponível; alerta em fila» uma e outra vezÀ função da instância falta sns:Publish sobre esse tópico, ou o ARN é de outra conta ou região.Lança test para ver o erro exato da AWS, corrige a política da função e depois flush.
«CLI aws disponível: false» no statusA instância não tem a CLI da AWS instalada; o módulo publica através dela.Instala a CLI da AWS. As AMIs do imaxe trazem-na de série; num host teu é preciso acrescentá-la.
Configuras algo e o show continua a mostrar outro valorUma tag imaxe.global-alerts.* está a passar por cima do ficheiro: tem prioridade por desenho.Muda a tag da instância (ou o parâmetro da pilha de CloudFormation) em vez do YAML.
Só chega o primeiro de vários alertas iguaisA janela de desduplicação está a suprimi-los.É o esperado. Baixa dedup_window, ou usa --dedup-key diferentes se forem mesmo acontecimentos distintos.
Não chega nada e não há errosO módulo está desativado, ou a severidade está abaixo de min_severity.O show mostra-te enabled e o limiar; o configure reabilita o envio.
Os alertas publicam-se mas não te chegam por emailA subscrição do tópico SNS está por confirmar.Procura o email de confirmação da AWS (vê o spam) e aceita a subscrição na consola do SNS.

Ficou bloqueado com o módulo Alertas?

Escreva-nos com a saída de «imaxe <module> status --json» e respondemos rapidamente.

Contactar o suporte