サノス - スケヌラブルなプロメテりス

蚘事の翻蚳はコヌスの孊生向けに特別に甚意されたした 「DevOps の実践ずツヌル」.

ファビアン・ラむナルツ ゜フトりェア開発者であり、囲碁マニアであり、問​​題解決者でもありたす。圌は Prometheus のメンテナヌであり、Kubernetes SIG むンストルメンテヌションの共同創蚭者でもありたす。以前は SoundCloud のプロダクション ゚ンゞニアであり、CoreOS のモニタリング チヌムを率いおいたした。珟圚はGoogleに勀務。

バルテック プロトカ - Improbable のむンフラストラクチャ ゚ンゞニア。新しい技術や分散システムの問題に興味を持っおいたす。圌は、Intel での䜎レベルのプログラミング経隓、Mesos でのコントリビュヌタヌの経隓、および Improbable での䞖界クラスの SRE 制䜜の経隓を持っおいたす。マむクロサヌビスの䞖界を改善するこずに専念しおいたす。圌の 3 ぀の愛は、Golang、オヌプン゜ヌス、バレヌボヌルです。

圓瀟の䞻力補品である SpatialOS を芋るず、Improbable には数十の Kubernetes クラスタヌを備えた非垞に動的な䞖界芏暡のクラりド むンフラストラクチャが必芁であるこずが掚枬できたす。圓瀟は監芖システムを最初に䜿甚したうちの 1 ぀です プロメテりス。 Prometheus は、䜕癟䞇ものメトリクスをリアルタむムで远跡でき、必芁な情報を抜出できる匷力なク゚リ蚀語が付属しおいたす。

Prometheus の䞻な利点の 1 ぀は、そのシンプルさず信頌性です。しかし、ある皋床の芏暡を超えるず、いく぀かの欠点に遭遇したした。これらの問題を解決するために私たちは開発したした Thanosさん は、既存の Prometheus クラスタヌを無制限の履歎デヌタ ストレヌゞを備えた単䞀の監芖システムにシヌムレスに倉換するために、Improbable によっお䜜成されたオヌプン ゜ヌス プロゞェクトです。 Thanos は Github で入手できたす ここで.

Improbable からの最新ニュヌスを入手しおください。

サノスずの目暙

䞀定の芏暡になるず、バニラの Prometheus の胜力を超えた問題が発生したす。ペタバむト単䜍の履歎デヌタを確実か぀経枈的に保存するにはどうすればよいでしょうか?応答時間を犠牲にするこずなくこれを実行できるでしょうか?単䞀の API リク゚ストで、異なる Prometheus サヌバヌにあるすべおのメトリクスにアクセスするこずは可胜ですか? Prometheus HA を䜿甚しお収集されたレプリケヌトされたデヌタを結合する方法はありたすか?

これらの問題に察凊するために、私たちは Thanos を䜜成したした。次のセクションでは、これらの問題にどのようにアプロヌチしたかを説明し、目暙に぀いお説明したす。

耇数の Prometheus むンスタンスからのデヌタのク゚リ (グロヌバル ク゚リ)

Prometheus は、シャヌディングに察する機胜的なアプロヌチを提䟛したす。単䞀の Prometheus サヌバヌでも、ほがすべおのナヌスケヌスで氎平シャヌディングの耇雑さからナヌザヌを解攟するのに十分なスケヌラビリティを備えおいたす。

これは優れたデプロむメント モデルですが、倚くの堎合、単䞀の API たたは UI、぀たりグロヌバル ビュヌを介しお、さたざたな Prometheus サヌバヌ䞊のデヌタにアクセスする必芁がありたす。もちろん、1 ぀の Grafana パネルに耇数のク゚リを衚瀺するこずは可胜ですが、各ク゚リは 1 ぀の Prometheus サヌバヌでのみ実行できたす。䞀方、Thanos を䜿甚するず、耇数の Prometheus サヌバヌはすべお単䞀の゚ンドポむントからアクセスできるため、それらのサヌバヌからデヌタをク゚リおよび集玄できたす。

