サヌビスずしおのモニタリング: マむクロサヌビス アヌキテクチャのモゞュラヌ システム

珟圚、モノリシック コヌドに加えお、私たちのプロゞェクトには数十のマむクロサヌビスが含たれおいたす。 それぞれを監芖する必芁がありたす。 DevOps ゚ンゞニアを䜿っおこのような芏暡でこれを行うには問題がありたす。 開発者向けのサヌビスずしお機胜する監芖システムを開発したした。 圌らは独立しお監芖システムにメトリクスを曞き蟌み、それを䜿甚し、それに基づいおダッシュボヌドを構築し、しきい倀に達したずきにトリガヌされるアラヌトをそれに添付するこずができたす。 DevOps ゚ンゞニアの堎合は、むンフラストラクチャずドキュメントのみ。

この投皿は、私ずのスピヌチの曞き起こしです。 セクション RIT++にお。 そこからテキスト版のレポヌトを䜜成しおほしいずいう芁望が倚く寄せられたした。 カンファレンスに参加しおいたり​​、ビデオを芋おいたずしおも、新しいこずは䜕も芋぀かりたせん。 そしお他の皆さんも、猫ぞようこそ。 このようなシステムをどのようにしお構築したのか、それがどのように機胜するのか、そしおどのように曎新する予定なのかに぀いお説明したす。

サヌビスずしおのモニタリング: マむクロサヌビス アヌキテクチャのモゞュラヌ システム

過去: 蚈画ず蚈画

どのようにしお珟圚の監芖システムに到達したのでしょうか? この質問に答えるには、2015 幎に戻る必芁がありたす。 そのずきの様子は次のずおりです。

サヌビスずしおのモニタリング: マむクロサヌビス アヌキテクチャのモゞュラヌ システム

監芖を担圓するノヌドは玄 24 ありたした。 䜕らかの圢で䜕かを監芖し、メッセヌゞを送信し、機胜を実行する、さたざたなクラりン、スクリプト、デヌモンのパック党䜓が存圚したす。 私たちは、先ぞ進めば進むほど、そのようなシステムは実行可胜でなくなるだろうず考えたした。 あたりにも面倒なので、開発する意味がありたせん。
私たちは、維持および開発する監芖芁玠ず攟棄する監芖芁玠を遞択するこずにしたした。 それらは 19 個あり、グラファむト、アグリゲヌタヌ、ダッシュボヌドずしおの Grafana だけが残りたした。 しかし、新しいシステムはどのようなものになるのでしょうか? このような

サヌビスずしおのモニタリング: マむクロサヌビス アヌキテクチャのモゞュラヌ システム

メトリクス ストレヌゞがありたす。これらは高速 SSD ドラむブをベヌスずするグラファむトであり、メトリクスの特定のアグリゲヌタです。 次 - ダッシュボヌドを衚瀺するための Grafana ずアラヌトを䜜成するための Moira。 たた、異垞を怜玢するシステムも開発したいず考えおいたした。

暙準: モニタリング 2.0

これが 2015 幎の蚈画の様子です。しかし、むンフラストラクチャずサヌビス自䜓だけでなく、そのためのドキュメントも準備する必芁がありたした。 私たちは、モニタリング 2.0 ず呌ぶ瀟内暙準を独自に開発したした。 システムの芁件は䜕でしたか?

  • 垞に利甚可胜。
  • メトリクスの保存間隔 = 10 秒。
  • メトリクスずダッシュボヌドの構造化されたストレヌゞ。
  • SLA > 99,99%
  • UDP を介したむベント メトリクスの収集 (!)。

メトリクスを生成する倧量のトラフィックずむベントがあるため、UDP が必芁でした。 それらすべおを䞀床にグラファむトに曞き蟌むず、ストレヌゞが厩壊したす。 たた、すべおのメトリクスに察しお第 XNUMX レベルのプレフィックスを遞択したした。

サヌビスずしおのモニタリング: マむクロサヌビス アヌキテクチャのモゞュラヌ システム

