Guide · Sans serveur
Surveiller Azure Functions (déclencheur minuterie)
Une fonction à déclencheur minuterie peut cesser de s'exécuter en silence (mauvais déploiement, app désactivée, plan épuisé) sans que rien ne vous prévienne. Ajoutez un appel HTTPS en fin de handler et Mortemain s'en charge.
1. Créez un check
Créez un check dans Mortemain et copiez son URL de ping unique :
https://ping.mortemain.com/your-check-uuid
2. Faites le check-in en fin de handler (C#)
Appelez l'URL quand la fonction termine ; appelez /fail depuis le bloc catch pour qu'une exception non gérée alerte immédiatement, sans attendre la prochaine exécution planifiée :
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
public static class NightlyExport
{
private static readonly HttpClient client = new HttpClient();
private const string PingUrl = "https://ping.mortemain.com/your-check-uuid";
[FunctionName("NightlyExport")]
public static async Task Run(
[TimerTrigger("0 0 3 * * *")] TimerInfo myTimer, ILogger log)
{
try
{
await RunExportAsync(); // votre travail
await client.GetAsync(PingUrl); // succès
}
catch (Exception ex)
{
await client.PostAsync(PingUrl + "/fail",
new StringContent(ex.Message)); // échec, alerte immédiate
throw;
}
}
}
3. La même chose en Python
Le modèle de programmation Python v2 câble le même schéma avec requests :
import azure.functions as func import requests app = func.FunctionApp() PING_URL = "https://ping.mortemain.com/your-check-uuid" @app.timer_trigger(schedule="0 0 3 * * *", arg_name="myTimer", run_on_startup=False, use_monitor=False) def nightly_export(myTimer: func.TimerRequest) -> None: try: run_export() # votre travail requests.get(PING_URL, timeout=10) # succès except Exception: requests.get(f"{PING_URL}/fail", timeout=10) # échec, alerte immédiate raise
4. Alignez la planification NCRONTAB
Les timer triggers utilisent des expressions NCRONTAB : six champs ({seconde} {minute} {heure} {jour} {mois} {jour-semaine}) au lieu des cinq habituels, évalués en UTC sauf si l'app définit WEBSITE_TIME_ZONE. 0 0 3 * * * s'exécute une fois par jour à 03:00 UTC. Donnez au check Mortemain la même planification (sans le champ des secondes) et une fenêtre de grâce couvrant votre durée d'exécution habituelle plus une marge pour un démarrage à froid sur le plan Consumption.
Suivez la durée (optionnel)
Appelez /start dès l'entrée dans le handler et Mortemain enregistre la durée de chaque exécution, utile pour repérer un job qui ralentit discrètement :
await client.GetAsync(PingUrl + "/start"); // marque le début de l'exécution
Testez
Déclenchez la fonction une fois (attendez la planification, lancez-la en local avec func start, ou utilisez le panneau « Test/Exécuter » du portail). Le check passe actif en une seconde ou deux ; ratez sa fenêtre et vous recevrez l'alerte de panne. Provoquez une exception de test pour vérifier aussi le chemin /fail.