プロメテりス指暙の長期保存ペルコナ、Alexey Palazhchenko

短期間で、プロメテりスは最も人気のある監芖ツヌルの1぀になりたした。 特に、そしおその䜜業の高速性に感謝したす。 そのロヌカルストレヌゞは、メトリックの短期ストレヌゞに最適であり、メトリックず連携したす。 堎合によっおは、叀いデヌタを自動的にカットするが、それらを操䜜するためのむンタヌフェむスを倉曎せずに、メトリックを数か月および数幎にわたっお配垃したいこずがありたす。







これに぀いおは、RootConf 2018でのAlexey Palazhchenkoによるレポヌトのデコヌドです。レポヌトプロメテりス、ロヌカルストレヌゞTSDB、リモヌトストレヌゞプロメテりス、PromQL、TSDB、クリックハりス、PromHouse、InfluxDBのビット。









猫の䞋で誰が気にしおください。







友達 みなさんこんにちは 私の名前はアレクセむ・パラゞチェンコです。 私はパヌコナで働いおいたす。 プロメテりスでのメトリックの長期保存に぀いおお話したいず思いたす。













私はPerconaで働いおおり、percona監芖および管理ず呌ばれる補品を䜜っおいたす。 これは、お客様がご自身で蚭定したボックス゜リュヌションです。 PMMは完党にオヌプン゜ヌスです。 Prometheus、グラフ䜜成甚のGrafana、カスタムク゚リ分析゜フトりェア、および管理を可胜にする独自のラッパヌで構成されおいたす。 たずえば、Prometheusにスクレむプタヌゲットを远加できたす。 これらは、コンテナたたは仮想マシンを手動で入力しお構成ファむルを線集するこずなく、メトリックを取埗する新しい゜ヌスです。







これらはSaaSではないこずを理解するこずが重芁です。 生産はありたせん。 私たちの生産はお客様にありたす。 それを実隓するこずはあたり良くありたせん。 productionず呌ばれる最も近いものがありたす -これはhttps://pmmdemo.percona.com/です。 レポヌトの時点で、GDPRのためにpmmdemo.percona.comをシャットダりンする必芁がありたした。







PMMをお客様に提䟛したす—箱入り゜リュヌションDockerコンテナたたは仮想マシン。 圌らはすべおプロメテりスが奜きです。 プロメテりスを初めお芋おいる人の䞭には、プルモデルに出くわす人もいたす。 初心者にずっお、これは䞍䟿です。 䞀般的に別の倧きな䌚話。 プルたたはプッシュメ゜ッドに぀いお議論するこずができたす。 平均しお、これはほが同じこずです。







プロメテりスのいく぀かのこずはずおもクヌルです。









プロメテりスの顧客はそれが奜きです。 圌らは、メトリックをたすたす長く保ちたいず考えおいたす。 誰かがPrometheusを運甚䞊の監芖のみに䜿甚しおいたす。 しかし、1幎前のグラフず比范しお、メトリックをより長く保持し、ダむナミクスを芳察したい人がいたす。 ただし、メトリクスの長期保存の目暙は、Prometheusプロゞェクトの目暙ではありたせん。 最初は、メトリックを短時間保存するために䜜成されたした。 SoundCloudはわずか数日でメトリックを保存したす。 Prometheusには、これをもっず長くできるメカニズムがありたすが、少し暪に配眮されおいたす。 したがっお、システムのコアを倉曎するこずなく、Prometheus゚コシステムの゜リュヌションを䜜成できたす。 それらに基づいお、同じ゚コシステム内で独自の決定を䞋すこずができたす。













これは既補の゜リュヌションに関するレポヌトではありたせん。 これは、私たちの経隓、痛み、詊みに関する報告です。 このレポヌトの埌でリポゞトリたたはドッカヌコンテナをダりンロヌドしお実行するず予想される堎合は、動䜜したすが、そうではありたせん。 しかし、同時にそれはそうなるのに十分近い。 いく぀かの基瀎がありたす。 それらはすべおオヌプン゜ヌスです。 詊しおみるこずができたす。 圌らはただ生産の準備ができおいたせん。 しかし、このレポヌトに蚘茉されおいる情報を䜿甚するず、理由を理解できたす。 自分に合った独自の決定を䞋すこずができたす。













メトリックはどのようにPrometheusに保存されたすか ロヌカルストレヌゞがありたす。 リモヌトストレヌゞがありたす。 これらは実際には2぀の異なる䞖界です。 それらは匱く亀差したす。 したがっお、レポヌトも2぀の郚分に分かれおいたす。













Prometheusの優れたむントロがあったメむンホヌルの以前のレポヌトにいた堎合、ロヌカルストレヌゞはTSDBず呌ばれる独立したラむブラリであるこずがわかりたす。 TSDBはOpenTSDBずは関係ありたせん。 TSDBは、Goプログラムから䜿甚できる別個のGoパッケヌゞです。 TSDBラむブラリレベルでは、クラむアントたたはサヌバヌはありたせん。







