v1 · Dernière mise à jour avril 2026
Documentation Pinguro
Tout ce qu'il faut savoir pour surveiller vos sites, recevoir des alertes fiables, et publier une status page que vos utilisateurs peuvent consulter.
Introduction
Pinguro est un service de monitoring à destination des indépendants, petites équipes et agences qui gèrent plusieurs sites. Nous surveillons quatre types de cibles — HTTP/HTTPS, DNS, ports TCP, heartbeats (jobs cron) — à intervalle régulier (1 à 15 min selon le plan), détectons les pannes, et vous alertons sur le canal de votre choix.
Les choix clés d'Pinguro : un dashboard dense sans être surchargé, une configuration lisible (pas d'assistants à 7 étapes), des alertes qui arrivent vraiment (anti-faux-positif, attente de deux échecs consécutifs), une status page publique par défaut, et une API REST pour automatiser.
Créer son premier monitor
-
1
Depuis le dashboard
Cliquez sur + Ajouter un monitor en haut à droite de la section Monitors.
-
2
Renseignez les champs
Un nom lisible (ex. Site vitrine Acme), l'URL complète avec protocole (
https://…), puis l'intervalle de check (1 ou 15 min selon le plan). -
3
Assignez un groupe (optionnel)
Si vous gérez plusieurs clients, créez d'abord un groupe coloré, puis rattachez le monitor. Facultatif — on démarre très bien sans.
-
4
Enregistrez
Le premier check part dans les secondes qui suivent. Les données apparaissent dans la ligne du monitor : statut, dernière latence, disponibilité 24h.
Types de monitor
À la création, choisissez parmi quatre types selon ce que vous surveillez :
- HTTP / HTTPS (par défaut)
- Pinguro envoie une requête HTTP à l'URL et vérifie le code, le corps, le certificat SSL. C'est le choix usuel pour un site, une API, un endpoint
/health. - DNS
- Pinguro résout un nom de domaine et vérifie que l'enregistrement attendu est présent. Détecte un hijacking ou un failover DNS défaillant. Voir DNS monitoring.
- TCP / Port
- Pinguro ouvre une connexion TCP sur un host + port donnés. Pratique pour SMTP, SSH, PostgreSQL, Redis — tout service non-HTTP. Voir TCP / Port.
- Heartbeat
- Monitoring inversé : c'est votre job (cron, CI, batch) qui ping Pinguro. Sans signal dans la fenêtre attendue + délai de grâce, vous êtes alerté. Voir Heartbeat / Cron.
DNS monitoring
Surveille qu'un nom de domaine résout bien vers l'enregistrement attendu. Cas d'usage : détection de hijacking, validation d'un failover DNS, contrôle de la propagation après changement de registrar.
Configuration
- Hostname — le nom à résoudre, sans schéma ni chemin (ex.
acme.com,mx.acme.com). - Type d'enregistrement — l'un de
A,AAAA,MX,CNAME,TXT. - IPs attendues (records A / AAAA uniquement) — liste d'IPs. Si non-vide, la résolution doit retourner exactement ces IPs (tri indifférent). Maximum 20.
Comment ça marche
À chaque check, Pinguro interroge les résolveurs publics, compare le résultat à votre configuration :
- Pour
AetAAAAavec IPs attendues : alerte si la résolution échoue ou si les IPs retournées diffèrent de la liste. - Pour
AetAAAAsans IPs attendues : alerte uniquement si la résolution échoue (au moins une IP doit être retournée). - Pour
MX,CNAME,TXT: alerte si la résolution échoue ou renvoie un résultat vide.
Exemples
- Apex vers Cloudflare — type
A, IPs attendues104.21.x.xet172.67.x.x. - MX Google Workspace — type
MX, sans IPs attendues (on vérifie juste qu'au moins un MX est publié). - Record TXT SPF — type
TXT, détecte la disparition accidentelle après reconfiguration.
TCP / Port
Vérifie qu'un port répond, sans aucune hypothèse applicative. Pinguro ouvre un socket TCP, note si le handshake réussit dans le timeout, puis ferme. Aucun payload n'est envoyé.
Configuration
- Host — hostname ou IP (pas de schéma, pas de chemin).
- Port — entier entre 1 et 65535.
Cas d'usage courants
- SMTP
- Ports
25(relay),587(submission),465(legacy). Vérifie que ton serveur mail accepte des connexions. - SSH
- Port
22(ou custom). Utile pour un bastion ou un serveur de build. - PostgreSQL / MySQL / Redis
- Ports
5432/3306/6379. Check de joignabilité de la base — complémentaire d'un check applicatif HTTP. - Gateway applicatif / jeu en ligne
- N'importe quel port custom où l'outillage HTTP n'est pas pertinent.
Heartbeat / Cron
Monitoring inversé : contrairement aux autres types, c'est votre code qui ping Pinguro, pas l'inverse. Si le ping n'arrive pas dans la fenêtre attendue + le délai de grâce, vous recevez une alerte. Idéal pour :
- Un cron de backup nocturne — savoir si la sauvegarde a bien tourné, pas juste si le serveur est up.
- Un pipeline CI ou un script planifié.
- Un batch applicatif (envoi de digest, réconciliation, nettoyage de tables).
Configuration
- Identifiant — un nom libre (ex.
nightly-backup). Pas une URL. - Intervalle attendu — fréquence à laquelle votre job doit pinger. De
1minute à43200minutes (30 jours). - Délai de grâce — combien de temps on tolère un retard avant d'alerter. 0 à 1440 minutes (défaut 5 min).
Pinguro génère un token unique à la création. L'URL de ping est https://pinguro.app/h/<TOKEN>. Elle accepte GET ou POST.
Exemple cron Unix
# Backup nocturne à 3h — on ping Pinguro si et seulement si le script a réussi
0 3 * * * /usr/local/bin/backup.sh && curl -fsS https://pinguro.app/h/TON_TOKEN > /dev/null
Le && est volontaire : on ne ping que si backup.sh termine avec code 0. En cas d'échec, Pinguro ne reçoit rien, le délai s'écoule, l'alerte part.
Les flags -fsS de curl : -f fait retourner un code erreur sur HTTP 4xx/5xx, -s silence la progression, -S garde l'affichage d'erreur. Pratique dans un cron.
Exemple Python
import requests, sys
def main():
# ... votre logique métier ...
print("job terminé")
try:
main()
# Ping uniquement en cas de succès
requests.get("https://pinguro.app/h/TON_TOKEN", timeout=10)
except Exception as e:
print("échec :", e, file=sys.stderr)
sys.exit(1)
Exemple GitHub Actions
- name: Notify Pinguro heartbeat
if: success()
run: curl -fsS "https://pinguro.app/h/${{ secrets.PINGURO_HEARTBEAT_TOKEN }}"
Options avancées (HTTP)
Les monitors HTTP/HTTPS exposent une section Configuration avancée repliable. Voici ce que fait chaque option :
- Méthode HTTP
GETpar défaut.HEADest utile pour économiser la bande passante sur des gros fichiers mais ne lit pas le corps (incompatible avec la surveillance du contenu).POSTpour vérifier un endpoint qui requiert POST — le corps n'est pas paramétrable pour l'instant.- Plage de codes HTTP acceptés
- Par défaut
200–299. Élargissez à200–399si votre site redirige (3xx), ou resserrez à200–200pour exiger un OK strict. - Mot-clé (keyword)
- Doit contenir alerte si le texte est absent du corps de la réponse (ex. le mot
OKdans un endpoint/health). Ne doit PAS contenir alerte si un mot-clé indésirable apparaît (ex.Erreur 500). - Headers HTTP (JSON)
- Objet JSON de headers à envoyer à chaque check. Pratique pour une clé API ou un
User-Agentpersonnalisé :{"X-API-Key": "secret"}. Les valeurs doivent être des strings. - Vérification SSL
- Active la surveillance du certificat HTTPS. Vous recevez une alerte 7 jours avant l'expiration. Repose sur l'extension de la date
notAfter— pas de révocation OCSP.
Groupes
Les groupes organisent vos monitors par projet, client, ou environnement. Chaque groupe a un nom et une couleur (badge visible dans la liste et la status page).
- Free : pas de groupe. Solo : jusqu'à 10. Agency et Enterprise : illimité.
- Un monitor appartient à 0 ou 1 groupe.
- Supprimer un groupe ne supprime pas ses monitors — ils retombent simplement dans Sans groupe.
- L'ordre dans l'UI est alphabétique.
Fenêtres de maintenance
Planifiez à l'avance une fenêtre sans alertes — par exemple pour un déploiement, une migration de base, ou une intervention chez un hébergeur. Pendant la fenêtre, les checks continuent mais les alertes sont supprimées et les minutes d'indisponibilité ne comptent pas dans le SLA.
Configuration
- Titre — ce qui sera affiché dans l'historique et sur la status page publique.
- Début / fin — horodatage précis à la minute, dans le fuseau du compte.
- Scope — tous les monitors, ou une sélection explicite.
Effets pendant la fenêtre
- Aucune alerte (email, Slack, Discord, Telegram, webhook) n'est envoyée pour les monitors dans le scope.
- Les heartbeats attendus pendant la fenêtre ne déclenchent pas d'alerte en cas de ping manquant.
- La status page affiche un bandeau Maintenance planifiée.
- Les rapports SLA excluent les minutes de la fenêtre du calcul de disponibilité.
Accessible à tous les plans
Pas de gating par plan. Chaque compte peut planifier autant de fenêtres que nécessaire.
Canaux d'alerte
Configurez un ou plusieurs canaux depuis Alertes dans la sidebar. Chaque canal peut être mis en pause individuellement (toggle) sans être supprimé.
Canal par défaut, créé automatiquement à l'inscription vers l'adresse du compte. Vous pouvez en ajouter d'autres pour alerter plusieurs personnes.
Slack
Créez un Incoming Webhook depuis votre espace Slack (Apps → Incoming Webhooks → Add to Slack). Copiez l'URL en https://hooks.slack.com/services/… dans Pinguro.
Discord
Dans votre serveur : Paramètres du salon → Intégrations → Webhooks → Nouveau webhook. Copiez l'URL en https://discord.com/api/webhooks/….
Telegram
Pour recevoir les alertes Pinguro sur Telegram, vous avez besoin de deux valeurs : un bot_token (identifiant de votre bot) et un chat_id (destination des messages). Suivez la procédure ci-dessous.
-
1
Créer le bot
Ouvrez Telegram et cherchez @BotFather. Démarrez une conversation.
-
2
Envoyer
/newbotSuivez les instructions de BotFather et choisissez un nom pour votre bot, puis un username terminant par
bot. -
3
Récupérer le bot token
BotFather vous renvoie un token au format
123456:ABC-xxxxx— c'est votrebot_token.Attention. Ne partagez jamais ce token : il permet d'envoyer des messages au nom de votre bot. -
4
Activer la conversation
Cherchez votre bot dans Telegram par son nom d'utilisateur. Cliquez sur Démarrer pour activer la conversation. Sans cette étape, le bot ne peut pas vous envoyer de message.
-
5
Ouvrir l'endpoint
getUpdatesDans votre navigateur, ouvrez (remplacez
<TOKEN>par votre bot token) :https://api.telegram.org/bot<TOKEN>/getUpdates -
6
Récupérer le
chat_idDans la réponse JSON, trouvez le champ
"chat": { "id": XXXXX }— c'est votrechat_id.Canal ou groupe. Pour un canal ou un groupe, lechat_idest négatif (ex.-100123456789). Ajoutez d'abord le bot au groupe/canal, puis renvoyez un message pour qu'il apparaisse dansgetUpdates. -
7
Configurer dans Pinguro
Dans Pinguro, créez un canal Telegram. Collez l'URL complète de
sendMessage:https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=<CHAT_ID>(remplacez
<TOKEN>par votrebot_tokenet<CHAT_ID>par votrechat_id).Astuce. Si vous utilisez déjà cette URL dans un autre outil, vous pouvez simplement la copier-coller.
Webhook générique
Pour brancher Pinguro sur n'importe quel service qui accepte du JSON. Pinguro POST le payload suivant sur votre URL :
{
"event": "down",
"monitor": {
"id": 42,
"name": "Site vitrine Acme",
"url": "https://acme.com"
},
"status": "down",
"error": "Timeout 10s",
"at": "2026-04-18T14:21:07Z"
}
Les évènements possibles sont down, up, ssl_expiring, content_changed. Vous pouvez ajouter des headers personnalisés (ex. Authorization) dans la configuration du canal.
Webhooks signés (HMAC-SHA256)
Activez l'option Signer les requêtes sortantes pour qu'Pinguro signe chaque POST avec un secret partagé. Votre serveur peut alors vérifier que la requête provient bien d'Pinguro et n'a pas été modifiée en transit, et rejeter les relectures d'anciens messages capturés.
À l'activation, Pinguro génère un secret au format whsec_<48 hex>, affiché une seule fois dans l'interface. Copiez-le immédiatement : il n'est plus récupérable après fermeture. Vous pouvez à tout moment le régénérer (Régénérer le secret) si vous soupçonnez une fuite — l'ancien secret cesse alors instantanément de valider les signatures.
En-têtes envoyés
X-Pinguro-Signature: t=1618365234,v1=a1b2c3...
X-Pinguro-Timestamp: 1618365234
Le champ t= est le timestamp Unix (secondes) de la requête, v1= est le HMAC-SHA256 hex de la chaîne `${timestamp}.${body}` avec votre secret. Le timestamp dans le header doit être utilisé pour la vérification (pas l'horloge serveur), afin que tous les champs signés soient explicites.
Tolérance temporelle recommandée : 300 secondes (5 minutes). Au-delà, rejetez la requête : un attaquant pourrait tenter de rejouer un vieux message capturé.
Exemple Node.js
const crypto = require('crypto');
function verifyPinguroSignature(headerValue, rawBody, secret, toleranceSeconds = 300) {
if (!headerValue) return false;
const parts = Object.fromEntries(headerValue.split(',').map(p => p.split('=')));
if (!parts.t || !parts.v1) return false;
const ts = Number(parts.t);
if (!Number.isFinite(ts)) return false;
if (Math.abs(Date.now() / 1000 - ts) > toleranceSeconds) return false;
const expected = crypto.createHmac('sha256', secret)
.update(`${ts}.${rawBody}`).digest('hex');
if (expected.length !== parts.v1.length) return false;
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}
// Express : assurez-vous que le body brut est disponible
// app.use('/hook', express.raw({ type: 'application/json' }));
app.post('/hook', (req, res) => {
const raw = req.body.toString('utf8');
const ok = verifyPinguroSignature(req.headers['x-pinguro-signature'], raw, process.env.PINGURO_SECRET);
if (!ok) return res.status(401).end();
const payload = JSON.parse(raw);
// ...
res.status(200).end();
});
Exemple Python
import hmac, hashlib, time
def verify_pinguro_signature(header_value, raw_body, secret, tolerance_seconds=300):
if not header_value:
return False
parts = dict(p.split('=', 1) for p in header_value.split(',') if '=' in p)
t, v1 = parts.get('t'), parts.get('v1')
if not t or not v1:
return False
try:
ts = int(t)
except ValueError:
return False
if abs(time.time() - ts) > tolerance_seconds:
return False
data = f"{ts}.{raw_body}".encode()
expected = hmac.new(secret.encode(), data, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, v1)
Exemple PHP
<?php
function verify_pinguro_signature($header, $rawBody, $secret, $tolerance = 300) {
if (!$header) return false;
$parts = [];
foreach (explode(',', $header) as $p) {
$kv = explode('=', $p, 2);
if (count($kv) === 2) $parts[$kv[0]] = $kv[1];
}
if (empty($parts['t']) || empty($parts['v1'])) return false;
$ts = (int)$parts['t'];
if (abs(time() - $ts) > $tolerance) return false;
$expected = hash_hmac('sha256', $ts . '.' . $rawBody, $secret);
return hash_equals($expected, $parts['v1']);
}
express.json(), bodyParser, etc.), récupérez la version brute (express.raw(), middleware dédié) avant de vérifier — sinon le JSON ré-sérialisé aura des espaces différents et la signature échouera.Status page publique
Chaque compte dispose d'une page de statut publique à l'adresse https://pinguro.app/status/<slug>, affichant en temps réel vos monitors partagés.
Configuration
- Slug — modifiable dans Page de statut → Paramètres. Doit être unique, 3–40 caractères, URL-safe.
- Visibilité par monitor — chaque monitor a un toggle Afficher sur la page publique.
- Groupes — les monitors sont regroupés sur la page publique selon leur groupe Pinguro, avec le nom et la couleur.
Domaine custom (plan Agency)
Pointez un CNAME de status.votredomaine.com vers status.pinguro.app, puis validez le domaine dans l'app. Le certificat TLS est émis automatiquement.
White-label et branding (plan Agency)
- Logo personnalisé (PNG/SVG transparent, max 200 KB).
- Couleur d'accent — remplace le violet Pinguro.
- Masquer la mention « Powered by Pinguro ».
- Message d'en-tête et lien de contact.
Page publique par monitor + widget
Chaque monitor a sa propre page publique (si le toggle Afficher sur la page publique est activé) avec graphique 30 jours, historique des incidents, et latence moyenne.
Widget SVG embarquable
Dans Monitor → Partage public, copiez le snippet. Deux formats disponibles :
SVG inline (statique, recharge au render)
<img
src="https://pinguro.app/status/<slug>/<monitor-id>.svg"
alt="Statut du site"
height="28"
/>
Iframe (mise à jour live)
<iframe
src="https://pinguro.app/status/<slug>/<monitor-id>/embed"
width="260" height="40"
frameborder="0" scrolling="no">
</iframe>
À coller dans le footer d'un blog, une page « À propos », ou la sidebar d'un outil interne.
Surveillance du contenu
Option dédiée à détecter les modifications non-intentionnelles du contenu d'une page : défacement, altération après compromission, régression de déploiement. C'est une détection différentielle, pas une analyse sémantique — il n'y a pas d'IA derrière.
Comment ça marche
- Au premier check réussi, Pinguro calcule un hash
SHA-256du contenu textuel de la page après extraction grossière des nœuds pertinents. Ce hash devient la baseline. - À chaque check suivant, un nouveau hash est calculé. Si le taux de variation entre l'ancien et le nouveau contenu dépasse le seuil configuré (en %), une alerte
content_changedest envoyée. - La baseline est mise à jour dans deux cas : (1) vous cliquez manuellement sur Réinitialiser dans la config du monitor, (2) plusieurs checks consécutifs détectent le même nouveau contenu (stabilisation après un déploiement).
Sélecteurs à ignorer
Pour éviter le bruit sur les blocs qui changent tout le temps (prix dynamique, timestamp, flux d'actu), listez des sélecteurs CSS à ignorer dans la comparaison — un par ligne :
.news
#trending
.comments
.price-widget
Syntaxe supportée : .classe, #identifiant, nom-de-balise. L'extraction est approximative (non-parser HTML), suffisante pour la plupart des cas.
Cas d'usage
- Home page critique — alerte si le CMS a perdu un bloc ou si un deploy a rendu une page blanche.
- Pages légales — CGU, mentions, politique de confidentialité. Toute modification silencieuse doit être détectée.
- Endpoints statiques — fichiers
robots.txt,humans.txt, manifestes JSON.
Limites actuelles
- Pas d'exécution JavaScript — on compare le HTML brut renvoyé par le serveur.
- Pas de diff visuel — le rapport d'alerte indique uniquement le taux de variation.
- Incompatible avec la méthode
HEAD(qui ne renvoie pas de corps). - Aucune IA : on ne comprend pas si un changement est « voulu » ou non, c'est à vous d'acter via le bouton de réinitialisation.
Rapports SLA mensuels
Générez un rapport mensuel de disponibilité, imprimable en PDF via la fonction d'impression de votre navigateur. Deux portées : par monitor (détail, graphique, incidents) et account-wide (vue consolidée de tous les monitors actifs du compte).
Les rapports SLA sont également envoyés automatiquement par email aux comptes Agency et Enterprise le 1er de chaque mois (3h UTC) — opt-in/opt-out depuis votre page Compte.
Comment les générer
- Par monitor — ouvrez le monitor, bouton Rapport SLA. Choisissez le mois cible, puis Imprimer / enregistrer en PDF.
- Compte — depuis Plan → Rapports SLA, bouton Rapport du mois. Regroupe tous les monitors actifs.
Contenu d'un rapport
- Période couverte, date d'édition, nom du compte.
- Disponibilité globale en % (deux décimales).
- Durée cumulée d'indisponibilité (downtime minutes).
- Liste des incidents avec horodatage, durée, cause (code HTTP, timeout, mot-clé manquant...).
- Minutes de maintenance planifiée, exclues du calcul.
Gating par plan
- Free — pas d'accès.
- Solo — mois en cours uniquement.
- Agency — historique jusqu'à 12 mois en arrière.
- Enterprise — historique illimité.
API publique
Pinguro expose une API REST versionnée pour intégrer le monitoring dans vos scripts, Zapier, n8n, pipelines CI/CD, ou tout outil qui parle HTTP. L'API est disponible sur le plan Solo (2 clés max) et Agency (illimité).
Base URL
https://pinguro.app/api/v1
Les endpoints sont identiques à ceux de /api/* utilisés par l'interface web. L'URL /api/v1/* est stable : nous ne ferons pas de breaking change sans publier /api/v2/* en parallèle.
Authentification
Créez une clé depuis Dashboard → Clés API. Chaque clé commence par pgr_ suivi de 32 caractères hexadécimaux. La clé n'est affichée qu'une seule fois à la création — stockez-la dans votre gestionnaire de secrets.
Deux façons d'authentifier une requête :
# En-tête dédié
curl -H "X-API-Key: pgr_votreclé" https://pinguro.app/api/v1/monitors
# Ou Authorization: Bearer
curl -H "Authorization: Bearer pgr_votreclé" https://pinguro.app/api/v1/monitors
401 dès la requête suivante.
Endpoints disponibles
GET /api/v1/monitors- Liste tous vos monitors.
GET /api/v1/monitors/:id- Via
/stats: détails, dispo 24h/7j/30j, incidents, checks récents. UtilisezGET /api/v1/monitors/:id/stats?range=24h. POST /api/v1/monitors- Crée un monitor. Body :
{ name, url, interval_minutes, type? }. Voir exemple ci-dessous. PUT /api/v1/monitors/:id- Met à jour un monitor. Tous les champs sont optionnels (partial update).
DELETE /api/v1/monitors/:id- Supprime un monitor. Répond
204 No Contenten cas de succès. GET /api/v1/monitors/:id/stats- Statistiques et incidents récents. Paramètre
range:24h,7d,30d. GET /api/v1/monitor-groups/POST /api/v1/monitor-groups- Liste et création de groupes.
GET /api/v1/maintenance-windows/POST /api/v1/maintenance-windows- Liste et création de fenêtres de maintenance.
GET /api/v1/alerts/channels- Liste des canaux d'alerte configurés.
Codes de réponse
200/201/204— succès.400— validation échouée. Format{ field, error }.401— clé API manquante, invalide, ou révoquée.403— opération refusée par votre plan (ex. limite de monitors atteinte).404— ressource introuvable ou appartenant à un autre utilisateur.429— rate limit dépassé (voir ci-dessous).500— erreur serveur. Réessayez ; si ça persiste, contactez-nous.
Rate limits
Chaque clé API est limitée à 100 requêtes par minute. Au-delà, l'API renvoie 429 Too Many Requests. Les en-têtes RateLimit-* indiquent le quota restant et la fenêtre courante.
Exemple : créer un monitor via curl
curl -X POST https://pinguro.app/api/v1/monitors \
-H "X-API-Key: pgr_votreclé" \
-H "Content-Type: application/json" \
-d '{
"name": "API Gateway",
"url": "https://api.exemple.com/health",
"interval_minutes": 5
}'
Exemple : lister les monitors
curl https://pinguro.app/api/v1/monitors \
-H "X-API-Key: pgr_votreclé"
Équipe et invitations
Pinguro organise vos accès autour d'une organisation : un compte = une organisation avec un propriétaire, et autant de membres que votre plan le permet. Chaque membre a un rôle qui détermine ce qu'il peut faire.
Rôles disponibles
- Owner — accès total, y compris la facturation, le transfert de propriété et la suppression du compte. Il y a toujours exactement un owner par organisation.
- Admin — gère les membres et leurs rôles, les clés API, les canaux d'alerte, en plus de tout ce que peut faire un editor. Ne touche pas à la facturation.
- Editor — crée, édite et supprime les monitors, les groupes, les fenêtres de maintenance et les pages de statut. Ne gère ni les alertes ni les membres.
- Viewer — lecture seule sur tout : monitors, stats, incidents, status pages. Idéal pour un client qui veut voir l'uptime de ses propres sites sans pouvoir les modifier.
Inviter un collaborateur
-
1
Dashboard → Équipe
Depuis la sidebar, ouvrez Équipe. Cliquez sur Inviter un membre, renseignez l'email et choisissez le rôle.
-
2
Le destinataire reçoit un email
L'invitation contient un lien signé valable 7 jours. Au-delà, il faudra renvoyer une nouvelle invitation.
-
3
Il rejoint l'organisation
En cliquant le lien, le destinataire crée son compte (ou se connecte s'il a déjà un compte Pinguro) et est ajouté à l'organisation avec le rôle prévu.
Limite de membres par plan
- Free — 1 membre (vous seul).
- Solo — 3 membres.
- Agency — 10 membres.
- Enterprise — illimité.
Timeline d'incident éditable
Pendant qu'un incident est ouvert, vous pouvez publier des mises à jour publiques (« on enquête », « cause identifiée », « rollback en cours », « résolu ») qui apparaissent en temps réel sur votre status page et la page publique du monitor — comme un postmortem live qui rassure vos utilisateurs.
-
1
Quand un incident est ouvert
Allez sur la page détail du monitor concerné. Tant que l'incident n'est pas résolu, la card Timeline de l'incident apparaît au-dessus du graphique.
-
2
Postez vos updates
Choisissez un statut (investigating, identified, monitoring, resolved) et tapez un message court. L'update est horodaté et stocké en base.
-
3
C'est visible immédiatement
Les updates apparaissent en temps réel sur la status page publique (
/status/<slug>) et la page publique par monitor (/m/<slug>). Vos utilisateurs voient l'avancée sans avoir à vous écrire.
Authentification 2FA
Pinguro supporte le second facteur TOTP (Time-based One-Time Password) compatible avec Google Authenticator, Authy, 1Password, Bitwarden, etc. Disponible sur tous les plans, recommandé pour un compte qui gère du monitoring d'infra critique.
Activer la 2FA
-
1
Compte → Sécurité
Depuis la sidebar, ouvrez Compte, section Authentification à deux facteurs, cliquez sur Activer.
-
2
Scanner le QR code
Ouvrez votre app TOTP (Google Authenticator, Authy...) et scannez le QR code affiché. Elle commence à générer un code à 6 chiffres qui change toutes les 30 secondes.
-
3
Confirmer avec un code
Entrez le code affiché par l'app pour confirmer que l'association fonctionne. Sans cette étape, la 2FA n'est pas activée.
-
4
Sauvegarder les codes de secours
Pinguro affiche 10 codes de secours à usage unique — téléchargez-les ou imprimez-les et rangez-les en lieu sûr. Ils permettent de se reconnecter en cas de perte du téléphone.
Attention. Les codes ne sont affichés qu'une seule fois. Si vous les perdez et que vous perdez aussi votre app TOTP, contactez le support pour un reset manuel (délai et vérification d'identité).
Désactiver la 2FA
Depuis Compte → Sécurité → Désactiver. Vous devrez fournir un code TOTP valide (ou un code de secours) pour confirmer.
Plans et limites
| Free | Solo | Agency | Enterprise | |
|---|---|---|---|---|
| Prix | 0€ | 7€ / mois | 29€ / mois | Sur devis |
| Monitors | 3 | 20 | 200 | Négocié |
| Intervalle min. | 15 min | 1 min | 1 min | 1 min |
| Types HTTP / DNS / TCP / Heartbeat | Oui | Oui | Oui | Oui |
| Groupes | — | 10 | Illimité | Illimité |
| Fenêtres de maintenance | Oui | Oui | Oui | Oui |
| Canaux d'alerte | Tous | Tous | Tous | |
| Monitoring avancé (HTTP, SSL, mot-clé) | — | Oui | Oui | Oui |
| Surveillance du contenu | — | Oui | Oui | Oui |
| Widgets embarquables | — | Oui | Oui | Oui |
| Status page publique + uptime bars 90 j | Oui | Oui | Oui | Oui |
| Logo & couleur status page | — | Oui | Oui | Oui |
| Domaine custom | — | — | Oui | Oui |
| White-label | — | — | Oui | Oui |
| Import en masse (URLs) | — | 20 | 200 | Négocié |
| Clés API | — | 2 | Illimité | Illimité |
| Membres d'équipe | 1 | 3 | 10 | Illimité |
| Rapports SLA mensuels (historique) | — | Mois courant | 12 mois | Illimité |
| Envoi auto du rapport SLA par email | — | — | Oui | Oui |
| Authentification 2FA (TOTP) | Oui | Oui | Oui | Oui |
| Rétention historique | 7 jours | 90 jours | 1 an | Négocié |
| Support | Communauté | Email prioritaire | Contrat dédié |
Les limites s'appliquent par compte. Un changement de plan prend effet immédiatement après le paiement Stripe. Contactez-nous pour un devis Enterprise.
FAQ
Comment suis-je notifié si Pinguro lui-même tombe ?
Nos workers de check tournent sur deux régions indépendantes, et nous publions un statut interne sur status.pinguro.app/meta. Si nos checks s'interrompent plus de 90 secondes, l'endpoint /readyz passe en dégradé et nous déclenchons des alertes internes. En cas d'incident majeur affectant plusieurs comptes, nous envoyons un email à tous les utilisateurs actifs.
Comment annuler mon abonnement ?
Depuis Plan dans la sidebar, cliquez sur Gérer l'abonnement. Vous êtes redirigé vers le portail Stripe, où vous pouvez annuler en un clic. L'annulation prend effet à la fin de la période déjà payée ; vos données restent accessibles en lecture seule ensuite.
Comment Pinguro gère-t-il les redirections (3xx) ?
Par défaut, la plage de codes acceptés est 200–299, donc un 301 ou 302 compte comme un échec. Élargissez à 200–399 si vous voulez suivre les redirections, ou resserrez si vous voulez justement être alerté en cas de redirection inattendue (ex. détection de hijacking DNS).
Et le RGPD / GDPR ?
Les données sont hébergées en Europe (Paris, AWS eu-west-3). Nous ne stockons pas le contenu complet de vos pages — uniquement un hash SHA-256 pour la surveillance du contenu. Les logs d'accès (horodatage + IP) sont conservés 30 jours. Vous pouvez demander la suppression complète de votre compte depuis Compte → Zone de danger, effective sous 24h.
Puis-je monitorer un site derrière un VPN ou un IP allowlist ?
Pinguro publie la liste de ses IPs sortantes sur docs/ips.txt. Ajoutez-les à votre allowlist. Les IPs sont stables mais peuvent évoluer — suivez ce fichier si vous avez un allowlist strict.
Puis-je monitorer des endpoints authentifiés ?
Oui, via les Headers HTTP dans la configuration avancée. Vous pouvez passer un Authorization: Bearer … ou une clé API custom. Les headers sont chiffrés au repos côté Pinguro.