septembre 24, 2021

Monitoring Iot Hub avec log analysis Workspace et Azure Function

Dans cet article nous allons voir un exemple simple afin de monitorer un iothub et potentiellement déclencher une action via une Azure function qui pourrait nous aider à détecter des éventuels problèmes ou même sauver notre facturation.

Pour celà nous allons avoir besoin de 5 ressources dans notre ressource group:

  • un iothub avec au moins un device enregistré (vous pouvez en créer un manuellement)
  • un eventhub namespace avec au moins un eventhub
  • un log analytics workspace
  • un service plan pour votre Azure function
  • une Azure function

Tout d’abord créer une eventhub namesapce ainsi qu’un eventhub.Pour l’exemple, il a été créé avec les paramètres par défaut.

Lors de la création de l’iothub, il va falloir créer un routage des messages vers l’eventhub comme suit :

Créer votre endpoint à partir de votre eventhub existant.

Et dans la routing query passer la query suivante afin de router tous les messages sans filtre :

Une fois que tous les messages dont redirigés vers le eventhub, nous allons pouvoir les renvoyer vers le log analytics workspace :

Choisissez les évènements à envoyer vers le log analytics workspace :

J’ai créé une azure function disponible sur mon repo github ici:

Déployez la dans votre ressource group à titre d’exemple.

Il vous faudra rajouter ,dans la configuration, la connectionstring à l’iothub ,

Une fois que tout cela est fait, nous n’avons plus qu’à nous diriger vers le LAW et créer une alerte avec une query qui déclenchera notre Azure Function :

  • Allez dans « Alerts » puis « Manage alert rules »
  • Ajoutez une alerte basée sur une query :
    • J’ai crée une query simple qui récupère le nombre de messages envoyés par device Id sur les 7 derniers jours :

AzureDiagnostics
| extend DeviceId = tostring(parse_json(properties_s).deviceId) , Date = todatetime(TimeGenerated) , Category = tostring(Category)
| project DeviceId , Date ,Category
| where (Category contains « D2CTwinOperations » or Category contains « Connections ») and Date > ago(7d)
| summarize Count = count() by DeviceId
| where Count > 0

Si ce nombre est supérieur à 0 (oui je sais ce n’est pas un cas réel mais pour les besoins du tutoriel, j’avais besoin de déclencher facilement l’Azure function), celà va déclencher des actions et donc notre Azure Function.

Ma query avait deja été sauvegardée au préalable afin d’être utilisable dans une alerte facilement.

Vous avez configuré la condition de l’alerte, nous allons maintenant passer à l’action qui sera déclenchée si votre condition est templie.

Il faut pour cela créer une action group dans lequel sera votre action.

Ici nous avons un envoi de mail et une Azure function.

Une fois tout celà effectué , vous n’avez plus qu’à générer des messages via le simulateur fourni par Microsoft :

https://azure-samples.github.io/raspberry-pi-web-simulator/

Changez votre connectionstring et votre id de device puis clic sur Run 🙂

Votre alerte va être triggered dès lors que la condition de votre alerte est atteinte.

Ceci ouvre le champ des possibles en termes de monitoring et d’alertes !

Le code de l’Azure function et l’ARM template sont disponibles ici sur mon repo GitHub.

Bon code !