<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>notifish Archives - Leonardo Nascimento | Engenheiro de Software</title>
	<atom:link href="https://leonardonascimento.dev/tag/notifish/feed/" rel="self" type="application/rss+xml" />
	<link>https://leonardonascimento.dev/tag/notifish/</link>
	<description>Especializado em backend, APIs e sistemas escaláveis. Experiência em arquitetura de sistemas, integrações, mensageria, performance e aplicações de alta disponibilidade.</description>
	<lastBuildDate>Thu, 29 Jan 2026 16:56:16 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://leonardonascimento.dev/wp-content/uploads/2021/05/cropped-programming-32x32.png</url>
	<title>notifish Archives - Leonardo Nascimento | Engenheiro de Software</title>
	<link>https://leonardonascimento.dev/tag/notifish/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Como monitorar aplicação e servidor pelo WhatsApp (logs, erros e alertas)</title>
		<link>https://leonardonascimento.dev/blog/como-monitorar-aplicacao-e-servidor-pelo-whatsapp-logs-erros-e-alertas/</link>
					<comments>https://leonardonascimento.dev/blog/como-monitorar-aplicacao-e-servidor-pelo-whatsapp-logs-erros-e-alertas/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Thu, 29 Jan 2026 15:19:35 +0000</pubDate>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Produção]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Alertas]]></category>
		<category><![CDATA[logs]]></category>
		<category><![CDATA[monitoramento]]></category>
		<category><![CDATA[notifish]]></category>
		<category><![CDATA[produção]]></category>
		<category><![CDATA[WhatsApp]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2290</guid>

					<description><![CDATA[<p>WhatsApp é um canal excelente para alerta porque ele tem uma característica que e-mail e dashboard não têm: chega onde você está. O problema é que a maioria das implementações vira bagunça rápido — alerta demais, duplicado, sem contexto, e em pouco tempo todo mundo ignora. A forma correta de fazer isso é tratar WhatsApp [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/como-monitorar-aplicacao-e-servidor-pelo-whatsapp-logs-erros-e-alertas/">Como monitorar aplicação e servidor pelo WhatsApp (logs, erros e alertas)</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>WhatsApp é um canal excelente para alerta porque ele tem uma característica que e-mail e dashboard não têm: <strong>chega onde você está</strong>. O problema é que a maioria das implementações vira bagunça rápido — alerta demais, duplicado, sem contexto, e em pouco tempo todo mundo ignora.</p>



<p>A forma correta de fazer isso é tratar WhatsApp como <strong><a href="https://leonardonascimento.dev/blog/updown-io-receba-notificacao-no-whatsapp-caso-seu-site-fique-indisponivel/" type="post" id="164">camada de notificação</a></strong>, não como sistema de monitoramento. Você continua monitorando com ferramentas e sinais confiáveis (uptime, métricas, logs, filas, erros), mas centraliza o envio e a governança dos alertas em um lugar só — e aí o <a href="http://notifish.com/" type="link" id="http://notifish.com/" target="_blank" rel="noreferrer noopener nofollow">Notifish </a>entra bem.</p>



<p>A ideia é simples: <strong>qualquer evento relevante → vira um “evento de notificação” → Notifish entrega no WhatsApp</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-que-vale-a-pena-mandar-para-o-whatsapp-e-o-que-nao-vale">O que vale a pena mandar para o WhatsApp (e o que não vale)</h2>



<p>WhatsApp deve receber só o que exige ação ou atenção rápida. Em produção, eu separo em três níveis:</p>



<p><strong>Crítico (manda sempre):</strong></p>



<ul class="wp-block-list">
<li>aplicação fora do ar / endpoint crítico fora</li>



<li>erro 5xx em alta (explosão de taxa de erro)</li>



<li>fila parou de consumir / backlog crescendo rápido</li>



<li>disco quase cheio / risco de indisponibilidade</li>



<li>falha em integração crítica (pagamento, mensagens, etc.)</li>
</ul>



<p><strong>Alerta (manda com filtro):</strong></p>



<ul class="wp-block-list">
<li>latência acima do normal por X minutos</li>



<li>aumento gradual de erros específicos</li>



<li>Redis indisponível (com fallback) ou lento</li>



<li>uso de CPU/memória alto por período sustentado</li>
</ul>



<p><strong>Informativo (geralmente não manda no WhatsApp):</strong></p>



<ul class="wp-block-list">
<li>deploy realizado</li>



<li>logs de rotina</li>



<li>warnings esporádicos</li>
</ul>



<p>O que destrói o canal é “alerta informativo demais”. WhatsApp é para <strong>sinal forte</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-arquitetura-recomendada-sem-gambiarra">Arquitetura recomendada (sem gambiarra)</h2>



<p>O melhor padrão é este:</p>



<ol class="wp-block-list">
<li>Você tem fontes de evento (monitoramento/observabilidade):</li>
</ol>



<ul class="wp-block-list">
<li>Uptime/health-check (aplicação)</li>



<li>Métricas do servidor (CPU, RAM, disco)</li>



<li>Logs (erros específicos, padrões)</li>



<li>Erros de aplicação (exceptions)</li>



<li>Filas (backlog, falhas, retries)</li>
</ul>



<ol start="2" class="wp-block-list">
<li>Um “gerador de eventos” cria um evento padronizado.</li>



<li>Você envia esse evento para o <a href="https://developers.notifish.com/" type="link" id="https://developers.notifish.com/" target="_blank" rel="noreferrer noopener nofollow"><strong>Notifish via API</strong>.</a></li>



<li>Você define roteamento, deduplicação e templates</li>
</ol>



<ul class="wp-block-list">
<li>para qual número/grupo enviar</li>



<li>se deve agrupar, deduplicar, aplicar rate limit</li>



<li>qual template usar (curto, completo, escalonamento)</li>
</ul>



<p>Esse desenho escala porque você não espalha envio de WhatsApp por todo sistema. Você centraliza.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-como-fica-uma-mensagem-boa-no-whatsapp">Como fica uma mensagem boa no WhatsApp</h2>



<p>Uma mensagem útil precisa ter contexto mínimo e ação sugerida:</p>



<ul class="wp-block-list">
<li><strong>Título curto</strong> (o que aconteceu)</li>



<li><strong>Ambiente</strong> (prod, staging)</li>



<li><strong>Serviço</strong> (api, worker, site)</li>



<li><strong>Sintoma</strong> (erro, timeout, backlog)</li>



<li><strong>Impacto</strong> (estimado)</li>



<li><strong>Link</strong> (dashboard/logs, se existir)</li>



<li><strong>Ação recomendada</strong> (1 linha)</li>
</ul>



<p>Exemplo de payload humano:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>ALERTA CRÍTICO</strong>: API 5xx alto<br>Ambiente: prod | Serviço: api<br>Erros 5xx: 18% (últimos 5 min)<br>Endpoint: /api/orders<br>Ação: verificar logs + dependência “Payments”</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-implementacao-via-api-com-notifish-modelo-pratico">Implementação via API com Notifish (modelo prático)</h2>



<p>Você pode integrar de dois jeitos:</p>



<h3 class="wp-block-heading" id="h-1-seu-sistema-envia-eventos-diretamente-laravel-cron-scripts">1) Seu sistema envia eventos diretamente (Laravel, cron, scripts)</h3>



<p>Bom quando você mesmo detecta (fila, logs, métricas internas).</p>



<h3 class="wp-block-heading" id="h-2-ferramentas-externas-chamam-o-notifish-uptime-monitoramento">2) Ferramentas externas chamam o Notifish (uptime/monitoramento)</h3>



<p>Bom para health-check e métricas do servidor (quando a ferramenta já faz o “detector”).</p>



<p>Como você pediu implementação via API, vou te mostrar um modelo que funciona bem</p>



<h3 class="wp-block-heading" id="h-payload-recomendado-evento">Payload recomendado (evento)</h3>



<p></p>



<pre class="wp-block-preformatted">{<br>  "message": "Sua mensagem de alerta",<br>  "identifier": "seu identificador único de disparo",<br>  "link": true,<br>  "typing": "composing",<br>  "delayMessage": 1200<br>}<br></pre>



<p><strong>Por que esse formato funciona:</strong></p>



<ul class="wp-block-list">
<li><strong>identifier</strong>: chave de deduplicação / idempotência do alerta</li>



<li><strong>message</strong>: texto já formatado com contexto (ambiente/serviço/ação)</li>



<li><strong>delayMessage/typing</strong>: ajustes de entrega (opcionais)</li>
</ul>



<h2 class="wp-block-heading">Exemplo em Laravel enviando evento ao Notifish</h2>



<pre class="wp-block-preformatted">class NotifishClient
{
    public function sendToGroups(string $message, string $identifier, bool $link = true, int $delayMs = 0, string $typing = 'composing'): void
    {
        $url = rtrim(config('services.notifish.base_url'), '/')
            . '/api/v2/' . config('services.notifish.instance')
            . '/whatsapp/message/groups';

        $payload = [
            'message' => $message,
            'identifier' => $identifier,
            'link' => $link,
            'typing' => $typing,
            'delayMessage' => $delayMs,
        ];

        $response = Http::withToken(config('services.notifish.token'))
            ->acceptJson()
            ->contentType('application/json')
            ->timeout(8)
            ->post($url, $payload);

        if (!$response->successful()) {
            logger()->error('Notifish send failed', [
                'status' => $response->status(),
                'body' => $response->body(),
                'identifier' => $identifier,
            ]);
        }
    }
}

</pre>



<h2 class="wp-block-heading">Regras importantes para não virar caos</h2>



<p>Se você fizer só “manda mensagem”, em 2 semanas o canal morre. Algumas regras que eu considero obrigatórias:</p>



<p><strong>1) Deduplicação</strong></p>



<ul class="wp-block-list">
<li>Todo alerta precisa de <code>dedupe_key</code>.</li>



<li>Se o mesmo alerta acontecer 100 vezes, você manda 1 e “atualiza”/agrupa.</li>
</ul>



<p><strong>2) Rate limit por severidade</strong></p>



