Pular para o conteúdo principal
O AppSignal fornece o appsignal-wrap, uma ferramenta para monitorar qualquer processo em execução no seu servidor, como seus cron jobs, seu servidor de banco de dados ou quaisquer outros processos relacionados à sua aplicação. A ferramenta appsignal-wrap integra-se perfeitamente aos monitores de processos cron e heartbeat do AppSignal, logging e relatórios de erros. Pode ser usada para monitorar qualquer processo em execução nos seus servidores, independentemente da linguagem ou framework em que esteja escrito.

O AppSignal Wrap ajuda a responder perguntas como:

Meu processo de banco de dados está em execução?
Meu cron job está rodando no horário?
O que deu errado com meu script de backup?
Meu servidor de aplicação falhou ao iniciar?

Principais recursos do appsignal-wrap

Após instalar o appsignal-wrap, você pode usar a ferramenta para iniciar os processos que deseja monitorar. A ferramenta appsignal-wrap irá então:
Reportar a saída padrão e o erro padrão do processo, como logs que você pode filtrar e consultar no AppSignal Logging.
Enviar monitores de processos cron para reportar que o processo iniciou e terminou com sucesso, ou monitores de processos heartbeat para acompanhar seu tempo de atividade.
Reportar status de saída de falha como erros para o AppSignal.

Instalação

A maneira mais fácil de instalar o appsignal-wrap é executar o seguinte comando:
curl -sSL https://github.com/appsignal/appsignal-wrap/releases/latest/download/install.sh | sudo sh
O comando fará automaticamente o download da última versão do appsignal-wrap para seu SO (sistema operacional) e arquitetura, e o instalará no $PATH do seu servidor. Tanto Linux quanto macOS são suportados, nas arquiteturas x86 64-bit (Intel) e ARM 64-bit (Apple Silicon). O Alpine Linux também é suportado através dos nossos builds com musl habilitado para ambas as arquiteturas. Alternativamente, você pode baixar a última versão na página de releases do GitHub para seu sistema operacional e arquitetura, e instalá-la manualmente no $PATH do seu servidor.

Uso

Para monitorar um processo com o appsignal-wrap, você passa o comando que deseja monitorar como o último argumento para o appsignal-wrap. Por exemplo:
export APPSIGNAL_APP_PUSH_API_KEY=[APP_LEVEL_API_KEY]
appsignal-wrap [NAME] -- [COMMAND]
No exemplo acima, [NAME] é o nome que você quer usar para identificar o processo no AppSignal, e [COMMAND] é o comando que você quer monitorar. Tanto o nome quanto o comando são obrigatórios. Por exemplo:
appsignal-wrap backup-script -- bash /var/app/backup.sh
Você precisará de uma chave API do AppSignal no nível do app, que pode encontrar nas configurações “Push & Deploy” do seu app AppSignal. Você pode fornecê-la para o appsignal-wrap como argumento da opção de linha de comando --api-key, ou como variável de ambiente APPSIGNAL_APP_PUSH_API_KEY. Por padrão, o appsignal-wrap reportará a saída padrão e o erro padrão do processo como logs para o AppSignal, e reportará quaisquer status de saída de falha como erros para o AppSignal.

Monitoramento de Processos

Leia nossa documentação de Monitoramento de Processos para mais informações sobre como o Monitoramento de Processos do AppSignal funciona.
Por padrão, o appsignal-wrap não enviará nenhum evento de monitor de processo. Você pode usar as opções de linha de comando --cron ou --heartbeat para habilitar monitores de processo do tipo cron ou heartbeat, respectivamente. A ferramenta appsignal-wrap usará o nome fornecido como primeiro argumento como o identificador do monitor de processo. Por exemplo, para reportar eventos de monitor de processo do tipo cron com backup-script como identificador do monitor de processo:
appsignal-wrap backup-script --cron -- bash /var/app/backup.sh

Monitores de processo do tipo cron

Ao usar --cron para enviar monitores de processo do tipo cron, o appsignal-wrap enviará um evento de início de monitor de processo cron quando o processo iniciar, e um evento de finalização de monitor de processo cron se o processo finalizar com sucesso. Se o processo encerrar com status de saída de falha, o appsignal-wrap não enviará um evento de finalização de monitor de processo cron.

Monitores de processo do tipo heartbeat

Ao usar --heartbeat para enviar monitores de processo do tipo heartbeat, o appsignal-wrap enviará eventos de monitor de processo heartbeat continuamente durante o tempo de vida do processo.

Identificador personalizado

Para enviar eventos de monitor de processo ao AppSignal com um identificador diferente do nome fornecido como primeiro argumento, você pode passar um identificador diferente como argumento para as opções de linha de comando --cron ou --heartbeat. Por exemplo:
appsignal-wrap backup --cron daily-backup -- bash /var/app/backup.sh
No exemplo acima, o appsignal-wrap enviará eventos de monitor de processo cron com daily-backup como identificador do monitor de processo, mas ainda usará backup como o nome para identificar o processo ao reportar logs e erros.

Logging

