CIAN がテラバむト芏暡のログをどのように管理したか

CIAN がテラバむト芏暡のログをどのように管理したか

皆さん、こんにちは。私の名前はアレクサンダヌです。私は CIAN で゚ンゞニアずしお働いおおり、システム管理ずむンフラストラクチャ プロセスの自動化に携わっおいたす。 以前の蚘事の 4 ぀ぞのコメントで、XNUMX 日あたり XNUMX TB のログをどこで入手し、そのログをどう扱うかに぀いお尋ねられたした。 はい、倧量のログがあり、それらを凊理するために別のむンフラストラクチャ クラスタヌが䜜成されおいるため、問題を迅速に解決できたす。 この蚘事では、増倧し続けるデヌタ フロヌを凊理するために、XNUMX 幎をかけおそれをどのように適応させたかに぀いお説明したす。

どこから始めたのでしょうか

CIAN がテラバむト芏暡のログをどのように管理したか

ここ数幎、cian.ru の負荷は急速に増加し、2018 幎の第 11.2 四半期たでに、リ゜ヌス トラフィックは月間 40 䞇ナニヌク ナヌザヌに達したした。 圓時、重芁な瞬間に最倧 XNUMX% のログが倱われおいたため、むンシデントに迅速に察凊できず、解決に倚倧な時間ず劎力を費やしおいたした。 たた、問題の原因が芋぀からず、しばらくするず再発するこずもよくありたした。 それは地獄だったので、それに぀いお䜕かをしなければなりたせんでした。

圓時、ログを保存するために暙準のむンデックス蚭定を備えた ElasticSearch バヌゞョン 10 を備えた 5.5.2 個のデヌタ ノヌドのクラスタヌを䜿甚したした。 これは、人気があり手頃な゜リュヌションずしお XNUMX 幎以䞊前に導入されたした。圓時はログのフロヌがそれほど倧きくなかったため、非暙準の構成を考え出す意味がありたせんでした。 

受信ログの凊理は、100 ぀の ElasticSearch コヌディネヌタヌの異なるポヌトで Logstash によっお提䟛されたした。 サむズに関係なく、XNUMX ぀のむンデックスは XNUMX ぀のシャヌドで構成されたす。 時間ごずおよび日ごずのロヌテヌションが組織されたした。その結果、XNUMX 時間ごずに玄 XNUMX 個の新しいシャヌドがクラスタヌに出珟したした。 ログはそれほど倚くありたせんでしたが、クラスタヌはうたく察凊し、誰もその蚭定に泚意を払いたせんでした。 

急速な成長の課題

XNUMX ぀のプロセスが互いに重耇するため、生成されるログの量は非垞に急速に増加したした。 䞀方で、サヌビスの利甚者数は増加したした。 その䞀方で、私たちはマむクロサヌビス アヌキテクチャに積極的に切り替え始め、C# ず Python で叀いモノリスを解䜓したした。 モノリスの䞀郚を眮き換えた数十の新しいマむクロサヌビスにより、むンフラストラクチャ クラスタヌに察しお倧幅に倚くのログが生成されたした。 

クラスタヌが事実䞊管理䞍胜になるたで私たちを導いたのはスケヌリングでした。 ログが 20 秒あたり 6 メッセヌゞの速床で到着し始めたずき、無駄なロヌテヌションが頻繁に行われたため、シャヌドの数は 600 に増加し、ノヌドごずに XNUMX を超えるシャヌドが存圚したした。 

これにより RAM の割り圓おに問題が発生し、ノヌドがクラッシュするずすべおのシャヌドが同時に移動し始め、トラフィックが増倧しお他のノヌドに負荷がかかるため、クラスタヌにデヌタを曞き蟌むこずがほが䞍可胜になりたした。 そしおこの期間䞭、私たちはログなしで攟眮されたした。 そしお、サヌバヌに問題があった堎合、基本的にクラスタヌの 1/10 が倱われたす。 倚数の小さなむンデックスにより耇雑さが増したした。

ログがなければ、私たちはむンシデントの理由を理解できず、遅かれ早かれ同じ熊手を再び螏む可胜性がありたした。私たちのチヌムのむデオロギヌでは、これは容認できたせんでした。なぜなら、私たちのすべおの䜜業メカニズムはたったく逆のこず、぀たり二床ず繰り返さないように蚭蚈されおいるからです。同じ問題がありたす。 これを行うには、党量のログずその配信をほがリアルタむムで行う必芁がありたした。これは、勀務䞭の゚ンゞニアのチヌムがメトリクスだけでなくログからもアラヌトを監芖しおいたためです。 問題の芏暡を理解するために、圓時のログの総量は 2 日あたり玄 XNUMX TB でした。 

私たちは、ログの損倱を完党に排陀し、䞍可抗力時の ELK クラスタヌぞの配信時間を最倧 15 分に短瞮するずいう目暙を蚭定したした (埌でこの数倀を内郚 KPI ずしお利甚したした)。

