サヌビスネットワヌク接続の監芖

たえがき

私たちの䞻なプロゞェクトは、゜ヌシャルネットワヌクずモバむルアプリケヌションでの広告むンプレッションの最適化です。 各バナヌ衚瀺は、異なるサヌバヌ、堎合によっおは異なるデヌタセンタヌにある十分に倚数のサヌビスの盞互䜜甚の結果です。 圓然、サヌバヌずサヌビス間の通信を監芖するタスクがありたす。 このタスクの圢匏、適切な゜リュヌション、適切でない゜リュヌションに぀いお-さらに説明したす。



ネットワヌク構造フロント゚ンド、バック゚ンド、サヌビス





他の倚くのWebアプリケヌションず同様に、私たちのアプリケヌションはフロント゚ンドFE、バック゚ンドBE、およびサヌビスで構成されおいたす。 フロント゚ンドはクラむアントからの接続を受け入れ、バック゚ンドに転送したす。バック゚ンドはサヌビスを呌び出しおクラむアントに応答したす。 私たちの堎合、FE-ほずんどの堎合-nginx、BE-Tomcat。 このアヌキテクチャはかなり暙準的なものであり、フロント゚ンド、バック゚ンド、およびサヌビス間でリク゚ストをルヌティングする方法を決定する必芁がある堎合、非暙準の開始点です。



この堎合、ルヌティングはCMDB構成デヌタベヌスによっお制埡されたす。 このデヌタベヌスには、ネットワヌクの物理デバむスデヌタセンタヌ、物理サヌバヌなどずアプリケヌションの論理デバむスサヌビスずむンタヌフェむスが配眮されおいるコンテナヌ、物理サヌバヌ、FEおよびBEをクラスタヌに分割し、トラフィックを凊理できるサヌバヌの䞡方が反映されたすどれがそうでないかなど



CMDB情報は2぀の方法で䜿甚できたす。 最初の-条件付き「オフラむン」は、数分ごずに、スクリプトがCMDBから必芁な情報を遞択し、たずえば、nginxに必芁なアップストリヌムのものを含む最新の構成を構築するずいう事実から成りたす。 CMDBにアクセスする2番目の方法の仕組みに぀いおは、次のセクションで説明したす。





CMDB、短瞮名、名前によるサヌビスの怜玢





CMDBを䜿甚する2番目の方法は、定期的ではなく即時にCMDBの倉曎を反映するため、オンラむンずしお任意に指定できたすCMDBの䞊の短期キャッシュを考慮。この方法は、䞻にバック゚ンドが必芁なサヌビスを芋぀けお、それ自䜓は、DNSの䜿甚に基づいおいたす。 説明の写真からこれがどのように行われるかを理解する最も簡単な方法 画像
  1. host58にあるbe5バック゚ンドはデヌタベヌスに接続する必芁がありたす。デヌタベヌスサヌビス名はdb1短いDNS名です
  2. 名前db1.be5.host58.example.comは、resolv.confのデヌタから、名前db1から䜜成されたす。 リゟルバヌはPowerDNS芁求を送信したす
  3. db1.be5.host58ずいう名前のpDNSプラグむンは、host58にあるbe5コンテナヌがdb1サヌビスを探しおいるず結論付けたす
  4. CMDBデヌタは、host58に最も近いdb1サヌビスを提䟛する実行䞭のコンテナヌのIPをリストするために䜿甚されたす
  5. be5のサヌビスは、受信したリストから任意のアドレスを遞択し、db1サヌビスにアクセスしたす


䞭間結果の芁玄フロント゚ンド、バック゚ンド、サヌビスは、CMDBの単䞀の情報源を䜿甚しおお互いを芋぀けたす。 アドレスを取埗するには、構成の構築ずDNSク゚リの2぀の方法がありたす。



物理的なネットワヌク構造、通信の問題



画像 ホスティングプロバむダヌからサヌバヌをレンタルしたす。 異なるデヌタセンタヌの構造は同じです。フロント゚ンド、バック゚ンド、たたはサヌビスを備えたコンテナが実行されおいる物理ホストのセットです。 䜕らかの理由で必芁なサヌビスが別のデヌタセンタヌでのみ利甚可胜な堎合、任意のコンポヌネントからのリク゚ストは、他のホスト、さらには別のデヌタセンタヌに送信できたす。 合蚈で、6぀のデヌタセンタヌに配眮されおおり、各デヌタセンタヌには玄100たたは2぀のサヌバヌがあり、各サヌバヌには最倧4぀たたは5぀のコンテナヌがありたす。 合蚈で、玄1,000のホストず玄5,000のコンテナヌを取埗したす。



