Service Ping データフロー
概要
このドキュメントは、GitLab のさまざまなデプロイメントタイプとメトリクスソース全体で Service Ping データがどのように流れるかを示しています。Service Ping は、GitLab インスタンスから使用状況分析と運用メトリクスを収集・集計するための GitLab のメカニズムです。
データフローは、2つの主要な観点で異なります:
デプロイメントタイプ:
- GitLab.com (SaaS): マルチテナントクラウドオファリング
- セルフマネージド: お客様がホストする GitLab インスタンス
- GitLab Dedicated: GitLab が管理するシングルテナントクラウドインスタンス
メトリクスソースタイプ:
- Database: GitLab データベースからの集計されたカウントと統計
- Redis HLL: ユニークカウントトラッキングのために Redis に保存される HyperLogLog カウンター
- System: システムレベルのメトリクスと設定データ
- Internal Events: イベントベースのトラッキングとアナリティクス
- Redis: 汎用的な Redis ベースのカウンターとメトリクス
- License: サブスクリプションとライセンス情報
- Prometheus: インフラストラクチャとアプリケーションパフォーマンスのメトリクス
セルフマネージドインスタンスのデータフロー
以下のシーケンス図は、セルフマネージド GitLab インスタンスにおける Service Ping データが機能使用からデータウェアハウスまでどのように流れるかを示しています:
sequenceDiagram
participant Monolith as GitLab Monolith
participant Redis as Redis
participant PostgreSQL as PostgreSQL
participant ServicePing as Service Ping
participant VersionApp as Version App
participant GCS as Google Cloud Storage
participant Snowflake as Snowflake
Monolith->>Redis: track_event() calls<br/>increment metrics
Monolith->>PostgreSQL: Store transactional data
Redis->>ServicePing: Fetch metrics
PostgreSQL->>ServicePing: Fetch aggregated data
ServicePing->>VersionApp: POST Service Ping<br/>(JSON payload)
VersionApp->>GCS: Scheduled pipeline export
GCS->>Snowflake: Data ingestionデータフローの説明
セルフマネージドインスタンスの Service Ping データフローは、多段階のプロセスに従います:
データ生成: ユーザーが GitLab の機能を操作すると、2種類のデータが生成されます:
- アナリティクストラッキング: Ruby コードは
track_event()呼び出しを実行し、JavaScript コードはtrackEvent()呼び出し(track_event()をラップする API エンドポイントに送信)を実行して、Redis クラスターに保存されるメトリクスをインクリメントします。 - トランザクションデータ: システムとの通常のユーザーインタラクション(Issue の作成、コミットなど)は、通常のアプリケーション操作の一部として PostgreSQL データベースに保存されます。
- アナリティクストラッキング: Ruby コードは
定期的な収集: 週次スケジュールで、Service Ping プロセスは Redis と PostgreSQL の両方からメトリクスを取得します。これには、カウンター、集計された統計、その他の使用状況データの取得が含まれます。
ペイロードの構築: 収集されたデータは、ソースタイプ(database、redis_hll、system、internal events、redis、license、prometheus)別に整理されたすべてのメトリクスを含む構造化された JSON ペイロードに組み立てられます。
送信: JSON ペイロードは HTTP POST を介して Version App エンドポイントに送信されます。Version App はすべての GitLab インスタンスからの Service Ping データの中央収集ポイントとして機能します。
ストレージとエクスポート: Version App は受信したデータをデータベースに保存します。スケジュールされたパイプラインジョブがこのデータを Google Cloud Storage にエクスポートし、さらなる処理のために利用可能にします。
データウェアハウスへの取り込み: 最終的に、データは Google Cloud Storage から Snowflake に取り込まれ、アナリティクス、レポーティング、ビジネスインテリジェンスに利用できるようになります。
