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

Intégrer Vonage avec Grafana pour recevoir des notifications par SMS

Publié le November 21, 2023

Temps de lecture : 16 minutes

Introduction

Grafana est une plateforme d'observabilité multiplateforme ouverte que les développeurs pourraient utiliser pour garder une trace des métriques des applications ou des systèmes dans le cloud. Elle génère des analyses et des visualisations à partir des métriques avec des diagrammes, des graphiques et des alertes. Cet article montrera comment intégrer Vonage à une configuration Grafana pour recevoir des notifications par SMS à l'aide de l'API Messages de Vonage.

Le langage d'enseignement sera Python. Les connaissances partagées via l'article proposé seraient utiles aux équipes DevOps, aux SRE et aux administrateurs système qui s'appuient sur Grafana pour les informer des activités et des occurrences inhabituelles dans leur système.

Table des matières

Étape 1 : Mise en place de la pile Grafana

Grafana vous permet de configurer votre propre instance Grafana sur votre machine ou serveur local. Vous pouvez également utiliser Grafana sur le cloud lorsque vous vous inscrivez pour un nouveau Account. Par conséquent, vous n'aurez pas à installer ou à maintenir votre instance Grafana, car elle est basée sur le cloud et gérée.

Créer un tableau de bord

Dans ce tutoriel, vous allez construire un tableau de bord simple en utilisant la source de données intégrée Grafana --. Pour un nouvel utilisateur de Grafana, Grafana propose un flux de travail pour la première fois afin de vous guider dans la création d'un nouveau tableau de bord. Vous pouvez suivre les étapes de l'invite ou les étapes mises en évidence dans cette section de l'article. Vous pouvez sauter cette section si vous êtes déjà familiarisé avec Grafana.

  1. Cliquez sur Tableaux de bord dans le menu de gauche pour accéder à la page Tableaux de bord.

  2. Cliquez sur le bouton Nouveau pour obtenir un menu déroulant d'options et sélectionnez Nouveau tableau de bord

  3. Sur la page Nouveau tableau de bord, cliquez sur + Ajouter une visualisation pour ouvrir un modèle permettant de choisir une source de données.

  4. Sélectionnez une modale de source de données et sélectionnez l'option -- Grafana -- sur la droite.

Select Data Sourceselect-data-source.png

Lorsque vous sélectionnez l'option -- Grafana -- qui est la source de données intégrée par défaut de Grafana, deux choses se produisent :

- Grafana configures your query 
- Grafana generates the Random Walk dashboard.
  1. Vous pouvez maintenant cliquer sur l'icône Actualiser le tableau de bord dans l'image suivante pour interroger la source de données.

Create Contact Pointcreate-contact-point.png

  1. Vous pouvez ensuite cliquer sur Enregistrer dans le coin supérieur droit. Vous serez invité à donner un nom au tableau de bord avant qu'il ne soit enregistré.

Vous devriez maintenant avoir un tableau de bord de base configuré dans votre Account Grafana. Vous pouvez explorer Grafana plus avant en ajoutant des sources de données pour créer des tableaux de bord pour vos autres projets.

Étape 2 : Créer une application Python pour la mise en œuvre de la logique

Vous devez installer Flask pour alimenter le script Python que vous utiliserez dans ce tutoriel. Vous pouvez exécuter la commande suivante dans votre terminal pour installer Flask.

pip install flask

Écrire la première fonction Python

Vous allez maintenant mettre en place un webhook Flask pour recevoir les alertes de Grafana.

Créez un fichier, notify.py, et ajoutez le code Python suivant.

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)

Dans le code ci-dessus, vous :

  • a créé un POST itinéraire, /grafana-webhook

  • La route décore la fonction grafana_webhook, un point de terminaison POST pour recevoir des requêtes POST.

  • a extrait le alert_description de la charge utile de la demande

  • L'un des attributs extraits, alert_summary, est imprimé sur la console au moment de l'exécution à l'aide de la fonction print().

  • Vous avez désigné le port 3000 pour l'exécution de l'application. Cela permettra de faire correspondre le port de l'application avec le port sur lequel Ngrok s'exécutera. De cette manière, l'application est servie par le serveur Ngrok.

Pour exécuter l'application localement, utilisez la commande bash suivante dans votre terminal :

python notify.py 3000

