프로젝트 소개
Theia – 프라이버시 중심 서버 사이드 분석
개요
Theia는 클라이언트 사이드 JavaScript 없이 웹사이트 트래픽 통계를 제공합니다. nginx 접근 로그를 실시간으로 감시하고 각 줄을 파싱하여 경로, 리퍼러, 사용자 에이전트, IP, 상태 코드, 전송 바이트를 추출하며, 프라이버시를 위해 IP를 해시하고 결과를 로컬 SQLite 데이터베이스에 저장합니다. 모든 처리가 서버에서 이루어지므로 데이터는 애드블로커에 면역이며 서드파티 서비스에 의존하지 않습니다.
설치
간편 설치: curl 또는 wget으로 설치 스크립트를 다운로드한 후 sudo bash로 실행합니다. 스크립트는 아키텍처를 감지하고 바이너리를 /usr/local/bin/theia에 설치하며, 멀티 도메인 추적을 위한 커스텀 nginx 로그 포맷을 추가하고(선택 사항), systemd 서비스를 생성하며 데이터 저장을 위해 /var/lib/theia를 준비합니다. 수동 설치도 지원됩니다 – 저장소를 클론하고 go build로 빌드한 뒤, 바이너리를 복사하고 데이터 디렉토리를 생성한 다음 제공되는 systemd unit을 설치합니다.
daemon 실행
daemon는 nginx 접근 로그를 추적하고 파싱된 레코드를 SQLite 데이터베이스에 기록합니다.
예시 명령:
sudo theia daemon --log-path /var/log/nginx/access.log --db-path /var/lib/theia/theia.db
주요 플래그: --log-path(기본값 /var/log/nginx/access.log) 및 --db-path(기본값 ./theia.db).
명령줄 통계
stats 서브커맨드는 데이터베이스를 읽어서 요약 테이블 또는 JSON 출력을 인쇄합니다.
일반적인 사용법:
theia stats --db-path /var/lib/theia/theia.db
옵션은 조회 기간(--days), 호스트별 필터링(--host), 출력 형식 선택(--format json|table), 상위 항목 수 조정(--top) 등을 허용합니다.
HTTP API 서비스
serve 커맨드는 127.0.0.1:8081에서 Bearer 토큰 보호 HTTP/JSON(또는 CSV) API를 시작합니다. nginx를 통해 프록시하여 외부에 노출할 수 있습니다. 인증은 토큰 파일, 환경 변수 또는 명령줄 플래그를 통해 공급할 수 있습니다. 엔드포인트는 다음과 같습니다:
GET /api/v1/stats – 시계열 데이터
GET /api/v1/stats/paths – 상위 경로
GET /api/v1/stats/referrers – 상위 리퍼러
GET /api/v1/stats/status-codes – 상태 코드 분해
공통 쿼리 매개변수: host, from, to, format, group_by, top.
셸_completion
theia completion을 실행하면 현재 쉘을 감지하여 bash, zsh 또는 fish에 대한 completion 스크립트를 설치할 것을 제안합니다.
서비스 관리
Theia는 systemd unit으로 실행됩니다. 표준 systemctl 명령을 사용하여 시작, 중지, 재시작, 상태 조회 및 로그 추적을 수행할 수 있습니다.
내부 동작 방식
1. nginx 로그 파일을 실시간으로 추적합니다.
2. 관련 필드에 대해 각 줄을 파싱합니다.
3. 익명성을 보존하기 위해 IP + 사용자 에이전트 + 날짜를 해시합니다.
4. 봇과 정적 자산 요청을 자동으로 감지합니다.
5. SQLite(WAL 모드)에 비동기로 레코드를 기록하여 동시 읽기를 허용합니다.
6. 주기적 정리로 60일 초과 시간당 통계를 제거합니다.
보안 고려사항
daemon는 nginx 로그를 읽기 위해 root 또는 sudo 권한이 필요합니다. API 토큰은 프로세스 목록을 통해 노출되지 않도록 명령줄이 아닌 파일에 저장해야 합니다. 소음이 심한 스캐너에 대한レート 제한 및 fail2ban 규칙을 권장합니다(문서/nginx-hardening.md 참조).
제한사항
* 페이지 뷰 카운트만 수집되며 클라이언트 사이드 이벤트는 없습니다.
* 급격한 충돌 시 데이터 손실 가능성이 있습니다.
* 내장 웹 대시보드 없음 – 사용자는 CLI 출력, HTTP API 또는 SQLite 직접 쿼리로 소비할 수 있습니다.
라이선스
Apache License 2.0.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.