mcpField
E
exploring-live-traffic

exploring-live-traffic

github.com/posthog数据与数据库76381 次安装今天更新
代码仓库

关于 exploring-live-traffic

该技能指导 Agent 使用 PostHog Web analytics 的 Live 页面查看实时网站活动,并将实时卡片转为更长时间范围的 Trends 洞察。它也说明可用的域名筛选、机器人流量数据及页面限制。

主要功能

  1. 01解读实时流量卡片
  2. 02说明域名筛选行为
  3. 03识别并分析机器人流量
  4. 04将卡片转为 Trends 洞察
  5. 05说明实时页面的时间范围限制

适用场景

  1. 01查看网站当前访问活动
  2. 02按域名筛选实时数据
  3. 03分析 GPTBot 等机器人流量
  4. 04生成一周机器人流量趋势

MCP 相关

为 Agent 提供使用 PostHog Web analytics 和 Trends 查询的操作指引;未说明 MCP 服务端功能。

安装

复制下面的命令,在终端中运行。

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

安装后在 Claude Code 中输入/exploring-live-traffic确认已加载。

详细介绍

探索 Web analytics 实时流量

Web analytics 的 Live 标签页(/web/live)显示滚动 30 分钟窗口内的实时活动,以及过去 60 秒的“在线用户”数量。你可以在这里了解“我的网站此刻正在发生什么”——页面浏览量、命名机器人、设备、地理位置、热门路径、热门引荐来源,以及实时事件流。

本技能将教你(Agent)如何:

  • 识别适用于 Live 标签页的请求
  • 了解卡片模型(每张卡片显示什么、数据来自哪里)
  • 使用唯一存在的筛选条件(主机)
  • 当用户需要更长时间范围或比实时窗口更深入的细分时,构建与 Live 卡片相匹配的产品分析洞察

Live 标签页不是 HogQL 试验场——其数据来自实时数据流,并由短时间范围的 HogQL 回填提供支持。当用户想用 HogQL 查询“此刻”的数据时,请引导他们前往该标签页;当他们想查看历史细分时,请使用下面的模式构建洞察。

何时使用此技能

在用户遇到以下情况时使用此技能:

  • 询问“现在有哪些人在我的网站上?”、“实时发生了什么?”、“显示实时流量”
  • 提到“Live”标签页、“Live 仪表板”或 Live 页面(/web/live)
  • 询问实时机器人流量(“哪些机器人正在抓取我的网站?”、“GPTBot 在抓取我们吗?”)
  • 想按域名 / 主机筛选实时流量
  • 想将 Live 标签页上的数据与更长时间范围的数据进行比较,例如“Live 标签页显示 GPTBot 正在大量访问我们,你能给我一张 7 天的图表吗?”

对于非实时 Web analytics 工作,请勿使用此技能——这类任务请使用标准的 Web analytics 标签页(/web)。

标签页结构

URL:/web/live

该标签页包含两个筛选控件和一个卡片网格。日期范围是固定的:除“在线用户”外,所有数据均使用滚动 30 分钟窗口(“在线用户”使用过去 60 秒)。

筛选条件

Live 标签页只有一个筛选条件:主机(域名)选择器。

  • 数据来自 webAnalyticsFilterLogic.selectedHost。
  • 它与 Web analytics 的其他页面共享,因此在 /web 上更改后会同步到 /web/live,反之亦然。
  • 此筛选条件受功能标志 WEB_ANALYTICS_LIVE_DOMAIN_FILTER 控制。如果该标志关闭,则不会显示主机筛选界面,所有卡片都会显示所有域名的数据。
  • 设置主机筛选条件会缩小以下数据范围:SSE 数据流、HogQL 回填查询(因此初始 30 分钟的数据会限定到所选主机),以及“在线用户”数量。
  • Live 标签页没有日期选择器、比较控件、属性筛选条件或测试账户筛选条件。请勿向用户承诺不存在的控件。

当用户询问“按域名 <host> 筛选实时流量”时,请引导他们使用 Live 标签页顶部的域名选择器。没有 URL 参数可直接设置该筛选条件——它通过 webAnalyticsFilterLogic 保存在 localStorage 中。

统计卡片(顶部栏)
卡片说明时间窗口
在线用户过去 60 秒内出现的不同设备 ID 数量60s
独立访客过去 30 分钟内的不同设备 ID 数量30m
页面浏览量过去 30 分钟内的 $pageview 计数30m
内容卡片
卡片内容备注
每分钟活跃用户柱状图:新访客与回访访客最近 30 分钟
热门页面动态排行榜,$pathname + 浏览量前 10 名,30 分钟
热门引荐来源动态排行榜,$referring_domain前 10 名,30 分钟
设备分类统计条形图,$device_type前 6 名 + 其他
浏览器带徽标的分类统计条形图,$browser前 6 名 + 其他
热门国家/地区分类统计条形图,$geoip_country_code前 6 名 + 其他;如果启用了 WEB_ANALYTICS_LIVE_CITY_BREAKDOWN,则替换为国家/城市标签卡片
每分钟机器人请求数柱状图:每分钟机器人事件数标记 WEB_ANALYTICS_BOT_ANALYSIS
机器人流量按事件占比排序的具名机器人,带类别标签标记 WEB_ANALYTICS_BOT_ANALYSIS;可点击各行,打开针对该机器人的洞察
国家/地区(世界地图)SVG 世界地图热度图标记 WEB_ANALYTICS_LIVE_MAP
实时事件流式事件动态(事件、人员、URL、时间戳)最近 50 个事件

