归档数据是在归档过程中通过聚合日志数据产生的。 Matomo(之前叫Piwik)聚合并持久化两类归档数据: Metrics:简单的数值指标 Reports:二维数组类型 报表通常包含数值指标,也包含其他数据(附加的或者替换数值指标)。 报表和数值指标由插件进行定义。插件可以扩展matomo分析出的数据。Matomo内核预定义了一些核心指标(Core metric)。 欢迎加入Matomo中文网。请加入官方QQ群255820112(点击滚动至本页末可扫描二维码),随时提问,有问必答。 数据子集参数 报表和数值指标提供了数据的分析结果。这个分析结果由下面几个参数进行范围限制: 站点ID 周期(Period) 分段(Segments) 站点ID限制了数据只属于特定站点。在HTTP请求中用idSite参数进行表示。 周期限制了数据只处于特定时间段。在HTTP请求中用date和period来表示(一个表示日期,一个表示按天还是按周按月按年)。 分段(segment)是以访客属性构成的布尔表达式,它类似于SQL语句中的where条件。在HTTP请求中用segment参数进行表示。通过它可以限定得到任何子集的访问数据。 分析参数是以metadata的方式存储在报表里。也就是存储在DataTable对象的metadata中。 数值指标 核心指标 核心数值指标是由Piwik内核定义的,而不是由插件定义的。 新的报表如果要分析访客、行为类型或转化的话,应当包含这些指标。 访客指标 名称 指标ID 描述 访问(visits) nb_visits 访问数 同一访客在间隔不超过30分钟的一系列访问事件就构成一次访问。 独立访客(Unique visitors) nb_uniq_visitors 独立访问源的数量 访问源代表一个被追踪访问的对象。 行为数(Actions) nb_actions 被追踪行为数 一个行为就是一次被Matomo追踪的事件。 最大行为数(Max Actions) max_actions 一次访问中发生的最大行为数。 总访问时长(Sum Visit Length) sum_visit_length 每次访问的时间总和 弹出数(Bounce Count) bounce_count 只发生一次行为的访问数 转化访问数(Converted Visits) nb_visits_converted 至少发生一次转化的访问数 … Continue reading “Matomo数据模型系列文章之(四)归档数据”
Month: December 2018
Matomo数据模型系列文章之(三)归档过程
日志数据(Log Data)不会被直接用于终端用户的报告。因为一个报告所需要的数据很多,直接使用会直接影响报告的呈现效率。 为了解决这个问题,归档过程就应运而成,它会将日志数据归档为归档数据。然后报表就能使用这些归档数据呈现报表了。 欢迎加入Matomo中文网。请加入官方QQ群255820112(点击滚动至本页末可扫描二维码),随时提问,有问必答。 举例 让我们来举个例子,有个网站每天会有1000个页面访问。它的日志数据就会是下面的样子(省略号表示其他属性) 。 URL Time … /homepage 17:00:19 … /about 17:01:10 … /homepage 17:05:30 … /categories 17:06:14 … /homepage 17:10:03 …… 归档过程聚合原始数据成归档数据。如果你想构建每个页面访问次数的报表(找到最热门的网页),归档会列举所有的网页并计算每个网页的访问次数。 URL Page views /homepage 205 /categories 67 /about 5 … 这个数据就是归档数据。 对1000个PV进行预计算看起来似乎是多余的,不过当处理大量数据的时候就尤显必要了。 何时归档 默认情况下,归档数据是按需计算和缓存的。当某个报表被请求的时候,Piwik会检查所需的归档数据是否存在,如果不存在它会启动归档。 提前归档 当追踪的网站流量很大时,按需归档会花费很多时间。在这种情况下,按需归档必须被禁用,取而代之的是将归档变成后台定时任务。 提前归档可以针对每个站点和日期区间(除了自定义日期范围),命令如下: $ ./console core:archive 通常设置的方法是使用cron(Linux定时任务)固定间隔时间执行。 这个命令会记住最后运行的位置,只有在有新记录的时候才会继续执行。 如何执行 日志数据会按照站点、周期(日、周、月、年或自定义时间段)、分段条件(Segment)进行归档。 归档的逻辑是由插件来定义的。插件定义的所有报表会被一起归档,而不是单个单个归档。 如果分段条件(Segment)没有被指定,并且数据没找到,每个插件的每个报表会一次性被生成和缓存。如果分段条件被指定,所请求数据对应插件的所有报表会被生成和缓存。 周期聚合 归档数据的运算方式依赖于周期的类型: 按天数据是直接归档原始日志数据 … Continue reading “Matomo数据模型系列文章之(三)归档过程”
Matomo数据模型系列文章之(二)日志数据
HTTP追踪接口(如Piwik\Tracker 组件)用于收集原始分析数据,这些数据被称为日志数据。 有以下几种日志数据:访问(Visits),行为类型(Action Types),转化(Conversions),电子商务产品(Ecommerce Items) 日志数据由归档过程处理成归档数据。 日志数据从来不会被直接用于Matomo(之前叫Piwik)报告,而是归档数据直接用于报告。唯一的一个例外就是实时(Live)插件,它用日志数据直接生成实时报告。 欢迎加入Matomo中文网。请加入官方QQ群255820112(点击滚动至本页末可扫描二维码),随时提问,有问必答。 持久化 日志数据在PHP中用Piwik\Tracker\Visit对象来表示,并被存储在以下几个表中: log_visit:每次访问对应一条记录(回头客也是) log_action:包含网站上各种类型的行为(如独立url,网页标题,下载网址) log_link_visit_action:访客的每个行为对应一条记录(网页浏览) log_conversion:包含访问过程中所有的转化(与目标匹配的行为) log_conversion_item:包含电子商务转化条目 关于这些表的内容(和它们对应的PHP实体)在“Matomo数据库结构”中有详细解释。
Matomo数据模型系列文章之(一)概述
如果你有以下问题,请详细阅读数据模型系列文章 : Matomo是如何聚合、存储、提供分析数据给插件的? 什么是归档处理?它是如何被用作数据聚合和缓存的? 如何使用PHP存储和操作分析数据? 什么是分段数据(Segments)?又如何自定义呢? 欢迎加入Matomo中文网。请加入官方QQ群255820112(点击滚动至本页末可扫描二维码),随时提问,有问必答。 关于分析 分析数据意味着在很多东西中找到符合特定模式的目标。在Matomo中,这些东西就是访问(visits),网页行为(Web actions)和目标转化(Goal Conversions)。 我们通过缩小(reduce)东西的集合来找到目标。换句话说,我们通过将原始数据分组创建子集来查找目标。这样的子集数据更具识别性和意义。 在Matomo中分组的结果就是分析数据(analytics data)。分析数据通过API被存储、展示和曝光。以下内容涉及分析数据包含什么,如何计算和存储数据,如何将数据展示给用户。 数据工作流 以下是数据的工作流: 原始数据(raw data)通过追踪器进行收集,然后存储为日志数据(log data) 归档处理(archiving process)聚合日志数据成归档数据(archive data)。 归档数据被加载并呈现到报表(reports)中 下一步学习内容 • 日志数据 • 归档过程 • 归档数据 • 报表
Matomo初探系列之(三):基于扩展点进行二次开发
插件可以通过以下两种方式来扩展Matomo功能: 使用事件(Events),你可以理解为系统已经埋好了钩子,自己的方法只要关联到钩子上即可被执行 通过实现或者继承Matomo内核的特定类,可以实现自动被识别并运行(Matomo是通过目录扫描方式获取所有实现类或者子类的) 相关学习内容如下: 了解系统提供的事件,然后为事件添加新的行为 继承Archiver类,可以为添加新的归档任务 后续不断补充
Matomo初探系列之(二)Matomo是如何处理HTTP请求的
发送到Matomo报表端(相对于Matomo追踪客户端)的任何请求都会到达根目录的index.php。此文件会创建一个FrontController实例,并分发当前请求。 FrontController会分析请求中携带的参数module和action。如果action没有找到,就会使用默认index。然后Matomo会调用匹配的控制器方法。查找路径是 Piwik\Plugins\<module>\Controller::<action> 案例: module=MyPlugin&action=hello会调用: Piwik\Plugins\MyPlugin\Controller::hello() module=MyPlugin 会调用(没指定action,找默认index方法) Piwik\Plugins\MyPlugin\Controller::index() 控制器方法需要做一件事,那就是返回一个字符串响应(或任何可以被类型转换为字符串的对象)。这些字符串可以是HTML,JSON,…. 最为一名插件开发人员,你可以按照自己的方式去返回。不过,一般的做法是先创建一个Matomo试图,然后从API获取数据,最后呈现视图,如下: class Controller extends \Piwik\Plugin\Controller { public function index() { $view = new View(“@MyPlugin\index.twig”); $view->data = \Piwik\Plugins\MyPlugin\API::getInstance()->getData(); return $view->render(); } }
Matomo初探系列之(一)Matomo工作原理
请阅读此文,如果: 你想快速了解matomo是如何工作的 你想为matomo做出点贡献或者想了解它的架构 本文假定你已经对web技术有一定的了解,比如web应用、服务器、HTTP协议、PHP等等 介绍 Matomo主要做一下两件事情: 收集并存储分析数据 对已经存储的数据出具报表 为了实现上述目的,Matomo由以下几个部分共同参与完成: JavaScript追踪器由Matomo提供,可被包含到网页中 追踪器可以收集所在网页的数据,然后通过HTTP追踪接口发送给Matomo 归档任务运行并预处理数据(实时动态地或通过cron任务) 数据通过报表的形式进行展现,它们可以通过WEB接口或者HTTP报表接口来访问 欢迎加入Matomo中文网官方QQ群255820112(点击滚动至本页末可扫描二维码),随时提问,有问必答。 插件体系 Piwik的代码库有以下两部分组成: Matomo内核:它提供应用的基础架构和扩展点。 插件:它使用内核提供的扩展点来增加新的行为和内容到应用。 插件不仅是为第三方开发者定制开发设计;大部分的matomo功能也是基于插件形式开发的。Matomo内核被设计的尽量小。 这样,就存在两种插件: 默认插件:提供Matomo的基本特性,它们随版本一起发布。 可选插件:可以被手工安装(复制插件到plugin目录)或在页面中通过Piwik市场进行安装 代码库 下面是Matomo的代码库的主要文件和目录: config/ #配置文件目录 core/ # Matomo内核类 lang/ # 多语种文件 plugins/ # 插件类及相关的静态文件 tests/ vendor/ # 利用Composer安装的类库 console # 命令行执行文件 index.php # WEB应用和HTTP接口的入口 piwik.php # HTTP追踪API的入口 piwik.js # 集成到网站的javascript 接口 Web应用 WEB应用的入口是根目录下的index.php。这个文件初始化所有事情并调用FrontController类。 前台控制器会基于URL参数将HTTP请求路由到特定插件的控制器。 … Continue reading “Matomo初探系列之(一)Matomo工作原理”
如何查看Matomo/Piwik版本号
有以下几种方法知道你所使用的Matomo (Piwik)的版本号: 菜单右上角, 点击 “Help” 小图标。 帮助页的标题会显示“关于Matomo (Piwik) X.Y.Z” (X.Y.Z 就是Matomo版本号)。 菜单右上角, 点击“Settings”,然后点击左边菜单的“API”。滚动到API.getPiwikVersion 然后点击样例链接查看Matomo (Piwik) 版本号。 查看文件core/Version.php 欢迎加入Matomo中文网官方QQ群255820112(点击滚动至本页末可扫描二维码),随时提问,有问必答。 如果想知道每个插件的版本号,请使用 SELECT * FROM pw_option WHERE option_name LIKE “%version%” 备注:SQL语句中的表名前缀pw_请根据实际情况换掉。
Matomo日志-定位Matomo问题的利器
当matomo出现报错信息,而你无从下手的时候,请记得详细阅读下以下日志文件: matomo日志:tmps/logs/piwik.log WEB应用日志:apache日志或者nginx日志 PHP相关日志:apache error日志或者php-fpm日志 欢迎加入Matomo中文网官方QQ群255820112(点击滚动至本页末可扫描二维码),随时提问,有问必答。 在做matomo插件开发的时候,也最好养成在关键逻辑或异常逻辑的地方写日志的好习惯,请参考matomo日志系统 https://developer.matomo.org/guides/logging
Matomo标签管理器系列之七:数据层(Data Layer)
数据层是为高级开发人员和分析人员设计的,目的是为了更充分地利用标签管理系统。 为了简单起见,数据层主要用于访问不被展示到页面上的数据。最好的例子是电子商务分析特性。当客户需要核对订单的时候,订单确认页上会显示购买金额和数量。接下来它们可能不再被列举在页面上了。这样,你需要找到一种方式让标签管理器知道。这是我们就可以用到数据层(Data Layer)。 欢迎加入Matomo中文网官方QQ群255820112(点击滚动至本页末可扫描二维码),随时提问,有问必答。 数据层可以使得收集数据的方式统一化。当使用标签管理器的时候,你通常会基于网站的源代码定义变量,比如基于DOM元素(如ID,class等)。但是当改变了源码的时候,问题来了,追踪失效。 数据层可以有效解决此问题,它保证了在页面呈现之初数据就被正确收集。 使用数据层意味着你需要在网站内容中插入额外的源码。它不能通过标签管理器来添加。 为了引入数据层,你需要在容器标签前添加如下代码。 <script> var _mtm = _mtm || []; </script> 上述数据层为空,你需要插入额外的代码以将变量保存到数据层,如下面的写死代码。 <script> var _mtm = _mtm || []; _mtm.push({‘weather’: ‘sunny’}); </script> 一旦定义好了,你就可以直接在debug模式看到数据层新增的变量weather了。 在上述截屏中,我们想将用户所在地的天气保存到数据层。由于你需要的数据是动态的,你需要开发人员帮你添加动态获取天气的代码。 <script> var _mtm = _mtm || []; _mtm.push({‘weather’: ‘MY CODE HERE TO GET THE DATA FROM A WEATHER API’}); </script> 完成之后,你可以在标签管理器中很简单地创建一个变量,这个变量可以被任何标签使用。 然后你就可以对weather进行报表分析了,如下图 如果你想从谷歌标签管理器迁移到Matomo标签管理器,我们的标签管理系统支持谷歌标签管理器中定义的数据层。这样如果你的数据层如下: <script> dataLayer = … Continue reading “Matomo标签管理器系列之七:数据层(Data Layer)”