Matomo如何工作

关于本指南

阅读本指南,如果

  • 你喜欢来了解Matomo是如何工作的
  • 你喜欢为马托莫做出贡献,并想了解它的建筑

本指南假设您:

  • 有一个对网络技术有基本的了解比如网络应用、服务器、HTTP、PHP……

简介

Matomo是一个主要做两件事的应用程序:

  • 收集和储存分析数据
  • 提供报告存储的数据

为了实现这一结果,Matomo的几个部分发挥了作用:

  • JavaScript追踪是由Matomo通过HTTP服务,以便网站可以包括在他们的页面
  • 跟踪器在包含它的网页上收集数据,并通过调用将数据发送给MatomoHTTP跟踪API
  • 存档任务运行并对数据进行预处理(在运行中或通过cron任务)
  • 数据在报告,可透过网页或HTTP报表API

插件架构

Matomo的代码库由:

  • Matomo核心,它提供了应用程序的基础以及扩展点
  • 插件,它们使用扩展点向应用程序添加行为和内容

插件不仅仅针对想要定制Matomo的第三方开发人员:Matomo的大部分都是通过插件实现的。Matomo Core设计得越小越好。

因此,有两种类型的插件:

  • 默认插件提供Matomo的基本特性:它们包含在存储库和发行版中
  • 可选插件可以手动安装(通过在插件/文件夹)或透过Matomo的市场在web界面中

代码库

以下是组成Matomo代码库的主要文件和文件夹:

配置/核心/ lang / # # Matomo核心类翻译插件/ #插件类以及它们的资产测试/供应商/ #库由作曲家node_modules安装/ # UI库由npm控制台安装CLI接口index . php # #入口点的web应用程序的入口点和HTTP报告HTTP API matomo.php #入口点跟踪HTTP API piwik.php #入口点跟踪API——向后兼容性piwik.js # JavaScript追踪中js/ #包括未简化的js跟踪器和PHP文件,允许用户使用js跟踪代码,而不需要在名称中包含matomo或piwik。

Matomo使用作曲家将其依赖项(PHP库)安装到供应商/目录和npm来安装节点JavaScript库到node_modules目录中。来自node_modules目录被提交到Git存储库中,所以用户不需要运行任何npm命令来保持包的更新,这样我们就可以保证他们使用正确的版本。

插件结构

点击这里了解插件目录结构的更多信息

安装和配置

Matomo通过检查是否已安装配置/ config.ini.php文件存在。在安装过程中,这个文件将被创建,Matomo通过一个命令知道安装是否正在进行(一般)installation_in_progress = 1在配置文件中设置。

Matomo有很多配置改变默认行为。该配置将由Matomo管理员编辑。

插件开发人员也可以使用依赖注入来改变Matomo的工作方式。

接口

Matomo用户界面

web应用程序的入口点是index . php在根上。该文件初始化所有内容并调用FrontController类。

Matomo的用户界面建立在HTML和JavaScript之上。而有些页面是PHP控制器提供的HTML文档(使用树枝模板引擎), Matomo UI的某些部分是用AngularJS构建的(目前正在迁移到Vue.js)。

AngularJS和Vue.js是前端JavaScript框架。这意味着用户界面是在客户端构建的,数据从HTTP Reporting API(下一节将描述)作为JSON获取。这也意味着更好的用户体验,因为它可以让Matomo开发人员构建更加动态和响应式的应用程序。

Matomo的长期路线图的一部分是将Matomo的UI越来越多的部分转移到Vue.js。

请在“使用Matomo的UI”指南

要准确理解Matomo如何处理和处理前端资产,如JavaScript和LESS,请阅读“asset-pipeline”指南”

控制器

前端控制器将传入的HTTP请求路由到插件控制器根据URL参数:

/ index . php ?模块= CoreHome&action =指数……

在本例中,前端控制器将调用动作指数的控制器上CoreHome插件。在文件中插件/ CoreHome / Controller.phpindex ()方法将被调用。

插件控制器返回一个字符串(通常是HTML内容)在HTTP响应中发送。

小部件和报告

如果找不到指定的控制器动作,Matomo将检查是否有匹配的小部件或报告具有此名称。

如果找到一个,它将调用呈现()小部件的方法或报表的方法。这是在CoreHome.renderWidget而且CoreHome.renderReportWidget控件中找到匹配的小部件或报告ControllerResolver

HTTP报告API

HTTP报表API工作原理类似于web应用程序。它的角色是服务报告机器可读的格式(XML, JSON,…)。它还提供关于各种实体的信息,如网站、用户、目标等等。

它有相同的入口点,也由前端控制器分派。

模块/ index . php ? = api方法= SEO.getRank&……

这个HTTP请求将像其他调用控制器一样被处理:插件名是API也没有行动给出了,又会落回哪一个指数

Piwik \ API插件\ \控制器类将被调用,它将把调用分派给目标API,充当API调用的第二个前端控制器。在我们的例子中,方法SEO.getRank意味着Piwik \插件\ SEO \ API: getRank ()方法将被调用。

API请求的身份验证使用token_authURL参数,通常不会加载会话,除非force_api_session = 1参数存在。了解更多Matomo中的身份验证

HTTP跟踪API

HTTP跟踪API让JavaScript跟踪器提交分析数据被保存在Matomo(以前的Piwik)。