除实时事件流和世界地图外,每个卡片都有一个“作为新洞察打开”按钮,可在产品分析中打开 7 天趋势查询。机器人流量卡片中的各行也可以单独点击,点击某个机器人行会打开该机器人的趋势图。

机器人检测模型

机器人在服务器端检测。事件写入 ClickHouse 前会附加三个虚拟属性:

  • $virt_is_bot — 布尔值,如果被归类为机器人则为 true
  • $virt_bot_name — 字符串,机器人的显示名称(例如 Googlebot、GPTBot、 Claude、Lighthouse、HeadlessChrome)
  • $virt_traffic_category — 字符串,类别键: ai_crawler、ai_search、ai_assistant、search_crawler、seo_crawler、 social_crawler、monitoring、http_client、headless_browser、no_user_agent、 regular

实时机器人的卡片会统计“符合机器人统计条件”的事件:$pageview、$pageleave、$screen、 $http_log、$autocapture。之所以包含 $http_log,是因为大多数机器人会发出服务器端 HTTP 日志,而非 JS 页面浏览事件。

构建与实时标签页对应的产品分析查询

如果用户需要更长的时间范围、已保存的洞察、仪表板卡片,或想分享实时标签页中的视图,请构建趋势洞察。界面中的“作为新洞察打开”按钮使用的正是以下配置:

机器人流量细分(与机器人卡片标题对应)

按名称细分的所有机器人随时间变化的单个图表。这是查看“哪些机器人在抓取我的网站?”的标准视图。

{
  "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" }
}
单个机器人深入分析(与点击机器人行对应)
{
  "kind": "TrendsQuery",
  "interval": "hour",
  "dateRange": { "date_from": "-7d" },
  "series": [
    /* same combined "Requests" GroupNode as above */
  ],
  "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" }
}

类别筛选条件为可选项 — 当用户询问特定的机器人+类别组合时再添加(Lighthouse · headless_browser 与 Lighthouse · monitoring 代表不同信号)。

机器人类别细分(与机器人事件图表磁贴一致)

如果用户想看“AI 爬虫与 SEO 爬虫及其他流量”的对比,而不是按机器人逐行查看,请使用 $virt_traffic_category 进行细分,而不是 $virt_bot_name。

热门页面 / 引荐来源 / 设备 / 浏览器 / 国家/地区

对于非机器人磁贴,使用 $pageview,并设置 math: unique_users,按底层属性细分:

磁贴细分属性显示方式
热门页面$pathnameActionsBarValue
热门引荐来源$referring_domainActionsBarValue
设备$device_typeActionsPie
浏览器$browserActionsPie
国家/地区$geoip_country_codeWorldMap

如果用户询问特定域名,请始终继承实时标签页中的主机过滤条件——将 { "key": "$host", "value": ["<host>"], "operator": "exact", "type": "event" } 添加到 properties 中。

建议使用的默认值
  • dateRange.date_from:除非用户指定时间范围,否则使用 -7d——实时视图本身显示 30 分钟的数据,但用户请求洞察时几乎总是想看更长的时间范围。
  • interval:7 天时间范围使用 hour,不足一天的时间范围仅使用 minute,超过 14 天的时间范围使用 day。
  • 如果实时标签页设置了主机过滤条件,始终继承该过滤条件。不要悄悄删除它——这会改变答案。

常见请求及正确处理方式

用户的说法正确处理方式
“现在网站上发生了什么?”将用户引导至 /web/live
“将实时流量过滤为 example.com”使用 /web/live 顶部的域名选择器
“显示过去 30 分钟内抓取我们网站的机器人”/web/live → 机器人流量磁贴
“显示本周抓取我们网站的机器人”使用上文的“机器人流量细分”洞察,并设置 date_from: -7d
“GPTBot 给我们带来了多少流量?”使用“单个机器人深入分析”洞察,并将 $virt_bot_name 设置为 GPTBot
“为什么实时标签页显示 X,而我的仪表板显示 Y?”实时标签页显示的是事件的 30 分钟滑动时间窗口;仪表板则按所选时间范围汇总数据。除最近 30 分钟外,两者无法直接比较。
“为实时标签页添加日期范围”实时标签页没有日期选择器——如需查看特定时间范围,请使用上文的模式构建趋势洞察
“按浏览器 / 设备 / 国家/地区筛选实时流量”不支持——目前只有主机过滤条件。请改用相关细分条件和过滤条件构建趋势洞察

注意事项

  • Bot 虚拟属性($virt_*)仅存在于经过 Bot 分类步骤处理的事件中,且不会追溯补录——分类器上线前的事件不会包含这些属性。为确保 Bot 结果可靠,请将 dateRange.date_from 设置为最近几个月内的日期。
  • $http_log 事件来自服务器端日志采集,而非 posthog-js。如果项目不产生 $http_log,不运行 JS 的 Bot(大多数爬虫)就不会显示在 Bot 磁贴中。
  • 这 30 分钟的时间窗口是在浏览器内存缓冲区中进行的滑动聚合——刷新页面时会重放回填 HogQL,而不是 SSE 流。页面加载后短暂显示“0”并不代表数据真的下降。
  • 主机筛选器会去掉协议——请传入 example.com,而不是 https://example.com。
  • 磁贴顺序会按团队保存在 localStorage 中(位于功能标志 WEB_ANALYTICS_LIVE_EDIT_LAYOUT 下)。如果某位用户的布局与你的不同,这不是 Bug。

评论

支持 Markdown