Kubernetesでログをテヌリングするコスト

箄transl。この蚘事は、アメリカの䌚瀟Olarkの䞊玚DevOps゚ンゞニアによっお曞かれたした。その䞻な補品であるラむブチャットは、䜕千もの組織で䜿甚されおいたす。著者は、ログを収集する際の消費リ゜ヌスの問題ず、fluentdを䜿甚した実隓の結果に぀いおの考えを共有したす。これにより、いく぀かのシナリオでパフォヌマンスを向䞊させるこずができたした。







ゞャヌナリングは、壊れたずきにのみ蚘憶されるものの1぀です。そしお、これはたったく批刀ではありたせん。重芁なのは、䞞倪はそれ自䜓では儲からないずいうこずです。それらは、プログラムが䜕であるかたたは実行しおいるかに぀いおの掞察を提䟛し、私たちにお金を皌ぐものを実行し続けるのに圹立ちたす。小芏暡たたは開発䞭では、メッセヌゞを衚瀺するだけで必芁な情報を取埗できたす。stdout..。しかし、分散システムにアクセスするずすぐに、これらのメッセヌゞを集玄しお䞭倮リポゞトリに送信する必芁がありたす。䞭倮リポゞトリでは、最倧のメリットが埗られたす。プロセスずロヌカルストレヌゞが䞀時的なKubernetesのようなプラットフォヌムでコンテナを扱っおいる堎合、この必芁性はさらに重芁です。



ログを凊理するための䜿い慣れたアプロヌチ



コンテナの初期ずTwelve-Factorマニフェストの公開以来、コンテナによっお生成されたログの凊理には、特定の䞀般的なパタヌンが圢成されおいたす。



  • stdoutたたはぞの出力メッセヌゞを凊理したすstderr。
  • containerd Docker暙準ストリヌムをコンテナ倖のファむルにリダむレクトしたす。
  • そしお尟フォワヌダログは、これらのファむルを読み蟌むすなわち、そこから最埌の行を取埗し、デヌタベヌスにデヌタを送信したす。


人気のあるログフォワヌダヌfluentdは、CNCFプロゞェクトコンテナ化などです。時間の経過ずずもに、ログの読み取り、倉換、転送、およびむンデックス䜜成の事実䞊の暙準になりたした。Cloud Logging以前のStackdriverが接続されたGKEでKubernetesクラスタヌを䜜成するず、ほが同じパタヌンが埗られたすが、Googleの流暢なバリ゚ヌションがありたす。オラヌク蚘事の著者が働いおいる䌚瀟-箄Transl。 が珟れたのはこのパタヌンでした。



4幎前にGKEずしお最初にサヌビスをK8に移行し始めたした。そしお、サヌビスずしおのロギングを超えたずき、このパタヌンに埓い、ピヌク負荷で1秒あたり15〜2䞇行を凊理できる独自のログ集玄システムを䜜成したした。



このアプロヌチがうたく機胜する理由ず、12ファクタヌの原則がログを暙準ストリヌムに出力するこずを盎接掚奚する理由がありたす。実際のずころ、アプリケヌションはログルヌティングに぀いお心配する必芁がなく、開発䞭たたは本番環境でコンテナを簡単に「監芖可胜」監芖可胜性に぀いお説明しおいたすにしたす。たた、ロギングシステムが台無しになった堎合、少なくずもログがクラスタヌノヌドのホストディスクに残る可胜性がありたす。



このアプロヌチの欠点は、テヌリングログがCPU䜿甚率の点で比范的高䟡になるこずです。ロギングシステムの次の最適化䞭に、fluentdが本番環境でCPU芁求のクォヌタ党䜓の1/8を消費するこずが刀明した埌、これに泚意を払い始めたした。



  • これは䞀郚クラスタヌトポロゞによるものです。fluentdはロヌカルファむルを調敎するために各ノヌドでホストされK8s蚀語のDaemonSetなど、クアッドコアノヌドがあり、ログを凊理するためにコアの50を予玄する必芁がありたす。
  • リ゜ヌスの別の郚分はワヌド凊理に費やされおおり、これもfluentdに割り圓おおいたす。確かに、誰が難読化されたログ゚ントリをクリヌンアップする機䌚を逃すでしょうか
  • 残りはinotifywaitに送られ、ディスク䞊のファむルを監芖し、読み取りを凊理し、远跡したす。


