Grafana用Redisデータソースで構築した実用的なアプリケーション3選
【2021年3月29日更新】https://coronavirusapi.com/ は最近、無料でのデータアクセスを終了し、登録済みの一次対応者のみが利用できる仕様に変更されました。残念ながら、これにより新型コロナウイルス感染症の症例可視化プロジェクトのデモは動作しなくなりましたが、RedisTimeSeriesデータをGrafanaのWorldmapパネルに表示したい場合には、本記事で紹介するヒントは他の多くの実装にも引き続き役立つでしょう。
以前の記事では、新しく登場したGrafana用Redisデータソースの概要と基本的な使い方を解説しました。
- Grafana用Redisデータソースプラグインのご紹介
- 新しいGrafana用Redisデータソースプラグインの使い方
本記事では、Redisに保存できる魅力的なデータセットと、それらをGrafanaで可視化する際のアイデアを得られるよう、実際のユースケースを3つ紹介します。
- 天気ダッシュボード
- 新型コロナウイルス感染症の症例可視化
- ポップアップストアデモ
1. 天気ダッシュボード
世界にまた天気ダッシュボードがひとつ増える必要があるのか?——はい、あると思います!
正直なところ、私は普段それほどウェザーマニアではありません。天気を気にすることも少なく、仮に気になったとしても、最高の天気ダッシュボードは家の窓から外を眺めることだったりします。しかし、写真撮影やドローン飛行のために空いた時間ができたときなど、時折、内なるウェザーマニアが目覚めるのです。
もちろん最大の疑問は「どこへ行くべきか」です。ニュージャージー州にある私の家から車で数時間以内の場所には興味深いスポットが数多くあり、天候は場所によって大きく異なります。本当に欲しいのは、十数か所の天気を1画面にまとめて表示し、一目で条件を比較できるダッシュボードです。しかも重要なのは、地理的に近い場所同士だけを比較するのではないという点です。
さらに言えば、私は数字を扱うのが好きです。風景写真は雲量が20%〜50%のときが最適で、ドローン飛行なら風速10mph未満が理想、10〜20mphは厳しく、20mphを超えると危険になり得ます。だからこそ、こうしたかわいい天気アイコンだけでは私の用途には不十分なのです。
そんな背景をもとに、Redisを使って天気ダッシュボードを構築した方法をご紹介します。
幸い、生の気象データは現在、多様な気象APIを通じて広く入手可能であり、その多くは無料(一部制限あり)で利用できます。今回はOpenWeatherMap APIを選択しました。無料プランで必要なものがすべて揃っていたからです。具体的には、48時間分の時間別予報、7日間の日次予報、そして現在の状況データが取得できます。
そこで、APIからデータを取得し、RedisTimeSeriesモジュールを使って時間別・日次予報をRedisデータベースに格納するとともに、現在の状況を履歴用の別の時系列セットに保存する、シンプルなPythonスクリプトを作成しました。
私の天気ダッシュボードは、次の2つの必須ルールに従って設計しています。
- すべてのデータをスクロール不要の1画面に表示する。
- ダッシュボードに表示された状況を、誰でもできるだけ短時間で理解できるようにする。
ダッシュボードの上部セクションには、特定の場所の現在の状況を表示します。対象は主要な場所でもお気に入りの場所でも、利用可能な場所リストから選んだものでも構いません(ダッシュボード左上にGrafanaテンプレート変数による選択リストを配置しています)。加えて、その場所で特定のアクティビティに適した時間帯も表示されます。Grafanaの機能により、温度の低い/高いゾーンのハイライト、風速の危険ゾーンの表示、雲量の可視化、昼と夜の時間帯のマーキングなどが可能です。
下部セクションでは、アクティビティごとに場所をグループ化し、比較しやすくしています。円が大きいほど、その場所でそのアクティビティに適した時間が長いことを意味します。
2. 新型コロナウイルス感染症の症例可視化
私は旅行が大好きですが、2020年は何百万人もの人々が何ヶ月にもわたって自宅にとどまることになりました(永遠に続かないことを願います!)。現在、多くの州が段階的に経済活動を再開し始めており、賢く移動するためには、出発地と目的地の双方におけるCOVID-19の状況を正確に把握することが極めて重要です。それは現在の状況だけでなく、中長期的なトレンドにも目を向けることを意味します。
これを可能にするのが、私が作成したGrafana米国州別コロナウイルスダッシュボードです。Coronavirus APIのデータをベースに、RedisTimeSeriesモジュールへロードしています。
標準的なグラフ表示に加え、データは地図上にも描画されます。RedisデータソースプラグインはGrafana Worldmapパネルで公式サポートされているわけではありませんが、わずか2つの簡単なステップで連携させることができます。
ステップ1: 時系列の出力結果に対して「Labels to fields」変換を適用します。
ステップ2: 地図パラメータの「Location Data」をテーブルモードに変更し、関連フィールドをマッピングします。
この2つのステップにより、時系列の値を地図上の該当ポイントに紐付けられます。ポイントの位置はRedisTimeSeriesの「geohash」ラベルによって決定され、「state」ラベルは地図上に場所名を表示するために使用されます。
3. ポップアップストアデモ
私は、Redis 5.0で導入された新しいデータ型であるRedis Streamsの大ファンで、データ処理用のキューを監視する高速かつシンプルなソリューションを探していました。Redisデータソースの開発を進める過程で、チームは別のプロジェクト向けにRedisGears——開発者がRedis上でデータフローを実装する関数を記述・実行でき、データの分散やデプロイを抽象化してくれる動的フレームワーク——の調査を開始しました。そして、ポップアップストア向けのデータパイプラインデモにおいて、両者を組み合わせて活用することにしたのです。
RedisGearsは、さまざまな種類の入力データを扱う複数のリーダーをサポートしています。ストリームメッセージを監視するために、ここではイベントモードでStreamReaderを使用しました。このモードでは、ストリームに新しいメッセージが追加された際に発生するイベントに応答して、リーダーが実行されます。
# Add Time-Series
def tsAdd(x):
xlen = execute('XLEN', x['key'])
execute('TS.ADD', 'ts:len:'+x['key'], '*', xlen)
execute('TS.ADD', 'ts:enqueue:' + x['key'], '*', x['value'])
# Stream Reader for any Queue
gb = GearsBuilder('StreamReader')
gb.countby(lambda x: x['key']).map(tsAdd)
gb.register(prefix='queue:*', duration=5000, batch=10000, trimStream=False)
StreamReaderは、トリガーの挙動を制御する複数の引数を受け付けます。今回のケースでは、5秒ごと、または10,000件のメッセージを受信したタイミングでリーダーを起動するように設定しました。最後のオプションtrimStreamは、実行後にストリームをトリムしないことを指定するものです。
受信メッセージ数とキューサイズのサンプルの保存には、RedisTimeSeriesを使用しました。Grafana用Redisデータソースプラグインの入門記事で解説したとおり、時系列データはGrafana上で簡単に可視化できます。
Redis Streams、RedisTimeSeries、RedisGears、そしてRedisデータソースがどのように連携するかを示すため、動的ダッシュボードを備えたポップアップストアデモを作成しました。
このGrafanaダッシュボードでは、以下の項目を確認できます。
- Product Available: 商品キーの値。注文が完了するたびに減少していきます
- Customers Ordering / Orders Processing / Orders Completed: queue:customers、queue:orders、queue:complete の各ストリームの長さ
- Customers Overflow: 顧客が投入した注文数と完了した注文数の差
- Customers Ordering: 直近5秒間に作成された注文数
- Orders In Queue: 処理待ちの注文数
- Completed Flow: 直近5秒間に完了した注文数
プロジェクトのGitHubリポジトリでは、負荷の生成方法、使用したRedisGearsスクリプト、およびTS.RANGEコマンドを使ってRedisTimeSeriesデータを照会するためのRedisデータソースの設定方法を確認できますので、ぜひご覧ください。
まとめ
以上、3つの実際のシナリオを通じて、さまざまなRedisモジュールと組み合わせたGrafana用Redisデータソースの活用方法をご紹介しました。皆さんがこの技術を使って独自のアプリケーションを構築するきっかけになれば幸いです。
すでに多くの仲間がいます。RedisデータソースプラグインはGrafanaリポジトリに公開されて以来、10,000回以上ダウンロードされており、Grafanaダッシュボードを強化できる人気のコミュニティプラグインにも採用されています。さらに、Redisクラスタ、Sentinel、Unixソケット、アクセス制御リスト(ACL)への対応も追加されました。
しかし、これで終わりではありません。今後、Grafanaのストリーミング機能とインタラクティブ性を組み合わせ、redis-cliパネルによってGrafanaをオブザーバビリティの領域を超えて拡張する、エキサイティングなプロジェクトについてもRedis Techブログでお伝えしていく予定です。ぜひお見逃しなく。
-
Upstash Redisで実現するNetlify Graphのグローバルキャッシュ
はじめに先日、Netlifyは「Netlify Graph」という新機能を発表しました。同僚が以前から指摘していた不足していたピースに対して、Netlifyがソリューションへ向けて良い一歩を踏み出した形です。Netlify Graphは、開発者がWebアプリ向けのGraphQL API呼び出しを構築するのを支援する機能です。Netlifyダッシュボード上でGraphQLリクエストを準備すれば、ワンクリックでクライアントコードをプロジェクトに注入できます。Netlify Functionsとサードパーティサービスの課題Netlify Functionsをサードパーティサービスと組み合わせて使う場
-
【徹底比較】Androidデータ復元アプリおすすめ16選|消えたデータを確実に復旧
Androidスマートフォンは、あらゆる難易度のタスクをこなせる万能デバイスです。その中でも特に重要なのがデータ保存機能であり、写真・動画・メール・機密性の高いビジネス文書など、あらゆるデータにいつでもどこでもアクセスできるポータブルな拠点となっています。 しかし、他の電子機器と同様に、Androidスマートフォンもさまざまな原因で不具合が発生し、大切なデータを失ってしまうことがあります。幸い、市販のAndroidデータ復元アプリを活用すれば、失われたデータは簡単に取り戻せます。本記事では、失ったデータを復旧するために選びたい、最高のAndroidデータ復元アプリ16選をご紹介します。 An