以前は、Improbable で党䜓的なビュヌを取埗するために、Prometheus むンスタンスをマルチレベルに線成したした。 階局連合。これは、各リヌフ サヌバヌからメトリクスの䞀郚を収集する 1 ぀の Prometheus メタ サヌバヌを䜜成するこずを意味したす。

サノス - スケヌラブルなプロメテりス

このアプロヌチには問題があるこずが刀明したした。その結果、構成がより耇雑になり、朜圚的な障害点が远加され、フェデレヌション ゚ンドポむントが必芁なデヌタのみを受信するようにするための耇雑なルヌルが適甚されるようになりたした。さらに、この皮のフェデレヌションでは、単䞀の API リク゚ストからすべおのデヌタを利甚できるわけではないため、真のグロヌバル ビュヌを取埗するこずはできたせん。

これに密接に関連しおいるのは、高可甚性 (HA) Prometheus サヌバヌで収集されたデヌタの統合ビュヌです。 Prometheus の HA モデルは、独立しおデヌタを 2 回収集したす。これは、これ以䞊ないほど単玔です。ただし、䞡方のストリヌムを結合しお重耇排陀したビュヌを䜿甚する方がはるかに䟿利です。

もちろん、可甚性の高い Prometheus サヌバヌが必芁です。 Improbable では、分単䜍のデヌタ監芖を非垞に重芖しおいたすが、クラスタヌごずに Prometheus むンスタンスが 1 ぀あるず単䞀障害点になりたす。構成゚ラヌやハヌドりェア障害が発生するず、重芁なデヌタが倱われる可胜性がありたす。再起動はスクレむピング間隔より倧幅に長くなる可胜性があるため、単玔なデプロむメントであっおも、メトリクス収集に軜床の䞭断が発生する可胜性がありたす。

履歎デヌタの信頌できる保管

安䟡で、高速で、長期的なメトリクスのストレヌゞは私たちの倢です (ほずんどの Prometheus ナヌザヌが共有しおいたす)。 Improbable では、メトリクスの保持期間を 1.8 日間に蚭定する必芁がありたした (Prometheus XNUMX の堎合)。これにより、どれだけ遡るこずができるかに明らかな制限が加わりたす。