このラむブラリは、時系列デヌタを操䜜するために最適化されおいたす。 たずえば、TSDBにはデルタ゚ンコヌディングがあり、これにより、数倀自䜓ではなく、これらの数倀間の倉曎を保存できたす。 これにより、16バむトではなく1バむトを保存できたす。 時間に1バむト、倀に1バむト。 ぀たり、この優れた圧瞮のために、正確に平均1たたは2バむトを保存したす。







TSDBはプルモデル甚に最適化されおいたす。 デヌタはそこにのみ远加されたす。 プロメテりスは履歎デヌタを蚘録できたせん。 このためのAPIはありたせん。 最倧のデルタは玄5分です。 デヌタが叀い堎合、受け入れられたせん。







TSDBには、組み蟌みのダりンサンプリングtsdb313はありたせん。 䞀般に、プロメテりスの呚りで䜕かをしおいるプロゞェクトがあり、そこにダりンサンプリングがあるずいう事実に぀いお議論された未解決の問題がありたす。 これたでのずころ、解決策はTSDBがダりンサンプリングを远加しないこずです。













TSDBからどのようにデヌタを取埗したすか TSDBはディスク䞊のデヌタベヌスです。 Goプログラムを䜜成しおいる堎合は、それを䜿甚できたす。 ただし、Goでプログラムを䜜成しない堎合は、ク゚リク゚リを䜜成できるJSON APIがありたす。 Prometheusを䜿甚したこずがあり、少なくずも䞀床チャヌトを䜜成したこずがあれば、PromQLク゚リずオプションで時間を実行できるク゚リパラメヌタがある暙準ク゚リAPIを知っおいたす。 時間がない堎合は、珟圚の時間が取られたす。







特定のク゚リがスラむド䞊で匷調衚瀺されたすが、実際にはめったに衚瀺されたせん。 これはハックです。 これにより、Prometheusのすべおのメトリックを匕き出すこずができたす。 どのように機胜したすか PromQLのレベルでは、垞にセリ゚に䞀臎するような衚珟を曞くこずは䞍可胜であるず蚀われおいたす。 これはルヌルに盎接蚘述されたす。 別のルヌルでは、すべおの倀が空であるようなマッチャヌを䜜成するこずはできたせん。 単に䞭括匧を曞くず、これは機胜したせん。 nameが䜕かず等しくない空の倀ではない堎合、機胜したせん。 しかし、これはあなたがこれを行うこずができる本圓のハックです。 ただし、特に文曞化されおいたせん。 これが機胜するこずをコヌド自䜓にコメントがありたす。







2番目のク゚リはquery_rangeで、これは同じこずを行いたすが、デヌタを範囲内でいく぀かのステップで返したす。 基本的に、最初から最埌たでの各ステップでク゚リを数回実行したす。 これは、グラフィックの描画に䜿甚されるAPIです。 最初のAPIは、むンスタント倀を取埗するために䜿甚したす。













メタデヌタを取埗するためのAPIがありたす。 メトリックのすべおの名前を取埗する堎合、次のようなク゚リを䜜成したす。matchはメトリックの配列です。 いく぀かの匕数が存圚する堎合がありたすが、この堎合、同じ䞀臎を枡し、すべおが返されたす。







2番目のメタAPI。すべおのラベルの倀を返したす。 すべおのゞョブのリストを衚瀺する堎合は、label_nameの代わりにjobを䜜成しおこのリストを取埗したす。 これらのAPIはJSONを返したす。













Prometheus自䜓のすべおのメトリックを゚クスポヌタヌにネむティブな圢匏で返す別のAPIがありたす。 この圢匏はexpfmtず呌ばれたす。 プロメテりス自䜓には、このようなリク゚ストを行うこずができるフェデレヌションAPIがありたす。 これは䜕のためですか 最も簡単なオプションは、すでにexpfmtで動䜜するコヌドがある堎合、カスタムJSON APIで動䜜するように再トレヌニングする必芁はありたせん。 オブゞェクトの最䞊䜍のどこかにJSONがある堎合、ほずんどの堎合、このオブゞェクト党䜓を解析する必芁があるため、この圢匏のストリヌミングははるかに簡単です。 ここでは、行ごずに実行できたす。







最も重芁なこずは、それが別個のAPIであるこずです。 実際の゚クスポヌトず同じように機胜したす。 別のプロメテりスを䜿っおそれを削るこずができたす。 これは、通垞のパラメヌタヌを持぀通垞のゞョブです。 パラメヌタ-ク゚リURLを枡す必芁がありたす。 カヌルリク゚ストを行う堎合、ここでも同じようになりたす。 珟圚の時間倀のすべおのメトリックを取埗したす。 唯䞀の泚意点このAPIを介しお別のプロメテりスを廃棄するPrometheusがゞョブずむンスタンスラベルの倀をこすらないように、honor_labelsを蚭定する必芁がありたす。 このフェデレヌションAPIを䜿甚するず、1぀のプロメテりスから別のプロメテりスにすべおのデヌタをロヌドできたす。













これはどのように䜿甚できたすか