各プレフィックスには䜕らかのプロパティがありたす。 サヌバヌ、ネットワヌク、コンテナ、リ゜ヌス、アプリケヌションなどのメトリクスがありたす。 明確で厳密な型付きフィルタリングが実装されおおり、第 2015 レベルのメトリクスを受け入れ、残りは単玔に削陀されたす。 このようにしお、XNUMX 幎にこのシステムを蚈画したした。 珟圚には䜕が入っおいるのでしょうか

珟圚: 監芖コンポヌネントの盞互䜜甚の図

たず第䞀に、私たちはアプリケヌション、぀たり PHP コヌド、アプリケヌション、マむクロサヌビス、぀たり開発者が䜜成したすべおのものを監芖したす。 すべおのアプリケヌションは、UDP 経由で Brubeck アグリゲヌタヌ (statsd、C で曞き盎されたもの) にメトリクスを送信したす。 総合テストでは最速であるこずが刀明したした。 そしお、既に集玄されたメトリクスを TCP 経由で Graphite に送信したす。

タむマヌず呌ばれる䞀皮のメトリクスがありたす。 これはずおも䟿利なこずです。 たずえば、サヌビスぞのナヌザヌ接続ごずに、応答時間のメトリックを Brubeck に送信したす。 10 䞇件の応答が返されたしたが、アグリゲヌタヌは 4 メトリクスのみを返したした。 蚪問者数、最倧、最小、平均応答時間、䞭倮倀、第 XNUMX パヌセンタむルがわかりたす。 次に、デヌタが Graphite に転送され、すべおがラむブで衚瀺されたす。

たた、ハヌドりェア、゜フトりェア、システム メトリクス、および叀い Munin 監芖システム (2015 幎たで機胜しおいたした) に関するメトリクスの集蚈も行っおいたす。 これらすべおを C デヌモンの CollectD を通じお収集したす (これにはさたざたなプラグむンが組み蟌たれおおり、むンストヌルされおいるホスト システムのすべおのリ゜ヌスをポヌリングできたす。構成でデヌタを曞き蟌む堎所を指定するだけです)。それを通じおデヌタをGraphiteに曞き蟌みたす。 Python プラグむンずシェル スクリプトもサポヌトしおいるため、独自のカスタム ゜リュヌションを䜜成できたす。CollectD はロヌカルたたはリモヌト ホスト (Curl を想定) からこのデヌタを収集し、Graphite に送信したす。

次に、収集したすべおのメトリクスを Carbon-c-relay に送信したす。 これは、Graphite の Carbon Relay ゜リュヌションを C で修正したものです。これは、アグリゲヌタヌから送信されるすべおのメトリクスを収集し、それらをノヌドにルヌティングするルヌタヌです。 たた、ルヌティング段階でも、メトリクスの有効性がチェックされたす。 第䞀に、それらは前に瀺したプレフィックス スキヌムに察応する必芁があり、第二に、グラファむトに察しお有効であるずいうこずです。 そうしないず萜ちおしたいたす。

次に、Carbon-c-relay はメトリクスを Graphite クラスタヌに送信したす。 メトリクスのメむンストレヌゞずしお、Go で曞き盎された Carbon-cache を䜿甚したす。 Go-carbon はマルチスレッド化により、Carbon-cache よりもはるかに優れたパフォヌマンスを発揮したす。 デヌタを受信し、りィスパヌ パッケヌゞ (暙準、Python で蚘述) を䜿甚しおディスクに曞き蟌みたす。 ストレヌゞからデヌタを読み取るために、Graphite API を䜿甚したす。 暙準の Graphite WEB よりもはるかに高速です。 次にデヌタはどうなりたすか?

圌らはグラファナに行きたす。 私たちはグラファむト クラスタヌを䞻なデヌタ ゜ヌスずしお䜿甚し、さらにメトリクスを衚瀺し、ダッシュボヌドを構築するための Web むンタヌフェむスずしお Grafana を䜿甚しおいたす。 開発者はサヌビスごずに独自のダッシュボヌドを䜜成したす。 次に、それらに基づいおグラフを䜜成し、アプリケヌションから曞き蟌んだメトリクスを衚瀺したす。 Grafana に加えお、SLAM もありたす。 これは、グラファむトのデヌタに基づいお SLA を蚈算する Python デヌモンです。 すでに述べたように、数十のマむクロサヌビスがあり、それぞれに独自の芁件がありたす。 SLAM を䜿甚しおドキュメントにアクセスし、Graphite の内容ず比范し、芁件がサヌビスの可甚性ずどの皋床䞀臎しおいるかを比范したす。

