Meerkat: AIエージェントでログ分析のパラダイムを変える
ルールベースのアラートの限界を超え、AIエージェントが直接インフラを分析するミーアキャットの設計思想と実装ストーリー
問題意識
クラスターを運用する際に発生するエラーについて、毎回ログを確認し分析してエラーの原因を探すか、時にはエラーさえ検出できない場合が多くありました。また、個人がクラスターを運用しながら開発までしようとすると時間効率が落ちると感じました。
ミーアキャットプロジェクトはこの問題を解決するために始めました。ログを直接探さなくても賢く分析して整理してくれるAIエージェントがあれば、クラスターの運用コストを削減できると考えました。
コア設計 1: RAGベース ログベクター保存
ミーアキャットは、AnalyzerとVectorsという2つのサービスで構成されています。
Analyzerはデータを集約してエラーの原因を分析し、VectorsはOpenTelemetryを通じて伝達されたログを意味のあるデータとして保存する役割を担っています。
Vectorsはログを単に保存するのではありません。OpenTelemetryで取り込まれたログをテンプレート抽出で重複を除去し、エンベディングモデルを経てベクター化した後、Milvusのようなベクターデータベースに保存します。1つのサービスで重複するエラーログを防ぎ、ベクター化されたデータを使用して検索効率を大幅に改善します。
graph LR
subgraph "データフロー"
App[アプリケーション] -- OTLP Logs --> Vectors
Vectors -- 埋め込み保存 --> Milvus[(Milvus)]
Analyzer -- 意味検索 --> Vectors
endコア設計 2: ツールベース Metrics/Logs 分析
Analyzerはエラーの原因を自動で分析するため、OpenCode/Claudeのようなコーディングエージェントのツールのコンセプトを利用しました。Vectors、Prometheusなど外部の依存性と通信し原因を分析できるよう、インターフェースを制作しループ内で動的に原因を調査できるように開発しました。
sequenceDiagram
participant User as ユーザー
participant Analyzer as Analyzer
participant LLM as LLM
participant Tools as ツール類
User->>Analyzer: 分析リクエスト
Analyzer->>LLM: コンテキスト + 利用可能なツールリスト
loop エージェントループ
LLM-->>Analyzer: ツール呼び出しまたは最終回答
alt ツール呼び出し
Analyzer->>Tools: Prometheus/Loki/Vectorsクエリ
Tools-->>Analyzer: 結果
else 最終回答
Analyzer-->>User: 分析完了
end
end
運用環境での考慮
システムの特性上、Analyzerは各アプリケーションからのエラー及び繰り返されるエラーにより短期間に多くのリクエストを受ける可能性があります。これにより、単一サーバーの同期リクエストで処理する場合、スループット低下やタイムアウトなどの問題が発生する可能性があります。
これをワーカープールで解決しようとしました。並列処理によって処理効率を上げ、すべてのゴルーチンがLLMの応答を待つ致命的な問題を防止できます。スケーラビリティの観点でも、Analyzerを複数に拡張してもワーカープールがサービスの前段で処理を調整する機能を果たし、自然な拡張が可能になります。
改善の余地
ミーアキャットを制作する際、ログモニタリングサービスの特徴を維持しながら外部インフラサービスと緩やかに結合するために努めました。それにもかかわらず、OpenTelemetryやPrometheus、Loki、ELKなどの異なる責任、プロトコル及びリクエスト/レスポンススキーマが異なり、様々な環境で適用するには難しさがあります。従って今後様々なスペックに対するアップデートを行い、多様なインフラサービス及び環境に適用可能にすることが目標です。
また、ログやメトリクス検索において、該当サービスが要求する文法が異なったり複雑な場合があります。これに対してツールをより明確な構造にしてエージェントが簡単に理解できるシステムを作ることが重要だと思います。
締めくくり
様々な外部サービスを考慮して進行されたプロジェクトで、まだ不安定な形のプロジェクトです。しかし、ミーアキャットサービスを制作し運用することで、インフラ運用効率を劇的に向上することができました。直接ログを分析し原因を把握する過程を解決し、AIエージェントベースのインフラ運用システムの可能性も確認できました。