https://d226lax1qjow5r.cloudfront.net/blog/blogposts/integrate-vonage-with-grafana-to-receive-notifications-by-sms/grafana-updates.png

Integra Vonage con Grafana para recibir notificaciones por SMS

Publicado el November 21, 2023

Tiempo de lectura: 15 minutos

Introducción

Grafana es una plataforma abierta de observabilidad multiplataforma que los desarrolladores pueden utilizar para realizar un seguimiento de las métricas de aplicaciones o sistemas en la nube. Genera análisis y visualización de las métricas con tablas, gráficos y alertas. Este artículo mostrará cómo integrar Vonage con una configuración de Grafana para recibir notificaciones por SMS mediante la API Messages API de Vonage.

El lenguaje de instrucción será Python. El conocimiento compartido a través del artículo propuesto sería útil para los equipos de DevOps, SREs y administradores de sistemas que confían en Grafana para notificarles de actividades y ocurrencias inusuales en su sistema.

Contenido

Paso 1: Configurar la pila de Grafana

Grafana te permite configurar tu propia instancia de Grafana en tu máquina o servidor local. Alternativamente, puede utilizar Grafana en la nube al se registre una nueva Account. Por lo tanto, no tendrás que instalar ni mantener tu instancia de Grafana, ya que está basada y gestionada en la nube.

Crear un cuadro de mando

En este tutorial, construirás un dashboard simple usando la fuente de datos incorporada Grafana --. Para un nuevo usuario de Grafana, Grafana solicita un flujo de trabajo por primera vez para guiarlo en la creación de un nuevo panel de control. Puedes seguir los pasos de las indicaciones o los pasos destacados en esta sección del artículo. Puedes saltarte esta sección si ya estás familiarizado con Grafana.

  1. Haga clic en Cuadros de mando en el menú de la izquierda para ir a la página Cuadros de mando.

  2. Haga clic en el botón Nuevo para obtener un menú desplegable de opciones y seleccione Nuevo panel

  3. En la página Nuevo cuadro de mando, haga clic en + Añadir visualización para abrir un modelo para elegir una fuente de datos.

  4. Seleccione un modal de fuente de datos y seleccione la opción -- Grafana -- a la derecha.

Select Data Sourceselect-data-source.png

Al seleccionar -- Grafana que es la fuente de datos de Grafana incorporada por defecto, ocurren dos cosas:

- Grafana configures your query 
- Grafana generates the Random Walk dashboard.
  1. Ahora puede hacer clic en el icono Actualizar panel de la siguiente imagen para consultar la fuente de datos.

Create Contact Pointcreate-contact-point.png

  1. A continuación, haga clic en Guardar en la esquina superior derecha. Se le pedirá que introduzca un nombre para el panel antes de guardarlo.

Ahora deberías tener un dashboard básico configurado en tu Account de Grafana. Puedes seguir explorando Grafana añadiendo fuentes de datos para crear cuadros de mando para otros proyectos.

Paso 2: Crear una aplicación Python para la implementación de la lógica

Necesita instalar Flask para alimentar el script Python que utilizarás en este tutorial. Puedes ejecutar el siguiente comando en tu terminal para instalar Flask.

pip install flask

Escribir la primera función de Python

Ahora, configurarás un webhook de Flask para recibir alertas de Grafana.

Crea un archivo, notify.py, y añade el siguiente código Python.

from flask import Flask, request

app = Flask(__name__)

@app.route("/grafana-webhook", methods=["POST"])

def grafana_webhook():

    if request.method == "POST":

        data = request.json

        alert_description = data["alerts"][0]["annotations"]["desc"]

        print(alert_description)

        return "Webhook received!"

if __name__ == "__main__":

    app.run(host="", port=3000, debug=True)

En el código anterior:

  • creado una POST ruta, /grafana-webhook

  • La ruta decora la función grafana_webhook, un punto final POST para recibir peticiones POST.

  • extrajo el alert_description de la carga útil de la solicitud

  • Uno de los atributos extraídos, alert_summary, se imprime en la consola en tiempo de ejecución mediante la función print().

  • Ha designado el puerto 3000 para que se ejecute la aplicación. Hacer esto permitirá mapear el puerto de la aplicación con el puerto donde se ejecutaría Ngrok. De esta manera, la aplicación se sirve a través del servidor Ngrok.

Para ejecutar la aplicación localmente, utilice el siguiente comando bash en su terminal:

python notify.py 3000

Debería obtener una salida de terminal como la siguiente, lo que significa que hay un servidor de desarrollo activo:

* Serving Flask app 'notify' * Debug mode: on WARNING: This is a development server. Please do not use it in a production deployment. Use a production WSGI server instead. * Running on http://127.0.0.1:3000 Press CTRL+C to quit * Restarting with stat * Debugger is active! * Debugger PIN: 144-577-375

Configurar el servidor Ngrok

A continuación, puede instalar Ngrok, un servidor en línea ligero para probar la aplicación Python. Te permitirá servir tu script Python a través de la Internet pública. Siga las instrucciones de instalación en el sitio web oficial sitio web para instalarlo.

