Dec 3rd, 2019: [ES] Como utilizar Elasticsearch para procesar la actividad de Mailgun

Introducción

Mailgun es un proveedor que ofrece un servicio SaaS para enviar y recibir e-mails, procesar unsubscribes, y llevar un seguimiento de cada transacción que ocurre a través de su plataforma. Mailgun ofrece una interfaz que permite analizar los detalles de cada transacción (por ej. resultado de la entrega). Ésta información es sumamente útil no solo para generar reportes, sino también para responder preguntas acerca del resultado de los envíos. El hecho de que Mailgun tenga control de esta información genera varios problemas como por ejemplo que sea necesario tener una cuenta en Mailgun para acceder a esta información, y si bien la interfaz permite investigar transacciones, la misma es muy limitada. Asimismo, Mailgun solo retiene los registros por un corto plazo.

A continuación, les voy a explicar cómo pueden hacer para configurar Mailgun para enviar un informe de cada transacción a su despliegue de Elasticsearch, y de esta manera aprovechar de varios beneficios como:

  • Control sobre la retención - Ud. define por cuánto tiempo quiere retener la información sobre las transacciones.
  • Visualización - ahora que tiene la información en sus manos, puede generar paneles, búsquedas y alertas.
  • Fácil acceso - es solo cuestión de crear el rol y usuarios en Kibana que otorguen el acceso correspondiente.

Mailgun permite enviar cada informe en formato JSON a la dirección URL deseada, lo cual es ideal ya que Elasticsearch está diseñado para consumir documentos en formato JSON.

Vale aclarar que ésta técnica no solo sirve para Mailgun sino para cualquier servicio que sepa hacer llamadas POST en formato JSON (por ej. IFTTT).

1. Crear un despliegue de Elasticsearch y Kibana

Para que Mailgun pueda enviar informes, es necesario contar con un despliegue de Elasticsearch a la que se pueda acceder a través de Internet. Si no cuenta con un despliegue de éstas características, puede crear uno a través de nuestro servicio de Elastic Cloud.

2. Configurar ILM (Index Lifecycle Management)

Éste paso no es absolutamente necesario a menos que se desee tener control sobre el ciclo de vida de los indices que almacenan la información enviada por Mailgun, y en tal caso le sugerimos configurar una política de ILM. Para empezar, hay una guía para configurar ILM. Los siguientes pasos asumen que tanto el alias como la política de ILM se llaman mailgun-events.

3. Crear un rol y usuario para Mailgun

Dado que es necesario ingresar el usuario y contraseña de Elasticsearch en la configuración de Mailgun, le recomendamos crear un rol y usuario que solo tenga acceso para crear documentos en un determinado índice/alias. Por ejemplo:

POST /_security/role/mailgun-wo
{
  "applications" : [ ],
  "cluster" : [ ],
  "indices" : [ {
    "names" : [ "mailgun-events" ],
    "privileges" : [ "write" ],
    "allow_restricted_indices" : false
  } ],
  "metadata" : { },
  "run_as" : [ ],
  "transient_metadata" : {
    "enabled" : true
  }
}

... y el usuario:

POST /_security/user/mailgun-wo
{
  "email" : "foo@bar.com",
  "enabled" : true,
  "full_name" : "mailgun write-only",
  "metadata" : { },
  "roles" : [ "mailgun_wo" ],
  "username" : "mailgun-wo",
  "password" : "<random pw>"
}

4. Crear un index template

Por defecto, Elasticsearch trata de adivinar qué tipo de datos contiene el documento (esto se llama Dynamic field mapping), pero no siempre predice el tipo de campo en el documento correctamente (por ejemplo si un campo contiene una dirección IP, Elasticsearch lo va a detectar como un string y guardar como un text field).

Sugerimos continuar con las instrucciones de éste artículo, y una vez recibido el primer informe desde Mailgun, se podrá obtener un mapeado del índice y modificarlo a gusto para crear el index template.

5. Configurar los webhooks de Mailgun

Ahora falta la última parte - configurar Mailgun para enviar los informes a Elasticsearch!

  1. Abrir https://app.mailgun.com e ingresar su usuario/contraseña
  2. Hacer click en "Sending" (mano izquierda) y luego "Webhooks"
  3. Hacer click en "Add Webhook" (arriba a la derecha)
  4. En el pop-up, seleccionar el Event Type (delivered, temporary/permanent failure)
  5. En el campo URL, ingresar el URL de Elasticsearch incluyendo el índice/alias. Por ejemplo, para un despliegue alojado en “us-east-1” de Elastic Cloud: https://mailgun-wo:<PASSWORD>@<ID>.us-east-1.aws.found.io:9243/mailgun-events/_doc/
  6. Repetir los pasos 3-5 para cada Event Type

6. Test!

Si no hay actividad en su cuenta de Mailgun, intente mandar un email de prueba y si todo funciona bien, debería ver el documento en Discover dentro de su Kibana.

Con ésta información disponible en sus manos, tiene la posibilidad de crear los dashboards y alertas que necesite. Por ejemplo, en unos pocos clicks podría crear un dashboard así:


Esperamos que le haya sido útil este artículo.

Muchas gracias!!

2 Likes