さらに進んで、譊告を発したす。 それは匷力なシステム、モむラを䜿甚しお組織されおいたす。 ボンネットの䞋に独自のグラファむトがあるため、独立しおいたす。 SKB「Kontur」のメンバヌによっお開発され、Python ず Go で曞かれ、完党にオヌプン゜ヌスです。 モむラはグラファむトに入るのず同じ流れを受けたす。 䜕らかの理由でストレヌゞが停止した堎合でも、アラヌトは匕き続き機胜したす。

Moira を Kubernetes にデプロむし、Redis サヌバヌのクラスタヌをメむン デヌタベヌスずしお䜿甚したす。 その結果、フォヌルトトレラントなシステムが誕生したした。 メトリックのストリヌムずトリガヌのリストを比范したす。その䞭に蚀及がない堎合、メトリックは削陀されたす。 そのため、XNUMX 分あたり数ギガバむトのメトリクスを凊理できたす。

たた、䌁業 LDAP も接続したした。これを利甚しお、䌁業システムの各ナヌザヌは、既存の (たたは新しく䜜成された) トリガヌに基づいお自分甚の通知を䜜成できたす。 Moira にはグラファむトが含たれおいるため、そのすべおの機胜がサポヌトされおいたす。 したがっお、たずその行を取埗しお Grafana にコピヌしたす。 デヌタがグラフにどのように衚瀺されるかを確認したす。 そしお、同じ行を Moira にコピヌしたす。 制限付きでハングアップするず、出力でアラヌトが衚瀺されたす。 これらすべおを行うのに、特別な知識は必芁ありたせん。 Moira は、SMS、電子メヌル、Jira、Slack 経由でアラヌトを送信できたす。たた、カスタム スクリプトの実行もサポヌトしおいたす。 トリガヌが発生し、カスタム スクリプトたたはバむナリをサブスクラむブするず、それを実行し、暙準入力でこのバむナリに JSON を送信したす。 したがっお、プログラムはそれを解析する必芁がありたす。 この JSON をどうするかはあなた次第です。 必芁に応じお Telegram に送信したり、Jira でタスクを開いたり、䜕でもできたす。

たた、アラヌトのために独自に開発した Imagotag も䜿甚しおいたす。 店頭の電子倀札によく䜿われおいるパネルをニヌズに合わせおアレンゞしたした。 モむラからトリガヌを導入したした。 それらがどのような状態にあるのか、い぀発生したのかを瀺したす。 開発担圓者の䞭には、Slack や電子メヌルでの通知を攟棄しお、このパネルを支持した人もいたす。

サヌビスずしおのモニタリング: マむクロサヌビス アヌキテクチャのモゞュラヌ システム

圓瀟は先進的な䌁業なので、このシステムで Kubernetes も監芖したした。 クラスタヌにむンストヌルした Heapster を䜿甚しおシステムに組み蟌み、デヌタを収集しお Graphite に送信したす。 その結果、図は次のようになりたす。

サヌビスずしおのモニタリング: マむクロサヌビス アヌキテクチャのモゞュラヌ システム

コンポヌネントの監芖

このタスクに䜿甚したコンポヌネントぞのリンクのリストを次に瀺したす。 それらはすべおオヌプン゜ヌスです。

黒鉛

カヌボンCリレヌ:

github.com/grobian/carbon-c-relay

ブルヌベック:

github.com/github/brubeck

収集:

コレクトド.org

モむラ

github.com/moira-alert

グラファナ:

グラファナ.com

ヒヌプスタヌ:

github.com/kubernetes/heapster

統蚈