Puede ejecutar Ngrok con el siguiente comando de terminal, y pondrá en marcha un servidor ligero para usted:

ngrok http 3000

Ejecutar el comando anterior pone en marcha un servidor ligero para usted, y verá su URL pública en su terminal como la siguiente:

https://d5fs-104-25-63-145.eu.ngrok.io -> http://localhost:3000

Esto implica que su webhook endpoint basado en su script Python es el siguiente:

https://d5fs-104-25-63-145.eu.ngrok.io/grafana-webhook

Esta será tu URL dedicada para que Grafana envíe notificaciones webhook a tu aplicación Python.

Conectar Grafana con la aplicación Python

Para conectar Grafana con tu aplicación Python, especificarás la URL de webhook a través de la cual Grafana puede enviar sus alertas a tu aplicación. Ya que tienes una URL de webhook para este propósito, la agregarás a los puntos de contacto de Alertas en tu tablero de Grafana. Sigue los siguientes pasos para configurar tus Alertas de Grafana con el webhook de tu aplicación.

  1. En el menú principal de Grafana, vaya a Alertas e IRM > Alertascomo se muestra en la siguiente captura de pantalla.

Alerting Menualerting-menu.png

  1. Haga clic en Puntos de contacto en la página de Alertas para ir a los Puntos de contacto como se muestra en la siguiente captura de pantalla. Haga clic en + Añadir punto de contacto Añadir punto de contacto. Accederá a la página Crear punto de contacto en la siguiente captura de pantalla.

Contact Pointscontact-points.png

  1. Introduzca el Nombrey seleccione Webhook en la sección Integración en la lista. Introduzca la URL de su webhook dedicado en el campo URL como se muestra en la siguiente captura de pantalla.

Contact Point Setupcontact-point-setup.png

  1. Puede hacer clic en el botón Probar para probar el punto de contacto. Intente utilizar la opción de notificación personalizada durante la prueba, no la opción predefinida. Esto permitirá que el código de su punto final analice correctamente el resumen y la descripción de la notificación para que usted pueda verlos en su terminal. La prueba envía una notificación ficticia a la URL de su webhook. Si la notificación se envía correctamente, recibirá una alerta de éxito, "Alerta de prueba enviada"en la esquina superior derecha de la página, como se muestra en la siguiente imagen.

Test Alert Senttest-alert-sent.png

  1. Haga clic en el botón Guardar punto de contacto para guardar el punto de contacto.

Paso 3: configurar la cuenta de Vonage para la notificación por SMS de Messages API

Definir URL de aplicaciones de Vonage

Puede añadir los puntos finales de estado y de entrada a la URL que ha generado Ngrok. Tendrán el siguiente aspecto:

Estado URL: https://d5fs-104-25-63-145.eu.ngrok.io/webhooks/message-status

URL de entrada: https://d5fs-104-25-63-145.eu.ngrok.io/webhooks/inbound-message

Anota las URL anteriores, ya que las necesitarás cuando configures tu cuenta de Vonage para Messages API en la siguiente sección.

Configurar una aplicación de Vonage

Es necesario registrarte en una cuenta de Vonage si aún no tienes una.

Necesitas una cuenta de Vonage configurada con Messages API para enviar mensajes SMS a tus usuarios a través de Vonage. En este caso, tu usuario podría ser un compañero de equipo al que quieres notificar sobre tus actualizaciones de Grafana.

Sigue estos pasos para configurar tu cuenta de Vonage para Messages API:

  1. Navega hasta el menú Configuración de API en el menú principal de tu panel de control de Vonage para ir a la sección Configuración de API de API. La configuración de API

  2. En la sección de configuración de SMS, seleccione Messages API. Deje los demás ajustes en sus valores predeterminados.

  3. Visite la página Aplicaciones y haga clic en el botón + Crear aplicación para crear una aplicación.

  4. Introduzca un nombre en el campo Nombre nombre. Haga clic en el botón Generar clave pública y privada y privada. Se descargará un archivo de clave privada private.key se descargará en su equipo local.

  5. Seleccione Mensajes en la sección Capacidades sección.

  6. Introduzca la URL de entrada y de estado que anotó al configurar Ngrok.

  7. Haga clic en el botón Generar nueva aplicación para completar la creación. Luego, serás redirigido a la página de descripción general de la solicitud, donde también podrás vincular tu número de Vonage a la solicitud.

Nota: Consulta Administrar números con la CLI de Vonage para obtener una breve guía sobre cómo comprar un número de Vonage.

Debe anotar el IDENTIFICADOR DE LA SOLICITUD en la página de resumen de la aplicación, ya que lo necesitará en la próxima sesión. También debe anotar la ruta local donde se encuentra el archivo private.key archivo. Deben tener el siguiente aspecto:

Identificación de la solicitud: 53a2ed68-f2d8-498c-9b17-032669e3bf90

