概要
- CIログ解析エージェント が数秒で不安定なテストの原因を特定
- ClickHouse を活用し、月単位・数十億行のログをミリ秒単位で検索
- SQLインターフェース を通じてLLMが自由に調査クエリを生成
- データ圧縮・カラム設計・スロットリング で高速・効率的な運用を実現
- GitHub API制限 を考慮した堅牢なデータ取得・処理パイプライン構築
エージェントによるCIログ調査の全体像
- エージェント は、CIログ全履歴・全テスト・全ビルドの情報を数秒で調査
- 毎週 約15億行のCIログ と 70万件のジョブ を取り込み
- 全データを ClickHouse に35:1で圧縮保存し、ミリ秒単位でクエリ可能
- エージェントは SQLインターフェース を通じて独自のクエリを生成
- 事前定義クエリや固定APIではなく、 自由度の高い質問 が可能
- LLMは SQL の生成が得意で、自然言語から柔軟なデータ探索を実現
クエリ対象と利用パターン
- 主なクエリ対象
- Job metadata: CIジョブごとのメタデータ(失敗率・成功率・開始時刻など)
- 利用割合: 63%
- Raw log lines: ログ行単位の生データ(エラー出力・初出時刻・頻度分析など)
- 利用割合: 37%
- Job metadata: CIジョブごとのメタデータ(失敗率・成功率・開始時刻など)
- エージェントは 1セッション平均4.4クエリ を発行し、広く調査→深掘りの流れ
- 重い調査 では1セッションで 数十億行 までスキャン
データ構造と圧縮戦略
- 全ログ行に48カラムのメタデータ を付与(コミットSHA、PRタイトル、ジョブ名等)
- 従来の正規化ではJOINが必要だが、 ClickHouseのカラム型+非正規化 でJOIN不要
- 繰り返し値の多いカラム は劇的に圧縮され、ストレージ効率が大幅向上
- 例: commit_message は 301:1 で圧縮
- 生ログ664GiB+全カラムで5.31TiB (非圧縮)が、 154GiB まで圧縮
- 1ログ行あたり21バイト (全48カラム含む)という高効率
ストレージ内訳と圧縮率
- line_content(ログテキスト)、 ts(タイムスタンプ)、 line_number がストレージの半分以上を占有
- 繰り返しの多いメタデータカラムはほぼ無料に近い容量
- 主要カラムごとの圧縮率・ディスク使用量
- line_content: 53.2GiB、12.5:1
- job_name: 8.2GiB、48:1
- runner_labels: 3.8GiB、52:1
高速なクエリ性能の工夫
- 主キー設計 で物理的に(org, ts, repository, run_id, ...)順に並べ、範囲外データのスキップを実現
- スキップインデックス (bloom filter、ngram filter)で不要データの読み飛ばし
- マテリアライズドビュー で集計済みデータを事前生成
- 非同期インサート で高スループットを確保
- クエリ遅延
- Job metadata: 中央20ms
- Raw log lines: 中央110ms(最大でも数十秒で完了)
GitHub API制限とリアルタイム性の維持
- GitHub APIの1時間あたり15,000リクエスト制限 に対応
- インジェストとエージェントのAPI利用 を分離し、 インジェストは1秒あたり約3リクエスト に制限
- 4,000リクエスト/時 をエージェント用に確保
- スロットリング導入前 はAPI制限に頻繁に到達し、データ遅延が問題化
- スロットリング導入後 は安定して P95で5分以内の遅延、通常は数秒でデータが利用可能
耐障害性・バースト吸収
- Inngest を活用した耐障害性の高い実行エンジン
- レートリミット到達時は 状態を保存して一時停止、復帰時は即再開
- 再試行や重複排除の複雑さを排除
- CIアクティビティのバースト にも対応
- キューが膨らんでも、処理レートは一定で安定運用
- 一時的に遅延が発生しても、すぐに回復
まとめ:エージェントによるCIログ解析基盤の特徴
- 膨大なCIログをリアルタイム・高効率で保存・検索
- LLM+SQLインターフェース の組み合わせによる柔軟なトラブルシューティング
- ClickHouseのカラム型DB+非正規化+圧縮 による圧倒的なストレージ効率
- GitHub APIレート制限下での安定・高速なデータ取得
- 耐障害性・バースト吸収力 を持つ実行基盤による高可用性システム
このシステムにより、 エンジニアは手作業でログを追うことなく、AIエージェントによる即時の根本原因特定 が可能。 CIの信頼性向上・開発体験の最適化 を強力に支援。