そしお、システムが私たちにずっおどのように機胜するかを瀺すいく぀かの数字がありたす。

アグリゲヌタヌ (ブルヌベック)

メトリクスの数: ~300/秒
メトリクスをGraphiteに送信する間隔: 30秒
サヌバヌリ゜ヌス䜿甚量: ~ 6% CPU (本栌的なサヌバヌに぀いお話しおいたす)。 ~ 1Gb RAM; ~3 Mbps LAN

グラファむトゎヌカヌボン

メトリクスの数: ~ 1/分
メトリクスの曎新間隔: 30 秒
メトリクスの保存スキヌム: 30 秒 35 日、5 分 90 日、10 分 365 日 (長期間にわたっおサヌビスに䜕が起こっおいるかを把握できたす)
サヌバヌリ゜ヌス䜿甚量: CPU 最倧 10%。 ~ 20GB RAM; ~30Mbps LAN

柔軟性

Avito では、モニタリング サヌビスの柔軟性を非垞に重芖しおいたす。 なぜ圌は実際にこのような結果になったのでしょうか たず、そのコンポヌネントは、コンポヌネント自䜓ずそのバヌゞョンの䞡方で亀換可胜です。 XNUMX぀目はサポヌト性です。 プロゞェクト党䜓がオヌプン゜ヌスであるため、コヌドを自分で線集し、倉曎を加え、そのたたでは利甚できない機胜を実装するこずができたす。 䞻に Go ず Python などの非垞に䞀般的なスタックが䜿甚されるため、これは非垞に簡単に実行されたす。

実際の問題の䟋を次に瀺したす。 Graphite のメトリクスはファむルです。 名前がありたす。 ファむル名 = メトリック名。 そしおそこに到達する方法がありたす。 Linux のファむル名は 255 文字に制限されおいたす。 そしお、デヌタベヌス郚門からも (「内郚顧客」ずしお) スタッフがいたす。 圌らは私たちにこう蚀いたす。「SQL ク゚リを監芖したいのです。 そしお、それらは 255 文字ではなく、それぞれ 8 MB です。 これらを Grafana で衚瀺し、このリク゚ストのパラメヌタを確認したいず考えおいたす。さらに、そのようなリク゚ストの先頭も確認したいず考えおいたす。 リアルタむムで衚瀺されたら最高ですね。 圌らを譊戒態勢に眮けたら本圓に玠晎らしいだろう。」

サヌビスずしおのモニタリング: マむクロサヌビス アヌキテクチャのモゞュラヌ システム
SQL ク゚リの䟋は、次の䟋から匕甚されおいたす。 サむトpostgrespro.ru

Redis サヌバヌをセットアップし、Collectd プラグむンを䜿甚したす。これは Postgres に移動し、そこからすべおのデヌタを取埗し、メトリクスを Graphite に送信したす。 ただし、メトリック名をハッシュに眮き換えたす。 同じハッシュをキヌずしお Redis に送信し、SQL ク゚リ党䜓を倀ずしお同時に送信したす。 私たちがしなければならないのは、Grafana が Redis にアクセスしおこの情報を取埗できるこずを確認するこずだけです。 Graphite API を公開しおいる理由は... これは、すべおの監芖コンポヌネントずグラファむトずの察話のためのメむン むンタヌフェむスであり、そこに aliasByHash() ずいう新しい関数を入力したす。Grafana からメトリクスの名前を取埗し、それを Redis ぞのリク゚ストでキヌずしお䜿甚したす。応答ずしおキヌの倀を取埗したす。これが「SQL ク゚リ」です。 そこで、理論䞊衚瀺するこずが䞍可胜だった SQL ク゚リの衚瀺を、その統蚈情報 (呌び出し数、行数、total_time など) ずずもに Grafana で衚瀺したした。

結果

可甚性。 圓瀟の監芖サヌビスは、あらゆるアプリケヌションおよびあらゆるコヌドから 24 時間 7 日利甚できたす。 ストレヌゞ蚭備にアクセスできる堎合は、サヌビスにデヌタを曞き蟌むこずができたす。 蚀語は重芁ではありたせん、決定も重芁ではありたせん。 ゜ケットを開き、そこにメトリクスを配眮し、゜ケットを閉じる方法を知る必芁があるだけです。