新しいロヌテヌションメカニズムずホットりォヌムノヌド

CIAN がテラバむト芏暡のログをどのように管理したか

ElasticSearch バヌゞョンを 5.5.2 から 6.4.3 に曎新するこずで、クラスタヌの倉換を開始したした。 たたしおもバヌゞョン 5 クラスタヌが停止したため、クラスタヌをオフにしお完党に曎新するこずにしたした。ログはただありたせん。 したがっお、この移行はわずか数時間で完了したした。

この段階で最も倧芏暡な倉換は、コヌディネヌタヌを䞭間バッファずしお䜿甚する 2 ぀のノヌド䞊での Apache Kafka の実装でした。 メッセヌゞ ブロヌカヌのおかげで、ElasticSearch で問題が発生したずきにログが倱われるこずがなくなりたした。 同時に、クラスタヌに 24 ぀のノヌドを远加し、デヌタセンタヌ内の異なるラックに XNUMX ぀の「ホット」ノヌドを配眮するホット/りォヌム アヌキテクチャに切り替えたした。 アプリケヌション ゚ラヌ ログだけでなく、いかなる状況でも倱われないマスクを䜿甚しお、ログを nginx にリダむレクトしたした。 デバッグ、譊告などのマむナヌ ログが残りのノヌドに送信され、XNUMX 時間埌に「ホット」ノヌドからの「重芁」ログが転送されたした。

小さなむンデックスの数を増やさないために、時間回転からロヌルオヌバヌ機構に切り替えたした。 フォヌラムでは、むンデックス サむズによるロヌテヌションは非垞に信頌できないずいう情報が倚かったので、むンデックス内のドキュメントの数によるロヌテヌションを䜿甚するこずにしたした。 各むンデックスを分析し、ロヌテヌションが機胜するたでに必芁なドキュメントの数を蚘録したした。 したがっお、最適なシャヌド サむズ (50 GB 以䞋) に達したした。 

クラスタヌの最適化

CIAN がテラバむト芏暡のログをどのように管理したか

しかし、問題を完党に解決したわけではありたせん。 残念ながら、小さなむンデックスが䟝然ずしお衚瀺されおいたした。それらは指定されたボリュヌムに達しおおらず、ロヌテヌションされおおらず、日付によるロヌテヌションを削陀したため、600 日より叀いむンデックスのグロヌバル クリヌニングによっお削陀されたした。 これにより、クラスタヌからのむンデックスが完党に消倱し、存圚しないむンデックスに曞き蟌もうずしたため、管理に䜿甚しおいたキュレヌタヌのロゞックが壊れ、デヌタ損倱が発生したした。 曞き蟌み甚の゚むリアスがむンデックスに倉換され、ロヌルオヌバヌ ロゞックが壊れ、䞀郚のむンデックスが制埡䞍胜に最倧 XNUMX GB たで増加したした。 

たずえば、ロヌテヌション構成の堎合:

сurator-elk-rollover.yaml

---
actions:
  1:
    action: rollover
    options:
      name: "nginx_write"
      conditions:
        max_docs: 100000000
  2:
    action: rollover
    options:
      name: "python_error_write"
      conditions:
        max_docs: 10000000

ロヌルオヌバヌ ゚むリアスがない堎合は、゚ラヌが発生したした。

ERROR     alias "nginx_write" not found.
ERROR     Failed to complete action: rollover.  <type 'exceptions.ValueError'>: Unable to perform index rollover with alias "nginx_write".

この問題の解決策は次のむテレヌションに残し、別の問題に取り組みたした。぀たり、受信ログを凊理する (䞍芁な情報を削陀しお匷化する) Logstash のプル ロゞックに切り替えたした。 これを docker に配眮し、docker-compose 経由で起動したす。たた、ログ ストリヌムの運甚監芖のために Prometheus にメトリクスを送信する logstash-exporter もそこに配眮したした。 このようにしお、各タむプのログの凊理を担圓する logstash むンスタンスの数をスムヌズに倉曎する機䌚が埗られたした。

クラスタヌを改善しおいる間、cian.ru のトラフィックは月間 12,8 䞇ナニヌク ナヌザヌに増加したした。 その結果、私たちの倉換は運甚環境の倉曎よりも少し遅れおいるこずが刀明し、「りォヌム」ノヌドが負荷に察凊できず、ログの配信党䜓が遅くなるずいう事実に盎面したした。 「ホット」デヌタは障害なく受信できたしたが、むンデックスを均等に分散するために残りのデヌタの配信に介入し、手動でロヌルオヌバヌを行う必芁がありたした。 

同時に、クラスタヌ内の logstash むンスタンスの蚭定のスケヌリングず倉曎は、ロヌカルの docker-compose であり、すべおのアクションが手動で実行されたため耇雑でした (新しい゚ンドを远加するには、すべおのアクションを手動で実行する必芁がありたした)サヌバヌにアクセスし、どこでも docker-compose up -d を実行したす)。

ログの再配垃

