AmazonBedrock基盤モデルの利用状況を知ろう 【CloudWatchで監視編】



# はじめに
Amazon Bedrock 基盤モデルの利用状況を知る方法、2つ目の記事です。
前回はBedrock基盤モデルの過去の利用実績をログから分析する方法を紹介しました。
以下の記事で紹介しているのでよければご参考ください。

https://qiita.com/kanuazut/items/82d3d761e4bb8c6e3e03

<br>
今回は、リアルタイムの監視を行う方法として、CloudWatchを使ってリアルタイムの利用を監視し、大量リクエストがあった場合にEメールに通知する手順を確認します。
手順は非常に単純なので、CloudWatchを使ったことがある人は読む必要がないかもしれません。



# 手順
## メトリクスの確認
マネジメントコンソールからCloudWatchのページを開きます。
左メニューの「すべてのメトリクス」をクリック。
![2024-03-26-21-30-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/5f441e9e-a3b4-d851-bb22-5a7ba1df097f.png)

<br>


AWS名前空間の中から「Bedrock」を見つけクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/8101ce38-e9b0-9585-dab7-d94c38e0faf9.png)

<br>

Bedrockのメトリクスには「モデル別」のものと「全体」のものがあります。
今回は「すべてのモデルID全体」を選択します。
![2024-03-26-21-30-59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/35743ac7-68d2-11cf-315c-d8d361336d28.png)

<br>

現在筆者の環境で確認可能なメトリクスは以下の7種類でした。利用している基盤モデルによっては数が異なるかもしれません。
大量の異常リクエストを検知したい場合などに使えそうなのは、`Invocations`リクエスト数と`InputTokenCount`,`OutputTokenCount`あたりでしょうか。
![2024-03-26-21-31-38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/bd515c6c-ad25-2d8e-5d59-b527223eb3df.png)

<br>


今回は単位時間あたりのリクエスト量の増加を検知してみましょう。
`Invocations`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/569e7c5f-c1fe-7c1f-a2b8-d3c6d8ee83ed.png)

<br>


グラフの表示がデフォルトでは5分間の平均になっているので、変更します。
タブの「グラフ化したメトリクス」から、統計を`合計`、期間を`1分`に変更すると、1分毎の基盤モデルへのリクエスト数の時系列グラフになりました。
以下画像ではリクエスト数が少なすぎて離散的ですが、エンタープライズで使っている環境であればもっと見ごたえのあるグラフになっていると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/6f8034ca-0402-cc42-01f2-f8afe2f381b0.png)
<br>



以下のように`InputTokenCount`と`OutputTokenCount`を見比べてみても面白いかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/56ce60b8-cbf6-8be3-a55a-682d4189e36d.png)


## アラームの設定

異常利用が発生したときに検知する設定を行います。

`Invocations`を選択し「アラームの作成」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/bb0e38db-77b4-4a05-3d17-d9bbbf83c341.png)

<br>

メトリクスの値と期間を設定します。
今回の`Invocations`はカウント値のため、統計には`合計`、期間は`1分`とします。
期間は適宜、監視したい期間に応じて入れるとよいでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/fd2e57ef-a381-1c52-9bed-568c8e0512a7.png)

<br>

次に条件を設定します。しきい値の種類は「静的」と「異常検出」があります。
大量リクエストの発生検知などには異常検出が適しています。前後のトレンドから大きく外れた数値があれば検出してくれます。

![2024-03-26-20-52-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/0045be42-904f-e491-1261-6cbb2de9ca16.png)

<br>

今回はアラートをテストしたいので、「静的」かつ分かりやすい固定値としたいので以下の設定とし、閾値は`4`と低めにしておきました。
データポイントは1/1なので、ある1分間で５回以上のリクエストがあったらすぐにアラートが発砲します。

![2024-03-26-20-51-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/124ecff2-f161-2b89-d7fa-f2af4ee0e76c.png)

<br>

通知設定を行います。
今回はクエリ数が急増し閾値を超えたときに通知が欲しいので、`アラーム状態`をトリガーにします。
新規に通知先のトピックを作る場合は、「新しいトピックの作成」を選択肢、トピック名とEメールを入力してから「トピックの作成」をクリックします。その後、追加したメールアドレスに届く認証メール内のサブスクリプション承認をクリックしてください。

![2024-03-26-20-58-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/86be9681-f16f-3cd7-9447-1964e0f0b1ec.png)

<br>

最後にアラーム名と説明を記入して、「次へ」進みます。
![2024-03-26-21-07-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/5d7e22ac-a092-a45e-fb10-d7fcf8d1559c.png)

プレビューが表示されるので、「アラームの作成」をクリックすれば完了です。


## 通知の確認

アラームの作成後、アラームページに新しく追加されています。
現在はデータ不足となっています。

![2024-03-26-21-08-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/ddff2b04-c477-671e-fab1-f42e90699fdb.png)


<br>

では1分間に5回以上使ってみます。
蛇足も蛇足ですが、こういうテストのときはいつもしりとりをしています。
文字数が少ないのでレスポンスが早くていいです。
![2024-03-26-21-10-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/a5c4b18b-e2d1-bd0b-206e-358301b2d522.png)

<br>

1,2分後に確認すると無事アラーム状態になりました。
![2024-03-26-21-12-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/93c3ab7e-f86c-c8de-425e-187589ee3439.png)

<br>

アラームを開くと確かに閾値の4回を超えています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/43e4a0ff-9ed9-5d15-54ce-da12fe4273e4.png)


<br>

しっかりメールも届きました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115707/5e1bfeb0-bf28-e4e8-0b3f-0d60cda06ec0.png)


# おわりに
CloudWatchでAmazon Bedrockの基盤モデルのInvocationの急増を検知することができました。
実際には固定閾値ではなく「異常検出」の閾値を設定するといい感じになると思います。

本当はCloudWatch Logsからメトリクスフィルタで値を抽出する方法を考えていたのですが、マネージドでBedrockのメトリクスがあったため非常に簡単に設定できてしまいました。
設定手順の負荷はほとんどないので、できればコスト管理を担当する人は設定しておきたい内容です。


# 参考
[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/monitoring-cw.html#runtime-cloudwatch-metrics)