<ul class="wp-block-list">
<li>Crítico: pode repetir, mas com intervalo mínimo (ex.: 5–10 min).</li>



<li>Alerta: intervalo maior (ex.: 15–30 min).</li>



<li>Informativo: geralmente fora do WhatsApp.</li>
</ul>



<p><strong>3) Idempotência</strong></p>



<ul class="wp-block-list">
<li>Eventos iguais devem produzir o mesmo estado.</li>



<li>Se a chamada repetir, não deve disparar em duplicidade.</li>
</ul>



<p><strong>4) Conteúdo curto</strong><br>WhatsApp é leitura rápida. Se precisar detalhe, coloque em <code>meta</code> e mande link para logs/dashboard quando possível.</p>



<p><strong>5) Escalonamento</strong><br>Se continuar crítico por X tempo, notifica outro grupo/gestor.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">O que monitorar para disparar eventos úteis (fontes típicas)</h2>



<p>Você pode começar com estes gatilhos (são os que mais dão retorno):</p>



<ul class="wp-block-list">
<li><strong>Health-check HTTP</strong> (200/500, tempo de resposta, quedas)</li>



<li><strong>Taxa de erro</strong> (5xx e exceções por minuto)</li>



<li><strong>Fila</strong> (backlog, jobs failed, tempo médio)</li>



<li><strong>Banco</strong> (conexões, queries lentas, timeouts)</li>



<li><strong>Redis</strong> (latência, indisponibilidade, memória/eviction)</li>



<li><strong>Servidor</strong> (disco, load alto sustentado)</li>



<li><strong>Integrações externas</strong> (timeout e falha por janela)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Monitorar “pelo WhatsApp” não é substituir observabilidade por chat. É transformar sinais importantes em alertas acionáveis, com governança. O Notifish entra como a peça que centraliza o envio e impede que cada sistema invente seu próprio jeito de notificar.</p>



<p>Se você faz dedupe, rate limit, severidade e contexto mínimo, o WhatsApp vira um canal confiável — e não um spam de produção.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/como-monitorar-aplicacao-e-servidor-pelo-whatsapp-logs-erros-e-alertas/">Como monitorar aplicação e servidor pelo WhatsApp (logs, erros e alertas)</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/como-monitorar-aplicacao-e-servidor-pelo-whatsapp-logs-erros-e-alertas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