Ruta de la clave privada: /Users/Downloads/private.key

Enviar SMS al usuario

En esta subsección, enviarás la notificación webhook de Grafana a tu usuario a través de SMS. Puedes usar el SDK Python de Vonage para esta función en una aplicación Python. Utiliza el siguiente comando bash para instalar el SDK Python de Vonage en tu máquina local.

pip install vonage

A continuación, añada el siguiente código a su script Python:

...

import vonage

def grafana_webhook():

    if request.method == "POST":

        ...

        client = vonage.Client(

            application_id=YOUR_VONAGE_APPLICATION_ID,

            private_key=YOUR_APPLICATION_PRIVATE_KEY_PATH,

        )

        notification = client.messages.send_message(

            {

                "channel": "sms",

                "message_type": "text",

                "from": YOUR_VONAGE_NUMBER,

                "to": DESTINATION_PHONE_NUMBER,

                "text": alert_description,

            }

        )

        return "Webhook successfully delivered as a notification message."

En el código anterior:

  • Usted inicializó el cliente Python SDK con la línea client = vonage.Client(). Sustituya los caracteres YOUR_VONAGE_APPLICATION_ID y YOUR_APPLICATION_PRIVATE_KEY_PATH con el ID de aplicación y ruta de la clave privada de la aplicación de Vonage que creaste anteriormente.

  • A continuación, ha utilizado la función send_message() en la línea notification = client.messages.send_message() para enviar un mensaje con el cliente inicializado donde:

    • "canal": es el modo del mensaje, SMS.

    • "tipo_mensaje formato de texto del mensaje que se va a enviar.

    • "de": el remitente del mensaje. Puedes usar tu número de Vonage aquí. Reemplaza YOUR_VONAGE_NUMBER por tu número comprado.

    • "a": el destinatario que recibe el SMS, un número de teléfono. Sustituya DESTINATION_PHONE_NUMBER por el número del destinatario.

    • "texto": el contenido del mensaje que se enviará, que es la cadena de descripción de la alerta de Grafana.

  • Has modificado la sentencia return para reflejar la acción cuando se ejecuta el código.

El código completo es el siguiente:

from flask import Flask, request

import vonage

app = Flask(__name__)

@app.route("/grafana-webhook", methods=["POST"])

def grafana_webhook():

    if request.method == "POST":

        data = request.json

        alert_description = data["alerts"][0]["annotations"]["desc"]

        print(alert_description)

        client = vonage.Client(

            application_id=YOUR_VONAGE_APPLICATION_ID,

            private_key=YOUR_APPLICATION_PRIVATE_KEY_PATH,

        )

        notification = client.messages.send_message(

            {

                "channel": "sms",

                "message_type": "text",

                "from": YOUR_VONAGE_NUMBER,

                "to": DESTINATION_PHONE_NUMBER,

                "text": alert_description,

            }

        )

        return "Webhook successfully delivered as a notification message."

if __name__ == "__main__":

    app.run(host="", port=3000, debug=True)

Probar la aplicación

Para probar el código y asegurarse de que la configuración funciona, vaya a Puntos de contacto en el panel de control de Grafana y seleccione el botón editar punto de contacto editar. Esto se muestra en la siguiente imagen.

Edit Contact Point Buttonedit-contact-button.png

Puede enviar una notificación de webhook de prueba en el Punto de contacto de prueba como se muestra en la siguiente imagen.

Test Contact Pointtest-contact-point.png

  1. Seleccione la opción Personalizado para enviar un mensaje personalizado de prueba

  2. Escriba el resumen y la descripción que prefiera

  3. Desplácese hacia abajo para hacer clic en el botón Enviar notificación de prueba botón

  4. El destinatario debería recibir un mensaje de prueba como la siguiente captura de pantalla:

Alert from Grafanaalert-from-grafana.png

Resumen

Este artículo ha proporcionado una guía sobre el uso del sistema de notificaciones webhook de Grafana para obtener y enviar alertas a tus usuarios mediante la API Messages API de Vonage. Hemos analizado la configuración de los paneles de Grafana, la creación de webhooks de Python con Flask y la configuración de una aplicación de Vonage que funcione con la Messages API.

Si tienes preguntas o comentarios, únete a nosotros en el Slack para desarrolladores de Vonage o envíanos un Tweet a Xanteriormente conocido como Twitter, y nos comunicaremos contigo. Gracias de nuevo por leer, ¡y te esperamos en el próximo!

Otros recursos

  • Consulte la documentación de Grafana para obtener más información Alertas configuración

  • Consulte más formas de utilizar la Messages API en su documentación

Compartir:

https://a.storyblok.com/f/270183/400x397/505bfb0eb9/jekayinoluwa-olabemiwo.png
Jekayinoluwa Olabemiwo

Jẹ́káyinOlúwa is a software craftsman and product manager passionate about technology and its impact on people. He works on product management, backend development, DevOps, technical writing, and community strategy. He enjoys dealing in the intersection of software, design, and human interaction. He likes reading and music.