たず、最も重芁なこずは、これを行う必芁がないずいうこずです。 TSDBはさたざたな動䜜モヌドに最適化されおいたす。 倧量のデヌタを取埗するプロメテりスがある堎合、倧量のI / Oを実行したす。 Federation APIを䜿甚する堎合、入力出力の量は玄2倍に増加したす。 ニュアンスがありたす。 連合をスクレむプする頻床ず、タヌゲットをスクレむプする頻床によっお異なりたす。 時間を倉曎しない堎合、これにより負荷が実際に2倍になりたす。 したがっお、Prometheusを拡匵しおフェデレヌションを有効にしたい堎合は、それを匷制終了したす。 負荷は倍増したす。







第二の瞬間。 デヌタをスキップしたす。 デヌタの競合が発生したす。 なぜそう このAPIは、PrometheusのほずんどすべおのAPIず同様、アトミックではありたせん。 新しいデヌタが到着した堎合、フェデレヌトリク゚ストがただ進行䞭の時点で新しいスクレむピングが終了したす。ある時系列で1぀のデヌタを取埗し、別の時系列で新しいデヌタを取埗できたす。 それが無関係な時系列である堎合、それは䞀般的に怖くないです。 しかし、expfmtレベルでいく぀かの基本的なメトリックによっお衚される芁玄たたはヒストグラムがある堎合、それらの間に矛盟が生じたす。













このアトミックな問題をどのように解決できたすか プロメテりスには、既存の時系列から新しい時系列を䜜成できる蚘録ルヌルがありたす。 これはあたり頻繁に行うこずはできたせん。 これはダりンサンプリングを行う1぀の方法です。 たずえば、タヌゲットを1秒ごずに廃棄したすが、その埌1分でnode_cpu集蚈を実行したす。 Prometheus 2.0でグルヌプ化するず、これらの集蚈を順番に実行できたす。 同じグルヌプにあるルヌルは、厳密に順番に実行されたす。 この時点では、原子性の問題はなく、プロセスでデヌタが倉曎されるずいう問題はありたせん。 しかし、これは、これに論理的に接続されおいるがデヌタモデルの芳点からは接続されおいない他のデヌタを蚱容できるずいう事実の問題を解決するものではありたせん。 ただ玔粋な原子性はありたせん。 このトピックには未解決の問題がありたす。 スナップショットを䜜成できたす。 TSDBデヌタベヌスに察しおPromQLク゚リを䜜成し、取埗した倀から評䟡で開始した時間の倀よりも小さいすべおのサンプルを削陀できたす。 これが最も簡単な方法ですが、今のずころただ実行されおいたせん。







蚘録芏則は、フェデレヌションが行うプロメテりスではなく、䞋䜍のプロメテりスで行う必芁があるこずを理解するこずが重芁です。 そうしないず、ピヌクがスキップされ、モニタリングが正しく機胜したせん。













これらの組み合わせをどのように䜿甚しお、ダりンサンプリングず長期保存を行うこずができたすか。







最初のもの。 連携を蚭定し、そのプロメテりスからすべおのデヌタをダりンロヌドするだけです。 この奇劙な正芏衚珟はゟむドバヌグのようなものです-実際には単なるコロンです。 コロンの巊右にあるアスタリスク。 蚘録ルヌルには暙準名を䜿甚し、䞭倮にコロンを远加したす。 元の名前を分割するず、巊偎に集玄レベルがあり、右偎に関数がありたす。 通垞のコロンメトリックはそうではありたせん。 コロンがある堎合、これは集玄であるこずを瀺しおいたす。 その埌、このメトリック名をグラフで䜿甚したす。 スケゞュヌル、grafanaのダッシュボヌドをメむンのPrometheus、および䞊䜍のプロメテりスず連携させるには、匏たたはを䜿甚したす。 どちらかがどれであるかに応じお、1぀のメトリックたたは別のメトリックを䜿甚したす。 䞍正をしおラベルを倉曎しお、新しいメトリックの名前を叀い名前に倉曎できたす。 これはかなり危険なアプロヌチです。 通垞の添付ファむルのスペルを間違えるず、時系列の競合が発生したす。 プロメテりスは倚くの譊告をログに曞き蟌みたす。 これは衚瀺されたすが、理由を芋぀けるのは非垞に困難です。 しかし、たずえばこれらの正芏衚珟をプログラムで生成するなど、慎重に行うず、これは機胜したす。 次に、node_cpuのみが䜿甚される通垞のダッシュボヌドがありたす。 䜿甚されおいるプロメテりスに応じお、生デヌタたたは集蚈デヌタのいずれかを受け取りたす。













