MATOMO 기본 작동원리

오영주·2022년 3월 26일
2
post-custom-banner

MATOMO?

  • 오픈 소스 웹 분석 플랫폼(유료 cloud버전도 있기는 함)
  • 웹 사이트를 방문하는 모든 사용자의 행위를 평가 및 분석
    (로그 데이터를 저장하고, 이에대한 보고서 제공)
  • 즉 원하는 웹사이트에 matomo tracker script를 심어놓으면 그와 관련된 분석데이터(클릭 로그, 유저 행동데이터) 등에 대한 데이터를 수집, 저장하고, 이에 대한 보고서 또한 제공해준다.

    Visitant - 웹 사이트 방문자 수, 페이지 뷰, 방문기간 등의 정보 기록 및 분석
    Behavior - 웹 사이트 방문자의 행위 기록 및 분석
    Acquisition - 웹 사이트 유입 경로 기록 및 분석

  • Apache 웹 서버에서 구동되며 2018년 6월 기준 약 1,455,000개 이상의 Web Site에서 사용되고 있음

MATOMO 작동 원리

  • website page에 javascript tracker를 포함시켜서 배포한다.
  • tracker 는 tracker가 포함돼있는 페이지에서 데이터를 모아다가 http 추적 api를 호출해서 matomo에 보낸다.
  • 데이터 archiving task가 돌아가고, preprocessing이 on the flow 로 혹은 cron task로 실행된다.

plug in architecture

  • matomo codebase
    • Matomo core - extention point통해서 application base제공
    • Plugins - extention point를 사용자 행동이나 content를 application에 더하는데 사용
      • 두 가지 종류의 plugin 존재
        • 기본형 플러그인 : matomo 기본기능 (배포판에 있는 기능들
        • 선택형 플러그인 : 사다 쓰는 것...(plugins 폴더에 복사해서 쓰거나, https://plugins.matomo.org/이런데서 받을 수 있음)

Interface

user interface

  • 진입점은 index.php 이 파일이 모든걸 initialize 하고, FrontController class를 호출한다.
  • matomo의 user interface는 html, javascript로 돼있음
  • 몇몇 파트는 php controller에 의해 돌아가는 html document지만, 몇몇 파트는 anguler js로 짜여짐(vue js로 바꾸는 중)

controller

  • front controller 는 들어오는 http request를 url parameter를 바탕으로 plugin controller로 rounting 한다.
  • 만약 위와같은 http request 가 오면 front controller는 CoreHome plugin의 action index를 호출한다. plugins/CoreHome/Controller.php의 index() method 가 호출됨
  • plugin controller는 http response에 보내질 string(보통은 html content)를 return 한다.

Widgets and reports

  • request에 해당되는 controller action이 없으면, matomo는 매칭되는 widget 이나 report가 있는지 본다.
  • 만약 있다면 widget이나 대체 report의 render method를 호출한다.(CoreHome.renderWidget, CoreHome.renderReportWidget)

Http Reporting API

  • reporting 역할하는 api
  • report 를 xml이나 json형식으로 serving 하는 역할(sites, user, goals,.. 같은 다양한 entity에 대한 정보를 제공함
  • 이런게 오면 plugin 이름은 api, action name 은 주어지지 않았으니 index로 돌아가게 될 것.
    • Piwik\Plugin\APi\Controller class 가 호출되고, target api 에게 전달 할 것
    • 즉, 여기서는 Piwik\Plugin\SEO\API::getRank()가 호출될 것.
    • api 는 token_auth url parameter를 통해서 인증될거고, force_api_session=1 parameter가 존재하지 않는 한 session 이 load 되지는 않을 것.

HTTP Tracking API

  • JavaScript tracker가 Matomo(이전 Piwik)에 저장할 분석 데이터를 제출하게 해줌
  • Matomo's web application 이나 HTTP reporting API 는 달리, entry point가 matomo.php파일이다.(오래된 버전은 piwik.php)
  • tracking 되는 동안 모든 플러그인들이 load되지는 않고, 필요한것들만 loading된채로 진행된다.(속도 이슈)
  • tracking된 데이터들은 log_* table에 저장된다. 모든 raw데이터를 저장하고나서, 나중에 report archive로 집계되는 형식이다.(log_visit도 tracking 요청중에 업데이트 된다.)

데이터 모델, 처리, 저장

log - raw data

  • HTTP tracking API(Piwik\Tracker component)는 log data(raw data)를 수신함
  • 로그 데이터는 PHP에서 Piwik\Tracker\Visit객체로 표시되며 아래 테이블에 저장된다.
    • log_visit : 방문당 하나씩 찍힘(재방문자)
    • log_action : 웹사이트에서 가능한 모든 유형의 action당 찍힘(예: 고유한 URL, 페이지 제목, 다운로드 URL 등).
    • log_link_visit_action : 방문자의 하나의 액션당 하나씩 찍힘(페이지 보기, …)
    • log_conversion : 방문 중에 발생한 전환당 찍힘(목표와 일치하는 액션)
    • log_conversion_item : 전자상거래 전환당 찍힘
  • 자세한 matomo schema 는 https://developer.matomo.org/guides/database-schema#log-data-persistence 여기서 확인 가능함

Archiving process

  • log table 은 말 그대로 log table이기때문에 raw한 상태라 report를 위해서는 별도의 aggregation이 필요하다.
  • Aggregation process는 날것의 log data를 읽어서 archived data(report 가능한 상태)로 바꿔준다.
  • 이 과정은 특정한 날에 report를 위해서 돌아가게 된다(리포트 직전에만 돌아가는 배치잡형태)
    • 기간을 너무 길게 설정하면 돌아갈때 시간이 너무 오래걸려서 모든 기간에 대해서 지원하지는 않음(unique visit, unique user등 몇가지 항목에 대해서만 제공)
    • e.g. 아래 쿼리 같은게 돌아가는 것

      select count(*) as nb_visits 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'

    • e.g. 아래같은 테이블이 생길 것
      > archive_numeric_2021_10: 2021년 10월 측정항목
      archive_blob_2021_10: 2021년 10월 보고서
      archive_numeric_2021_11: 2021년 11월 측정항목
      archive_blob_2021_11: 2021년 11월 보고서

Auto archiving VS. browser archiving

From Archive data to reports

  • 위와같이 테이블 형태로 데이터가 저장되고 나면, plugin 에서 정의된 api 클래스에 의해 제공된다. api 는 metric 혹은 record에 access하고 이걸 표시 가능한 report로 변환한다.
  • report 작성 방법: https://developer.matomo.org/guides/reports
profile
data scientist
post-custom-banner

0개의 댓글