
Verificando requisições de webhook do AppSignal
Para garantir a segurança da sua aplicação, você pode verificar se as requisições de webhook recebidas são realmente do AppSignal. A verificação é feita usando um token de verificação de Webhook para validar a assinatura da requisição.Localizando seu Webhook Verification Token
- Navegue até App settings > Integrations no seu painel do AppSignal.
- Configure a integração de webhook que você quer verificar.
- Aqui você encontrará o Webhook verification token da integração.
Verificando uma requisição
Quando o AppSignal envia uma requisição de webhook, ele inclui uma assinatura no cabeçalhoX-Appsignal-Signature. Você pode validar a requisição da seguinte forma:
- Concatene o Webhook verification token do AppSignal com o corpo bruto da requisição.
- Gere um hash SHA256 da string concatenada.
- Compare o hash gerado com o valor do cabeçalho
X-Appsignal-Signature.
Exemplos de implementação
Abaixo estão alguns exemplos de como você pode verificar se uma requisição está vindo do AppSignal em Ruby, Elixir, Node.js e Python. Observação: Os exemplos abaixo são ilustrativos; você pode precisar adaptá-los dependendo dos frameworks, integrações e dependências usadas pelo seu app.Deploy markers
Campos
| Campo | Tipo | Descrição |
|---|---|---|
marker | Hash<String, Any> | O payload do webhook diz respeito a um incidente de marker. |
Subcampos do deploy marker
| Campo | Tipo | Descrição |
|---|---|---|
time | String | Timestamp em que o deploy marker foi criado. |
marker_id | String | ID interno do AppSignal para o deploy marker. |
site | String | Nome do app como visto em AppSignal.com. Usamos o campo site em vez de app por razões legadas. |
environment | String | Ambiente do app como visto em AppSignal.com. |
revision | String | O nome da revisão do deploy marker. |
user | String | O usuário que criou o marker. |
repository | String | URL para o repositório, conforme configurado para o app em AppSignal.com. |
url | String | URL para o app em AppSignal.com que disparou o webhook. |
Incidentes de exceção
Campos
| Campo | Tipo | Descrição |
|---|---|---|
exception | Hash<String, Any> | O payload do webhook diz respeito a um incidente de exceção. |
Subcampos de exception
| Campo | Tipo | Descrição |
|---|---|---|
time | String | Timestamp em que a exceção ocorreu. |
number | Integer | ID do incidente, como mostrado em AppSignal.com. |
site | String | Nome do app como visto em AppSignal.com. Usamos o campo site em vez de app por razões legadas. |
environment | String | Ambiente do app como visto em AppSignal.com. |
app_url | String | URL do app em AppSignal.com que disparou o webhook. |
url | String | URL para a amostra específica do incidente em AppSignal.com que disparou esse webhook. |
revision | String | O nome da revisão do deploy marker. |
user | String | O usuário que criou o marker. O valor de user também pode ser null se não estiver definido para uma revisão de deploy marker. |
namespace | String | O namespace no qual essa exceção ocorreu. |
exception | String | O tipo de exceção registrado pelo AppSignal. |
message | String | A mensagem da exceção, com mais detalhes sobre a exceção. |
app_backtrace | Array<String> | As linhas do backtrace referentes ao app de onde se originaram. Isso exclui quaisquer linhas de backtrace de bibliotecas incluídas no app. |
first_backtrace_line | String | A primeira linha de backtrace do campo app_backtrace. |
action | String | A action na qual essa exceção ocorreu. Pode ser uma action de controller, um background worker ou uma action definida manualmente. |
path | String | O caminho da requisição em que a exceção ocorreu. Isso é definido apenas para requisições web. Esse metadado é definido pela integração do AppSignal por padrão e também é incluído no campo metadata. |
hostname | String | O hostname do host em que essa exceção ocorreu. |
action_label | String | Um rótulo amigável para o tipo de action em que essa exceção ocorreu. Usa request para o namespace web e job para o namespace background. Todos os outros namespaces usam action. |
metadata | Hash<String, String> | Inclui metadados definidos pelo usuário (veja o recurso de Tagging). |
Campos de metadata
Você pode adicionar seus próprios metadados taggeando samples.| Campo | Tipo | Descrição |
|---|---|---|
demo_sample | String | Definido pela integração do AppSignal para samples de demonstração enviados usando nossa ferramenta de linha de comando de demo (Ruby / Elixir). Não é definido para todos os outros samples. |
method | String | O método de requisição usado para realizar uma requisição. Disponível apenas para requisições (web). |
path | String | O caminho da requisição em que a exceção ocorreu. Definido apenas para requisições web. Contém o mesmo valor do campo path. |
Incidentes de desempenho
Campos
| Campo | Tipo | Descrição |
|---|---|---|
performance | Hash<String, Any> | O payload do webhook diz respeito a um incidente de desempenho. |
Subcampos de performance
| Campo | Tipo | Descrição |
|---|---|---|
time | String | Timestamp em que o incidente de desempenho ocorreu. |
number | Integer | ID do incidente, como mostrado em AppSignal.com. |
site | String | Nome do app como visto em AppSignal.com. Usamos o campo site em vez de app por razões legadas. |
environment | String | Ambiente do app como visto em AppSignal.com. |
app_url | String | URL do app em AppSignal.com que disparou o webhook. |
url | String | URL para a amostra específica do incidente em AppSignal.com que disparou esse webhook. |
revision | String | O nome da revisão do deploy marker. |
user | String | O usuário que criou o marker. O valor de user também pode ser null se não estiver definido para uma revisão de deploy marker. |
namespace | String | O namespace no qual esse incidente de desempenho ocorreu. |
duration | Float | O tempo em milissegundos medido para completar a requisição/job/action. |
action | String | A action na qual esse incidente de desempenho ocorreu. Pode ser uma action de controller, um background worker ou uma action definida manualmente. |
path | String | O caminho da requisição em que o incidente de desempenho ocorreu. Definido apenas para requisições web. Esse metadado é definido pela integração do AppSignal por padrão e também é incluído no campo metadata. |
hostname | String | O hostname do host em que esse incidente de desempenho ocorreu. |
action_label | String | Um rótulo amigável para o tipo de action em que esse incidente de desempenho ocorreu. Usa request para o namespace web e job para o namespace background. Todos os outros namespaces usam action. |
metadata | Hash<String, String> | Inclui metadados definidos pelo usuário; veja metadata. |
Campos de metadata
Você pode adicionar seus próprios metadados taggeando samples.| Campo | Tipo | Descrição |
|---|---|---|
demo_sample | String | Definido pela integração do AppSignal para samples de demonstração enviados usando nossa ferramenta de linha de comando de demo (Ruby / Elixir). Não é definido para todos os outros samples. |
method | String | O método de requisição usado para realizar uma requisição. Disponível apenas para requisições (web). |
path | String | O caminho da requisição em que o incidente de desempenho ocorreu. Definido apenas para requisições web. Contém o mesmo valor do campo path. |
Detecção de anomalias
| Campo | Tipo | Descrição |
|---|---|---|
alert_id | String | ID interno do AppSignal para o alerta. |
state | String | Estado do alerta. |
site | String | Nome da aplicação à qual o alerta pertence. |
environment | String | Nome do ambiente da aplicação ao qual o alerta pertence. |
tags | Array | Namespace associado ao alerta. |
human_tags | Array | Namespace personalizado associado ao alerta. |
metric_name | String | Nome da métrica para a qual o alerta foi criado. |
field | String | Nome do campo do alerta. |
trigger_label | String | Nome do trigger. |
trigger_description | String | Descrição do trigger. |
last_value | String | Último valor registrado para o alerta. |
peak_value | String | Maior valor registrado para o alerta |
mean_value | String | Média de todos os valores do alerta. |
comparison_operator | String | Operador de comparação definido pelo usuário com base no qual o alerta será disparado. |
comparison_value | String | Valor de comparação da métrica definido pelo usuário com base no qual o alerta será disparado. |
human_last_value | String | Último valor da métrica registrado para o alerta desde que ele foi aberto, em um formato mais legível. |
human_peak_value | String | Maior valor da métrica registrado para o alerta enquanto ele estava aberto. |
human_mean_value | String | Valor médio da métrica para o alerta enquanto ele esteve aberto, em um formato mais legível. |
human_comparison_value | String | Valor de comparação da métrica do alerta definido pelo usuário com base no qual o alerta será disparado, em formato legível. |
created_at | String | Timestamp em que o alerta foi criado. |
opened_at | String | Timestamp (ISO8601) em que o alerta foi aberto. |
resolved_at | String | Timestamp (ISO8601) em que o alerta foi resolvido. |
closed_at | String | Timestamp (ISO8601) em que o alerta foi fechado. |
warmup_duration | String | Tempo em minutos que o AppSignal espera antes de abrir um alerta. |
cooldown_duration | String | Tempo em minutos que o AppSignal espera antes de fechar um alerta. |
alert_url | String | URL do alerta para que o usuário possa visualizá-lo no AppSignal. |
edit_trigger_url | String | URL do alerta para que o usuário possa editá-lo no AppSignal. |