読者の皆様へ: 皆様のご要望にお応えするべく、ノイズを削減する機能セットを開発しました。皆様が関心をお持ちのトピックを、EメールとWeb通知で受け取ることができます。新機能をぜひお試しください。
Vivintのエンジニアリングチームは、同社のデバイスからメトリクスを収集し、解析するためのメトリクス収集プラットフォームを独自に構築した。同社が独自システムの開発に至ったのは、集計されたデータのみの保存を可能として分析に集中するためであったが、この目標がRothkoプロジェクトとして達成された。
Vivintはスマートホームデバイスのプロバイダである。GraphiteやOpenTSDBなど他のシステムとRothkoを差別化する基本的な設計判断は、全サービスのデータポイントではなく、集計データを格納することだ。これは、すべてのデータポイントを保存しないことと、なおかつ問題の特定を可能にするということの、意識的なトレードオフによるものだ。それと同時に、収集されたデータは、分析時に必要な主要な機能を失うことなく、統計分析に利用可能なものでなければならない。
Rothkoでは、メトリクスの全体的な分散を確認し、分析することが可能である。個々のメトリックが保存されないのならば、個々のデバイスを診断しなければならない状況に対応することはできるのだろうか?InfoQは同社ソフトウェアエンジニアのJeff Wendling氏とコンタクトを取り、この問題とRothkoのアーキテクチャについて詳しく聞いた。
事実として、個々のデータポイントは保存していません。これによる問題は、2つの方法で解決しています。ひとつは、最大値と最小値、その出所を保存する方が容易で安価なので、そのようにしています。値が極端に逸脱している場合、これらが役に立ちます。ふたつめは、すべてのデバイスが約30分間隔でデータを送信するので、データにタップして特定のメトリックやデバイスをフィルタリングする“消化ホース(Firehose)”を使うことができるのです。データが送信され続けていると仮定すれば、一般的には、それが誰なのかを識別することは可能です。この2つの方法はもちろん、問題特定を保証するものではありませんが、安価で簡単な、20パーセントの労力による80パーセントのソリューションであり、Rothkoの原則にも合致します。
時系列データでは、アプリケーション名やデータセンタの所在地のように、データに付随して分析時の論理的なグループ化に使用するプロパティを格納するために、タグなどのメタデータを保持するのが一般的だ。Vivintのデータもそうなのだろうか?Wendling氏が答えてくれた。
ランダムな“インスタンスID”以外には何も送信していません。今のところこれは、構造化されていないバイトのスライスです。ですから理論的には、何でもそこに送り出すことが可能です。私たちが監視しているデバイスセットは、ユーザの自宅にある安価なデバイスがほとんどですので、GPSのような装備はありませんが、IPを使えば地理的ロケーションに十分近い情報を取得することができます。
Rothkoのアーキテクチャは、メトリック毎に構成可能な数のフラットファイルを使用し、mmapを使用して書き込みと読み取りを行うデータベースインプリメンテーション、Graphiteワイヤプロトコルに基づくメトリック受信インプリメンテーション、データ集約を行う近似変位値スケッチ(approximate quantile sketch)インプリメンテーション、データ取得とグラフ表示を行うためのAPIエンドポイント群、人が使用するためのフロントエンドUIで構成されている。デバイスからRothkoエンドポイントへは、セキュアなデータ送信が可能だ。
“プラグイン可能な設計を採用しています”、とWendling氏は言う。“多数の競合する標準や、さまざまなワークロードが存在するからです。例えば、内部的には、独自のワイヤプロトコルからメトリクスを読み出すために、独自のプラグインを用意しています。プラグインの記述や、tomlファイルを使った設定が簡単にできるように設計されています。プロセスのロギングや内部のメトリクス収集も簡単に取り換えて、必要なものに合わせることができます。”
Rothkoは多数のインスタンスを対象に、少数のメトリクスを処理するように設計されている。現状では50,000近いメトリクスを処理し、そのディスクフラッシュを500MBのRAMで約50秒で完了することができる。フラッシュは10分単位で実行されるので、“50万のメトリクスであれば容易に処理できるはずです”、とWendling氏は言う。これは単一のインスタンスにデプロイしたもので、このレベルであれば、水平シャーディングのようなスケーリングポリシを実装する必要はない。
アラート機構を使用していないのかという質問に対して、Wendling氏は、アラートは使用せず、ダッシュボードに注力していると回答した。RothkoはGo言語で記述されており、ソースはGithubにホストされている。
この記事を評価
- 編集者評
- 編集長アクション