Amazon Web Services ブログ

Grafana クエリキャッシュと Amazon Timestream を使ったダッシュボードの高速化とコスト最適化

本投稿は、ゲストである Grafana Labs の Senior Software Engineer の Michael Mandrus と Amazon Timestream の Senior Technical Product Manager の Igor Shvartser の共著となります。

多くの組織にとって、パフォーマンスとコスト効率の良い監視と分析は、ミッションクリティカルなアプリケーションの要件となっています。この要件に伴い、特に DevOpsセキュリティIoT アプリケーションでよく見られるアクティビティの急増時に、運用ダッシュボードと視覚化を使用する事が増えています。これらのダッシュボードは、多くのアナリストにより同時に表示され、短い間で何度もリロードされますが、こういった頻繁な使用により、コストの急騰やクエリの遅延を招き、チームの生産性の低下につながる事があります。また、より時間に敏感な状況では、ダッシュボードの読み込みを待って時間を無駄にしてしまわない事が重要です。

Grafana は時系列データベースと統合してソフトウェアスタックを監視、視覚化出来る主要なオープン可観測性プラットフォームです。Grafana は頻繁にアクセスされるデータをキャッシュする機能を提供します。また、1 日に数兆件のイベントを処理可能なスケーラビリティを持ち、サーバレスで高速に動作する時系列データベースである Amazon Timestream と統合する事ができます。

幅広い業界のお客様が Grafana を Timstream と統合して利用しており、ダッシュボードからリアルタイムの洞察を導き出し、重要なアプリケーションを監視し、Web サイトやアプリケーションの数百万のリアルタイムイベントを分析しています。Grafana と Timestream を統合して利用する事で、運用ダッシュボードを構築し、ソースとなる Timestream テーブルでは無く、Grafana が保持するキャッシュから結果を読み込む事が出来ます。これによりダッシュボードの読み込み時間が短縮され、クエリコストが削減され、クエリがスロットリングする可能性は低減します。

この投稿では、Timestream のデータを使って Grafana のダッシュボードを作成する方法と、Grafana Query Caching 機能を使ってクエリキャッシュを構成する方法を紹介します。

ソリューションの概要

Grafana を利用すると、ユーザはパネルのコレクションから構築されたダッシュボードを作成して、様々なソースデータの視覚化を実現できます。Grafana Plugins Catalog からダウンロードして利用できるプラグインを通じて、様々なデータソースが利用できるようになります。プラグインをインストール後、特定のデータベースへ接続するように構成されたデータソースインスタンスを作成します。データソースの構成、利用方法については Timestream plugin を参照して下さい。また、本ソリューションを利用する際のコストについては注意して下さい。

データソースインスタンスを構成後、クエリを作成し、Grafana で利用可能な可視化の方法を選択して結果を表示させる事により、ダッシュボードパネルを作る事ができます。パネルをロードすると、ダッシュボードで指定された時間範囲を組み合わせたクエリが実行されます。

Grafana のクエリキャッシュ機能 (Grafana Cloud、Grafana Enterprise で利用可能) はデータソースインスタンス、クエリ、及び時間範囲を使用してキャッシュのキーを作成します。パネルがロードされると、Grafana はまずローカルキャッシュで要求されたデータを確認し、見つかった場合はキャッシュからデータを返します。見つからない場合は、Grafana はデータソースに対してクエリを実行し、結果をローカルキャッシュに保存します。つまり、ダッシュボードの初期ロードでは通常の時間がかかりますが、その後の同様の時間範囲を指定したロードはほぼ瞬時に行われる事になります。これは、時間範囲を最も近い間隔にまとめ、キャッシュヒットの可能性を高める事で実現されます。尚、クエリキャッシュとその有効期限 (TTL) はデータソースインスタンス毎に構成できます。

Timestream を始める

Timestream の利用を開始するには、チュートリアルとサンプルのアプリケーションを含むこちらを確認して下さい。このチュートリアルでは、サンプルデータセットが入力されたデータベースを作成し、サンプルクエリを実行する方法を示します。また、サンプルアプリケーションは、データベース/テーブルを作成し、テーブルにサンプルデータを設定し、サンプルクエリを実行する方法を示します。AWS コンソールに直接アクセスしたり、AWS コマンドラインインターフェース (CLI) や AWS SDK を使用したりする事も出来ます。

