このプロジェクトについて
Theia – プライバシーファーストのサーバーサイド分析
概要
Theiaは、クライアントサイドJavaScriptを一切使用せずにウェブサイトのトラフィック統計を提供します。nginxのアクセスログをリアルタイムで監視し、各行を解析してパス、リファラー、ユーザーエージェント、IP、ステータスコード、送信バイト数を抽出し、プライバシー保護のためにIPをハッシュ化してローカルのSQLiteデータベースに保存します。すべての処理がサーバー上で行われるため、データは広告ブロッカーの影響を受けず、サードパーティサービスにも依存しません。
インストール
クイックインストール:curlまたはwgetでインストーラスクリプトをダウンロードし、sudo bashで実行します。スクリプトはアーキテクチャを検出し、バイナリを/usr/local/bin/theiaにインストールし、マルチドメイン追跡用のカスタムnginxログフォーマットを追加し(オプション)、systemdサービスを作成し、/var/lib/theiaをデータ保存用に準備します。手動インストールも可能です——リポジトリをクローンしてgo buildでビルドし、バイナリをコピーし、データディレクトリを作成し、提供されるsystemdユニットをインストールします。
demonの実行
damonはnginxのアクセスログを.tailし、解析したレコードを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コマンドは、Bearerトークンで保護されたHTTP/JSON(またはCSV)APIを127.0.0.1:8081で起動します。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。
シェル補完
theia completionを実行すると現在のシェルを検出し、bash、zsh、fishの補完スクリプトインストールを提案します。
サービス管理
Theiaはsystemdユニットとして動作します。標準的なsystemctlコマンドで開始、停止、再起動、状態確認、ログフォローが可能です。
内部動作
1. nginxログファイルをリアルタイムでtailします。
2. 各フィールドを解析します。
3. 匿名性を保つためにIP + ユーザーエージェント + 日付をハッシュ化します。
4. ボットおよび静的アセットリクエストを自動的に検出します。
5. 非同期でSQLite(WALモード)に書き込み、同時読者を許可します。
6. 定期的なクリーンアップで60日以上経過した時間単位統計を削除します。
セキュリティに関する注意事項
daemonはnginxログを読むためにrootまたはsudoアクセスが必要です。APIトークンはプロセスリストを通じて漏洩しないようコマンドラインではなくファイルに保存すべきです。ノイジーなスキャナ向けのレート制限およびfail2banルールを推奨します(docs/nginx-hardening.md参照)。
制限事項
* ページビュー数のみ収集され、クライアントサイドイベントはありません。
* 急激なクラッシュ時にデータ損失の可能性があります。
* 組み込みのWebダッシュボードはなし——CLI出力、HTTP API、またはSQLiteへの直接クエリで消費できます。
ライセンス
Apache License 2.0。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.