>原文地址:https://developer.piwik.org/guides/how-piwik-works
翻譯工具:Chrome自帶,有些不通常的地方,人工修改了一下,英語太菜,見諒
#### 介紹
Piwik是一個應用程序,主要有兩件事情:
- 收集和存儲分析數據
- 提供存儲數據的報告
為了實現這一結果,派維克的幾個部分發揮作用:
- Piwik的JavaScript的跟蹤器,包含在網頁中
- 跟蹤器收集包含在其中的網頁上的數據,并通過調用HTTP跟蹤API將其發送給Piwik
- 該歸檔任務運行和前處理數據(無論是在飛行中或通過定期任務)
- 數據在報告中公開,可通過Web界面或HTTP報告API訪問
#### 插件架構
Piwik的代碼庫包括:
- Piwik Core,它提供了應用程序的基礎以及擴展點
- 插件,使用擴展點添加行為和內容到應用程序
插件不僅僅針對要定制Piwik的第三方開發人員:Piwik的大部分都是通過插件實現的。派維克核心意圖盡可能的小。
因此,有兩種插件:
- 默認插件提供Piwik的基本功能:它們包含在存儲庫和發行版中
- 可以手動安裝可選插件(通過將其復制到plugins/文件夾中)或通過Web界面中的Piwik的MarketPlace進行安裝
- 代碼庫
以下是構成Piwik代碼庫的主要文件和文件夾:
```shell
config/
core/ # Piwik Core類
lang/ # 翻譯
plugins/ # 插件類及其資產
tests/
vendor/ # 由Composer安裝的庫
console # CLI界面的入口點
index.php # Web應用程序和HTTP報告API的入口點
piwik.php # HTTP跟蹤API的入口點
piwik.js # JavaScript跟蹤器,需要在網站中包含piwik.js
```
Piwik使用Composer將其依賴項(PHP庫)安裝到vendor/目錄中。
#### 接口
##### Web應用程序
Web應用程序的入口點index.php位于根目錄中。該文件初始化所有內容并調用FrontController該類。
前端控制器將根據URL參數將傳入的HTTP請求路由到插件控制器:
```html
/index.php?module=CoreHome&action=index&…
```
在這個例子中,前端控制器將調用插件index控制器上的動作CoreHome。
插件控制器返回在HTTP響應中發送的視圖(通常為HTML內容)。
##### 用戶界面
Piwik的用戶界面基于HTML和JavaScript。雖然一些頁面是由PHP控制器(使用Twig模板引擎構建)提供的HTML文檔,但Piwik UI的某些部分是由AngularJS構建的。
AngularJS是一個前端JavaScript框架,這意味著用戶界面構建在客戶端,數據從HTTP報告API中以JSON格式獲取。這也意味著更好的用戶體驗,因為它讓Piwik開發人員構建了一個更加動態和反應靈活的應用程序。
派維克的長期路線圖的一部分是將派維克UI的越來越多的部分移到AngularJS。
在“使用Piwik的UI”指南中閱讀更多信息。
##### HTTP報表API
HTTP報告API與Web應用程序類似。它的作用是以機器可讀格式(XML,JSON,...)提供報告。
它具有相同的入口點,也由前端控制器調度。
```html
/index.php?module=API&method=SEO.getRank&…
```
這個HTTP請求將像對控制器的任何其他調用一樣處理:插件名稱是API和否action,這將返回到index。
該Piwik\Plugin\API\Controller班將被調用,它將派遣調用API針對性,充當API調用第二前端控制器。在我們的例子中,SEO.getRank意味著該Piwik\Plugin\SEO\API::getRank()方法將被調用。
##### HTTP Tracking API
此HTTP API允許JavaScript跟蹤器將分析數據保存在Piwik中。
它的入口點與Piwik的Web應用程序和HTTP報告API不同:它是通過該piwik.php文件。
在“跟蹤HTTP API”參考中了解更多信息。
命令行
Piwik通過./console腳本提供了一個命令行API 。此腳本使用Symfony控制臺組件。
插件可以顯示可以調用的CLI命令,如下所示:
```shell
./console visitorgenerator:generate-visits
```
命令類位于plugins/*/CommandsPiwik并自動檢測。
閱讀更多關于“Piwik在命令行”的指南。
#### 數據模型,處理和存儲
Piwik可以讓您收集分析數據,然后稍后檢索為報告。讓我們看看Piwik如何模擬,處理和存儲數據。
日志數據:原始分析數據
HTTP跟蹤API(即Piwik\Tracker組件)接收原始分析數據,我們稱之為“ 日志數據 ”。
日志數據在PHP中表示為Piwik\Tracker\Visit對象,并存儲到下表中:
```shell
log_visit 每次訪問包含一個條目(返回訪問者)
log_action 包含網站上所有可能采取的行動(例如,唯一網址,網頁標題,下載網址...)
log_link_visit_action 每個行動的訪客包含一個條目(頁面瀏覽,...)
log_conversion 包含訪問期間發生的轉化(與目標相符的操作)
log_conversion_item 包含電子商務轉換項目
```
這些表格是為快速插入而設計和優化的,因為跟蹤API需要盡可能快地處理流量較大的網站。
這些表(及其相關的PHP實體)的內容將在“Piwik數據庫模式”指南中有更詳細的解釋。
##### 存檔過程
以上表格并非針對提取高級別報表而設計或優化的:當有大量數據時,將日志條目聚合到日,周或月可能變得太密集。
該歸檔過程將讀取日志數據匯總,以生產“ 數據歸檔 ”。數據匯總并存儲為每個:
- 天
- 周
- 月
- 年
- 自定義日期范圍
歸檔數據可以是:
- 數字指標:簡單的數值(如頁面瀏覽量)
這些存儲在archive_numeric_*表中。值存儲為float。
- 表記錄:二維數據(可以是數值以及任何其他數據),表示為Piwik\DataTable對象
這些存儲在archive_blob_*表中。DataTable對象被序列化為字符串并被壓縮以被存儲BLOB在表中。
DataTable存儲在數據庫中的對象是命名記錄,以區分它們與DataTablePiwik的API所操縱和返回的對象,我們將其命名為報告。
在每個聚合級別處理和存儲每個數字度量或表記錄:日,周和月。例如,這意味著“進入頁面”報告將被處理并存儲在每月的每一天以及每個星期,月份,年份和自定義日期范圍內。這樣的數據是多余的,但這對于保證快速性能至關重要。
因為存檔數據必須快速查詢,所以每個月都會分開單獨的表。我們將會有:
- archive_numeric_2014_10:2014年10月的指標
- archive_blob_2014_10:2014年10月的報告
- archive_numeric_2014_11:2014年11月的指標
- archive_blob_2014_11:2014年11月的報告
- ...
“Piwik數據庫模式”指南中詳細介紹了歸檔表的內容。歸檔過程在“歸檔”指南中有詳細的說明。
#### 從存檔數據到報告
如上所示,數據作為數字度量或表格記錄存儲。
報表是DataTable對象,由插件定義的API類提供。API類訪問持久化的度量標準或記錄,并將其轉換為可呈現的報告。
有時候,一個持續的記錄可能是幾個API報告的來源。
您可以在“報告”指南中閱讀有關如何創建和投放報告的更多詳細信息。
#### 派維克的可擴展性點
Piwik Core僅定義主要的流程和行為。插件可以通過幾個可擴展點擴展和定制它們:
注冊事件或觸發事件
執行派維克公認的特殊課程
擴展某些抽象基類
- 獻給樂于奉獻的你
- 一、工作感悟
- 1.1 工作感悟
- 1.2 數據庫工作總結
- 二、運維專題(非技術)
- 2.1 公有云運維
- 2.1.1 阿里云采坑記.md
- 三、運維專題(技術類)
- 3.1 Linux(操作系統)
- 3.1.1 常見工作總結
- 3.1.2 常見服務使用和部署
- 3.1.3 操作系統優化
- 3.1.4 常用命令(Centos8)
- 3.2 Docker & K8s(容器技術)
- 3.2.1 Docker
- 1. Docker
- 1-1 容器基礎
- 1-2 部署和加速
- 1-3 常用命令
- 1-4 Dockerfile編寫
- 1-5 容器網絡
- 1-6 數據持久化
- 2. docker-compose
- 2-1 基礎
- 3.2.2 kubernetes
- 1. 導讀-請先看我
- 2. kubeadm部署集群
- 1-1 k8s-1.14-基于calico
- 1-2 k8s-1.17-基于flanne
- 3. 二進制部署集群
- 4. 日常工作及故障處理
- 4-1 常用命令
- 4-2 故障處理
- 3.2.3 依賴服務部署
- 1. Harbor(鏡像倉庫)
- 1-1 harbor-2.1.0(單節點)
- 3.3 CICD(持續集成/部署)
- 3.3.1 GitLab
- 1. 服務部署
- 1-1 Gitlab-CE-13.3.4(單節點)
- 2. Git基礎
- 3.3.2 Ansible
- 1. 服務部署
- 1-2 ansible-2.5(pip部署)
- 3. ansible-playbook
- 3-1 基于Roles的Playbook
- 3-3 循環語法
- 3.3.3 Jnekins
- 1. Jenkins部署
- 1-1 Jenkins-2.65部署
- 1-2 Jenkins-2.249部署
- 2. Jenkins項目初始化
- 3. Jenkins集成
- 3-1 Jenkins-2.65集成Sonar
- 3.4 LB/HA(負載均衡,反向代理)
- 3.4.1 LVS+Keepalive
- 1. LVS為MySQL讀提供負載均衡
- 3.4.2 Pacemaker(HA)
- 1. 常用命令(轉)
- 3.5 Runtime(代碼運行環境)
- 3.5.1 Tomcat(Web中間件)
- 1. Tomcat部署手冊
- 1-1 Tomcat-7.0.76部署
- 2. Tomcat常用腳本
- 3.6 NoSQL(非關系型數據庫)
- 3.6.1 redis(非關系數據庫)
- 1. Redis 基礎
- 2. Redis 4.0變化
- 3. Codis實現Redis的集群
- 4. Redis故障處理
- 5. redis安全第一步
- 6. Redis集群搭建
- 7. CacheCloud部署
- 3.6.1 Redis挑戰
- 3.6.2 MongoDB(文檔數據庫)
- 1. Mongodb基礎
- 1-1 Mongodb4.0新特性
- 1-2 支持多大數據量
- 2. Mongodb安裝
- 2-1 Mac OS安裝Mongodb
- 2-2 Yum安裝Mongodb
- 2-3 二進制安裝Mongodb
- 2-4 docker容器安裝Mongodb
- 2-5 Mongodb 配置文件詳解
- 2-6 Mongodb 生產安全清單
- 2-7 用戶身份認證和授權
- 3. Mongodb副本集
- 3-1 副本集搭建
- 3-2 用戶身份認證與授權
- 4. 日常維護工作
- 4-1 Mongodb磁盤回收
- 4-2 Mongodb備份恢復到任意時間點
- 4-3 Mongodb慢查詢分析
- 4-4 Mongodb版本升級
- 4-5 Mongodb副本集成員狀態
- 4-6 Mongodb備份恢復工具使用
- 4-7 Mongodb服務啟動和停止
- 4-8 修改副本集成員oplog大小
- 4-9 Mongodb 副本集Oplog
- 3.7 MQ(消息隊列)
- 3.7.1 Zookeeper(分布式協調系統)
- 1. ZooKeeper基礎
- 2. ZooKeeper集群搭建
- 2-1 ZK-3.4.10部署
- 3.2 RabbitMQ(消息隊列)
- 1. 服務部署
- 1-1 RabbitMQ-3.8部署
- 2. 常用命令
- 3.8 Monitor(數據收集,監控)
- 3.8.1 Zabbix(運維監控)
- 1. 服務部署
- 1-1 服務端部署
- 1-2 客戶端部署
- 2. 監控服務
- 2-1 監控Apache
- 2-2 監控IIS
- 2-3 監控Ningx
- 2-4 監控Tomcat(6/7/8)
- 2-5 監控WebSphere 7
- 2-6 監控MySQL
- 2-7 監控Oracle
- 2-8 監控SQL Servre
- 2-9 監控Weblogic
- 2-10 監控Windows
- 2-11 自定義監控項
- 3. 告警推送
- 3-1 郵件告警
- 3-2 短信告警
- 3-3 告警推到Syslog
- 4. 日常工作
- 4-1 數據庫優化(TokuDB)
- 4-2 數據庫優化(分區表)
- 4-3 前端定制(Grafana)
- 5. 與Grafana結合
- 3.8.2 ELKBstack(日志收集展示)
- 1. 服務部署
- 1-1 ELK 5.5部署及配置
- 1-1-1 ELKBstack介紹
- 1-1-2 Elasticsearch部署
- 1-1-3 Logstash部署
- 1-1-4 Kibana部署
- 1-1-5 X-pack部署
- 1-1-6 Filebeat部署
- 2. ELK高級配置
- 1. Elasticsearch實戰
- 2. Logstash實戰
- 3. Filebeat實戰
- 5. 引入隊列
- 3.9 Virtualization(虛擬化)
- 3.10 Basic(基礎服務)
- 3.10.1 Piwik-Matomo(用戶行為分析)
- 1. Piwik前期分析
- 2. Piwik介紹和部署
- 2-1 Piwik-3.x版本(早期)
- 3. Piwik 功能配置
- 4. Piwik 模擬數據和壓測
- 5. Piwik運轉原理
- 6. Piwik數據庫模式(一)
- 6-1 第一部分
- 6-2 第二部分
- 3.10.2 Cobbler(系統自動部署)
- 1. Cobbler 可以干什么?
- 2. Cobbler 基礎原理
- 3. Cobbler 安裝
- 3-1 Cobbler-2.8部署
- 4. Cobbler 基礎配置
- 5. Cobbler 配置文件
- 6. 一鍵優化腳本
- 3.10.3 Rsync(數據同步服務)
- 1. Rsync基礎
- 2. 案例:頁面部署(服務端拉取)
- 3.10.4 NFS(共享存儲)
- 1. NFS部署手冊
- 2. 客戶端NFS備份腳本
- 3.10.5 Grafana(可視化)
- 1. 安裝(8.2.x)
- 3.11 Tools(軟件工具)
- 3.11.1 基準測試
- 1. 基準測試方法論
- 2. 壓測工具 - Siege
- 3. 壓測工具 - http_load
- 3.12 DB(關系型數據庫)
- 3.12.1 MySQL(關系數據庫)
- 1. MySQL部署
- 1-1 MySQL-5.7部署
- 1-2 Percona-5.7 + TokuDB 部署
- 2. MySQL復制
- 2-1 MySQL異步復制
- 3. MySQL備份恢復
- 3-1 xtrabackup 備份恢復
- 4. MySQL 高可用
- 4-1 MHA(HA)
- 4-1-1 MHA 架構介紹和原理
- 4-1-2 MHA日常管理
- 4-1-3 MHA 自動Failover
- 4-1-4 MHA常用參數
- 4-1-5 MHA 報錯
- 4-1-6 MHA相關配置文件和腳本
- 4-2 MyCAT
- 4-2-1 MyCAT 介紹和部署
- 4-1-3 MyCAT讀寫分離案例解析
- 5. MySQL 常用腳本
- 5-1 MySQL常用統計語句
- 5-2 MySQL性能分析腳本
- 6. MySQL 日常及故障處理
- 6-1 MySQL死鎖排查
- 6-2 復制故障
- 6-3 MySQL 升級注意事項
- 6-3 MySQL授權
- 3.12.2 Oracle(關系數據庫)
- 1. Oracle部署
- 1-1 Oracle11g單實例部署
- 1-2 Oracle12c單實例部署
- 2. Oracle常用腳本
- 3. Oracle 知識點
- 六、Ansible開源項目
- 6.1 項目初始化手冊
- 6.1.1 Ansible錯誤處理
- 6.1.2 一種預先判斷是否操作的方法
- 6.2 System初始化
- 6.3 Nginx/Tnginx部署
- 6.4 Python部署
- 6.5 PHP部署
- 6.6 MySQL部署
- 6.7 Docker部署
- 6.8 Haproxy部署
- 6.9 Redis部署
- 1. 變量和tags信息
- 3. Redis主從部署
- 4. Redis集群部署
- 5. 清理數據
- 6.10 Software軟件部署
- 6.11 Zabbix部署
- 6.12 Elastic部署
- 6.13 Tomcat
- 6.14 Kafka部署
- 6.15 Zookeeper部署
- 6.16 Etcd集群部署
- 6.17 M3DB部署
- 6.18 Pormetheus部署
- 七、學習資源推薦
- 八、從瞎搞到放棄
- 8.1 CodeQL(語義代碼分析引擎)
- 8.1.1 背景及計劃
- 8.1.2 CodeQL概述
- 8.1.3 簡單部署和使用
- 8.1.4 后續
- 8.2 dbdeployer(輕松部署MySQL)
- 歸檔筆記
- 三、常用服務部署(遷移中)
- 3.4 Nginx & PHP(Web服務)
- 3.4.1 Nginx(Web)
- 1. Nginx基礎和部署
- 2. Nginx 我的一些思考
- 3. Nginx(Web)配置
- 4. Nginx(Proxy)配置
- 5. Nginx日常管理
- 3.4.3 PHP
- 1. PHP 7.1 部署
- 2. PHP5.6 部署
- 4. PHP原理
- 5. PHP 常用模塊
- 二、運維項目實戰(遷移中)
- 2.1 標準化 & 工具化項目
- 2.1.1 系統部署和優化
- 2.1.5 全網日志收集展示平臺項目
- 1. 項目需求
- 2. 整體方案規劃
- 3. 日志收集配置
- 4. 消息緩沖隊列
- 5. 日志處理轉發
- 6. 日志數據展示(待補充)
- 7. ELK安全配置(上)
- 8. ELK安全配置(下)
- 9. 項目總結
- 2.2 高性能Web項目
- 2.2.1 網站需求(完善中)