尚、Timestream を初めて利用する場合には、使用量割当の条件を遵守する必要がありますが、1ヵ月間の無料トライアルで試す事が出来ます。

Timestream プラグインの構成

本セクションでは、データベースキャッシュ機能を備えた Timestream プラグインの構成と使用方法について説明します。Timestream データベースを設定し、Grafana からクエリを実行する為の前提条件と手順については、こちらを参照して下さい。

1. Timestream プラグインをインストールします。

2. 新しいデータソースを追加します。

3. 接続情報の詳細を入力します。

4. 追加の詳細を入力し、Save & test を選択して、接続を検証します(スクリーンショットの構成情報は例であり、実際の詳細とは異なる場合がある点に注意して下さい)

5. Cache のタブで、Enable を選択します。

6. Cache 設定 (オプション) を構成します。

7. クエリを作成し、ビジュアライゼーションを選択してパネルを作成します(スクリーンショットの構成と SQL クエリは例であり、実際の詳細とは異なる場合がある点に注意して下さい)

8. パネルをリロードし、応答がキャッシュされた事を確認します。

これで完了です!必要な可視化が得られるまでは、ダッシュボードの構築を続けましょう。以下は特に広い時間の範囲が選択された Timestream のダッシュボードの例です。クエリサイズ (1 か月分の Timestream データ) が大きい為、初回はダッシュボードを全てロードするのに時間がかかりましたが、リフレッシュ時はクエリキャッシュを利用する為、Timestream へのアクセスは発生せず、ダッシュボードを表示するのに 100 ms 以下 (99% 短縮) で完了しました。

考慮事項

Grafana のクエリキャッシュ機能を使う場合は、現在、以下 2 点の考慮事項があります。

  • キャッシュキーは特定のタイムスタンプによって決まります。つまり、クエリに利用する時間範囲が既にキャッシュに保存されている時間範囲に収まらない場合は、Grafana はデータベースに対して全く新しいクエリを発行する必要があります。例えば、t0 から t1 に対してクエリを実行し、次に t0 から t2 に対してクエリを実行すると、Grafana は t1 から t2 では無く、t0 から t2 に対してクエリを実行します。同じ事は結果のサブセットにも当てはまります。
  • もしも複数の利用者が同じダッシュボードを同時にロードした際、キャッシュにデータが無い場合は、各クエリは重複排除されずに並行してデータソースに送信され、キャッシュスタンピード (データソースにアクセスが殺到して高負荷となる事) が発生する可能性があります。キャッシュスタンピードを監視する方法としては、Grafana のメトリック grafana_http_requests_in_flight をモニターする事が挙げられます。これは、事象発生時には、同メトリックが増加する為です。また、キャッシュスタンピードを予防するには、max_conns_per_host や、max_open_conns_default 等のパラメータを Grafana に設定し、データソースへの接続数を調節する必要があります。

Grafana チームはこれらの制限に対応する拡張機能の可能性を積極的に調査しており、Grafana の将来のバージョンに含める事を検討しています。進捗情報と今後のリリースでの修正にご期待下さい。

結論

本投稿では、Timestream で Grafana クエリキャッシュを利用する方法について説明しました。クエリキャッシュは運用ダッシュボードのパフォーマンスを向上させ、クエリコストを削減する為の重要な機能です。Timestream での Grafana の使用、及びサンプルアプリケーションとダッシュボードの作成について説明する追加ドキュメントについては、Grafana の Timestream 開発者ガイドを確認して下さい。

Grafana Cloud はメトリクス、ログ、トレース、ダッシュボードを使い始める最も簡単な方法です。また Grafana は最近、永久無料枠として、3 人までのユーザに対して、全てのエンタープライズプラグインへのアクセスを含む新機能を追加しました。さらにあらゆるユースケースに対応するプランも用意しています。今すぐ無料でサインアップしましょう!

Timestream を確認して開始するには、こちらをご確認下さい。

翻訳はテクニカルアカウントマネージャーの西原が担当しました。原文はこちらをご覧下さい。