Por padrão, o appsignal-wrap enviará tanto a saída padrão quanto a saída de erro padrão do processo monitorado como logs para o AppSignal. Os logs aparecerão sob a fonte “application”, e o nome fornecido como primeiro argumento será usado como o grupo de logs.

Desabilitar logging

Para desabilitar o envio da saída padrão ou da saída de erro padrão como logs, você pode usar as opções de linha de comando --no-stdout ou --no-stderr, respectivamente. Para desabilitar o envio de logs completamente, você pode usar a opção de linha de comando --no-log.

Grupo de logs personalizado

Para enviar logs como um grupo de logs diferente, você pode passá-lo como argumento para a opção de linha de comando --log. Por exemplo:
appsignal-wrap mysql --log db -- mysqld
No exemplo acima, o appsignal-wrap usará db como o grupo de logs ao enviar logs para o AppSignal, mas ainda usará mysql como o nome para identificar o processo ao reportar monitores de processo e erros.

Fonte de logs personalizada

Para enviar logs para uma fonte de logs diferente, você pode passar a chave de API da fonte de logs, que você obtém ao criar uma fonte de logs, como argumento para a opção de linha de comando --log-source, ou como a variável de ambiente APPSIGNAL_LOG_SOURCE_API_KEY. Por exemplo:
export APPSIGNAL_LOG_SOURCE_API_KEY=[LOG_SOURCE_API_KEY]
appsignal-wrap mysql -- mysqld

Relatório de erros

Por padrão, o appsignal-wrap reportará qualquer status de saída de falha do processo que monitora como erros para o AppSignal. Os erros serão agrupados pelo nome fornecido como primeiro argumento.

Desabilitar relatório de erros

Para desabilitar completamente o relatório de erros, você pode usar a opção de linha de comando --no-error.

Saída em mensagens de erro

Ao reportar erros para o AppSignal, o appsignal-wrap incluirá as últimas linhas da saída padrão e do erro padrão do processo como a mensagem de erro. Usar as opções de linha de comando --no-stdout ou --no-stderr impedirá que a saída padrão ou o erro padrão sejam incluídos na mensagem de erro. Usar ambas as opções impedirá que quaisquer logs sejam incluídos na mensagem de erro.

Agrupamento de erros personalizado

Para agrupar erros de forma diferente, você pode passar um nome diferente como argumento para a opção de linha de comando --error. Por exemplo:
appsignal-wrap backup --error user-backup -- bash /var/app/backup.sh --only-users
No exemplo acima, o appsignal-wrap reportará erros com user-backup como grupo de erros, mas ainda usará backup como o nome para identificar o processo ao reportar logs e monitores de processo.

Revisão da aplicação

Se uma revisão for fornecida usando a flag --revision ou a variável de ambiente APPSIGNAL_REVISION, os erros serão agrupados com o deploy daquela revisão.

Comportamento do processo

A ferramenta appsignal-wrap busca ser transparente — ou seja, executar algum comando usando o appsignal-wrap deve ter o mesmo comportamento que executar esse mesmo comando sozinho.
Depois que o processo monitorado terminar, o appsignal-wrap aguardará um curto período de tempo (geralmente um segundo ou menos) antes de sair, a fim de garantir que todos os logs e monitores de processo sejam enviados ao AppSignal.Se você invocar o appsignal-wrap em um loop, o atraso causado por essa espera pode fazer com que o loop rode mais lento do que o esperado.

Variáveis de ambiente

O processo herda automaticamente as variáveis de ambiente do processo pai appsignal-wrap.

Status de saída

Se o processo que ele monitora sai com um código de saída, o appsignal-wrap sairá com o mesmo código de saída de falha. Se o processo que ele monitora é encerrado por um sinal, o appsignal-wrap sairá com um código de saída de falha de 128 + signal, onde signal é o número que representa o sinal que causou o término do processo. O sinal que esse número representa é específico do sistema operacional.

Entrada e saída

O processo herda automaticamente seu descritor de entrada padrão do processo pai appsignal-wrap. Além de reportá-las ao AppSignal, a saída padrão e o erro padrão do processo são canalizados para a saída padrão e o erro padrão do processo pai appsignal-wrap. Ao usar --no-stdout ou --no-stderr, o processo herda automaticamente o descritor de saída padrão ou erro padrão, respectivamente, do processo pai appsignal-wrap. Isso significa que você pode usar o appsignal-wrap em um pipeline, ou redirecionar sua saída para um arquivo, por exemplo:
# Without monitoring
grep "active" customers.csv \
    | python /var/app/import.py \
    > /var/log/import.log

# With monitoring
grep "active" customers.csv \
    | appsignal-wrap import-customers -- python /var/app/import.py \
    > /var/log/import.log

Sinais

Quando o processo appsignal-wrap recebe um sinal que pode ser tratado, ele o encaminhará para o processo que monitora. Por exemplo, enviar um sinal SIGTERM para o processo pai appsignal-wrap fará com que o processo que ele monitora receba um sinal SIGTERM. Quando o processo pai appsignal-wrap recebe um sinal que não pode ser tratado, como SIGKILL e SIGSTOP, ou se ele falha inesperadamente, um sinal SIGTERM será enviado para o processo que ele monitora.