{"id":24852,"date":"2019-07-16T00:00:00","date_gmt":"2019-07-16T00:00:00","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\/"},"modified":"2026-09-16T17:52:31","modified_gmt":"2026-09-16T17:52:31","slug":"como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\/","title":{"rendered":"Como o app Node.js Cloud Monitoring usa a API do Mailgun para automatizar o fluxo de trabalho de e-mail"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><i>Esta postagem foi escrita por Dan Di Spaltro, diretor de produto da Rackspace\u00a0<\/i><a href=\"http:\/\/www.rackspace.com\/cloud\/public\/monitoring\/\" target=\"_tabs\" rel=\"noopener noreferrer\"><i>Cloud Monitoring<\/i><\/a><i>. O Cloud Monitoring permite que voc\u00ea monitore qualquer servidor em qualquer data center para que possa sempre ter certeza de que a infraestrutura do seu aplicativo est\u00e1 funcionando perfeitamente. Antes de liderar a equipe de engenharia do Cloud Monitoring, Dan foi cofundador da Cloudkick, uma startup da Y-Combinator focada no monitoramento de infraestrutura em nuvem que foi adquirida pela Rackspace em 2010.\u00a0<\/i><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A equipe de engenharia da Rackspace est\u00e1 sempre em busca de maneiras de usar os produtos da Rackspace nas solu\u00e7\u00f5es que criamos para clientes. Acreditamos que, quando usamos nossos pr\u00f3prios produtos, criamos softwares melhores para nossos clientes porque podemos fornecer feedback \u00e0 equipe que trabalha na sala ao lado. Durante a aquisi\u00e7\u00e3o do Mailgun pela Rackspace, tivemos uma oportunidade \u00fanica de testar o mais novo conjunto de servi\u00e7os da Rackspace no nosso produto Cloud Monitoring. Grande parte do que o Cloud Monitoring faz quando ocorre um erro \u00e9 enviar um e-mail para o cliente. Esses e-mails podem ser acionados quando o site monitorado atinge o tempo limite, responde com um erro 404 ou quando alguma outra condi\u00e7\u00e3o definida pelo usu\u00e1rio em sua Alarm Language \u00e9 atendida. Quando investigamos o Mailgun, nosso objetivo era habilitar notifica\u00e7\u00f5es de e-mail de forma confi\u00e1vel para nossos clientes, e n\u00e3o dominar os detalhes de cria\u00e7\u00e3o, entrega e an\u00e1lises de e-mail, tr\u00eas componentes essenciais da automa\u00e7\u00e3o de e-mail em nossa escala. Quando testamos o Mailgun, ficamos muito impressionados. Obtivemos os benef\u00edcios que esper\u00e1vamos e at\u00e9 alguns que n\u00e3o imagin\u00e1vamos. Por exemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Devolu\u00e7\u00f5es sensatas \u2013 o Mailgun oferece uma maneira racional baseada em API para lidar com devolu\u00e7\u00f5es que acontecem frequentemente por v\u00e1rios motivos diferentes.<\/li>\n\n\n\n<li>An\u00e1lises e tags \u2013 testamos constantemente cen\u00e1rios de falha em nosso ambiente de produ\u00e7\u00e3o, por isso precis\u00e1vamos de uma forma de isolar determinadas contas que marcamos como &#8220;especiais&#8221;. O Mailgun pode segmentar todos os relat\u00f3rios com base em tags, o que facilita os testes.<\/li>\n\n\n\n<li>Responsabilidade \u2013 apenas enviar um e-mail n\u00e3o \u00e9 suficiente para n\u00f3s. Os logs do Mailgun fornecem uma vis\u00e3o de ponta a ponta de exatamente o que aconteceu com cada e-mail.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de analisar como implementamos e lan\u00e7amos o Mailgun, vejamos a arquitetura do Cloud Monitoring<\/p>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-6409\"><p class=\"h5 m-0\" id=\"toc-title-6409\">\u00cdndice<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#pipeline-do-cloud-monitoring\">Pipeline do Cloud Monitoring<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#preparacao-para-o-teste\">Prepara\u00e7\u00e3o para o teste<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#simulacao-da-api-do-mailgun\">Simula\u00e7\u00e3o da API do Mailgun<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">04<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#substituicao-cirurgica\">Substitui\u00e7\u00e3o cir\u00fargica<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">05<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#resumo\">Resumo<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Pipeline do Cloud Monitoring<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O sistema Rackspace Cloud Monitoring \u00e9 dividido em um pipeline de diferentes servi\u00e7os; apenas para relembrar, vejamos uma vis\u00e3o panor\u00e2mica da arquitetura.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4902\" width=\"500\" height=\"375\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/chart.jpg\" alt=\"chart\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/chart.jpg 500w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/chart-300x225.jpg 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Cada etapa representa um ou mais servi\u00e7os distribu\u00eddos, conectados por um fluxo de dados. Usamos o software Scribe do Facebook para distribui\u00e7\u00e3o ponto a ponto, roteamento e armazenamento em buffer. Com esse fluxo de dados, podemos fatiar, dividir e distribuir os dados para qualquer canto da infraestrutura que quisermos. A facilidade de experimenta\u00e7\u00e3o com o fluxo de dados \u00e9 fundamental para nossa velocidade. Ele nos permite enviar dados para qualquer lugar e \u00e9 uma parte essencial do design que d\u00e1 suporte \u00e0 nossa alta disponibilidade, bem como \u00e0 acelera\u00e7\u00e3o e ao desenvolvimento do produto (curiosidade: \u00e9 por isso que o produto tem o codinome de\u00a0<a href=\"http:\/\/en.wikipedia.org\/wiki\/E.L.E._(Extinction_Level_Event):_The_Final_World_Front\" target=\"_tabs\" rel=\"noopener noreferrer\">ELE<\/a>.).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prepara\u00e7\u00e3o para o teste<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para um sistema de produ\u00e7\u00e3o, a mudan\u00e7a em grande escala nunca \u00e9 uma boa ideia, ent\u00e3o decidimos adotar uma abordagem diferente. Primeiro, implementamos o Mailgun gradualmente nas contas que usamos para nossos testes. Isso nos permitiu ir al\u00e9m das microvalida\u00e7\u00f5es e valida\u00e7\u00f5es de testes de unidade para nos familiarizarmos com o sistema. Gra\u00e7as ao f\u00e1cil suporte para HTTP no Node.js, conseguimos realizar essa integra\u00e7\u00e3o rapidamente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Simula\u00e7\u00e3o da API do Mailgun<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Toda vez que adicionamos uma depend\u00eancia externa, tentamos fazer o mock da API, se poss\u00edvel. Fazer o mock de uma API externa pode ser muito simples ou muito elaborado, mas ainda assim importante. Nosso objetivo n\u00e3o \u00e9 adicionar trabalho extra para a equipe de desenvolvimento, mas manter a confian\u00e7a em nossas intera\u00e7\u00f5es com um servi\u00e7o externo e como ele deve funcionar. Hoje em dia, a maioria das APIs tem controle de vers\u00e3o, por isso grandes mudan\u00e7as v\u00eam com uma atualiza\u00e7\u00e3o de vers\u00e3o. Isso nos permite fazer o mock de APIs de forma r\u00e1pida e confi\u00e1vel para criar testes de ponta a ponta mais elaborados em um ambiente controlado. Depois de determinar como quer\u00edamos lan\u00e7ar o teste em nossa conta de testes, criamos nossa pr\u00f3pria API do Mailgun, o que nos permitiu nos familiarizar com a nova integra\u00e7\u00e3o. Esse processo foi muito simples. A API do Mailgun oferecida por todas as opera\u00e7\u00f5es de sa\u00edda e an\u00e1lises foi simples e direta de implementar. Somente depois de fazer o mock \u00e9 que percebemos que havia um modo de teste na sandbox para enviar e-mails, mas, de qualquer forma, foi uma experi\u00eancia de aprendizado valiosa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Substitui\u00e7\u00e3o cir\u00fargica<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Com as prepara\u00e7\u00f5es para o teste conclu\u00eddas, come\u00e7amos a implementar e monitorar o desempenho dos e-mails para ganhar a confian\u00e7a de que o Mailgun era algo que poder\u00edamos lan\u00e7ar de forma mais ampla para nossos usu\u00e1rios. No aplicativo Cloud Monitoring, o componente para garantir a entrega de um alerta \u00e9 um software complexo apropriadamente chamado de messenger. Ele realiza v\u00e1rias tarefas para aumentar a confiabilidade das nossas notifica\u00e7\u00f5es de e-mail. Internamente, o messenger \u00e9 um pipeline de execu\u00e7\u00e3o em est\u00e1gios. Ele tem as seguintes etapas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Receber a mensagem<\/li>\n\n\n\n<li>Bloquear o \u00e1tomo da mensagem<\/li>\n\n\n\n<li>Realizar pesquisas de conta\/entidade\/verifica\u00e7\u00e3o\/alarme<\/li>\n\n\n\n<li>Encontrar o plano de notifica\u00e7\u00e3o<\/li>\n\n\n\n<li>Entregar alertas<\/li>\n\n\n\n<li>Criar e-mail<\/li>\n\n\n\n<li>Entregar<\/li>\n\n\n\n<li>Rastrear<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Durante o teste, adicionamos c\u00f3digo para analisar a conta especial durante a etapa de entregar alertas e come\u00e7ar a rotear mensagens para o Mailgun. Esse processo foi simples porque envolveu pouco c\u00f3digo. Veja como \u00e9 um snippet:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    if (tenantId === &#039;XXX&#039;) {rn    emailUtil.sendMailgunEmail(address, subject, body, { headers: headers }, function (err, res) {rn        var delta = (Date.now() - startTime);rnrn        accessLog.logAccess(ctx, &#039;mailgun&#039;, misc.getUnixTimestamp(), delta, err);rnrn        if (err) {rn            log.error(&#039;error performing email notification&#039;, { ctx: ctx, err: err });rn            callback(err);rn            return;rn        }rnrn        callback(null, &#039;Email successfully sent&#039;, body);rn    });rn} else {rn    \/\/ ...rn}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">O que est\u00e1 acontecendo acima? Primeiro, chamamos a fun\u00e7\u00e3o sendMailgunEmail para entregar o e-mail de notifica\u00e7\u00e3o de monitoramento. Na busca de medir TUDO, tamb\u00e9m medimos o tempo que leva para usar a API do Mailgun. E h\u00e1 uma s\u00e9rie de novas tentativas que envolve esse c\u00f3digo com uma op\u00e7\u00e3o de fallback, uma das pr\u00e1ticas recomendadas ao depender de qualquer sistema de terceiros no seu aplicativo. Quer ver como a fun\u00e7\u00e3o sendMailgunEmail \u00e9 simples? <\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    exports.sendMailGunEmail = function(address, subject, body, options, callback) {rn    options = options || {};rn    options.headers = options.headers || {};rn    options.apiUrl = options.apiUrl || settings.MAILGUN_API_URL;rn    options.domain = options.domain || settings.MAILGUN_DOMAIN;rn    options.apiKey = options.apiKey || settings.MAILGUN_API_KEY;rn    options.fromAddress = options.fromAddress || settings.MAILGUN_FROM_ADDRESS;rn    options.testMode = options.testMode || settings.MAILGUN_TEST_MODE;rnrn    var url = options.apiUrl + options.domain + &#039;\/messages&#039;,rn        bodyObj, k, httpOptions;rnrn    httpOptions = { \/\/ 1) set up some defaultsrn        &#039;expected_status_codes&#039;: [200],rn        &#039;return_response&#039;: true,rn        &#039;parse_json&#039;: true,rn        &#039;username&#039;: &#039;api&#039;,rn        &#039;password&#039;: options.apiKey,rn        &#039;headers&#039;: { &#039;Content-Type&#039;: &#039;application\/x-www-form-urlencoded&#039; }rn    };rnrn    bodyObj = {rn        &#039;to&#039;: address,rn        &#039;subject&#039;: subject,rn        &#039;from&#039;: options.fromAddressrn    };rnrn    if (options.isHTML) { \/\/ 2) switch based on the content type we want to sendrn        bodyObj.html = body;rn    } else {rn        bodyObj.text = body;rn    }rnrn    for (k in options.headers) { \/\/ 3) merge in the headers so we can provide id\u2019s as headers in the emailsrn        if (options.headers.hasOwnProperty(k)) {rn            bodyObj[&#039;h:&#039; + k] = options.headers[k];rn        }rn    }rnrn    if (options.testMode) { \/\/ 4) enable sandbox testingrn        bodyObj[&#039;o:testmode&#039;] = true;rn    }rnrn    if (options.tags) { rn        \/\/ 5) set some tags to automatically pivot analytics for visibility.rn        \/\/ (we view reporting in the Mailgun control panel but data is also available via API or webhook)rn        bodyObj[&#039;o:tag&#039;] = options.tags;rn    }rnrn    body = querystring.stringify(bodyObj);rn    request(url, &#039;POST&#039;, body, httpOptions, callback);rn};\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">1) A fun\u00e7\u00e3o request abstrai um pouco a forma de lidar com solicita\u00e7\u00f5es HTTP complexas e o tratamento de c\u00f3digos de resposta, de modo que os c\u00f3digos de <i>response<\/i> esperados s\u00e3o usados para isso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2) Lide facilmente com o envio de HTML, que geralmente \u00e9 um problema. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3) Mescle cabe\u00e7alhos, permitindo uma maneira f\u00e1cil de enriquecer e-mails. Esses cabe\u00e7alhos nos permitem criar e-mails personalizados para cada usu\u00e1rio com detalhes sobre o seu alerta, como alarmId, checkId e tenantId. Voc\u00ea pode passar quase qualquer coisa para personalizar seus e-mails nesses cabe\u00e7alhos, que normalmente apenas poluiriam o corpo do e-mail. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">4) Inverta facilmente um bit para enviar e-mails de teste.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">5) As tags definidas pelo usu\u00e1rio permitem o rastreamento e a segmenta\u00e7\u00e3o anal\u00edtica usados em nossos cen\u00e1rios de testes de produ\u00e7\u00e3o. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Veja como foi f\u00e1cil. Automatizamos totalmente a cria\u00e7\u00e3o, a entrega e o rastreamento de e-mails usando o Mailgun, algo que \u00e9 dif\u00edcil com uma configura\u00e7\u00e3o tradicional no estilo &#8220;fa\u00e7a voc\u00ea mesmo&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Resumo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mudar para uma oferta hospedada \u00e9 uma grande decis\u00e3o para qualquer aplicativo, especialmente em algo t\u00e3o essencial quanto notifica\u00e7\u00f5es de e-mail. Com um plano de teste rigoroso e um suporte excelente da equipe do Mailgun em tudo, desde a configura\u00e7\u00e3o de registros DKIM at\u00e9 a integra\u00e7\u00e3o com a API, conseguimos transferir com sucesso todas as nossas notifica\u00e7\u00f5es de e-mail do Cloud Monitoring para o Mailgun. Um b\u00f4nus adicional,\u00a0<a href=\"\/?blog_category=life-post-acquisition-a-startup-engineers-perspective\" target=\"_tabs\" rel=\"noopener noreferrer\">a equipe do Mailgun trabalha bem do meu lado<\/a>\u00a0;).\u00a0<i>PS Estamos\u00a0<\/i><a href=\"https:\/\/apply.workable.com\/mailgun\/?lng=en\" target=\"_tabs\" rel=\"noopener noreferrer\"><i>contratando<\/i><\/a><i>!<\/i><\/p>\n\n\n\r\n    <aside data-content-type=\"longform\"  class=\"banner-block longform-spacings rounded-lg shadow-lg px-5 py-6 px-md-6 py-md-7 p-lg-7 bg-light\" data-theme=\"dark\" aria-labelledby=\"banner-block-block_12ede6d79211bba380eee394b119bcc8\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                Cadastre-se            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_12ede6d79211bba380eee394b119bcc8\">\r\n                \u00c9 f\u00e1cil come\u00e7ar. E \u00e9 gr\u00e1tis.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">Veja o que voc\u00ea pode alcan\u00e7ar com a melhor plataforma de entrega de e-mail do mundo.<\/div>\r\n                            <\/div>\r\n        \r\n        <div class=\"text-start mt-5\"><a href=\"https:\/\/signup.mailgun.com\/new\/signup\"  class=\"btn btn-secondary\" >Get started<\/a><\/div>\r\n    <\/aside>\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>Esta postagem foi escrita por Dan Di Spaltro, diretor de produto do Rackspace Cloud Monitoring. O Cloud Monitoring permite que voc\u00ea monitore qualquer servidor em qualquer data center para que possa sempre ter certeza de que a infraestrutura do seu aplicativo est\u00e1 funcionando perfeitamente. Antes de liderar a equipe de engenharia do Cloud Monitoring, Dan foi cofundador da Cloudkick, uma startup da Y-Combinator focada no monitoramento de infraestrutura em nuvem que foi adquirida pela Rackspace em 2010.<\/p>\n","protected":false},"author":13,"featured_media":4843,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[23],"class_list":["post-24852","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-it-and-engineering"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Como o app Node.js Cloud Monitoring usa a API do Mailgun | Mailgun<\/title>\n<meta name=\"description\" content=\"Durante a aquisi\u00e7\u00e3o do Mailgun pela Rackspace, a empresa teve uma oportunidade \u00fanica de testar seu mais novo conjunto de servi\u00e7os em seu produto Cloud Monitoring. Leia mais \u2013\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como o app Node.js Cloud Monitoring usa a API do Mailgun | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Durante a aquisi\u00e7\u00e3o do Mailgun pela Rackspace, a empresa teve uma oportunidade \u00fanica de testar seu mais novo conjunto de servi\u00e7os em seu produto Cloud Monitoring. Leia mais \u2013\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-16T17:52:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"448\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\\\/\",\"name\":\"Como o app Node.js Cloud Monitoring usa a API do Mailgun | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"datePublished\":\"2019-07-16T00:00:00+00:00\",\"dateModified\":\"2026-09-16T17:52:31+00:00\",\"description\":\"Durante a aquisi\u00e7\u00e3o do Mailgun pela Rackspace, a empresa teve uma oportunidade \u00fanica de testar seu mais novo conjunto de servi\u00e7os em seu produto Cloud Monitoring. Leia mais \u2013\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/inicio\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Como o app Node.js Cloud Monitoring usa a API do Mailgun para automatizar o fluxo de trabalho de e-mail\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Poderosas APIs de e-mail transacional que permitem a voc\u00ea enviar, receber e rastrear e-mails, criadas com os desenvolvedores em mente. Saiba mais hoje mesmo!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Como o app Node.js Cloud Monitoring usa a API do Mailgun | Mailgun","description":"Durante a aquisi\u00e7\u00e3o do Mailgun pela Rackspace, a empresa teve uma oportunidade \u00fanica de testar seu mais novo conjunto de servi\u00e7os em seu produto Cloud Monitoring. Leia mais \u2013","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\/","og_locale":"pt_BR","og_type":"article","og_title":"Como o app Node.js Cloud Monitoring usa a API do Mailgun | Mailgun","og_description":"Durante a aquisi\u00e7\u00e3o do Mailgun pela Rackspace, a empresa teve uma oportunidade \u00fanica de testar seu mais novo conjunto de servi\u00e7os em seu produto Cloud Monitoring. Leia mais \u2013","og_url":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","article_modified_time":"2026-09-16T17:52:31+00:00","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\/","url":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\/","name":"Como o app Node.js Cloud Monitoring usa a API do Mailgun | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","datePublished":"2019-07-16T00:00:00+00:00","dateModified":"2026-09-16T17:52:31+00:00","description":"Durante a aquisi\u00e7\u00e3o do Mailgun pela Rackspace, a empresa teve uma oportunidade \u00fanica de testar seu mais novo conjunto de servi\u00e7os em seu produto Cloud Monitoring. Leia mais \u2013","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/como-o-app-node-js-cloud-monitoring-usa-a-api-do-mailgun\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/pt\/inicio\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/pt\/blog\/"},{"@type":"ListItem","position":3,"name":"Como o app Node.js Cloud Monitoring usa a API do Mailgun para automatizar o fluxo de trabalho de e-mail"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/pt\/#website","url":"https:\/\/www.mailgun.com\/pt\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Poderosas APIs de e-mail transacional que permitem a voc\u00ea enviar, receber e rastrear e-mails, criadas com os desenvolvedores em mente. Saiba mais hoje mesmo!","publisher":{"@id":"https:\/\/www.mailgun.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/pt\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/pt\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/24852","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/users\/13"}],"version-history":[{"count":1,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/24852\/revisions"}],"predecessor-version":[{"id":24853,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/24852\/revisions\/24853"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media\/4843"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media?parent=24852"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog_category?post=24852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}