信頌性。 すべおのコンポヌネントはフォヌルトトレラントであり、負荷を適切に凊理したす。

参入閟倀が䜎い。 このシステムを䜿甚するために、Grafana でプログラミング蚀語やク゚リを孊ぶ必芁はありたせん。 アプリケヌションを開き、メトリクスを Graphite に送信する゜ケットを入力し、アプリケヌションを閉じお Grafana を開き、そこにダッシュボヌドを䜜成しおメトリクスの動䜜を確認し、Moira 経由で通知を受信したす。

独立。 DevOps ゚ンゞニアの助けを借りずに、これらすべおを自分で行うこずができたす。 これは利点です。プロゞェクトを今すぐ監芖できるため、䜜業を開始するか倉曎を加えるかを誰にも尋ねる必芁がありたせん。

私たちは䜕のために努力しおいるのでしょうか

以䞋にリストされおいるものはすべお、単なる抜象的な考えではなく、少なくずも最初の䞀歩が螏み出されたものです。

  1. 異垞怜出噚。 Graphite ストレヌゞにアクセスし、さたざたなアルゎリズムを䜿甚しお各メトリクスをチェックするサヌビスを䜜成したいず考えおいたす。 衚瀺したいアルゎリズムがすでに存圚し、デヌタがあり、それを操䜜する方法を知っおいたす。
  2. メタデヌタ。 私たちには倚くのサヌビスがあり、それらは、サヌビスで働く人々ず同じように、時間の経過ずずもに倉化したす。 ドキュメントを手動で継続的に保守するこずはオプションではありたせん。 そのため、私たちは珟圚メタデヌタをマむクロサヌビスに埋め蟌んでいたす。 開発者、やり取りする蚀語、SLA 芁件、通知の送信先ず送信先が蚘茉されおいたす。 サヌビスをデプロむするずき、すべおの゚ンティティ デヌタは個別に䜜成されたす。 その結果、XNUMX ぀のリンクが取埗されたす。XNUMX ぀はトリガヌぞ、もう XNUMX ぀は Grafana のダッシュボヌドぞです。
  3. 各家庭でのモニタリング。 私たちは、すべおの開発者がそのようなシステムを䜿甚すべきであるず信じおいたす。 この堎合、トラフィックがどこにあるのか、トラフィックに䜕が起こっおいるのか、どこに萜ちおいるのか、どこに匱点があるのか​​を垞に把握できたす。 たずえば、䜕かが発生しおサヌビスがクラッシュした堎合、マネヌゞャヌからの電話ではなくアラヌトによっおそれを知り、すぐに最新のログを開いおそこで䜕が起こったのかを確認できたす。
  4. ハむパフォヌマンス。 私たちのプロゞェクトは成長を続けおおり、珟圚では 2 分あたり玄 000 のメトリック倀を凊理しおいたす。 000 幎前、この数字は 500 でしたが、増加は続いおおり、これは、しばらくするず、Graphite (ささやき) がディスク サブシステムに倧きな負荷を䞎え始めるこずを意味したす。 すでに述べたように、この監芖システムはコンポヌネントの互換性があるため、非垞に汎甚的です。 誰かが Graphite 専甚のむンフラストラクチャを維持し、継続的に拡匵しおいたすが、私たちは別の道を進むこずにしたした。 クリックハりス メトリクスのリポゞトリずしお。 この移行はほが完了しおいたす。間もなく、これがどのように行われたか、どのような困難があり、どのように克服されたか、移行プロセスがどのように行われたか、バむンディングずしお遞択されたコンポヌネントずその構成に぀いお詳しく説明する予定です。

ご枅聎ありがずうございたした このトピックに関するご質問がございたしたら、ここたたは次の投皿でお答えいたしたす。 おそらく誰かが同様の監芖システムを構築したり、同様の状況でクリックハりスに切り替えたりした経隓があるので、コメントで共有しおください。

出所 habr.com

コメントを远加したす