👻

GPTsでAthenaのクエリ生成アシスタントを10分で作ってみる

2024/12/20に公開

はじめに

先日、某SNSで「IPを見ただけでそれがAWSってわかるよ」みたいなポストが話題になっていたのを見かけました。
普段からアクセスログを調査するような機会が多いと、hostを引くまでもなく自然とこれはAWSでこれはGCP、みたいな感覚が身に付きますよね。(?)

AWSのALBのログはS3に保存され、そのログをAthenaを使って調査することが一般的かと思います。
弊社でもAthenaを利用しているのですが、少し複雑な条件でクエリを構築したい場合などにChatGPTに相談することもよくあります。
今回はChatGPTのマイGPTsの機能を使って、前提情報を読み込ませることでより効率的にクエリ生成をサポートしてくれるアシスタントを作ってみたいと思います。

Athenaとは

Athenaは、AWSが提供するサーバーレスのインタラクティブクエリサービスです。
Athenaを使うことで、S3に保存されたALB(Application Load Balancer)のログをSQLクエリを使って簡単に分析できます。

ALBのログをAthenaでクエリできるようにするための設定方法については下記などを参考にしてください。
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/create-alb-access-logs-table-partition-projection.html

SQLに慣れている人であれば、Athenaのセットアップさえできていれば特別な学習コストなしにログを分析することが可能です。

GPTsとは

GPTs(Custom GPTs)は、OpenAIが提供するカスタマイズ可能なAIモデルの仕組みです。これを利用することで、特定のタスクや目的に合わせた専用のAIアシスタントを簡単に作成できます。

今回はGPTsを利用して、自然言語で質問するだけでAthenaのクエリを生成してくれるAIアシスタントを作成することを目標にします。

GPTsは社内向けにセキュアな環境で構築することが可能です。
GPTsはユーザーの会話内容や入力データをモデルの再学習に利用しません。これにより、機密情報や重要な社内データが外部に影響を与えることはありません。
また、GPTsは特定のユーザーやグループにのみアクセスを許可する設定が可能です。
今回は社内のエンジニア向けに特定アプリケーションのログ調査のためのアシスタントという前提で作ってみます。

マイGPTsの構築

目的と名前を設定する

必要な情報を伝える

schema.txt
- type: ログの種類(http または https)
- time: リクエストのタイムスタンプ
- date: リクエスト日付(yyyy/mm/dd)
- elb: ロードバランサーの名前
- client_ip: クライアントIP
- target_ip: ターゲットIP
- request_processing_time: リクエスト処理にかかった時間(秒)
- target_processing_time: ターゲット処理にかかった時間(秒)
- response_processing_time: レスポンス処理にかかった時間(秒)
- elb_status_code: ロードバランサーのステータスコード
- target_status_code: ターゲットのステータスコード
- received_bytes: 受信したバイト数
- sent_bytes: 送信したバイト数
- request: HTTPリクエスト情報(メソッド、URL、プロトコル)
- request_url: リクエストURL
- user_agent: クライアントのユーザーエージェント情報
- actions_executed: リクエストに対して実行したアクション
- ssl_cipher: 使用されたSSL暗号
- ssl_protocol: 使用されたSSLプロトコル

とりあえず基本情報として最低限のものはインプットできました。
早速使ってみましょう。

使ってみる

例1: アクセス数の多いUAを抽出

簡単な例ですが、コピペするだけで使えるクエリを生成してくれました。
頼んでないけど解説までつけてくれました。初学者も安心ですね。

例2: ふんわり相談してみる

こんな感じで明確な指令がなくてもクエリを提案してくれるのは流石です。
通常のChatGPTも同じかと思いますが、こちらの要求が複雑になると、厳密には手直しが必要なクエリが生成されることも当然ありますが、大枠をパッと作ってくれるのは大変助かります。

通常のChatGPTを利用する場合、まず初めに前提となるスキーマ情報等を伝えるところから始める必要がありますが、GPTsを使えば目的ごとに事前にインプットしておくことができるので、その手間が省けるのが良いですね。
さらに複雑な前提情報も事前にインプットしておくことで、より特定のニーズに最適化することもできそうです。

おわりに

生成AIによる業務効率化の一例で、Athenaのクエリ生成アシスタントを作ってみました。
今回はエンジニア業務の一部であるログ調査を題材にしましたが、GPTsを使えばそのほか様々な業務をサポートしてくれるAIアシスタントを誰でも生成可能だと思うので、視野を広げて積極的に業務効率化に活用していきたいです。

LCL Engineers

Discussion