프로젝트 소개
Hummingbird는 Node.js로 작성된 셀프 호스팅 사이트 추적 및 분석 저장 서버입니다. 방문자에게 1x1 추적 픽셀을 제공하며, 브라우저의 GET 요청은 작은 JavaScript 스니펫에 의해 생성된 추적 데이터를 전달합니다.
요구 사항 및 설치
node.js v0.8.0 이상이 필요합니다. README의 설정 단계는 저장소를 클론하고, npm install을 실행하여 종속성을 가져오는 것이며, 지도 기능을 원하는 경우 선택적으로 MaxMind의 GeoLiteCity.dat GeoIP 데이터베이스를 루트 디렉토리에 다운로드하는 것입니다. 서버는 `node server.js`로 시작합니다.
대시보드 및 배포
대시보드는 기본적으로 8080 포트에서 실행되며 config/config.js에서 운영 환경을 위해 비활성화할 수 있습니다. 대시보드는 public/에서 제공되는 단순한 HTML이므로 모든 웹 서버에서 호스팅할 수 있습니다. README에서는 대시보드가 공개적으로 보이지 않아야 하는 경우, 일반적으로 basic auth가 설정된 nginx 또는 apache 뒤에 배치하여 보안을 유지해야 한다고 경고합니다. 대시보드의 'listen' 함수는 바인딩할 인터페이스에 대한 두 번째 인수를 허용합니다. 예를 들어 localhost 전용인 "127.0.0.1" 또는 모든 인터페이스를 위한 "0.0.0.0" 등이 있으며, 추적 픽셀은 외부에서 계속 접근 가능하도록 별도의 포트에서 실행해야 합니다.
추적 설정
client/hummingbird.js에는 Hummingbird 이벤트를 트리거하는 작은 스크립트가 포함되어 있습니다. 이를 페이지 본문에 붙여넣거나 업로드하여 script 태그로 참조할 수 있습니다. 인수 없이 HummingbirdTracker.track()을 호출하면 페이지 URL과 같은 표준 매개변수가 전송됩니다. 예를 들어 HummingbirdTracker.track({logged_in: true})와 같이 임의의 데이터를 첨부할 수 있으며, 이 데이터는 Hummingbird의 메트릭 내부에서 백엔드 이벤트를 필터링하는 데 사용될 수 있습니다.
아키텍처
Hummingbird는 두 부분으로 구성됩니다. 추적 픽셀을 통해 사용자 활동을 기록하는 Node.js 추적 서버와 해당 활동을 표시하는 JavaScript 위젯 세트입니다. 서버는 가능한 경우 WebSockets를 통해 모든 활동을 클라이언트에 브로드캐스트하며, 불가능할 경우 Flash sockets 또는 long polling으로 대체합니다. Hummingbird.WebSocket 객체는 서버로부터 WebSocket 이벤트를 JSON 객체로 수신하며, 개별 위젯은 특정 메트릭을 구독하고 해당 메트릭이 나타날 때마다 호출되는 핸들러 함수를 등록합니다.
사용자 정의 메트릭 및 위젯
메트릭은 lib/metrics에 위치하며 자동으로 로드됩니다. 각 메트릭에는 새로운 사용자 이벤트가 발생할 때마다 호출되는 핸들러 함수가 포함되어 있으며, 메트릭에 지정된 간격으로 클라이언트에 전송되는 `data` 객체 속성에 데이터를 저장합니다. total_views.js는 기본 예제로, cart_adds.js는 쿼리 매개변수 필터링 예제로 제공됩니다. 기본 위젯(Counter, Logger, Graph)은 서버 데이터에 연결하는 방법을 보여주며, 최소 위젯 예제는 public/js/widgets/logger.js입니다. 위젯은 프로토타입이 Hummingbird.Base를 확장하고 onMessage를 구현하는 객체입니다.
README에는 팁도 기재되어 있습니다. 운영 서버에서 데이터를 스트리밍하면서 UI를 로컬에서 실행하려면 http://localhost:8080/?ws_server=your-host.com&ws_port=12345와 같은 URL을 사용하십시오.
프로젝트 노트
Hummingbird는 MIT 라이선스 하에 제공됩니다. README에는 Michael Nutt, Benny Wong 및 다수의 추가 기여자가 나열되어 있습니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.