它的入口点不同于Matomo的web应用程序和HTTP报告API:它是通过matomo.php文件。一些较老的Matomo装置可能仍在使用piwik.php

还有各种其他的跟踪客户

在跟踪期间,不是所有的插件都被加载。出于性能考虑,只有在跟踪过程中被识别为需要的插件才会被加载。

任何跟踪的数据都存储在log_ *表。这些表存储所有原始数据,然后将这些数据聚合到报告归档中,见下文。对于访问者的每次新访问和每次操作,在各自的日志表中创建一个新行。一些日志表如log_visit也会在跟踪请求期间更新。

命令行

类提供了一个命令行API。/控制台脚本。此脚本使用Symfony控制台组件

插件可以公开CLI命令,可以像这样调用:

。/控制台visitorgenerator: generate-visits

命令类位于插件/ * /命令并由Matomo自动检测。

请在“命令行上的Matomo”指南

数据模型、处理和存储

Matomo允许您收集分析数据,然后作为报告检索。让我们看看在这之间发生了什么,以及Matomo如何建模、处理和存储数据。

日志数据:原始分析数据

HTTP跟踪API(即Piwik \追踪组件)接收分析数据,我们称之为日志数据”。

日志数据在PHP中表示为Piwik \追踪\访问对象,并存储到以下表中:

  • log_visit每次访问(回访访客)包含一个条目
  • log_action包含网站上所有可能的操作类型(例如,唯一的url,页面标题,下载url…)
  • log_link_visit_action每个访问者的操作包含一个条目(页面视图,…)
  • log_conversion包含访问期间发生的转换(与目标匹配的操作)
  • log_conversion_item包含电子商务转换项目

这些表是为快速插入而设计和优化的,因为跟踪API需要尽可能快,以便处理流量大的网站。

这些表(及其相关PHP实体)的内容将在“Matomo数据库模式”指南

存档过程

上面的日志表并不是为提取高级报告而设计或优化的:当有大量数据时,将日志条目聚合到日、周或月可能会变得过于密集。

归档的过程将读取日志数据(也称为原始数据)并聚合此数据以生成“归档数据(也称为报告)。这是针对某一天的报告所做的。计算特定一天的访问次数的示例查询如下所示Select count(*) as nb_visited from log_visit where idsite = 1 and visit_last_action_time >= '2021-08-04 00:00:00' and visit_last_action_time < '2021-08-05 00:00:00'

所有其他期间(一年,和自定义日期范围),由各子期间的报告数据汇总而成。这意味着对于这些时间段,我们不查询日志数据,而是通过聚合一周内每天的报告来生成一周的报告数据。为了汇总一个月的数据,它将汇总该月内不同周和天的报告。为了汇总该年的数据,它将汇总该年内每个月的报告数据。我们没有从这些时期的日志数据中生成这些报告,因为生成如此长时间的报告将花费太长时间。唯一的例外是一些指标,比如独立访客和独立用户可能由这些时期的原始数据产生

归档数据可以是:

  • 数字度量记录:简单的数值(如页面浏览量或访问量)

    存储在archive_numeric_ *表。值存储为float。

  • 表记录:二维数据(可以是数值,也可以是其他任何数据),表示为数据表对象

    存储在archive_blob_ *表。数据表对象被序列化为字符串并压缩以存储为在表格中。

存储在数据库中的数字和表记录对象都被命名记录来区分它们数据表由我们命名的Matomo API操作和返回的对象报告

每个数值度量或表记录都在每个聚合级别上处理和存储:日、周和月。例如,这意味着“Entry pages”报表将针对每月的每一天以及每周、每月、每年和自定义日期范围进行处理和存储。这些数据是冗余的,但在请求特定时间段时,这对于保证快速性能是必不可少的。

由于归档数据必须快速查询,因此每月将其划分在单独的表中。然后我们会有:

  • archive_numeric_2021_10: 2021年10月的指标
  • archive_blob_2021_10: 2021年10月的报告
  • archive_numeric_2021_11: 2021年11月的指标
  • archive_blob_2021_11: 2021年11月的报告
  • ...

文档中详细解释了存档表的内容“Matomo数据库模式”指南.文档中详细解释了存档过程“存档”指南

自动存档与浏览器存档

默认情况下,每当在浏览器中或通过API请求这些报告时,Matomo都会“按需”生成这些报告。这可能会降低Matomo的速度,因此可以进行配置自动存档(有时也称为预归档),它将通过cron在后台定期生成这些报告。

要了解更多关于存档的知识,请阅读我们的归档流程指南和我们的存档行为规范

从档案数据到报告

如上所示,数据存储为数值指标或表记录。

报告是数据表对象提供的由插件定义的API类.API类访问持久指标或记录,并将它们转换为可呈现的报告。

有时,不同的API报告可以使用一个持久存档记录。

中,可以阅读有关如何创建和提供报告的详细信息“报告”指南

Matomo的扩展点

Matomo Core只定义了主要流程和行为。插件可以通过几个插件扩展和定制它们扩展点

  • 注册,事件,或触发事件
  • 实现特殊类这是Matomo所认可的
  • 扩展某些抽象基类

有关此主题的更多信息,请参阅“Matomo的扩展点”指南

其他宝贵资源

作为开发人员或系统管理员,您可能还想了解:

Baidu