Skip to content
/ logdig Public

collect user activity log for web using AWS EB, SQS, Python Flask

Notifications You must be signed in to change notification settings

dongsam/logdig

Repository files navigation

LogDig

목적

웹 서비스상의 유저들의 행동, 이탈, 패턴을 파악하기 위해 웹상의 유저의 클릭, 페이지 이동 등을 로그로서 생성, 수집한다.

How to use

Deployment

  • git clone https://github.com/dongsam/logdig.git
  • cd logdig
  • config.py 수정을 통한 서비스 설정
    • [SERVICE_NAME, AWS KEY 등 ]
  • pip install -r requirements.txt
    • (Flask, Flask-RESTful, boto3 설치)
  • python setup_AWS.py
    • 결과로 나오는 http://{{service-name}}-{{eb_version_lable_suffix}}.elasticbeanstalk.com
    • 형태의 URL에 AWS EB 실행을 위해 몇분 기다린 후 접속하여, Success 문구를 통해 정상 작동 확인
    • 해당 URL을 clickTracker.js 파일 상단 serverUrl 변수에 아래와 같이 삽입
    • var serverUrl = 'http://test-service-1.elasticbeanstalk.com';

Web 서비스에 적용

  • Google analytics 형식으로 추적 대상 웹 페이지에 위 clickTracker.js 스크립트 삽입
    • <script src="your_path/clickTracker.js"></script>
    • 추후 Google Analytics 방식으로 변경 계획
  • POST 로 로그 전송

데이타가 쌓이는 형식

  • 로그 데이터 이동 경로 structure

  • SQS에 로그가 쌓이는 화면 sqs

  • Lambda (SQS -> S3) 스케줄링 설정

    • 스케줄링, 이벤트에 의해 Lambda Function 호출 시, SQS 큐에 로그가 100개 이상 쌓여있다면 S3로 저장
    • Lambda 스케줄링, 이벤트 설정은 AWS API(boto3)를 통해 설정이 불가능, 따라서 AWS 웹에서 수동 설정 필요
    • AWS Console -> Lambda -> 대상 Function 선택(SERVICE_NAME-lambda) -> Event Source 탭 선택 -> Add evnet Source
    • Event source type 을 Scheduled Event 로 설정하여 5분 주기 등 cron 처럼 설정 가능
    • 이 외에도 SNS, CloudWatch 등 원하는 이벤트 소스로 설정 가능 lambda_setting
  • S3에 로그가 저장되는 형식

    • 일별로 디렉토리 생성 ex)2015-12-31 s3_date
    • 일별 디렉토리 하위에 SHA-256 으로 해쉬된 이름으로 로그파일 저장 (로그 파일명 충돌방지) s3_log
  • Log 저장 형식

    • 각 라인에 한개의 로그씩 한 파일에 100개 이상이 로그 존재 log_file

분석방법

  • Spark 등에서 S3에 쌓여있는 로그를 읽어 분석 가능
  • Zeppelin 등을 통해 Dashboard 형태로 분석 및 시각화 가능

개발 및 배포 환경 및 기술스택

  • RESTful server

    • AWS Elastic Beanstalk
    • Python 3.4 or 2.7
    • Flask, Flask-RESTful, boto3
  • Log queue

    • AWS SQS
    • AWS Lambda
      • Python 2.7
  • Log storage - AWS S3

구조

Client log sender

  • 클릭좌표를 통한 Heat Map 구성 혹은 버튼, 링크만 추적
  • 추후 마우스 이동 기록도 염두

ClickTracker.js

clickTracker

init local stroage
  • user key 초기화 ( 20자리 랜덤 영문 대소문자, 숫자 )
  • load_count 0으로 초기화
  • 위 값 local storage에 저장
click event listener
  • a, span, button 태그에 대해
  • href, reactid, data-reactid 속성이 있으며 클릭 이벤트 발생시 make log 호출
make log
  • click handle event 호출하여 클릭 정보 획득
  • load_count 값 1 증가
  • 기타 로그 값들로 json 구성하여 LocalStorage 에 저장 ( html5, IE8 이상 )
click handle event
  • 마우스 클릭 이벤트에 대해 클릭 x, y 좌표 등 반환
url change listenr
  • DOMSubtreeModified 이벤트를 통해 비동기로 페이지가 새로 렌더링, 변경된것을 체크
  • 위 이벤트 발생 상황에서 url 값 변경 또한 감지시 send log 호출
send log
  • 페이지 새로 랜더링, 혹은 페이지 이동 후 LocalStorage 에 저장된 Log를 불러옴
  • POST 로 RESTful Flask 서버에 불러온 로그 전송

Log Data

Name Description example
timestamp 로그 생성 시간(UT) 2015-12-22T06:19:03.366Z
token 서비스 토큰 VkdzNVRsRlZVa1JVTURWUFVsVk9WVk5WT1U4PQ
user_key 유저 구분 세션 키 tR2VQSYNNXJwbBQLijmR
current_page 링크를 클릭한 페이지 http://site.com/index.html
link 클릭하여 이동된 링크 http://site.com/page.html
x 마우스 클릭 x 좌표 110
y 마우스 클릭 y 좌표 400
spent_milli_sec 사이트 방문 후 소요 시간 (밀리초) 1120
user_agent Browser User Agent Mozilla/5.0 (Macintosh...
load_count 사이트에서 링크 이동 횟수 2

추정 AWS 과금

aws_pricing

To do

추후 구성 계획

logdig_future

LogDig Core ( Spark )

  • 토큰(서비스), 알고리즘, 분석 별 Zeppelin Note 생성
  • Zeppelin Note 별 스케줄 설정에 따라 주기적 실행, 분석, 결과데이터 생성

분석 알고리즘

  • Heat Map 집중 진행
  • 그 후에는 A/B Test 고려

Analysis Language

  • Python, Scala, Spark SQL

Dashboard

유사 서비스, 참고 자료

About

collect user activity log for web using AWS EB, SQS, Python Flask

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published