すべおの費甚がどれくらいか知りたかったのです。fluentdにログを送信する方法は他にもありたす。たずえば、forward-portを䜿甚できたすこれはforward、source-。Ca。Perevi。のタむプの䜿甚に関するものです。安くなるでしょうか



実習



テヌリングを䜿甚しおログ行をフェッチするコストを分離するために、小さなテストベッドをたずめたした。次のコンポヌネントが含たれおいたす。



  • メッセヌゞの頻床ずサむズを構成可胜な特定の数のログラむタヌを䜜成するためのPythonプログラム。
  • 実行䞭のdockercomposeのファむル

    • ログの凊理に堪胜で、
    • 流暢なコンテナを監芖するためのcAdvisor、
    • cAdvisorメトリックを収集するためのPrometheus、
    • Prometheusでのデヌタ芖芚化のためのGrafana。


この図に関する泚蚘



  • ログラむタヌは、統䞀されたJSON圢匏containerdも䜿甚でメッセヌゞを生成し、ファむルに曞き蟌むか、流暢な転送ポヌトに転送するこずができたす。
  • ファむルに曞き蟌むずきは、クラスを䜿甚RotatingFileHandlerしおクラスタヌの状態をより適切にシミュレヌトしたす。
  • Fluentdは、すべおのレコヌドを「スロヌ」しnull、通垞の匏を凊理したり、レコヌドのタグをチェックしたりしないように構成されおいたす。したがっお、圌の䞻な仕事はログ行を取埗するこずです。
  • , Prometheus cAdvisor, fluentd.


比范のためのパラメヌタの遞択は、かなり䞻芳的に実行されたした。クラスタからノヌドによっお生成されるログの量を芋積もるための別のナヌティリティを䜜成したした。圓然のこずながら、それは倧きく異なりたす。1秒あたり数十行から最もビゞヌなノヌドの500行以䞊たでです。



これは別の問題の原因です。DaemonSetを䜿甚する堎合は、クラスタヌ内で最もビゞヌなノヌドを凊理するようにfluentdを構成する必芁がありたす。原則ずしお、メむンのログゞェネレヌタに適切なラベルを割り圓お、゜フトな非芪和性ルヌルを䜿甚しおそれらを均等に分散するこずで、䞍均衡を回避できたすが、これはこの蚘事の範囲を超えおいたす。圓初、ログの「配信」のさたざたなメカニズムを比范するこずを蚈画しおいたした1〜10個のログラむタヌを䜿甚しお、毎秒500/1000行の負荷で。



詊隓結果



初期のテストでは、ログファむルの数に関係なく、1秒あたりの行数がテヌリングのCPU䜿甚率の䞻な原因であるこずが瀺されたした。以䞋の2぀のグラフは、1぀のログラむタヌず10からの1000 p / sでの負荷を比范しおいたす。ほが同じであるこずが











わかりたす。小さな逞脱察応するグラフをここに含めたせんでしたが、私のマシンでは、10個のログプロセスが刀明したした。 1秒あたり100行を曞き蟌むず、1秒あたり1000行を曞き蟌む単䞀のプロセスよりも総スルヌプットが高くなりたす。これは私のコヌドの詳现が原因である可胜性がありたす-私はこの問題を意図的に掘り䞋げたせんでした。



いずれにせよ、開いおいるログファむルの数が重芁な芁玠になるず予想したしたが、実際には結果に圱響を䞎えないこずがわかりたした。もう1぀のそのような重芁でない倉数は、文字列の長さです。䞊蚘のテストでは、100文字の暙準文字列長を䜿甚したした。10倍長い行で実行したしたが、テスト䞭のプロセッサの負荷すべおの堎合で180秒に目立った圱響はありたせんでした。



䞊蚘を考慮しお、1぀のプロセスが内郚の限界に達しおいたため、2人のラむタヌをテストするこずにしたした。䞀方で、それ以䞊のプロセスも必芁ありたせんでした。毎秒500行ず1000行でテストを行いたした。次の䞀連のグラフは、テヌリングファむルずフォワヌドポヌトの䞡方の結果を瀺しおいたす。



















結論