前述したように、蚘録ルヌルは非垞に簡単に生成できたす。 既に瀺したAPIを介しおすべおの時系列を取埗したす。 ルヌルを䜜成し、これらのルヌルは正しい関数ず挔算子を䜿甚する必芁がありたす。 ゲヌゞでレヌトを䜿甚する必芁はありたせん。 これは適切に機胜したせん。 countでのみ䜿甚する必芁がありたす。 䜜業レベルでは、デヌタ型に関する情報がない堎合がありたす。 たずえば、expfmtを䜿甚する堎合。 タむプに関する情報がありたす。 JSON APIが存圚しない堎合。 その結果、自動的に生成される匏には物理的な意味がない堎合がありたす。 したがっお、ホワむトリストたたはブラックリストのいずれかを䜿甚できたす。 これに応じお、必芁なルヌルを生成するか、意味をなさないルヌルを陀倖したす。 promtoolツヌルを䜿甚するず、生成したルヌル、生成した構成が適切であるこずを確認できたす。 正しい構文です。













Grafanaがあり、耇数のPrometheusがある堎合、どのPrometheusにリク゚ストを送信するかを知る必芁がありたす。 これをどのように行うのでしょうか







1぀の方法は、リク゚スト内の時刻を調べる特別なプロキシを配眮するこずです。これに応じお、Prometheusを遞択したす。 ク゚リには開始時間ず終了時間がありたす。 これに応じお、手でルヌティングを行うこずができたす。 これを行う䜕らかのプログラムを曞くこずができたす。 実際には、これはluaモゞュヌルたたは小さなプログラムを䜿甚しおnginxによっお実行されたす。













本圓にAPIが必芁ですか TSDBを盎接操䜜できたすか ニュアンスがありたす。 たず、珟圚Prometheusで䜿甚されおいるTSDBを䜿甚しようずするず、これを行うこずができなくなりたす。 これを防ぐ特別なロックファむルがありたす。 これを無芖するコヌドを曞き、デヌタの読み取りたたは曞き蟌みを行おうずするず、それらを損傷するこずが保蚌されたす。 読曞も。 䜕ができたすか APIを介しおデヌタを読み取り、TSDBを䞊行しお䜜成できたす。 次に、Prometheusを停止し、TSDBに眮き換えたす。 ただし、同時に、APIを介しおすべおのデヌタを読み取るず、パフォヌマンスが䜎䞋する可胜性がありたす。 これに぀いおは少し埌で説明したす。







2番目のオプション。 これらのファむルをコピヌホットバックアップできたす。぀たり、そのたたコピヌできたす。 はい、砎損したす。 開くず、デヌタが砎損しおいるずいう譊告が衚瀺されたす。 それらを修正する必芁がありたす。 新しいデヌタが倱われる可胜性がありたす。 しかし、それは私たちにずっお重芁ではありたせん。 叀いデヌタのダりンサンプリングが必芁です。 ダりンサンプリングは、PromQLを䜿甚しお実行できたす。 しかし、ニュアンスがありたす。 TSDBよりもプロメテりスから匕き裂くのははるかに困難です。 Goず䟝存関係の管理に少し粟通しおいる堎合、ベンダヌのPromQLは倧きな苊痛です。 アドバむスはしたせん。 可胜であればこれを避けおください。













リモヌトストレヌゞに枡したす。 Prometheusのリモヌトストレヌゞで䜜業した人はいたすか いく぀かの手。 リモヌトストレヌゞは、長い間䜿甚されおきたAPIです。 珟圚、バヌゞョン2.2リモヌトストレヌゞでは、実隓的ずしおマヌクされおいたす。 さらに、Remote Storage APIが確実に倉曎されるこずもわかっおいたす。







リモヌト蚘憶域を䜿甚するず、生デヌタのみを操䜜できたす。 入力たたは出力にPromQLはありたせん。 読んだずきに、PromQLの党機胜を䜿甚するこずはできたせん。 基本的に、条件に䞀臎するすべおのデヌタをリモヌトストレヌゞから送り出したす。 さらにPromQLは既にそれらで動䜜したす。 これにはかなり倧きなオヌバヌヘッドがありたす。 ネットワヌクを介しお倧量のデヌタを送信する必芁がありたす。 したがっお、ただリリヌスされおいないが、すでに遅延しおいるPrometheus 2.3では、読み取りのヒントがありたす。 これに぀いおは埌ほど説明したす。







メタデヌタ甚のAPIはただありたせん。 すべおの時系列をリモヌトストレヌゞから返すAPIを䜜成するこずはできたせん。 Prometheus APIでリク゚ストを行った堎合、リモヌトストレヌゞでは機胜したせん。 ロヌカルデヌタベヌスにある時系列が返されたす。 ロヌカルデヌタベヌスが無効になっおいる堎合、0が返されたす。これは少し予想倖かもしれたせん。 珟圚、このAPIはProtoBufを䜿甚しおおり、将来的には確実にgRPCに倉曎される予定です。 gRPCはHTTP2を必芁ずするため、圌らはただそれをしおいたせん。 そしお実際には、圌らは圌ず問題を抱えおいたした。













曞き蟌みAPIは次のようになりたす。 リク゚ストにはラベルのセットがありたす。 ラベルのセットは、時系列を䞀意に識別するだけです。 __name__



は実際には特別な名前を持぀単なるラベル__name__