Vous devriez obtenir une sortie de terminal comme la suivante, ce qui signifie que le serveur de développement est actif :

* 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

Configuration du serveur Ngrok

Ensuite, vous pouvez installer Ngrok, un serveur en ligne léger pour tester l'application Python. Il vous permettra de servir votre script Python sur l'internet public. Suivez les instructions d'installation sur le officiel pour l'installer.

Vous pouvez lancer Ngrok à l'aide de la commande suivante dans le terminal, et il créera un serveur léger pour vous :

ngrok http 3000

L'exécution de la commande ci-dessus lance un serveur léger pour vous, et vous verrez son URL publique dans votre terminal comme suit :

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

Cela signifie que le point d'arrivée de votre webhook basé sur votre script Python est le suivant :

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

Il s'agira de votre URL dédiée pour que Grafana envoie des notifications webhook à votre application Python.

Connecter Grafana avec l'application Python

Pour connecter Grafana à votre application Python, vous allez spécifier l'URL de webhook par laquelle Grafana peut envoyer ses alertes à votre application. Puisque vous disposez d'une URL de webhook à cette fin, vous l'ajouterez aux points de contact Alerts sur votre tableau de bord Grafana. Suivez les étapes suivantes pour configurer vos Applications Grafana avec le webhook de votre application.

  1. Dans le menu principal de Grafana, allez à Alertes & IRM > Alertescomme le montre la capture d'écran suivante.

Alerting Menualerting-menu.png

  1. Cliquez Points de contact sur la page Alerting pour accéder à la page Points de contact comme le montre la capture d'écran suivante. Cliquez sur le bouton + Ajouter un point de contact (Ajouter un point de contact). Vous accédez alors à la page Créer un point de contact dans la capture d'écran suivante.

Contact Pointscontact-points.png

  1. Saisissez le nom que vous souhaitez Nomet sélectionnez Crochet Web dans la section d'intégration dans la liste. Saisissez l'URL de votre webhook dédié dans le champ URL comme le montre la capture d'écran suivante.

Contact Point Setupcontact-point-setup.png

  1. Vous pouvez cliquer sur le bouton Test pour suivre les instructions de test du point de contact. Essayez d'utiliser l'option de notification personnalisée lors du test, et non l'option prédéfinie. Cela permettra au code de votre point de contact d'analyser correctement le résumé et la description de la notification pour que vous puissiez les voir dans votre terminal. Le test envoie une notification fictive à l'URL de votre webhook. Si la notification a été envoyée avec succès, vous recevrez une alerte de succès, "Test alert sent"dans le coin supérieur droit de la page, comme le montre l'image suivante.

Test Alert Senttest-alert-sent.png

  1. Cliquez sur le bouton Enregistrer le point de contact pour enregistrer le point de contact.

Étape 3 : Configurer le compte Vonage pour la notification par SMS de l'API Messages

Définir les URL des applications Vonage

Vous pouvez ajouter le statut et les points de terminaison entrants à l'URL générée par Ngrok. Ils ressembleront à ce qui suit :

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

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

Notez les URL ci-dessus, car vous en aurez besoin pour configurer votre Account Vonage pour l'API Messages dans la section suivante.

Configurer une application Vonage

Vous devez vous inscrire un Account Vonage si vous n'en avez pas déjà un.

Vous avez besoin d'un Account Vonage configuré avec l'API Messages pour envoyer des SMS à vos utilisateurs via Vonage. Dans ce cas, votre utilisateur peut être un coéquipier que vous souhaitez informer de vos mises à jour Grafana.