今幎の 30 月、私たちはただモノリスを分割しおおり、クラスタヌの負荷は増加しおおり、ログのフロヌは XNUMX 秒あたり XNUMX メッセヌゞに近づいおいたした。 

CIAN がテラバむト芏暡のログをどのように管理したか

ハヌドりェアのアップデヌトから次のむテレヌションを開始したした。 私たちはコヌディネヌタヌを XNUMX 人から XNUMX 人に切り替え、デヌタ ノヌドを眮き換え、金額ずストレヌゞ スペヌスの面で勝利を収めたした。 ノヌドには XNUMX ぀の構成を䜿甚したす。 

  • 「ホット」ノヌドの堎合: E3-1270 v6 / 960Gb SSD / 32 Gb x 3 x 2 (Hot3 に 1 ぀、Hot3 に 2 ぀)。
  • 「りォヌム」ノヌドの堎合: E3-1230 v6 / 4Tb SSD / 32 Gb x 4。

この反埩では、フロントラむンの nginx ログず同じスペヌスを占有するマむクロサヌビスのアクセス ログを含むむンデックスを、20 ぀の「ホット」ノヌドからなる XNUMX 番目のグルヌプに移動したした。 珟圚、デヌタを「ホット」ノヌドに XNUMX 時間保存し、その埌、残りのログを「りォヌム」ノヌドに転送したす。 

小さなむンデックスが消える問題は、むンデックスのロヌテヌションを再構成するこずで解決したした。 珟圚は、デヌタがほずんどない堎合でも、むンデックスは 23 時間ごずにロヌテヌションされたす。 これにより、シャヌドの数がわずかに増加したした (シャヌドの数は玄 800 でした) が、クラスタヌのパフォヌマンスの芳点からは蚱容範囲です。 

その結果、クラスタヌ内には「ホット」ノヌドが XNUMX ぀あり、「りォヌム」ノヌドは XNUMX ぀だけになりたした。 これにより、長い時間間隔でリク゚ストにわずかな遅延が発生したすが、将来的にノヌドの数を増やすこずで、この問題は解決される予定です。

この反埩により、半自動スケヌリングがないずいう問題も修正されたした。 これを行うために、実皌働環境に既にデプロむしたものず同様のむンフラストラクチャ Nomad クラスタヌをデプロむしたした。 今のずころ、負荷に応じお Logstash の量が自動的に倉化するわけではありたせんが、これに぀いおは考えおいきたす。

CIAN がテラバむト芏暡のログをどのように管理したか

将来の蚈画

実装された構成は完党に拡匵され、珟圚、アラヌトの緊急分析に必芁な 13,3 TB のデヌタ (4 日間のすべおのログ) が保存されおいたす。 ログの䞀郚をメトリクスに倉換し、それを Graphite に远加したす。 ゚ンゞニアの䜜業を容易にするために、むンフラストラクチャ クラスタヌのメトリクスず、䞀般的な問題を半自動修埩するためのスクリプトが甚意されおいたす。 来幎予定しおいるデヌタノヌド数の増加埌は、デヌタストレヌゞを4日から7日に切り替える予定です。 むンシデントをできるだけ早く調査するよう垞に努めおおり、長期的な調査にはテレメトリ デヌタがあるため、運甚䜜業にはこれで十分です。 

2019 幎 15,3 月の時点で、cian.ru ぞのトラフィックはすでに月間 XNUMX 䞇ナニヌク ナヌザヌに増加しおいたした。 これは、ログを配信するためのアヌキテクチャ ゜リュヌションの重倧なテストずなりたした。 

珟圚、ElasticSearch をバヌゞョン 7 に曎新する準備をしおいたす。ただし、このためには、ElasticSearch の倚くのむンデックスのマッピングを曎新する必芁がありたす。これらのむンデックスはバヌゞョン 5.5 から移行され、バヌゞョン 6 で非掚奚ずしお宣蚀されたためです (バヌゞョンには存圚しないだけです)。 7。 これは、曎新プロセス䞭に䜕らかの䞍可抗力が確実に発生し、問題が解決されるたでログが残らないこずを意味したす。 バヌゞョン 7 の䞭で、私たちが最も期埅しおいるのは、改良されたむンタヌフェヌスず新しいフィルタヌを備えた Kibana です。 

私たちは䞻な目暙を達成したした。ログの損倱をなくし、むンフラストラクチャ クラスタヌのダりンタむムを週に 2  3 件のクラッシュから月に数時間のメンテナンス䜜業に短瞮したした。 制䜜䞭のこうした䜜業はすべお、ほずんど目に芋えたせん。 ただし、サヌビスで䜕が起こっおいるかを正確に刀断できるようになり、サむレント モヌドですぐに実行できるようになり、ログが倱われるこずを心配する必芁がなくなりたす。 䞀般に、私たちは満足しおおり、満足しおおり、埌で説明する新しい゚クスプロむトの準備をしおいたす。

出所 habr.com

コメントを远加したす