Datadog + Dify + Slack でキャパシティプランニングを楽にする

メディア統括本部 サービスリライアビリティグループ(SRG)の片岡です。
#SRG(Service Reliability Group)は、主に弊社メディアサービスのインフラ周りを横断的にサポートしており、既存サービスの改善や新規立ち上げ、OSS貢献などを行っているグループです。
本記事は、SRG 内で行われたハッカソンイベント SRG TechFest で作成したキャパシティプランニングを楽にするための PoC の紹介です。

SRG TechFest ?


本題に入る前に簡単に SRG TechFest について説明させていただくと、SRG で Q毎に実施されるハッカソンイベントとなります。毎回テーマを決めて、それについて個人やチームで考え、丸一日取り組むようなイベントとなっています。
今回は「SREの視点から生成AIを活用してみる」というテーマのもと3~4人のチームで取り組むことになりました。
※ SRGではその他にも、Q毎にWorkshop(勉強会)や毎週有志で輪読会など様々な活動も行っています。

Datadog + Dify +Slack


今回、私たちのチームは、”キャパシティプランニングを楽にしたい”ということで、キャパシティプランニングを AI に任せてみることにしました。
SRG にはメンバーが自由に使用できる Dify 環境が整っているため、これを活用し多くのサービスで利用している Datadog と連携する方法を模索しました。あわせてキャパシティプラニングの結果は Slack に通知するようにしました。

作成物

構成は以下のようになっています。
ステップ
  1. Datadog Dashboard ID, TimeRange を指定
  1. Datadog API により ダッシュボードの情報をすべて取得
  1. LLM: API で取得した結果にから、関連の Metrics Query を生成
  1. Query の配列としてデータを抽出
  1. Query に対してイテレーション(Datadog QueryMetrics APIを実行)
  1. データ変換(Array to String)
  1. LLM: キャパシティプランニングのレポート作成 ※Slackに適した表記にさせつつ
  1. イテレーション結果を分析

苦労した点

  • ”このように出力してください” の例の内容をそのままデータとして使用して回答してしまう(例の提示は意外にもBad)
  • プロンプト実行のたびに結果が頻繁に変わってしまう
  • 2, 7 でどのようなデータがあって、望む処理が行われるまでプロンプトの修正

改善点

  • Query内の変数転換は情報がデータに含まれていても置換せず、そのまま送ってしまうので細かな指示を追加
  • Systemへのプロンプトには、コンテキストにどういうデータが入っているかを詳細に伝えることで精度向上
  • LLMに渡すAPI Responseには、Query/Metricsの情報が入っていなかっため、低精度の原因となっており、Query情報をAPI Responseに組み込む対応を実施

結果

与えた期間のダッシュボードのサマリを整理し、懸念点などを提示してくれました。
しかし、改善策に関しては一般的な提案に留まっている印象です。実は最初の方は本当に見当違いなことばかりな出力だったので、これでもかなりマシになったほうでした。(思い出すと大半がプロンプトとの戦いだったと思います。)

終わりに


最終的にキャパシティプランニングとしては使えるほどのものではありませんでしたが、実際に作業に使えた短い時間でも改善を重ねることで少しずつ精度が上がっていく感じはあったので、また時間を作って挑戦してみようと思います。
 
SRG では一緒に働く仲間を募集しています。 ご興味ありましたらぜひこちらからご連絡ください。