Suivez les étapes suivantes pour configurer votre Account Vonage pour l'API Messages :

  1. Naviguez vers le menu Paramètres de l'API dans le menu principal de votre tableau de bord Vonage pour accéder à la section Paramètres de l'API (paramètres de l'API). Les paramètres de l'API

  2. Dans la section Paramètres SMS, sélectionnez Messages API. Laissez les autres paramètres par défaut.

  3. Visitez le site Applications et cliquez sur le bouton + Créer une application pour créer une application.

  4. Saisissez un nom dans le champ nom dans le champ Nom. Cliquez sur le bouton Générer les clés publique et privée et privées. Un fichier de clé privée private.key sera téléchargé sur votre machine locale.

  5. Sélectionner Messages dans la section Capacités dans la section Capacités.

  6. Saisissez l'URL entrante et l'URL de statut que vous avez notées lors de la configuration de Ngrok.

  7. Cliquez sur le bouton Générer une nouvelle application pour terminer la création. Vous serez ensuite redirigé vers la page de présentation de la demande, où vous pourrez également associer votre numéro Vonage à la demande.

Note : Consultez Gérer les Numbers avec l'interface de programmation de Vonage pour un court guide sur l'achat d'un numéro Vonage.

Vous devez noter le ID DE L'APPLICATION sur la page de présentation de l'application, car vous en aurez besoin lors de la prochaine session. Vous devez également noter le chemin local où se trouve le fichier private.key est situé. Ils doivent ressembler à ce qui suit :

Applications : 53a2ed68-f2d8-498c-9b17-032669e3bf90

Chemin de la clé privée : /Users/Downloads/private.key

Envoyer un SMS à l'utilisateur

Dans cette sous-section, vous allez envoyer la notification Grafana webhook à votre utilisateur par SMS. Vous pouvez utiliser le SDK Vonage Python pour cette fonctionnalité dans une application Python. Utilisez la commande bash suivante pour installer le SDK Vonage Python sur votre machine locale.

pip install vonage

Ensuite, ajoutez le code suivant à votre 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."

Dans le code ci-dessus :

  • Vous avez initialisé le client SDK Python avec la ligne client = vonage.Client(). Remplacez les YOUR_VONAGE_APPLICATION_ID et YOUR_APPLICATION_PRIVATE_KEY_PATH par l'identifiant de l'application l'identifiant de l'application et chemin de la clé privée de l'application Vonage que vous avez créée précédemment.

  • Vous avez ensuite utilisé la fonction send_message() dans la ligne notification = client.messages.send_message() pour envoyer un message avec le client initialisé où :

    • "canal" : est le mode de message, SMS.

    • "message_type" : format de texte du message à envoyer.

    • "from" : l'expéditeur du message. Vous pouvez utiliser votre numéro Vonage ici. Remplacez YOUR_VONAGE_NUMBER par votre numéro acheté.

    • "à" : le destinataire qui reçoit le SMS, un numéro de téléphone. Remplacer DESTINATION_PHONE_NUMBER par le numéro du destinataire.

    • "text" : le contenu du message à envoyer, qui est la chaîne de description de l'alerte provenant de Grafana.

  • Vous avez modifié l'instruction de retour pour refléter l'action lors de l'exécution du code.

Le code complet est le suivant :

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)

Tester l'application

Pour tester le code et s'assurer que la configuration fonctionne, naviguez vers Points de contact sur votre tableau de bord Grafana et sélectionnez l'option modifier le point de contact et sélectionnez le bouton Modifier le point de contact. Ceci est illustré dans l'image suivante.

Edit Contact Point Buttonedit-contact-button.png

Vous pouvez envoyer une notification de test par webhook dans le Point de contact test comme le montre l'image suivante.

Test Contact Pointtest-contact-point.png

  1. Sélectionnez l'option Personnalisé pour envoyer un message personnalisé de test

  2. Fournissez vos textes de résumé et de description préférés

  3. Faites défiler la page jusqu'à ce que vous cliquiez sur l'icône Envoyer une notification de test pour cliquer sur le bouton

  4. Le destinataire doit recevoir un message de test comme dans la capture d'écran suivante :

Alert from Grafanaalert-from-grafana.png

Résumé

Cet article a fourni un guide sur l'utilisation du système de notification Grafana webhook pour obtenir et envoyer des alertes à vos utilisateurs à l'aide de l'API Messages de Vonage. Nous avons abordé la configuration de vos tableaux de bord Grafana, la création de webhooks Python avec Flask et la configuration d'une application Vonage qui fonctionne avec l'API Messages.

Si vous avez des questions ou des commentaires, rejoignez-nous sur le Slack des développeurs de Vonage ou envoyez-nous un Tweet sur Xanciennement connu sous le nom de Twitter, et nous vous répondrons. Merci encore pour votre lecture, et nous vous donnons rendez-vous pour le prochain numéro !

Ressources complémentaires

  • Consultez la documentation de Grafana pour en savoir plus configuration configuration

  • Vous trouverez d'autres façons d'utiliser l'API Messages dans sa documentation

Partager:

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.