連載 :
  

CNCF、Prometheus as a ServiceのCortexをサンドボックスプロジェクトとして採用

2018年10月26日(金)
松下 康之 - Yasuyuki Matsushita
CNCFはWeaveworksが開発を進めるPrometheus as a ServiceのCortexを、サンドボックスプロジェクトとして採用。コンテナ監視のスケールアウトを目指す。

クラウドネイティブなコンピューティングを実現するためのソフトウェアスタックを推進するCloud Native Computing Foundation(以下、CNCF)は、マルチテナント型のモニタリングサービスを実現するCortexを、サンドボックスプロジェクトとして採用したことを発表した。

参考:CNCFのリリース:CNCF To Host Cortex in the Sandbox

これはWeaveworksが開発を進めている監視ソリューションであるCortexを、CNCFのプロジェクトとしてホストすることを決定したというものだ。

Weaveworksのブログにあった言葉を用いてシンプルに表現すると、Cortexは「水平にスケールするマルチテナント型のPrometheus as a Service」となる。

Weaveworksのブログ:Weaveworks Cortex - the newest member of the CNCF Sandbox

Cortexは、Project Frankensteinと呼ばれていたオープンソースプロジェクトを源流とするPrometheus as a Serviceである。WeaveworksはKubernetesをベースにしたクラウドサービスのWeave Cloudを提供しているが、その本番環境やGrafanaCloudで、すでにCortexは本番稼働しているという。

Weaveworksが公開しているFrankensteinのデザインドキュメントを読めば、モニタリングについて、当時考えていたであろう複数のニーズが分かる。

  • ユーザーの利用するコンピュータ資源のメトリックスをタイムシリーズデータで保存したい
  • Prometheusを使う
  • ただしユーザーごとにPrometheusのサービスをデプロイしたくない

この3つを実現するために、Project Frankensteinの開発が進められたという。そしてそのFrankensteinがCortexという名称に変更され、今回、CNCFのサンドボックスとして採用されたということになる。

処理の概要をまとめると、まずリモートのクラスターにデプロイされたPrometheusから、Remote Write APIを通じてCortexのクラスターにデータを送信する。ロードバランサーの後段に置かれるDistributorと呼ばれる複数のプロセスがデータを受け取り、タイムスタンプを追加する。ここでタイムシリーズデータとして整形される。それを最低3つのIngesterと呼ばれるプロセスに送信、データはチャンクとしてIngesterのメモリーに保持され、まとまった形で永続的ストレージであるNoSQLのデータストアに保存される。それを必要に応じてPrometheusのクエリー言語であるPromQLを使って可視化する、というものだ。

Weaveworksのブログに描かれたコンセプト図

Weaveworksのブログに描かれたコンセプト図

CNCFのリリースには、この手書きメモよりも真面目そうな概要図が掲載されているが、理解の容易さでは手書きのメモのほうが優れているように思える。

CNCFの使っている概要図

CNCFの使っている概要図

ここでのポイントは、データを受け取るDistributorはIngesterにデータを送信する際に必ず最低3つのIngesterに送信することで、Ingesterがダウンした時やデータを正常に受け取れなかった場合でもデータの欠損が生じないような設計になっていることだろう。数千数万という規模のサーバーが稼働するクラウド環境において、監視を行うPrometheusも大量のデータを処理することになる。そしてそれを受け取り、タイムシリーズデータにする処理を受け持つバックエンドも、マスター&スレーブという単純な組み合わせではなく、常に稼働し続けることを義務付けられている構造をとっている。これは、実際にクラウドサービスを提供しているWeaveworksの経験からのものだろう。なお、この部分のデザインはAWSのDynamoDBを参考にして設計されたということを明記している辺りに、障害に耐えうるアーキテクチャーを目指しているということが理解できるだろう。

より詳細には以下のブログを参照していただきたい。

What is Cortex?

また当然ながら、GitHubにはCortexのリポジトリーが公開されている。

GitHubのリポジトリー:https://github.com/cortexproject/cortex

また少し時期的には古いが、2016年にシアトルで開催されたKubeConのスライドも参考になるだろう。

KubeCon 2016 Seattleのスライド:https://www.slideshare.net/weaveworks/weave-cortex-multitenant-horizontally-scalable-prometheus-as-a-service

サーバーで稼働するPrometheusのようなアプリケーションをas a Serviceとしてクラウド化する際に、Weaveworksが採用した考え方やアーキテクチャーは、これからのデータセンターを考える上で参考になるだろう。24時間、365日稼働を続けるコンピュータシステムを構築する際に必要なのは「落ちない/壊れないシステム」ではなく「落ちる/壊れることを前提として、それでも動き続けるシステム」という発想だ。それはNetflixが開発し、利用しているChaos Monkeyなどにも通じる、どこかが少しずつ壊れても動き続けるインターネットを模したシステムとも言えるだろう。今後もCortexには注目していきたい。

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています