こんにちは。
メディアサービス開発部Webアプリケーション開発課の中野です。
読書メーターのインフラおよびバックエンドシステムを担当しています。
本稿ではNew Relic Infrastructureで5分に1回しか取れない非連続的なデータに対してアラート設定を行う方法をご紹介します。
New Relicとは
New Relicとはリアルタイム監視サービスです。
読書メーターではNewRelic APMで各アプリケーションを、NewRelic InfrastructureでAWS管理下のサービスを監視しています。
New Relicで5分に1回しか取れない非連続的なデータに対してアラート設定を行うには
読書メーターではAmazon OpenSearch Serviceを検索システムの一部に利用しています。
Amazon OpenSearch ServiceのデータはRDBのデータと常に同期を取っています。その同期システムが正しく動作しているかどうかを確認するため、New Relic Infrastructure経由でOpenSearchのWriteIOPSを監視しています。
このWriteIOPSという指標に対して、一定期間閾値以下になった場合、開発者に通知して欲しいと考えていました。
New Relic Infrastractureのアラート機能を使えば、一定期間閾値以下になったときに通知するという設定ができます。
この時、for at least(少なくともn分間条件に一致した場合) およびfor at least one(n分間に少なくとも1回以上条件に一致した場合)という条件一致設定があります。
しかし5分間に1点という粒度の粗いデータでは、for at leastではアラートが発火せず、またat least onceでは過敏に反応しすぎてしまうという問題がありました。
以下がNew Relic Infrastractureのアラート機能を使ったときのグラフです。
5分に1回の非連続的なデータになっているのが見て取れます。
そこで、New Relic Infrastractureのアラート機能ではなく、NRQLのアラート機能を使うことにしました。NRQLのアラート機能はデータを扱う機能が充実しているため、New Relic Infrastractureのものよりも柔軟にデータを扱う事ができます。
まず、WriteIOPSを取得するクエリを作成してアラート作成を行います。
初期の状態では以下の図のように離散的なデータのままです。
次に、以下の図のようにFine-tune advanced signal settingsのData Aggregation Settingsを設定しました。
Window durationはデータの集約(グループ化)を行う時間枠のことで、図中の文章にあるとおり、不安定なデータや頻度の低いデータを扱いやすくするための設定です。
Streaming methodは、その名の通りデータのストリーミングを行う方法のことで、今回は5分に1回取得できるデータなのでEvent timerを選択し、Timerを5分に設定しています。
各パラメータの詳細については以下の公式の記事が詳しいのでご参照ください。
上記設定によりデータが5分ごとに集約され、非連続なデータではなく、連続的なデータとして扱うことができるようになりました。
以下の図は5分ごとにデータ集約されたグラフ です。
この条件でfor at leastの設定を行えば、実現したかった一定期間閾値以下になった時にアラートの発火が行われるようになりました。
実際に閾値を変更すると以下の図のようにアラートが発火する部分が赤く表示されます。
最後に
ブックウォーカーでは物理・電子・Web連載問わず漫画や本が好き、あるいは長年運用されてきたWebサービスを紐解き、より良い形に作り替えていくことに興味があるWebアプリケーションエンジニアを募集しています。
もし興味がありましたらぜひ、ブックウォーカーの採用情報ページからご応募ください。