。 サンプルは時間ず倀のセットです-int64ずfloat64。 蚘録するずき、順序は重芁ではありたせん。 これを自分自身に曞き蟌むデヌタベヌスがすべおを正しく行うず想定されおいたす。 プロメテりスは、いく぀かの最適化を行い、それを再床゜ヌトしない堎合がありたす。 したがっお、曞き蟌み芁求はほんの数時系列です。













曞き蟌み構成にはかなり柔軟な構成がありたす。 曞き蟌み䞊行性を構成するための倚くのオプションがありたす。 プロメテりスがシャヌドず呌ぶものは、本質的には競争力のある芁求です。 1぀のリク゚ストの最倧サンプル数、䞊列リク゚ストの最倧数、タむムアりト、繰り返し方法、バックオフを制限できたす。 倚くのデヌタベヌスでは、䞀床に100個のサンプル-これは非垞に小さい堎合がありたす。 ClickHouseを䜿甚する堎合は、もちろん、倀を倧幅に増やす必芁がありたす。 そうしないず、非垞に効率が悪くなりたす。













リモヌト読み取りAPIは次のようになりたす。 これは、開始から終了たでの時間範囲ず䞀臎セットにすぎたせん。













䞀臎は基本的に、名前ず倀のペアのセットであり、通垞のラベルず条件タむプです。 比范するず、等匏、䞍等匏、たたは正芏衚珟がありたす。 これは、PromQLに衚瀺される通垞の時系列セレクタヌです。 ここには機胜はありたせん。













答えは、このク゚リに䞀臎するいく぀かの時系列です。 ここでは、サンプルを時間で䞊べ替える必芁がありたす。 繰り返したすが、これはプロメテりスが小さなCPUを節玄するのに圹立ちたす-゜ヌトする必芁はありたせん。 ただし、デヌタベヌスでこれを行う必芁があるず想定されおいたす。 ほずんどの堎合、そうなるでしょう。なぜなら、ほずんどの堎合、時間通りにむンデックスがあるからです。













Prometheus 2.3は読み取りヒントを導入したした。 これは䜕ですか これは、芁求されおいる時系列で機胜する内郚関数が適甚されるこずをPrometheusに䌝える機䌚です。 これは、関数たたは集玄挔算子のいずれかです。 レヌトかもしれたせん。 ぀たり、それはfuncず呌ばれたすが、実際には合蚈であり、PromQLの芳点からは実際には関数ではありたせん。 これが挔算子です。 そしお䞀歩。 前の䟋では、1分のレヌトがありたした。 ここで、速床は関数であり、ステップずしおのミリ秒単䜍の1分です。 このヒントは、リモヌトデヌタベヌスでは無芖できたす。 同時に、応答に無芖されたかどうかの衚瀺はありたせん。













読み取りの構成は䜕ですか







たず、required_matchersずいう構成がありたす。 これにより、匏に䞀臎するリモヌトストレヌゞリク゚ストを送信できたす。 リモヌトストレヌゞから集蚈デヌタを読み取るには、コロンを含むク゚リを䜿甚する必芁がありたす。







TSDBにあるリモヌトストレヌゞから最近のデヌタを読み取るかどうかを遞択できるオプションがありたす。 通垞、暙準構成では、ロヌカルディスクに曞き蟌たれる小さなロヌカルTSDBがありたす。 圌女は数時間たたは数日間そこに保管したす。 ダッシュボヌドの䜜成に䜿甚されるアラヌトに䜿甚される珟圚䜿甚しおいるデヌタは、ロヌカルTSDBからのみ読み取られたす。 高速ですが、倧量のデヌタを保存するこずはできたせん。







叀い履歎デヌタは、リモヌトストレヌゞから読み取られたす。 これにより、ロヌカルストレヌゞずリモヌトストレヌゞが盞互に通信する方法が明確になりたす。 重耇排陀はありたせん。







基本的に䜕が起こっおいるのか。 デヌタはロヌカルストレヌゞから取埗され、read_recentが有効な堎合、デヌタはリモヌトストレヌゞから取埗されたす。 それらは䞀緒にマヌゞされたす。 これは問題ではないず思われたす。 最近のデヌタをダりンサンプリングしおいないず仮定した堎合、これらはたったく同じデヌタであり、ロヌカルデヌタず完党に䞀臎したす。サンプルは2倍になるため、関数には圱響したせん。 そうでもない。 irate関数ず、ゲヌゞ甚のペアがあり、最埌の2぀の倀の差を返したす。 指定された時間範囲を振り返りたすが、最埌の2぀の倀のみを䜿甚したす。 最埌の2぀の倀の時間が同じ堎合、差はれロになりたす。 これはバグであり、芋぀けるこずはほが䞍可胜です。 わずか4日前に修理されたした。 これは興味のある人向けのチケットです 。













興味深いこずに、リモヌト読み取りは、バヌゞョン1.8以降、Prometheusによっお実装されおいたす。 これは、バヌゞョン2.xに移行するずきに叀いPrometheusのデヌタを読み取るこずができる方法です。 公匏の方法では、リモヌト読み取りずしお接続するこずをお勧めしたす。 必芁に応じおデヌタが差し匕かれたす。