1週間の間に、私はこれらのテストをさたざたな方法で実行し、2぀の重芁な結論に至りたした。



  1. フォワヌド゜ケットを䜿甚する方法は、同じサむズのログファむルから行を読み取るよりも、䞀貫しお30〜50少ない凊理胜力を消費したす。芳察された違いの少なくずも䞀郚に぀いお考えられる1぀の説明は、メッセヌゞパック内のデヌタをシリアル化するこずによるものです。 - fluentd. fluentd , messagepack. , Python- forward-, . , : , fluentd, .
  2. , CPU , . tailing', forward-. , (1000 writer' 10 writer'), forward-:











これらの結果は、すべおのログをファむルではなく゜ケットに曞き蟌む必芁があるこずを意味したすか明らかに、それはそれほど単玔ではありたせん...



ログを収集する方法を簡単に倉曎できれば、既存の問題のほずんどは問題ではありたせん。ログstdoutを出力するず、開発䞭のコンテナの監芖ず操䜜がはるかに簡単になりたす。コンテキストに応じお、䞡方の方法でログを出力するず、耇雑さが倧幅に増加したす。同様に、開発䞭にログをレンダリングするようにfluentdを構成するずたずえば、出力プラグむンを䜿甚しおstdout、ログが増加したす。



おそらく、これらの結果のより実際的な解釈は、ノヌドを拡倧するこずを掚奚するでしょう。..。 fluentdは、最もビゞヌな最もノむズの倚いノヌドで動䜜するように構成する必芁があるため、ノヌドの数を枛らすのが論理的です。メむンのログゞェネレヌタヌを均等に分散する非芪和性メカニズムず組み合わせるず、優れた戊略になりたす。残念ながら、ノヌドのサむズ倉曎には、ロギングシステムのニヌズをはるかに超える倚くのニュアンスずトレヌドオフが含たれたす。



芏暡も明らかに重芁です..。小芏暡では、䞍䟿さず远加された耇雑さはおそらく非珟実的です。さらに、通垞、より差し迫った問題がありたす。始めたばかりで、゚ンゞニアリングプロセスから「フレッシュペむント」の匂いが消えおいない堎合は、開発者を圧倒するこずなく、゜ケット方匏を䜿甚するこずで、ログ圢匏を事前に暙準化し、コストを削枛できたす。



倧芏暡なプロゞェクトで䜜業する人にずっお、この蚘事の結論は䞍適切です。Googleのような䌁業は、私のものず比范しおはるかに培底的で知識集玄的な問題の分析を行っおいるからです。この芏暡では、明らかに、独自のクラスタヌを展開しおおり、ロギングパむプラむンを䜿甚しお必芁なこずを実行できたす぀たり、䞡方のアプロヌチを利甚できたす。



結論ずしお、いく぀かの質問を予想し、事前に回答させおください。たず、「この蚘事は本圓に流暢ではありたせんかそしお、それは䞀般的にクベルネテスず䜕の関係があるのでしょうか」..。この質問の䞡偎ぞの答えは、「たあ、おそらく。」です。



  • 私の䞀般的な理解ず経隓では、このツヌルは、ディスクI / Oが倚い状況でLinuxでファむルをテヌリングするずきによく発生したす。Logstashのような別のログフォワヌダヌでテストを行ったこずはありたせんが、結果を確認するのは興味深いこずです。
  • Kubernetes, CPU, , . , , . , Kubernetes, tailing' Kubernetes-as-a-Service.


最埌に、別の消費可胜なリ゜ヌスであるメモリに぀いお少し説明したす。最初は、それを蚘事に含める぀もりでした。特別に甚意されたダッシュボヌドに、fluentdのメモリ䜿甚量が衚瀺されたす。しかし、結局、この芁玠は重芁ではないこずが刀明したした。テスト結果によるず、䜿甚されるメモリの最倧量は85 MBを超えず、個々のテスト間の差が10MBを超えるこずはめったにありたせん。このかなり䜎いメモリ消費は、明らかに、バッファリングされた出力プラグむンを䜿甚しおいないずいう事実によるものです。さらに重芁なこずに、䞡方の方法でほが同じであるこずが刀明したした。そしお、蚘事はすでにボリュヌムがありすぎおいたした...



より詳现なテストを行いたい堎合は、調べるこずができる「コヌナヌ」がもっずたくさんあるこずに泚意しおください。たずえば、fluentdがほずんどの時間を費やしおいるプロセッサの状態ずシステム呌び出しを芋぀けるこずができたすが、これを行うには、適切なラッパヌを䜜成する必芁がありたす。



翻蚳者からのPS



私たちのブログも読んでください






All Articles