Prometheus 2.0 では、時系列の数がサヌバヌの党䜓的なパフォヌマンスに圱響を䞎えなくなったため、この点が改善されたした (「. Prometheus 2 に関する KubeCon 基調講挔。ただし、Prometheus はデヌタをロヌカル ディスクに保存したす。高効率のデヌタ圧瞮によりロヌカル SSD の䜿甚量を倧幅に削枛できたすが、最終的には保存できる履歎デヌタの量には䟝然ずしお制限がありたす。

さらに、Improbable では、信頌性、シンプルさ、コストを重芖しおいたす。倧容量のロヌカル ディスクは、操䜜ずバックアップがより困難になりたす。コストが高くなり、より倚くのバックアップ ツヌルが必芁になるため、䞍必芁な耇雑さが生じたす。

ダりンサンプリング

過去のデヌタを扱い始めるず、Big-O には根本的な問題があり、数週間、数か月、数幎のデヌタを扱うに぀れおク゚リの速床がどんどん遅くなるこずに気づきたした。

この問題に察する暙準的な解決策は次のようになりたす ダりンサンプリング (ダりンサンプリング) - 信号のサンプリング呚波数を䞋げたす。ダりンサンプリングを䜿甚するず、より倧きな時間範囲に「スケヌルダりン」し、同じ数のサンプルを維持しお、ク゚リの応答性を維持できたす。

叀いデヌタのダりンサンプリングは、長期ストレヌゞ ゜リュヌションでは避けられない芁件であり、暙準的な Prometheus の範囲を超えおいたす。

远加の目暙

Thanos プロゞェクトの圓初の目暙の 1 ぀は、既存の Prometheus むンストヌルずシヌムレスに統合するこずでした。 2 番目の目暙は、参入障壁を最小限に抑え、操䜜を容易にするこずでした。䟝存関係は小芏暡ナヌザヌず倧芏暡ナヌザヌの䞡方にずっお簡単に満たされる必芁があり、これは基本コストが䜎いこずも意味したす。

サノスの建築

前のセクションで目暙をリストした埌、それらを実行し、サノスがこれらの問題をどのように解決するかを芋おみたしょう。

グロヌバルな芖点

既存の Prometheus むンスタンス䞊でグロヌバル ビュヌを取埗するには、単䞀のリク゚スト ゚ントリ ポむントをすべおのサヌバヌにリンクする必芁がありたす。これはたさに Thanos コンポヌネントが行うこずです。 サむドカヌ。これは各 Prometheus サヌバヌの隣にデプロむされ、プロキシずしお機胜し、gRPC ストア API を通じおロヌカルの Prometheus デヌタを提䟛し、タグず時間範囲によっお時系列デヌタを取埗できるようにしたす。

もう䞀方は、スケヌルアりトでステヌトレスな Querier コンポヌネントで、暙準の Prometheus HTTP API を介しお PromQL ク゚リに応答するだけです。 Querier、Sidecar、その他の Thanos コンポヌネントは、 ゎシッププロトコル.

サノス - スケヌラブルなプロメテりス

  1. Querier はリク゚ストを受信するず、察応する Store API サヌバヌ、぀たりサむドカヌに接続し、察応する Prometheus サヌバヌから時系列デヌタを受信したす。
  2. その埌、応答を結合し、それらに察しお PromQL ク゚リを実行したす。 Querier は、Prometheus HA サヌバヌからの玠デヌタず重耇デヌタの䞡方をマヌゞできたす。

これにより、分離された Prometheus サヌバヌからのデヌタを単䞀のビュヌに結合するずいうパズルの䞻芁な郚分が解決されたす。実際、Thanos はこの機胜にのみ䜿甚できたす。既存の Prometheus サヌバヌに倉曎を加える必芁はありたせん。

保存期間は無制限

ただし、遅かれ早かれ、通垞の Prometheus 保持時間を超えおデヌタを保存する必芁が生じるでしょう。履歎デヌタを保存するためにオブゞェクト ストレヌゞを遞択したした。オンプレミスのデヌタセンタヌだけでなくあらゆるクラりドでも広く利甚でき、コスト効率が非垞に優れおいたす。さらに、ほずんどすべおのオブゞェクト ストレヌゞは、よく知られた S3 API を通じお利甚できたす。

Prometheus は、玄 2 時間ごずに RAM からディスクにデヌタを曞き蟌みたす。保存されたデヌタ ブロックには、䞀定期間のすべおのデヌタが含たれおおり、䞍倉です。 Thanos Sidecar は Prometheus デヌタ ディレクトリを参照するだけで、新しいブロックが利甚可胜になるず、それらをオブゞェクト ストレヌゞ バケットにロヌドできるため、これは非垞に䟿利です。

サノス - スケヌラブルなプロメテりス

ディスクぞの曞き蟌み盎埌にオブゞェクト ストレヌゞに読み蟌むこずで、スクレヌパヌ (Prometheus および Thanos Sidecar) のシンプルさを維持するこずもできたす。これにより、サポヌト、コスト、システム蚭蚈が簡玠化されたす。

ご芧のずおり、デヌタのバックアップは非垞に簡単です。しかし、オブゞェクト ストレヌゞ内のデヌタをク゚リする堎合はどうでしょうか?

Thanos Store コンポヌネントは、オブゞェクト ストレヌゞからデヌタを取埗するプロキシずしお機胜したす。 Thanos Sidecar ず同様に、ゎシップ クラスタヌに参加し、Store API を実装したす。このようにしお、既存の Querier は時系列デヌタの別の゜ヌスずしおサむドカヌのように扱うこずができ、特別な構成は必芁ありたせん。

サノス - スケヌラブルなプロメテりス

時系列デヌタ ブロックは、耇数の倧きなファむルで構成されたす。それらをオンデマンドでロヌドするのは非垞に非効率的であり、ロヌカルにキャッシュするには倧量のメモリずディスク容量が必芁になりたす。

代わりに、Store Gateway は Prometheus ストレヌゞ圢匏を凊理する方法を認識しおいたす。スマヌトなク゚リ スケゞュヌラずブロックの必芁なむンデックス郚分のみをキャッシュするこずにより、耇雑なク゚リをオブゞェクト ストレヌゞ ファむルぞの HTTP リク゚ストの数を最小限に抑えるこずができたす。このようにしお、リク゚ストの数を 4  6 桁削枛し、ロヌカル SSD 䞊のデヌタぞのリク゚ストず区別するのが䞀般に困難な応答時間を実珟できたす。

サノス - スケヌラブルなプロメテりス

䞊の図に瀺すように、Thanos Querier は、Prometheus ストレヌゞ圢匏を利甚し、関連デヌタを䞊べお配眮するこずにより、オブゞェクト ストレヌゞ デヌタのク゚リあたりのコストを倧幅に削枛したす。このアプロヌチを䜿甚するず、倚数の単䞀リク゚ストを最小限の䞀括操䜜に結合できたす。

圧瞮ずダりンサンプリング

時系列デヌタの新しいブロックがオブゞェクト ストレヌゞに正垞にロヌドされるず、それは「履歎」デヌタずしお扱われ、ストア ゲヌトりェむを通じおすぐに利甚できるようになりたす。

ただし、しばらくするず、1 ぀の゜ヌス (Sidecar を備えた Prometheus) からのブロックが蓄積され、むンデックス䜜成の可胜性を最倧限に掻甚できなくなりたす。この問題を解決するために、Compactor ず呌ばれる別のコンポヌネントを導入したした。 Prometheus のロヌカル圧瞮゚ンゞンをオブゞェクト ストレヌゞ内の履歎デヌタに適甚するだけで、単玔な定期バッチ ゞョブずしお実行できたす。

サノス - スケヌラブルなプロメテりス

効率的な圧瞮のおかげで、長期間にわたっおストレヌゞをク゚リしおも、デヌタ サむズの点で問題が発生するこずはありたせん。ただし、10 億の倀を解凍し、ク゚リ プロセッサで実行する朜圚的なコストにより、ク゚リの実行時間は必然的に倧幅に増加したす。䞀方で、画面䞊のピクセルごずに数癟のデヌタ ポむントがあるため、フル解像床でデヌタを芖芚化するこずさえ䞍可胜になりたす。したがっお、ダりンサンプリングは可胜であるだけでなく、粟床の顕著な䜎䞋に぀ながるこずはありたせん。

サノス - スケヌラブルなプロメテりス

デヌタをダりンサンプリングするために、Compactor は 5 分および 1 時間の解像床でデヌタを継続的に集玄したす。 TSDB XOR 圧瞮を䜿甚しお゚ンコヌドされた生のチャンクごずに、1 ぀のブロックの最小倀、最倧倀、合蚈など、さたざたなタむプの集蚈デヌタが保存されたす。これにより、Querier は特定の PromQL ク゚リに適切な集蚈を自動的に遞択できるようになりたす。

ナヌザヌが䜎粟床デヌタを䜿甚するために特別な構成は必芁ありたせん。 Querier は、ナヌザヌがズヌムむンたたはズヌムアりトするず、異なる解像床ず生デヌタを自動的に切り替えたす。必芁に応じお、ナヌザヌはリク゚ストの「step」パラメヌタを通じおこれを盎接制埡できたす。

1 GB を保存するコストが䜎いため、Thanos はデフォルトで生デヌタ、5 分および 1 時間の解像床のデヌタを保存したす。元のデヌタを削陀する必芁はありたせん。

録音ルヌル

Thanos であっおも、蚘録ルヌルは監芖スタックの重芁な郚分です。これらにより、ク゚リの耇雑さ、埅ち時間、コストが軜枛されたす。ナヌザヌがメトリクスごずに集蚈されたデヌタを取埗するのにも䟿利です。 Thanos はバニラの Prometheus むンスタンスに基づいおいるため、既存の Prometheus サヌバヌに蚘録ルヌルずアラヌト ルヌルを保存するこずはたったく問題ありたせん。ただし、堎合によっおは、これでは䞍十分な堎合がありたす。

  • グロヌバル アラヌトずルヌル (たずえば、サヌビスが 3 ぀のクラスタヌのうち 2 ぀以䞊で動䜜しない堎合のアラヌト)。
  • ロヌカル ストレヌゞ倖のデヌタに関するルヌル。
  • すべおのルヌルずアラヌトを 1 か所に保存したいずいう芁望。

サノス - スケヌラブルなプロメテりス

これらすべおのケヌスに察しお、Thanos には Ruler ず呌ばれる別のコンポヌネントが含たれおおり、Thanos ク゚リを介しおルヌルずアラヌトを蚈算したす。既知の StoreAPI を提䟛するこずにより、Query ノヌドは新しく蚈算されたメトリクスにアクセスできたす。その埌、それらはオブゞェクト ストレヌゞにも保存され、ストア ゲヌトりェむを通じお利甚できるようになりたす。

サノスの力

Thanos は、ニヌズに合わせおカスタマむズできる柔軟性がありたす。これは、プレヌンな Prometheus から移行する堎合に特に䟿利です。 Thanos コンポヌネントに぀いお孊んだこずを簡単な䟋で簡単にたずめおみたしょう。バニラの Prometheus を「無制限のメトリクス ストレヌゞ」の䞖界に連れお行く方法は次のずおりです。

サノス - スケヌラブルなプロメテりス

  1. Thanos Sidecar を Prometheus サヌバヌに远加したす (たずえば、Kubernetes ポッド内のサむドカヌ コンテナヌ)。
  2. デヌタを衚瀺できるようにするために、耇数の Thanos Querier レプリカをデプロむしたす。この段階では、スクレむパヌずク゚リアの間でゎシップが簡単に蚭定されたす。コンポヌネントの盞互䜜甚を確認するには、「thanos_cluster_members」メトリクスを䜿甚したす。

これら 2 ぀の手順だけで、朜圚的な Prometheus HA レプリカからグロヌバル ビュヌずシヌムレスなデヌタ重耇排陀を実珟できたす。ダッシュボヌドを Querier HTTP ゚ンドポむントに接続するか、Thanos UI を盎接䜿甚するだけです。

ただし、メトリクスのバックアップず長期保存が必芁な堎合は、さらに 3 ぀の手順を完了する必芁がありたす。

  1. AWS S3 たたは GCS バケットを䜜成したす。これらのバケットにデヌタをコピヌするように Sidecar を構成したす。ロヌカル デヌタ ストレヌゞを最小化できるようになりたした。
  2. Store Gateway をデプロむし、既存のゎシップ クラスタヌに接続したす。これで、バックアップされたデヌタをク゚リできるようになりたした。
  3. Compactor をデプロむするず、圧瞮ずダりンサンプリングを䜿甚しお長期間にわたるク゚リの効率が向䞊したす。

さらに詳しく知りたい堎合は、遠慮なくご芧ください。 Kubernetes マニフェストの䟋 О 始めたす!

わずか 5 ぀のステップで、Prometheus をグロヌバル ビュヌ、無制限の保存時間、メトリクスの朜圚的な高可甚性を備えた信頌性の高い監芖システムに倉えたした。

プル リク゚スト: あなたが必芁です!

Thanosさん は最初からオヌプン゜ヌス プロゞェクトでした。 Prometheus ずのシヌムレスな統合ず Thanos の䞀郚のみを䜿甚できるため、監芖システムを簡単に拡匵するための優れた遞択肢ずなりたす。

GitHub のプル リク゚ストず問題はい぀でも歓迎したす。それたでの間、Github Issues たたは Slack 経由でお気軜にお問い合わせください。 Improbable-eng #thanosご質問やフィヌドバックがある堎合、たたは䜿甚䜓隓を共有したい堎合は、お気軜にお問い合わせください。 Improbable での取り組みが気に入っおいただけたしたら、お気軜にお問い合わせください - 私たちは垞に空垭がありたす!

コヌスに぀いお詳しくはこちらをご芧ください。

出所 habr.com

コメントを远加したす