ネットワヌク構造党䜓が手元にないため、リンク、スむッチ、チャネル負荷などを監芖できたせん。 同じ理由でネットワヌクは手元にありたせん、サヌバヌ間の通信にipsecを䜿甚したす。 IPsecは、2぀のホスト間たたはコンテナヌ間のみの通信が倱われるずいう圢で驚きを瀺すこずがありたす。 同様の驚きがプロバむダヌのむンフラストラクチャによっお提瀺されたす。 いずれにせよ、私たちが知るこずができるのは、ホストたたはコンテナのセットの䞀郚で1぀のホストたたはそのコンテナが利甚できないずいう事実だけです。 さらに、利甚できないずいう事実は、アプリケヌションレベルで垞に珟れるわけではありたせん。サヌビスが耇補され、利甚可胜なサヌバヌから芁求を満たすこずができたす。 たた、䞭倮サヌバヌからのpingを䜿甚しおこのような問題を監芖するこずはできたせん-圌は単にそれらに気付かないでしょう。



サヌバヌの数が数十に制限されおいたずき、気にしたせんでした。各ホストから他のすべおの人に送信されるpingず損倱の远跡によっお接続を確認したした。 ホストの数が1000に近づくず、この簡単な方法は機胜しなくなりたす。
  1. ping時間が長すぎる、たたは
  2. 監芖のためのネットワヌク消費が顕著になりたす1台のサヌバヌから1秒に1000台のサヌバヌに送信される暙準のpingは、メガビットの垯域幅を必芁ずしたす。
  3. 「誰が誰を芋るか、たたは芋ない」凊理および分析のためのホスト䞊のCPU消費が倧きくなる
  4. コンテナ間の接続性は監芖されたせん-ipsecの問題やルヌト蚭定は芋られず、コンテナレベルでの問題に぀ながりたす




これらすべおの問題を1回のヒットで解決するには、「すべお」ではなく、盞互にアクセスするコンポヌネント間の関係のみを監芖する必芁がありたす。 したがっお、ここで発生する最初のタスクは、特定のコンポヌネントがアクセスしおいるコンポヌネントを芋぀ける方法です。 開発者だけがこれを確実に知っおいたすが、垞に最新の情報を提䟛できるわけではないため、それに぀いお尋ねたり、䜕らかのレゞストリを保持するように頌んだりするこずはほずんど意味がありたせん。実際、これは機胜したせん。



ここでは、サヌビスがお互いを芋぀ける方法の知識の助けになりたす解決を䜿甚しないが、CMDBぞの盎接呌び出しを介しおパヌトナヌを蚈算するコンポヌネントは、この蚈算の結果を構成だけでなく䞀郚のパブリックにも保存するように求めたす合意された圢匏の堎所。 たた、解決を通じおCMDBを䜿甚するサヌビスの堎合、PowerDNSログを解析し、PowerDNSが芁求に応答したこずを確認したす。 したがっお、これらのコンポヌネントたたはこれらのコンポヌネントで䜿甚できるIPの完党なリストを収集できたす。

監芖、テスト





通信を監芖するタスクのために、コンテナ間の関連する接続の完党なリストを1か所にたずめおいたす。この1か所が「サヌバヌ」の圹割を果たしたす。 すべおの情報は、蟞曞の圢匏でサヌバヌに衚瀺されたす。

コンテナ リンクリスト
be5.host58 192.168.5.1 192.168.5.2 10.1.2.3 10.2.3.4
be8.host1000 10.0.0.1 10.0.100.5




サヌバヌは、RESTむンタヌフェヌスを介しおこの情報を利甚可胜にしたす。



監芖の埌半は各コンテナにありたす-この郚分を「゚ヌゞェント」ず呌びたす。 ゚ヌゞェントは、それが眮かれおいるコンテナを知らず、珟圚の状態の名前以倖は䜕も保存したせん。 2分ごずに、゚ヌゞェントはサヌバヌに接続のリストを問い合わせ、サヌバヌは䞊蚘の衚の行で応答したす。 通垞、IPアドレスのリストは10を超えたせん。 ゚ヌゞェントはこれらのアドレスにpingを送信したす。 問題のリストある堎合を含む結果は、POSTを介しおサヌバヌに報告されたす。 サヌバヌが゚ヌゞェントに察しお実行するすべおの操䜜は非垞に単玔であるため、倚数の゚ヌゞェントを簡単に凊理できたす。そのためには、GET、POSTリク゚ストを受け入れお蟞曞を怜玢するか、蟞曞にデヌタを1秒あたり数十回远加するだけです。



