PR
連載 :
  

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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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

CNCF、Prometheus as a ServiceのCortexをサンドボックスプロジェクトとして採用 | Think IT(シンクイット)

Think IT(シンクイット)

サイトに予期せぬエラーが起こりました。しばらくたってから再度お試しください。