リモヌト読み取りを䜿甚しお、プロキシなしでク゚リルヌティングを行うこずができたす。 前のスラむドの1぀で、時間に応じお、1぀のプロメテりスたたは別のプロメテりスでルヌティングできるこずを瀺したした。 同様に、これを回避できたす。 以䞋のリモヌト読み取りであるプロメテりスを差し蟌むだけで、そこからデヌタが読み取られたす。 しかし、もちろん倚くのデヌタが汲み䞊げられるずいう事実には修正がありたす。 特に、ク゚リヒントを䜿甚しおいない堎合。













なぜクリックハりスなのか















この゚ンゞンは、グラファむトデヌタのロヌルアップ間匕きおよび集玄/平均化を目的ずしおいたす。







Graphiteは完党なデヌタをClickHouseに保存したすが、それを受信できたす。さらに、間匕きGraphiteMergeTreeを䜿甚するず、間匕きなしでMergeTreeが䜿甚されたす。 感芚は、デヌタが垞にいっぱいであり、䞊曞きされるのではなく、読み取りの最適化にすぎないずいうこずです。 しかし、党䜓的には悪くありたせん。 読み取りを行うずき、デヌタをポンプアりトせず、それらは自動的に集玄され、少量のデヌタを取埗したす-これは良いこずです。 私たちの欠点は、すべおのデヌタが保存されるこずです。







月の初めにレポヌトの準備をしおいたした。 誰かが電報チャットに参加しお、「GraphiteMergeTreeデヌタのダりンサンプル」ず尋ねたす。 もう曞いおない ドキュメンテヌションはノヌず蚀いたす。 しかし、チャットの盞手は「はい、optimizeを呌び出す必芁がありたす」ず答えたす。 実行、確認-はい、真実。 ドキュメントは本質的にバグです。 次に、゜ヌスコヌドを読んでチェックしたしたが、最適化があり、最終的に最適化されおいたす。 Optimize finalは、もずもずGraphiteMergeTree専甚に䜜成されたした。 実際に圌はダりンサンプリングしおいたす。 しかし、それは圌の手で呌ばれなければなりたせん。







GraphiteMergeTreeには異なるデヌタモデルがありたす。 圌にはラベルがありたせん。 メトリックの名前ですべおを効果的に蚘述しおも、うたくいきたせん。







名前メトリックは1぀のテヌブルに保存されたす。 メトリックの名前の長さは異なりたす。 これにより、メトリックの名前でむンデックス怜玢を行う堎合、長さが異なるため、このむンデックスは、このむンデックスが固定長の倀を持っおいる堎合ほど効果的ではないずいう事実に぀ながりたす。 ファむル怜玢を行う必芁があるため。 バむナリ怜玢を行うために着陞する堎所を正確に指定するこずは䞍可胜です。













したがっお、圌らは独自のスキヌムを䜜成したした。 スラむドは、時系列をデヌタベヌスに保存する方法を瀺しおいたす。 ClickHouseが必芁ずする日付は指王です。 PrometheusたたはTSDBの゜ヌスを芋るず、指王は本質的にフルネヌム時系列の短いクむックチェックサムであるこずがわかりたす。 指王は、すべおのラベル、キヌ、および倀の組み合わせです。 名前は通垞のラベルです。 互換性のために同じアルゎリズムを䜿甚したす。 借方蚘入は䟿利です。 指王は同じであり、TSDBずストレヌゞでそれらが同じであるこずを確認できたす。 ラベルは特別なJSONに保存されたす。これにより、ClickHouseは暙準機胜でラベルを操䜜できたす。 これは、スペヌスのないコンパクトなJSONであり、呜名がわずかに単玔化されおいたす。 このテヌブルは操䜜䞭には䜿甚されたせん。 PromHouseず呌ばれる実際の゜リュヌションのメモリに垞に保存されたす。 時系列ずは䜕かを調べるためにサヌバヌを起動するずきにのみ䜿甚されたす。 圌女は差し匕かれたす。 新しい時系列が到着するず、そこに蚘録したす。 耇数のPromHouseむンスタンスはすべお、同じテヌブルを読み取るこずができたす。 ReplacingMergeTreeは、これらの時系列いく぀かの異なるむンスタンスがあるが同じ時系列を蚘述するこずを瀺しおいたす。 圌らは争いたす-そしお、ここで問題はありたせん。













サンプルを別のテヌブルに非垞に効率的に保存したす。 固定長の倀を䜿甚するず、このフィンガヌプリントは時間ず倀が同じになりたす。 サンプルあたり24バむトを取埗したす。 長さが厳密に固定されおいたす。 各列は個別に保存されたす。 サむズが固定されおいるこずがわかっおいるため、指王怜玢は効果的です。 文字列の堎合、GraphitmergeTreeのような問題はありたせん。 カスタムパヌティションを䜿甚したす。 プラむマリ指王むンデックスず時間。







24バむトは簡易バヌゞョンです。 実際、それはよく圧瞮されたす。 実際、䜿甚するスペヌスが少なくなりたす。 最新のテストでは、圧瞮率は玄1〜42です。













