exploring-live-traffic

Par posthog · skills

Inspecte les données de l'onglet Live de PostHog Web Analytics — utilisateurs actuellement en ligne, pages vues des 30 dernières minutes, pages principales, référents, appareils, navigateurs, pays, trafic de bots, et les graphiques bot/utilisateurs par minute. À utiliser quand l'utilisateur demande « qui est sur mon site en ce moment ? », « que se passe-t-il en direct ? », « quels bots crawlent mon site ? », parle de l'« onglet live » / du « dashboard live », veut des chiffres en temps réel (30 dernières min), ou souhaite de l'aide pour filtrer ou approfondir la vue live. Couvre également la création d'insights product-analytics reflétant ce qu'affichent les tuiles.

npx skills add https://github.com/posthog/skills --skill exploring-live-traffic

Exploration de l'analyse du trafic en direct

L'onglet Web analytics Live (/web/live) affiche l'activité en temps réel sur une fenêtre glissante de 30 minutes plus un compteur "utilisateurs en ligne" de 60 secondes. C'est l'endroit pour répondre à "que se passe-t-il sur mon site maintenant ?" — pages vues, bots nommés, appareils, localisation, chemins principaux, principaux référents, et un flux d'événements en direct.

Cette skill vous enseigne (à l'agent) comment :

  • reconnaître une demande qui appartient à l'onglet Live
  • lire le modèle de tuile (ce que chaque carte affiche, d'où viennent les données)
  • manipuler le seul filtre qui existe (host)
  • construire des insights d'analytique produit qui correspondent à une tuile Live quand l'utilisateur veut des plages horaires plus longues ou une exploration plus approfondie que la fenêtre en direct n'offre

L'onglet Live n'est pas un terrain de jeu HogQL — ses données proviennent d'un flux en direct soutenu par des remontées HogQL courtes. Quand l'utilisateur veut interroger les données "maintenant" avec HogQL, pointez-les vers l'onglet ; quand ils veulent des répartitions historiques, construisez un insight avec les modèles ci-dessous.

Quand utiliser cette skill

Utilisez cette skill quand l'utilisateur :

  • demande « qui est sur mon site maintenant ? », « que se passe-t-il en direct ? », « affiche-moi le trafic en direct »
  • mentionne l'onglet « Live », le « tableau de bord Live », ou la page en direct (/web/live)
  • pose des questions sur le trafic bot en direct (« quels bots me font un crawl ? », « est-ce que GPTBot nous scrape ? »)
  • veut filtrer le trafic en direct par domaine / host
  • veut comparer ce qu'il voit sur l'onglet Live à une fenêtre plus longue — par exemple « l'onglet en direct montre que GPTBot nous frappe, peux-tu me donner un graphique de 7 jours là-dessus ? »

N'utilisez pas cette skill pour le travail d'analytique web non temps réel — pour cela, utilisez l'onglet Web analytics standard (/web).

Structure de l'onglet

URL : /web/live

L'onglet a deux affordances de filtre et une grille de tuiles. La plage de dates est fixe : fenêtre glissante de 30 minutes pour tout sauf « Utilisateurs en ligne » (60 dernières secondes).

Filtres

Il y a seulement un filtre sur l'onglet en direct : le sélecteur de host (domaine).

  • Il provient de webAnalyticsFilterLogic.selectedHost.
  • Il est partagé avec le reste de Web analytics, donc le changer sur /web se propage à /web/live et vice-versa.
  • Il est contrôlé par le flag WEB_ANALYTICS_LIVE_DOMAIN_FILTER. Si le flag est désactivé, aucune interface de filtre host n'est rendue et toutes les tuiles affichent les données sur tous les domaines.
  • Définir le filtre host limite : le flux SSE, les requêtes de remontée HogQL (donc les 30 min initiales sont scopes au host), et le compteur « utilisateurs en ligne ».
  • Il n'y a pas de sélecteur de dates, pas de contrôle de comparaison, pas de filtres de propriété, pas de filtre de compte test sur l'onglet Live. Ne promettez pas à l'utilisateur des contrôles qui n'existent pas.

Quand l'utilisateur demande « filtrer le trafic en direct par domaine <host> », dirigez-le vers le sélecteur Domaine en haut de l'onglet Live. Il n'y a pas de paramètre URL pour le définir directement — il persiste dans localStorage via webAnalyticsFilterLogic.

Cartes de statistiques (bande supérieure)

Carte Ce que c'est Fenêtre
Utilisateurs en ligne IDs d'appareils distincts vus dans les 60 dernières secondes 60s
Visiteurs uniques IDs d'appareils distincts dans les 30 dernières minutes 30m
Pages vues Nombre de $pageview dans les 30 dernières minutes 30m

Cartes de contenu

Carte Ce que c'est Notes
Utilisateurs actifs par minute Graphique en barres, visiteurs nouveaux vs fidèles 30 dernières minutes
Pages principales Tableau des classements animé, $pathname + nombre de vues top 10, 30m
Principaux référents Tableau des classements animé, $referring_domain top 10, 30m
Appareils Barres de répartition, $device_type top 6 + Autre
Navigateurs Barres de répartition avec logos, $browser top 6 + Autre
Principaux pays Barres de répartition, $geoip_country_code top 6 + Autre ; remplacé par une carte à onglet Pays/Ville si WEB_ANALYTICS_LIVE_CITY_BREAKDOWN est activé
Requêtes bot par minute Graphique en barres, événements bot / minute flag WEB_ANALYTICS_BOT_ANALYSIS
Trafic bot Bots nommés classés par part d'événements, avec tag de catégorie flag WEB_ANALYTICS_BOT_ANALYSIS ; les lignes sont cliquables et ouvrent un insight pour ce bot spécifique
Pays (carte mondiale) Chaleur de carte mondiale SVG flag WEB_ANALYTICS_LIVE_MAP
Événements en direct Flux d'événements en continu (événement, personne, URL, timestamp) 50 derniers événements

Chaque tuile (sauf le flux d'événements en direct et la carte mondiale) a un bouton « Ouvrir comme nouvel insight » qui ouvre une requête Trends de 7 jours dans l'analytique produit. Les lignes de la tuile de trafic bot sont également individuellement cliquables — cliquer sur une ligne bot ouvre une tendance pour ce bot unique.

Modèle de détection des bots

Les bots sont détectés côté serveur. Trois propriétés virtuelles sont attachées à l'événement avant qu'il ne se retrouve dans ClickHouse :

  • $virt_is_bot — booléen, true s'il est classé comme un bot
  • $virt_bot_name — chaîne, le nom d'affichage du bot (par exemple Googlebot, GPTBot, Claude, Lighthouse, HeadlessChrome)
  • $virt_traffic_category — chaîne, la clé de catégorie : ai_crawler, ai_search, ai_assistant, search_crawler, seo_crawler, social_crawler, monitoring, http_client, headless_browser, no_user_agent, regular

Les tuiles bot en direct comptent les événements « éligibles aux bots » : $pageview, $pageleave, $screen, $http_log, $autocapture. $http_log est inclus parce que la plupart des bots émettent des journaux HTTP côté serveur plutôt que des pages vues JS.

Construction de requêtes d'analytique produit qui reflètent l'onglet Live

Quand l'utilisateur veut une fenêtre plus longue, un insight sauvegardé, une tuile de tableau de bord, ou partager une vue de ce qui est sur l'onglet Live, construisez un insight Trends. Les boutons « Ouvrir comme nouvel insight » dans l'interface utilisent exactement ces recettes :

Répartition du trafic bot (correspond à l'en-tête de la tuile bot)

Un graphique unique de tous les bots au fil du temps, répartis par nom. C'est la vue canonique « qui me crawle ? ».

{
  "kind": "TrendsQuery",
  "interval": "hour",
  "dateRange": { "date_from": "-7d" },
  "series": [
    {
      "kind": "GroupNode",
      "custom_name": "Requests",
      "operator": "OR",
      "math": "total",
      "nodes": [
        { "kind": "EventsNode", "event": "$pageview", "math": "total" },
        { "kind": "EventsNode", "event": "$pageleave", "math": "total" },
        { "kind": "EventsNode", "event": "$screen", "math": "total" },
        { "kind": "EventsNode", "event": "$http_log", "math": "total" },
        { "kind": "EventsNode", "event": "$autocapture", "math": "total" }
      ]
    }
  ],
  "properties": [{ "key": "$virt_is_bot", "value": ["true"], "operator": "exact", "type": "event" }],
  "breakdownFilter": {
    "breakdown": "$virt_bot_name",
    "breakdown_type": "event",
    "breakdown_limit": 25
  },
  "trendsFilter": { "display": "ActionsBarValue" }
}

Exploration d'un bot unique (correspond à une ligne bot cliquée)

{
  "kind": "TrendsQuery",
  "interval": "hour",
  "dateRange": { "date_from": "-7d" },
  "series": [
    /* même GroupNode combiné "Requests" que ci-dessus */
  ],
  "properties": [
    { "key": "$virt_is_bot", "value": ["true"], "operator": "exact", "type": "event" },
    { "key": "$virt_bot_name", "value": ["GPTBot"], "operator": "exact", "type": "event" },
    { "key": "$virt_traffic_category", "value": ["ai_crawler"], "operator": "exact", "type": "event" }
  ],
  "trendsFilter": { "display": "ActionsLineGraph" }
}

Le filtre de catégorie est optionnel — incluez-le quand l'utilisateur demande une combo bot+catégorie spécifique (Lighthouse · headless_browser est un signal différent de Lighthouse · monitoring).

Répartition par catégorie de bot (correspond à la tuile du graphique d'événements bot)

Utilisez la répartition par $virt_traffic_category au lieu de $virt_bot_name quand l'utilisateur veut « crawlers IA vs crawlers SEO vs tout le reste » plutôt que des lignes par bot.

Pages principales / référents / appareils / navigateurs / pays

Pour les tuiles non-bot, utilisez $pageview avec math: unique_users, répartition par la propriété sous-jacente :

Carte propriété de répartition display
Pages principales $pathname ActionsBarValue
Principaux référents $referring_domain ActionsBarValue
Appareils $device_type ActionsPie
Navigateurs $browser ActionsPie
Pays $geoip_country_code WorldMap

Héritez toujours du filtre host de l'onglet en direct quand l'utilisateur parle d'un domaine spécifique — ajoutez { "key": "$host", "value": ["<host>"], "operator": "exact", "type": "event" } à properties.

Valeurs par défaut à utiliser

  • dateRange.date_from : -7d sauf si l'utilisateur nomme une fenêtre — la vue en direct elle-même est 30 min, mais l'utilisateur demande presque toujours une fenêtre plus longue quand il demande une version insight.
  • interval : hour pour les fenêtres de 7 jours, minute seulement pour les fenêtres sous un jour, day pour les fenêtres au-delà de 14 jours.
  • Héritez toujours du filtre host quand un est défini sur l'onglet Live. Ne le supprimez pas silencieusement — cela change la réponse.

Demandes courantes et le bon mouvement

L'utilisateur dit Le bon mouvement
« Que se passe-t-il sur le site maintenant ? » Envoyez-le à /web/live
« Filtrer le trafic en direct vers example.com » Utilisez le sélecteur Domaine en haut de /web/live
« Affiche-moi les bots qui nous crawlent dans les 30 dernières minutes » /web/live → Tuile Trafic bot
« Affiche-moi les bots qui nous crawlent cette semaine » Construisez l'insight « Répartition du trafic bot » ci-dessus avec date_from: -7d
« Combien GPTBot nous frappe-t-il ? » Construisez l'insight « Exploration d'un bot unique », définissez $virt_bot_name à GPTBot
« Pourquoi l'onglet en direct montre X mais mon tableau de bord montre Y ? » L'onglet en direct est une fenêtre glissante de 30 min sur les événements ; les tableaux de bord agrègent sur la plage sélectionnée. Ils ne sont pas directement comparables au-delà des 30 dernières minutes.
« Ajouter une plage de dates à l'onglet en direct » L'onglet Live n'a pas de sélecteur de dates — pour les plages, construisez un insight Trends en utilisant les modèles ci-dessus
« Filtrer le trafic en direct par navigateur / appareil / pays » Non supporté — seul le filtre host existe. Construisez un insight Trends avec la répartition et le filtre pertinents à la place

Pièges

  • Les propriétés virtuelles bot ($virt_*) n'existent que sur les événements traités par l'étape de classification des bots. Elles ne sont pas rétroactives — les événements d'avant la livraison du classifier n'en auront pas. Gardez dateRange.date_from dans les derniers mois pour des résultats bot fiables.
  • Les événements $http_log proviennent de la capture de journal côté serveur, pas de posthog-js. Si un projet n'émet pas $http_log, les bots qui ne lancent pas JS (la plupart des crawlers) seront invisibles pour les tuiles bot.
  • La fenêtre de 30 minutes est une agrégation glissante sur un buffer en mémoire dans le navigateur — actualiser la page rejoue la remontée HogQL, pas le flux SSE. N'interprétez pas un bref « 0 » juste après le chargement de la page comme une vraie baisse.
  • Le filtre host supprime le protocole — passez example.com, pas https://example.com.
  • L'ordre des tuiles est persisté par équipe dans localStorage (sous le flag WEB_ANALYTICS_LIVE_EDIT_LAYOUT). Si la disposition d'un utilisateur semble différente de la vôtre, ce n'est pas un bug.

Skills similaires