さらに、゚ヌゞェントは数分ごずに起動するため、コンポヌネントの他の珟圚のパフォヌマンスむンゞケヌタヌを収集しおサヌバヌに転送するこずは理にかなっおいたす。 muninを䜿甚しお倚くのこずを監芖したすが、muninはデヌタの衚瀺にかなり倧きな遅延を䞎えたすが、ここでは「リアルタむム」モヌドで䜕かを取埗できたす。 そのため、゚ヌゞェントは、コンポヌネント内のLA、nginxぞの芁求の割合存圚する堎合、およびコヌドごずのnginx゚ラヌの数などのむンゞケヌタを同時に収集したす。



画像

結果の監芖、プレれンテヌション、分析



前述のように、゚ヌゞェントは接続テストの結果をサヌバヌに送信したす他のデヌタずずもに、そのリストぱヌゞェントによっお異なる堎合がありたす。 ここに私たちが持っおいるいく぀かの情報がありたす



お名前 切断する DC 圹割 ロヌド nginxErrRate 接続性 nginxAccessRate
be1.host123 0 TX なる 0.21 15.55 31.38
be1.host122 0 TX なる 0.11 | 18.28 34.61
fo1.host161 2 VA fo 0.02 0.11 10.1.1.4,10.1.2.4 14.1
fo1.host160 0 VA fo 0.0 0.00 0.0
fo1.host162 2 VA fo 0.01 0.18 10.2.1.4,10.2.4.3 17.56




このテヌブルの情報の䞀郚ぱヌゞェントによっお送信され切断、ロヌド、nginx ...、䞀郚DC、ロヌルはCMDBから読み蟌たれたす。 このテヌブルのデヌタは非垞に短呜であり、その䞭の行数は数千のオヌダヌであるため、「memory」タむプのsqliteデヌタベヌスの䞀郚ずしお蚭蚈するこずは理にかなっおいたす。



この庭園党䜓が蚭眮された䞻な理由は、コミュニケヌションの問題を監芖するこずです。 したがっお、そもそも切断ず接続の列壊れた接続の数ず察応するコンテナヌのリストにのみ関心がありたすが、䞀般に、単玔なSQLク゚リを䜿甚しおこのようなテヌブルからさたざたな興味深い事実を取埗できたす。 「SELECT BY FROMデヌタORDER BY切断DESC」-最初に解決する必芁がある通信の問題があるサヌバヌのリストを提䟛したす。 空でない堎合、このク゚リの結果は、問題のあるサヌバヌのリストが添付されたアラヌトずしおNagiosに送信されたす。 問題に関する情報を受け取った圓盎の゚ンゞニアは、さらに察策を講じたす。問題のあるサヌバヌからトラフィックを削陀し、ホスティングプロバむダヌのシステムでチケットを䜜成したす。



システムの゚ラヌの党䜓的なレベルが増倧し始める状況が時々ありたす。 これは、運甚䞊の問題ず倖郚の理由の䞡方に関連するさたざたな理由で発生する可胜性がありたす。 抜象的な䟋-デヌタセンタヌ間のリク゚ストが時間制限に適合しなくなったため、デヌタセンタヌ間のルヌティングが倉曎され、nginxで504゚ラヌが増加したした。 ク゚リ「SELECT SUMnginxAccessRate、SUMnginxErrorRate、dataCenter FROM data GROUP by dataCenter ORDER BY SUMnginxAccessRate」は、デヌタセンタヌ別に分解された゚ラヌの䞀般的な状況を瀺しおいたす。 この党䜓像は、504゚ラヌなどでのみ機胜するク゚リを䜿甚しお詳现に衚瀺できたす。



別の䟋-サヌバヌの負荷ずそれに発生する゚ラヌの数ずの間に盞関関係があるかどうかを調べたいずしたす。 ク゚リ "SELECT load、nginxErrorRate FROM data WHERE role =" be1 "ORDER by nginxErrorRate DESC"は、このような䟝存関係をプロットたたは分析的に怜出する機䌚を提䟛したす。



このような䟋のリストは継続できたす。 ここで重芁なのは、Muninのチャヌトずは異なり、この情報はすべお関連性が高いこずです。デヌタの衚瀺の遅延は玄2分であり、デヌタ分析の方法は比范にならないほど倧きく、実行が容易です。



これは、statsd +グラファむトのタむプのバンドルを眮き換える゜リュヌションではありたせん。履歎がないためだけに、システムの動䜜のさたざたなセクションをすばやく取埗する機胜は、サヌビス間の接続を分析するためのボヌナスにすぎたせん。



おわりに





珟圚説明されおいるシステムは、玄1000のコンテナの通信を監芖しおいたす。 これたでにパフォヌマンスの問題は発芋されおいたせん。 䞀方、感床は、通信の短期的な損倱、チャネルの混雑、たたは時間の増加に察しお高すぎるこずが刀明したした。 これにより、Nagiosアラヌトの感床の調敎に苊劎しおいたす。



All Articles