{"id":24572,"date":"2019-07-16T00:00:00","date_gmt":"2019-07-16T00:00:00","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/como-app-node-js-cloud-monitoring-usa-api-mailgun\/"},"modified":"2026-09-16T14:44:17","modified_gmt":"2026-09-16T14:44:17","slug":"como-app-node-js-cloud-monitoring-usa-api-mailgun","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/como-app-node-js-cloud-monitoring-usa-api-mailgun\/","title":{"rendered":"C\u00f3mo la aplicaci\u00f3n de Node.js Cloud Monitoring utiliza la API de Mailgun para automatizar el flujo de trabajo de emails"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><i>Este art\u00edculo est\u00e1 escrito por Dan Di Spaltro, director de producto de Rackspace\u00a0<\/i><a href=\"http:\/\/www.rackspace.com\/cloud\/public\/monitoring\/\" target=\"_tabs\" rel=\"noopener noreferrer\"><i>Cloud Monitoring<\/i><\/a><i>. Cloud Monitoring te permite monitorizar cualquier servidor en cualquier centro de datos para que siempre puedas asegurarte de que la infraestructura de tu aplicaci\u00f3n est\u00e1 en perfectas condiciones. Antes de dirigir el equipo de ingenier\u00eda de Cloud Monitoring, Dan cofund\u00f3 Cloudkick, una startup de Y-Combinator centrada en la monitorizaci\u00f3n de infraestructura en la nube que Rackspace adquiri\u00f3 en 2010.\u00a0<\/i><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El equipo de ingenier\u00eda de Rackspace siempre busca formas de utilizar los productos de Rackspace en las soluciones que creamos para los clientes. Creemos que al utilizar nuestros propios productos, creamos un mejor software para nuestros clientes, ya que podemos dar nuestra opini\u00f3n al equipo que se sienta justo al otro lado del pasillo. Durante la adquisici\u00f3n de Mailgun por parte de Rackspace, tuvimos una oportunidad \u00fanica para probar el nuevo conjunto de servicios de Rackspace en nuestro producto Cloud Monitoring. Gran parte de lo que hace Cloud Monitoring cuando se produce un error es enviar un email al cliente. Estos emails pueden activarse cuando el sitio web monitorizado agota el tiempo de espera, responde con un error 404 o cuando se cumple alguna otra condici\u00f3n personalizada en tu lenguaje de alarmas. Cuando investigamos Mailgun, nuestro objetivo era habilitar de forma fiable notificaciones por email para nuestros clientes, no dominar los detalles de la creaci\u00f3n de emails, la entrega y las anal\u00edticas, tres componentes esenciales de la automatizaci\u00f3n de emails a nuestra escala. Cuando probamos Mailgun, nos impresion\u00f3 mucho. Obtuvimos los beneficios que esper\u00e1bamos e incluso algunos que no. Por ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gesti\u00f3n l\u00f3gica de rebotes: Mailgun ofrece una forma racional basada en la API para lidiar con los rebotes, que ocurren con frecuencia por muchos motivos diferentes.<\/li>\n\n\n\n<li>Anal\u00edticas y etiquetas: probamos constantemente escenarios de fallo en nuestro entorno de producci\u00f3n, as\u00ed que necesit\u00e1bamos una forma de aislar ciertas cuentas que hemos marcado como \u201cespeciales\u201d. Mailgun puede segmentar todos los informes bas\u00e1ndose en etiquetas, lo que facilita las pruebas.<\/li>\n\n\n\n<li>Trazabilidad: enviar solo un email no es suficiente para nuestro equipo. Los registros de Mailgun proporcionan una vista de principio a fin de lo que ha ocurrido exactamente con cada email.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de ver c\u00f3mo implementamos y lanzamos Mailgun, echemos un vistazo a la arquitectura de 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-2585\"><p class=\"h5 m-0\" id=\"toc-title-2585\">\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-de-cloud-monitoring\">Pipeline de 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=\"#preparacion-para-la-prueba\">Preparaci\u00f3n para la prueba<\/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=\"#simulacion-de-la-api-de-mailgun\">Simulaci\u00f3n de la API de 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=\"#reemplazo-quirurgico\">Reemplazo quir\u00fargico<\/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=\"#resumen\">Resumen<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Pipeline de Cloud Monitoring<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El sistema Cloud Monitoring de Rackspace se divide en un pipeline de diferentes servicios. A modo de recordatorio, echemos un vistazo panor\u00e1mico a la arquitectura.<\/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 paso representa uno o m\u00e1s servicios distribuidos, conectados por un flujo de datos. Utilizamos el software Scribe de Facebook para la distribuci\u00f3n punto a punto, el enrutamiento y el almacenamiento en b\u00fafer. Con ese flujo de datos, podemos dividir, analizar y distribuir los datos a cualquier rinc\u00f3n de la infraestructura que queramos. Experimentar f\u00e1cilmente con el flujo de datos es fundamental para nuestra velocidad. Nos permite enviar datos a cualquier lugar y es una parte fundamental del dise\u00f1o que respalda nuestra alta disponibilidad, as\u00ed como la aceleraci\u00f3n y el desarrollo del producto (dato curioso: por eso el nombre en clave del producto es\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\">Preparaci\u00f3n para la prueba<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En un sistema de producci\u00f3n, hacer un cambio radical nunca es buena idea, as\u00ed que decidimos adoptar un enfoque distinto. Primero introdujimos Mailgun de forma gradual en las cuentas que usamos para nuestras pruebas. Esto nos permiti\u00f3 ir m\u00e1s all\u00e1 de las microvalidaciones y las validaciones de pruebas unitarias para familiarizarnos con el sistema. Gracias a la sencilla asistencia para HTTP en Node.js, pudimos realizar esta integraci\u00f3n r\u00e1pidamente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Simulaci\u00f3n de la API de Mailgun<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Siempre que a\u00f1adimos una dependencia externa, intentamos simular la API si es posible. Simular una API externa puede ser muy sencillo o muy elaborado, pero no por ello deja de ser importante. Nuestro objetivo no es a\u00f1adir trabajo extra al equipo de desarrollo, sino mantener la confianza en nuestras interacciones con un servicio externo y en c\u00f3mo se supone que debe funcionar. Hoy en d\u00eda, la mayor\u00eda de las API tienen versiones, por lo que los cambios importantes vienen acompa\u00f1ados de un salto de versi\u00f3n. Esto nos permite simular las API de forma r\u00e1pida y segura para crear pruebas de principio a fin m\u00e1s elaboradas en un entorno controlado. Despu\u00e9s de determinar c\u00f3mo quer\u00edamos implementar la prueba en nuestra cuenta de pruebas, creamos nuestra propia API de Mailgun, lo que nos permiti\u00f3 familiarizarnos con la nueva integraci\u00f3n. Este proceso fue sumamente sencillo. La API de Mailgun ofrecida por todas las operaciones salientes y anal\u00edticas fue sencilla y directa de implementar. Solo despu\u00e9s de la simulaci\u00f3n nos dimos cuenta de que existe un modo de prueba en un entorno aislado para enviar emails, pero aun as\u00ed fue una valiosa experiencia de aprendizaje.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reemplazo quir\u00fargico<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Con los preparativos para la prueba terminados, empezamos a implementar y monitorizar el rendimiento de los emails para ganar la confianza de que Mailgun era algo que pod\u00edamos lanzar a nivel m\u00e1s amplio a nuestra base de usuarios. En la aplicaci\u00f3n Cloud Monitoring, el componente para garantizar la entrega de una alerta es un complejo elemento de software acertadamente llamado messenger. Realiza diversas tareas para aumentar la fiabilidad de nuestras notificaciones por email. A nivel interno, messenger es un pipeline de ejecuci\u00f3n por etapas. Consta de las siguientes etapas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Recibir el mensaje<\/li>\n\n\n\n<li>Bloquear el \u00e1tomo del mensaje<\/li>\n\n\n\n<li>Realizar b\u00fasquedas de cuenta\/entidad\/verificaci\u00f3n\/alarma<\/li>\n\n\n\n<li>Buscar el plan de notificaci\u00f3n<\/li>\n\n\n\n<li>Entregar las alertas<\/li>\n\n\n\n<li>Crear el email<\/li>\n\n\n\n<li>Entregar<\/li>\n\n\n\n<li>Seguimiento<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Durante la prueba, a\u00f1adimos programaci\u00f3n para observar la cuenta especial durante la etapa Entregar las alertas e iniciar el enrutamiento de mensajes a Mailgun. Este proceso fue sencillo porque implicaba muy poca programaci\u00f3n. Este es el aspecto de un fragmento:<\/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=\"#block-e4a87dc3399e011386e156ad8735cef5_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-e4a87dc3399e011386e156ad8735cef5_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=\"block-e4a87dc3399e011386e156ad8735cef5_code_0\" role=\"tabpanel\" aria-labelledby=\"block-e4a87dc3399e011386e156ad8735cef5_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=\"#block-e4a87dc3399e011386e156ad8735cef5_code_0_content\" data-clipboard-label=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\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\" tabindex=\"0\">\r\n                                <code id=\"block-e4a87dc3399e011386e156ad8735cef5_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\">\u00bfQu\u00e9 est\u00e1 pasando aqu\u00ed arriba? En primer lugar, llamamos a la funci\u00f3n sendMailgunEmail para entregar el email de notificaci\u00f3n de monitorizaci\u00f3n. En nuestro af\u00e1n por medirlo TODO, tambi\u00e9n medimos el tiempo que se tarda en usar la API de Mailgun. Y hay una serie de reintentos que envuelve esta programaci\u00f3n con una alternativa, una de las mejores pr\u00e1cticas al depender de cualquier sistema de terceros en tu aplicaci\u00f3n. \u00bfQuieres ver lo sencilla que es la funci\u00f3n sendMailgunEmail? <\/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=\"#block-98f9ca9b8eaff8fceae8b294904a84c0_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-98f9ca9b8eaff8fceae8b294904a84c0_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=\"block-98f9ca9b8eaff8fceae8b294904a84c0_code_0\" role=\"tabpanel\" aria-labelledby=\"block-98f9ca9b8eaff8fceae8b294904a84c0_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=\"#block-98f9ca9b8eaff8fceae8b294904a84c0_code_0_content\" data-clipboard-label=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\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\" tabindex=\"0\">\r\n                                <code id=\"block-98f9ca9b8eaff8fceae8b294904a84c0_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) La funci\u00f3n de solicitud abstrae en parte el tratamiento de solicitudes HTTP complejas y el manejo de c\u00f3digos de respuesta, por lo que para ello se utilizan los c\u00f3digos de <i>respuesta<\/i> esperados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2) Gestiona f\u00e1cilmente el env\u00edo de HTML, lo que por lo general supone un fastidio. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3) Incorpora encabezados para permitir una manera f\u00e1cil de enriquecer los emails. Estos encabezados nos permiten crear emails personalizados para cada perfil de usuario con detalles sobre su alerta, como alarmId, checkId y tenantId. A trav\u00e9s de estos encabezados puedes pasar casi cualquier elemento para personalizar tus emails que, por lo general, solo saturar\u00eda el cuerpo del email. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">4) Modifica un bit f\u00e1cilmente para enviar emails de prueba.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">5) Las etiquetas definidas de forma personalizada permiten el seguimiento y el filtrado anal\u00edtico que usamos en nuestros escenarios de pruebas de producci\u00f3n. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00edjate en lo f\u00e1cil que fue esto. Hemos automatizado completamente la creaci\u00f3n, la entrega y el seguimiento de emails usando Mailgun, algo que resulta dif\u00edcil con una configuraci\u00f3n tradicional de estilo \u201chazlo t\u00fa mismo\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Resumen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cambiar a una soluci\u00f3n alojada es una gran decisi\u00f3n para cualquier aplicaci\u00f3n, en especial para algo tan cr\u00edtico como las notificaciones por email. Gracias a un plan de pruebas riguroso y a la incondicional asistencia del equipo de Mailgun en todo, desde la configuraci\u00f3n de los registros DKIM hasta la integraci\u00f3n de la API, pudimos transferir con \u00e9xito todas nuestras notificaciones por email de Cloud Monitoring a Mailgun. Como ventaja adicional,\u00a0<a href=\"\/?blog_category=life-post-acquisition-a-startup-engineers-perspective\" target=\"_tabs\" rel=\"noopener noreferrer\">el equipo de Mailgun se sienta justo a mi lado<\/a>\u00a0;).\u00a0<i>P. D.: 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-79fcda7bc43d75416e1bad56ba9f76be\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                Reg\u00edstrate            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block-79fcda7bc43d75416e1bad56ba9f76be\">\r\n                Empezar es facil\u00edsimo. Y gratis.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">Descubre todo lo que puedes lograr con la mejor plataforma de entrega de emails del 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>Este art\u00edculo est\u00e1 escrito por Dan Di Spaltro, director de producto de Rackspace Cloud Monitoring. Cloud Monitoring te permite monitorizar cualquier servidor en cualquier centro de datos para que siempre puedas asegurarte de que la infraestructura de tu aplicaci\u00f3n est\u00e1 en perfectas condiciones. Antes de dirigir el equipo de ingenier\u00eda de Cloud Monitoring, Dan cofund\u00f3 Cloudkick, una startup de Y-Combinator centrada en la monitorizaci\u00f3n de infraestructura en la nube que Rackspace adquiri\u00f3 en 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-24572","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>C\u00f3mo la aplicaci\u00f3n de Node.js Cloud Monitoring utiliza la API de Mailgun | Mailgun<\/title>\n<meta name=\"description\" content=\"Durante la adquisici\u00f3n de Mailgun por parte de Rackspace, Rackspace tuvo una oportunidad \u00fanica para probar su nuevo conjunto de servicios en su producto Cloud Monitoring. M\u00e1s informaci\u00f3n \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\/es\/blog\/it-and-engineering\/como-app-node-js-cloud-monitoring-usa-api-mailgun\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo la aplicaci\u00f3n de Node.js Cloud Monitoring utiliza la API de Mailgun | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Durante la adquisici\u00f3n de Mailgun por parte de Rackspace, Rackspace tuvo una oportunidad \u00fanica para probar su nuevo conjunto de servicios en su producto Cloud Monitoring. M\u00e1s informaci\u00f3n \u2013\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/como-app-node-js-cloud-monitoring-usa-api-mailgun\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-16T14:44:17+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\\\/es\\\/blog\\\/it-and-engineering\\\/como-app-node-js-cloud-monitoring-usa-api-mailgun\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/como-app-node-js-cloud-monitoring-usa-api-mailgun\\\/\",\"name\":\"C\u00f3mo la aplicaci\u00f3n de Node.js Cloud Monitoring utiliza la API de Mailgun | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/como-app-node-js-cloud-monitoring-usa-api-mailgun\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/como-app-node-js-cloud-monitoring-usa-api-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-16T14:44:17+00:00\",\"description\":\"Durante la adquisici\u00f3n de Mailgun por parte de Rackspace, Rackspace tuvo una oportunidad \u00fanica para probar su nuevo conjunto de servicios en su producto Cloud Monitoring. M\u00e1s informaci\u00f3n \u2013\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/como-app-node-js-cloud-monitoring-usa-api-mailgun\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/como-app-node-js-cloud-monitoring-usa-api-mailgun\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/como-app-node-js-cloud-monitoring-usa-api-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\\\/es\\\/blog\\\/it-and-engineering\\\/como-app-node-js-cloud-monitoring-usa-api-mailgun\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"C\u00f3mo la aplicaci\u00f3n de Node.js Cloud Monitoring utiliza la API de Mailgun para automatizar el flujo de trabajo de emails\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Potentes API de email transaccional que te permiten enviar, recibir y hacer seguimiento de emails, creadas pensando en los desarrolladores. \u00a1Descubre m\u00e1s!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#\\\/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\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C\u00f3mo la aplicaci\u00f3n de Node.js Cloud Monitoring utiliza la API de Mailgun | Mailgun","description":"Durante la adquisici\u00f3n de Mailgun por parte de Rackspace, Rackspace tuvo una oportunidad \u00fanica para probar su nuevo conjunto de servicios en su producto Cloud Monitoring. M\u00e1s informaci\u00f3n \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\/es\/blog\/it-and-engineering\/como-app-node-js-cloud-monitoring-usa-api-mailgun\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo la aplicaci\u00f3n de Node.js Cloud Monitoring utiliza la API de Mailgun | Mailgun","og_description":"Durante la adquisici\u00f3n de Mailgun por parte de Rackspace, Rackspace tuvo una oportunidad \u00fanica para probar su nuevo conjunto de servicios en su producto Cloud Monitoring. M\u00e1s informaci\u00f3n \u2013","og_url":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/como-app-node-js-cloud-monitoring-usa-api-mailgun\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","article_modified_time":"2026-09-16T14:44:17+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\/es\/blog\/it-and-engineering\/como-app-node-js-cloud-monitoring-usa-api-mailgun\/","url":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/como-app-node-js-cloud-monitoring-usa-api-mailgun\/","name":"C\u00f3mo la aplicaci\u00f3n de Node.js Cloud Monitoring utiliza la API de Mailgun | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/como-app-node-js-cloud-monitoring-usa-api-mailgun\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/como-app-node-js-cloud-monitoring-usa-api-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-16T14:44:17+00:00","description":"Durante la adquisici\u00f3n de Mailgun por parte de Rackspace, Rackspace tuvo una oportunidad \u00fanica para probar su nuevo conjunto de servicios en su producto Cloud Monitoring. M\u00e1s informaci\u00f3n \u2013","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/como-app-node-js-cloud-monitoring-usa-api-mailgun\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/como-app-node-js-cloud-monitoring-usa-api-mailgun\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/como-app-node-js-cloud-monitoring-usa-api-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\/es\/blog\/it-and-engineering\/como-app-node-js-cloud-monitoring-usa-api-mailgun\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/es\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/es\/blog\/"},{"@type":"ListItem","position":3,"name":"C\u00f3mo la aplicaci\u00f3n de Node.js Cloud Monitoring utiliza la API de Mailgun para automatizar el flujo de trabajo de emails"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/es\/#website","url":"https:\/\/www.mailgun.com\/es\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Potentes API de email transaccional que te permiten enviar, recibir y hacer seguimiento de emails, creadas pensando en los desarrolladores. \u00a1Descubre m\u00e1s!","publisher":{"@id":"https:\/\/www.mailgun.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/es\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/#\/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\/es\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/24572","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/users\/13"}],"version-history":[{"count":1,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/24572\/revisions"}],"predecessor-version":[{"id":24574,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/24572\/revisions\/24574"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media\/4843"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media?parent=24572"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog_category?post=24572"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}