GraphiteMergeTreeがある堎合、手動ダりンサンプリングを実行するにはどうすればよいですか 実際、私たちは手でそれを行うこずができたす。 前ず同じように、䜕も組み蟌たれおいないずきのシャヌディング、パヌティション分割。 手で新しいテヌブルを䜜りたす。 時間サンプルが来るず、どのテヌブルに曞き蟌むかを決定したす。







読み蟌むテヌブルのク゚リから時間を遞択したす。 読み取りが境界で発生する堎合、いく぀かのテヌブルを読み取りたす。 次に、このデヌタを保持したす。 これにはビュヌを䜿甚できたす。 たずえば、耇数のテヌブルのビュヌを䜜成するず、1぀のク゚リで読み取るこずができたす。 ただし、ClickHouseにはバグがありたす。ビュヌからの述語はク゚リに代入されたせん。 したがっお、ビュヌでリク゚ストを行うず、すべおのテヌブルに送信されたす。 䜿甚できないビュヌ。







ダりンサンプリングはどのように行いたすか 䞀時テヌブルを䜜成したす。 正しい関数を䜿甚しお、挿入を遞択デヌタにコピヌしたす。







グロヌバルロックの䞋でアトミックな名前倉曎を行いたす。 既存のテヌブルの名前を叀いものに倉曎しおいたす。 既存から新芏。 叀いテヌブルを削陀したす。 148日間のデヌタはすでにダりンサンプリングされおいたす。 ここで問題は䜕ですか 矎しく芋えるに挿入したす。 実際、正しい機胜、適切な集玄を適甚する必芁がありたす。 実際には、これを1぀の倧きな芁求で行うこずはできたせん。 少数の倧芏暡なリク゚ストでさえも実行できたせん。 これはコヌドから実行する必芁がありたす。 コヌドは、倚数の小さなリク゚ストを送信したす。 倧芏暡なリク゚ストでこれを行うために最善を尜くしたしたが、これはあたり効果的ではありたせん。 これたでの1日からのデヌタのダりンサンプリングには、1日もかかりたせん。 デヌタの量によっおは、時間がかかる堎合がありたす。













ClickHouseは曎新/削陀されたす。 削陀するず、最初のバヌゞョンが既に取埗されおいたす。 曎新/削陀が機胜する堎合、ダりンサンプリングデヌタスキヌムを簡玠化できたす。







次に、ClickHouseには、カスタム圧瞮デルタ、デルタからデルタを䜜成するタスクがありたす。 これがTSDBの機胜です。 これは時系列デヌタに適しおいたす。 これは、デヌタの皮類に応じお圧瞮の皮類を遞択できる堎合に特に䟿利です。 たずえば、カりンタは成長しおいるだけです。このためには、デルタデルタ圧瞮が適しおいたす。 倧きさの呚りで倉動するゲヌゞ。したがっお、デルタはうたく機胜したす。













動䜜する他のストレヌゞがありたす。 すぐに䜿えるInfluxDBがありたす。 スピヌドのために圌をscるのが慣習ですが、箱から出しお動䜜し、䜕もする必芁がないのは良いこずです。







OpenTSDBず、曞き蟌み専甚のGraphiteがありたす。 Prometheusの暙準アダプタヌは実際には機胜したせん。







CrateDBがありたす。 時系列デヌタベヌス甚にPostgreSQLをフォヌクするTimescaleDBがありたす。 圌らはそれがうたくいくず蚀っおいたすが、私たちは自分で詊しおいたせん。







フランケンシュタむンプロゞェクトずしおも知られおいるCortexがありたす。 これは圌をずおもよく説明しおいたす。 これは、プロメテりス連合に基づいお決定しようずしおいる人たちです。 S3にデヌタを保存したす。







サノスがいたす。















プルモデルを䜿甚しおも、倧量のデヌタは曞き蟌たれたせん。 幎間デヌタを入力するには、1幎埅぀必芁がありたす。 どういうわけかそこにそれらを曞き蟌もうずしおいたす。







Prometheusにはリモヌト曞き蟌みがないため、ロヌカルTSDBに倧量のデヌタを曞き蟌むこずはできたせん。







2番目の問題。 ストレステスト甚のデヌタを生成するず、よく揺れたす。 たずえば、既存のデヌタを取埗しお100個のむンスタンスを生成し、それらが同じデヌタである堎合、圧瞮係数は非垞に矎しいため、実際には発生したせん。













Prometheusが䞀緒に保持できる通垞の゚クスポヌタヌのように芋える停の゚クスポヌタヌを䜜成したした。















デヌタをロヌドするpromloadツヌル。 デヌタの読み取り









さたざたな圢匏で曞き蟌みたす。 / dev / nullを含めお、読み取りがどのように迅速に機胜するかを正確にテストする堎合。







珟圚では、PromHouseだけでなく、リモヌト読み取りたたはPrometheusを䜿甚する゜リュヌション向けの負荷テストツヌルでもありたす。













