Promscaleのデモから見えるタイムシリーズデータを使った現代的なオブザーバビリティ
クラウドネイティブなオブザーバビリティについて、Cloud Native Computing Foundation(CNCF)のウェビナーからタイムシリーズデータベースを提供するTimescaleのセッションを紹介する。これはOpenTelemetry、Grafana、Promscaleの3つのオープンソースソフトウェアを使ってデモとして構築されたマイクロサービスに対して観測を行うという内容となっている。
この動画は2022年4月7日に公開されたCNCFの公式動画である。セッションを担当したのは、Promscaleを開発するTimescaleにおいて、VP of Observability Productsのタイトルを持つRamon Guiu氏だ。セッションのタイトルは「Understand your system like never before with OpenTelemetry, Grafana, and Promscale」、意味としては「OpenTelemetry、GrafanaそしてPromscaleを使ってシステムを(観測して)理解するこれまでにない方法」といったところだろうか。PromscaleはPrometheusから採取されるタイムシリーズデータを処理するシステムの名称だ。
動画:Understand your system like never before with OpenTelemetry, Grafana, & Promscale
この動画が特徴的なのは、単にデモアプリケーションに対してOpenTelemetryでトレーシングを行ってその結果をGrafanaのグラフィカルなインターフェースで参照するというだけではなく、必要なデータの取得をSQLのインターフェースで行っているという部分だろう。またデータストアとしてPostgreSQLを拡張したTimescaleDBというタイムシリーズデータに特化したデータベースを使っているという部分が、単なるPrometheusのデモではなくオブザーバビリティの観点からイベントやエラーに関するデータをSQL構文で処理可能であることの利点を解説した内容となっている。
ここではOpenTelemetryが得意とするトレーシングに注目して解説を行っている。複数のプロセスで構成されたサービスにおいてメッセージを交換して処理を進め、データベースへの書き込みや外部サービスへの呼び出しなどを行うことで必要とするサービスが完成するという例を挙げている。そして、その処理の繋がりをトレースと呼び、それぞれの処理が実行される時間をスパンと呼ぶことなどの基本的な概念を説明した。
そして今回のテクノロジースタックの中心となる、タイムシリーズデータベースについて説明を行った。
システムの内部で何が起きているのかを観測するためにログ、イベント、トレース、メトリクスなどが利用されるが、それらのデータにはいつそれが発生したのか? というタイムスタンプが付随している。そのタイムスタンプとそれがどこで起きたのか? というサーバー名やプロセスID/コンテナIDを繋ぎ合わせたデータは、発生原因などを突き止めるために役立つことは明らかだ。そのためのソフトウェアであるPromscaleでは、タイムシリーズデータベースであるTimescaleDBというPostgreSQLを拡張したデータベースと、外部との連携を行うコネクターがセットになっているということだ。
ここから今回のデモで利用されるデモシステムの解説に移った。このデモアプリケーションはパスワードジェネレータであると紹介されている通り、ランダムなパスワードを自動生成するためのアプリケーションである。大文字、小文字、数値、特殊文字をそれぞれランダムに生成するモジュールから構成されているが、小文字を生成するモジュールのみSinatraを使ったRubyで書かれており、その他のモジュールはFlaskを使ってPythonで書かれている。コード自体はそれぞれ100行程度の長さの簡単なものとなっているので、内容を理解するのはさほど難しくないだろう。
デモのコードはGitHubで公開されている。
デモシステムのGitHubサイト:https://github.com/timescale/opentelemetry-demo
すべてのモジュールがOpenTelemetryでトレーシングできるように設定されており、OpenTelemetryコレクターから収集されたトレーシングデータはタイムシリーズデータベースであるTimescaleDBに格納される形だ。
ここから実際にGrafanaのダッシュボードを使ってリクエストレート、エラーレートなどを参照するデモを行った。デモアプリケーションからはトレースデータが細かく採取されているため、PromQL(Prometheus Query Language、Prometheusのクエリ言語)を使ったSELECT文などで欲しいデータをグラフなどの形で可視化している。
SQLによってさまざまなデータが取れるようすを実演している。またDigitという数値を生成するモジュールではわざと処理を遅らせるコードを入れることで、実際にトレースの中でスパンが長いことを確認できる。
このデモのポイントは、SQLを使ってオブザーバビリティのためのデータを取り込むことが可能であることと、OpenTelemetryを利用する際のサンプルコードを提示したことだろう。デモの内容についてはTimescaleのブログに詳しく解説されている。
デモアプリケーションの解説:Learn OpenTelemetry tracing with this lightweight microservices demo
このデモで紹介されている仕組みが開発される前は、Honeycombが開発した複数のプロセスで実行される複雑なアプリケーションを使ってオブザーバビリティを実演していたという。以前のデモはKubernetesのクラスターが必要な重い構成だったとして、より軽量なデモとして開発されたという経緯も説明されている。デモ自体はSQLによって柔軟にデータが可視化されていることが良く解説されている。
このサイトで紹介されているタイムシリーズデータの活用事例として、アメリカのフットボールリーグであるNFLがプレイヤーやボールの動きをRFIDで検知して各ゲームの分析に役立てているというものがあるので、それを最後に紹介したい。これは「Hacking NFL data with PostgreSQL, TimescaleDB, and SQL」と題されたブログポストで2021年7月27日に公開されている。
NFLでのタイムシリーズデータの活用例:Hacking NFL data with PostgreSQL, TimescaleDB, and SQL
NFLはAWS上ですべてのゲームに関するデータを保存し、Next Gen Statsという形でより科学的な分析が行えるように公開しているという。このデータは公開されており、BIG DATA BOWLというオープンなコンテストとして分析を競う機会を提供しているのが興味深い。コンテストとして実施することで、NFLチーム以外のエンジニア、データサイエンティストがさまざまな結果(例えば、最もラッシュが成功するルートは何か?)を発見し、NFLでデータサイエンティストとして働きたい人材を発掘することに役立っているという。
このSQLの例ではすべてのチームのすべてのゲームからクオーターバック、ランニングバック、ワイドレシーバー、タイトエンドなどのポジションのプレイヤーがどれだけのヤード数を獲得したのかを算出している。
このようにオブザーバビリティとしてのタイムシリーズデータという側面だけではなく、さまざまな利用形態が考えられるというのがTimescaleとしての訴求ポイントだろう。時系列データの処理を検討している企業には参考となる事例だ。
このデモで利用されているタイムシリーズデータベース及びPromscaleについては以下の公式サイトを参照されたい。
Timescale公式サイト:https://www.timescale.com/
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Oracle Cloud Hangout Cafe Season4 #4「Observability 再入門」(2021年9月8日開催)
- 「Odigos」でノーコードの分散トレーシングを実現する
- Obervability Conference 2022、OpenTelemetryの概要をGoogleのアドボケイトが解説
- Kubernetesアプリケーションのトレーシング
- Observability Conference 2022、Splunkのエンジニアが説明するOpenTelemetryの入門編
- Observability Conference 2022から、サイボウズのオブザーバービリティ事例を紹介
- 3/11「Observability Conference 2022」開催せまる! 実行委員オススメのみどころを紹介
- Observability Conference 2022開催、Kubernetesにおける観測の基本を解説
- Kubernetesアプリケーションのモニタリングことはじめ
- Observability Conference 2022、日本ユニシスのエンジニアが解説するデベロッパーにとってのオブザーバビリティ