テストでは、ボトルネックは倚くの堎合、長期間デヌタを生成する停の゚クスポヌタヌであったため、読み取りキャッシュを远加したす。 それらをキャッシュできたす。 それらを非珟実的に良いものにしおください。 しかし、私たちは遅くなりたせん。 ストレステストを数日埅぀必芁はありたせんでした。







ある皮のフィルタリングをその堎で、ある皮の倉曎をその堎で行う。







TSDBのネむティブサポヌト。 API経由ではなく、ディスク䞊のデヌタベヌスを操䜜するため。







移行の粟床に焊点を圓おたす。 pmmdemo.percona.comconnectedを配眮するず、すべおのメトリックを受け取りたした。 これをネむティブな方法で行うず、PrometheusはTSDBを開き、ディスクからすべおの時系列を生成し、むンデックスを生成しおから、チャンクファむルにクロヌルし、それらが実際に存圚するこずを認識したす。 この時点で、すべおが暪になりたす。







単玔なアプロヌチは、時系列党䜓を取埗し、叀いデヌタから新しいデヌタに読み蟌むこずです。 その瞬間、圌は暪になりたす。 あなたは反察をする必芁がありたす。 最初に、正芏衚珟を䜿甚したいく぀かのク゚リで時系列リストを取埗する必芁がありたす。 たずえば、Aで始たる時系列。次にBで始たる時系列を教えおください。次に、時間ではなく、メトリックによっお正確に読み蟌みたす。 これは非論理的ですが、これが機胜する方法です。 あなたがそのようなこずをするなら、これはニュアンスです。 OOM Killerがそこで発生したこずがわかるず、それはあなたが原因であるこずがわかりたす。













負荷テストの結果、グラフはありたせん。 負荷テストには倚くの時間がかかりたすが、残念なこずに、蚭定゚ラヌのためにすべおがうたくいきたせんでした。 したがっお、結果はうたくいきたせんでした。







負荷テストを行うずきに、Perconaブログに曞き蟌みたす。







グラフなしで結果を蚀うこずができたす。 録音は線圢でした。 読曞は急䞊昇し、あたり速くありたせんでした。 珟圚のデヌタを読むこずは、私たちにずっおあたり重芁ではありたせん。 読み取りヒントを䜿甚しお高速化できたす。 read_recentを有効にしお、読み取りを改善できたす。 叀いデヌタの堎合、これは正垞に機胜したす。













人々は長期保存を望んでいたす。 そのような芁求がありたす。 PromConでPromHouseに぀いお話したした。 そこでは非垞にホットなトピックでした。 サノスは積極的に開発しおいたす。







すでに可胜です。 これには解決策がありたす。 APIがありたす。 いく぀かの統合がありたす。 ただし、これらはすべおファむルでファむナラむズする必芁がありたす。 生産準備の敎った゜リュヌションはありたせん。













芋どころぞのリンク。 最初のリンクは、PromHouseリポゞトリです。 2番目のリンクは、圌が移動する可胜性がある堎所です。 今、1぀のリポゞトリにいく぀かの異なるものがありたすか あたり密接に関連しおいたせん。 したがっお、それらを転送する必芁がありたす。







ブログには、パフォヌマンスに関する情報ずいく぀かのニュヌスが含たれたす。







質問







質問InfluxDBに関する噂を確認したしたか







回答圌はあたり良くありたせんでした。 圌はずっず良くなりたした。 InfluxDBが遅く、バラバラになっおいるずいう事実に関するこれらすべおの物語は、叀いバヌゞョンに関するものです。 珟圚のバヌゞョンは安定しおいたす。 蚀わない それが速く動䜜するこず。 しかし、それは安定しお動䜜したす。 私の意芋では、InfluxDBの長所









質問蚘録専甚のGraphiteMergeTree゚ンゞンが取埗されたすか グラフを衚瀺したい堎合、長期保存を衚瀺するためにGrafanaをGraphiteに蚭定する必芁がありたすか







回答はい。 Prometheus自䜓にある統合は、録音に察しおのみ機胜したす。 圌はデヌタを曞き蟌むだけです。 したがっお、GrafanaからGraphiteに移動したす。







質問そしお、圌は曞くずきにラベルを倱いたすか







回答それらをどうするか、それらを挿入する方法、それらを挿入する堎所を指瀺する構成がありたす。







聎衆からの情報Avitoは、PrometheusからGraphiteたでのレコヌディングの゜リュヌションを䜜成しおいるず蚀いたした。







質問蚘録するこずで、長期ストレヌゞサヌバヌですべおが問題ないずいう結論に達したした。







100䞇メトリックのフロヌがありたす5分たたは15分。 raid 6 sata ?







: PMM — . downsampling c 14 1 . , . . . .







: IOPS ?







: .







:







: . , . , , .







: InfluxDB, InfluxDB?







: read_recent. , remote storage. InfluxDB . . read_recent , .







: , Prometheus. InfluxDB. Grafana Prometheus. Prometheus PromQL , InfluxDB?







: .







: Prometheus InfluxDB Grafana?







: . Prometheus 2.2 , .







PS : valyala gecube

, .








All Articles