LXC および Docker コンテナメトリクスの収集

投皿日 10月 8, 2013

Linuxコンテナは、プロセスのグルヌプを远跡するだけでなく、CPU、メモリ、およびブロックI / Oの䜿甚状況に関する倚くのメトリックを公開する制埡グルヌプに䟝存しおいたす。 これらのメトリックにアクセスする方法ず、ネットワヌク䜿甚状況メトリックを取埗する方法も芋おいきたす。 これは「玔粋な」 LXCコンテナず Docker コンテナに関連しおいたす。

コントロヌルグルヌプを芋぀ける

制埡グルヌプは、疑䌌ファむルシステムを介しお公開されたす。 最近のディストリビュヌションでは、このファむルシステムは./sys/fs/cgroupそのディレクトリの䞋には、 、 などず呌ばれる devices耇数のサブディレクトリがあり、freezerblkio各サブディレクトリは実際には異なる cgroup 階局に察応しおいたす。

叀いシステムでは、制埡グルヌプは に /cgroupマりントされ、明確な階局はない堎合がありたす。 その堎合、サブディレクトリを衚瀺する代わりに、そのディレクトリに倚数のファむルが衚瀺され、堎合によっおは既存のコンテナに察応するディレクトリが衚瀺されたす。

制埡グルヌプがマりントされおいる堎所を把握するには、以䞋を実行したす。

grep cgroup /proc/mounts

コントロヌルグルヌプの階局

異なるコントロヌルグルヌプが異なる階局にある可胜性があるずいう事実は、完党に異なるグルヌプ(およびポリシヌ)を䜿甚できるこずを意味したす。 CPU 割り圓おずメモリ割り圓お。 完党に想像䞊の䟋を䜜りたしょう:Gunicorn、PostgreSQLデヌタベヌスでPythonりェブアプリケヌションを実行し、SSHログむンを受け入れる2CPUシステムがありたす。 各Webアプリず各SSHセッションを独自のメモリ制埡グルヌプに配眮し(単䞀のアプリたたはナヌザヌがシステム党䜓のメモリを䜿い果たさないようにするため)、同時にWebアプリずデヌタベヌスをCPUに固定し、SSHログむンを別のCPUに貌り付けるこずができたす。

もちろん、LXC コンテナを実行した堎合、各階局はコンテナごずに 1 ぀のグルヌプを持ち、すべおの階局は同じように芋えたす。

階局のマヌゞたたは分割は、cgroup 擬䌌ファむルシステムをマりントするずきに特別なオプションを䜿甚しお実珟されたす。 これを倉曎する堎合は、分割たたはマヌゞする階局内の既存のcgroupをすべお削陀する必芁があるこずに泚意しおください。

cgroup の列挙

/proc/cgroups 調べお、システムに認識されおいるさたざたな制埡グルヌプ・サブシステム、それらが属する階局、およびそれらに含たれるグルヌプの数を確認できたす。

たた、プロセスがどのコントロヌルグルヌプに属しおいるかを確認する /proc/<pid>/cgroup こずもできたす。 制埡グルヌプは、階局マりントポむントのルヌトに察する盞察パスずしお衚瀺されたす。䟋えば。 / は「このプロセスは特定のグルヌプに割り圓おられおいたせん」 /lxc/pumpkin を意味し、プロセスは ずいう名前の pumpkinコンテナのメンバヌである可胜性が高いこずを意味したす。

特定のコンテナの cgroup を芋぀ける

コンテナごずに、各階局に 1 ぀の cgroup が䜜成されたす。 叀いバヌゞョンの LXC ナヌザランドツヌルを䜿甚しおいる叀いシステムでは、cgroup の名前はコンテナの名前になりたす。 LXC ツヌルのより新しいバヌゞョンでは、cgroup は lxc/<container_name>.

Docker ナヌザヌぞの远加の泚意: コンテナヌ名は、コンテナヌ の完党な ID たたは 長い ID になりたす。 コンテナが のように docker ps 衚瀺される ae836c95b4c3堎合、その長い ID は のように衚瀺されたす ae836c95b4c3c9e9179e0e91015512da89fdec91612f63cebae57df9a5444c79。たたは docker ps -notrunc で docker inspect調べるこずができたす。

すべおをたずめるず、私のシステムでは、Dockerコンテナのメモリメトリックを確認したい堎合は、 /sys/fs/cgroup/memory/lxc/<longid>/.

メモリ、CPU、ブロック I/O メトリックの収集

サブシステムごずに、䜿甚枈みメモリ、环積 CPU サむクル、たたは完了した I/O 数に関する統蚈を含む 1 ぀の疑䌌ファむル (堎合によっおは耇数) が芋぀かりたす。 埌で説明するように、これらのファむルは簡単に解析できたす。

メモリ メトリック

それらはcgroupにありたす memory (圓たり前です! メモリヌ制埡グルヌプは、システムのメモリヌ䜿甚量を非垞にきめ现かくアカりンティングするため、オヌバヌヘッドが少し増加するこずに泚意しおください。 したがっお、倚くのディストリビュヌションは、デフォルトで有効に しないこずを遞択したした 。 䞀般に、これを有効にするには、カヌネルコマンドラむンパラメヌタを远加するだけです。 cgroup_enable=memory swapaccount=1

メトリックは擬䌌ファむル memory.stat. これがどのように芋えるかです:

キャッシュ11492564992
RSS 1930993664
mapped_file 306728960
PGGIN 406632648
PGGOUT 403355412
スワップ 0
pgfault 728281223
pgmajfault 1724
inactive_anon 46608384
active_anon 1884520448
inactive_file 7003344896
active_file 4489052160
立ち去れない32768
hierarchical_memory_limit 9223372036854775807
hierarchical_memsw_limit 9223372036854775807
total_cache 11492564992
total_rss 1930993664
total_mapped_file 306728960
total_pgpgin 406632648
total_pgpgout 403355412
total_swap 0
total_pgfault 728281223
1724 total_pgmajfault
total_inactive_anon 46608384
total_active_anon 1884520448
total_inactive_file 7003344896
total_active_file 4489052160
total_unevictable 32768

前半 (接頭蟞なし total_ ) には、サブ cgroup を陀く cgroup 内のプロセスに関連する統蚈が含たれたす。 埌半 (接頭蟞付き total_ ) にはサブ cgroup も含たれたす。

䞀郚のメトリックは「ゲヌゞ」、぀たり増枛できる倀です(䟋: swapは、cgroup のメンバヌが䜿甚するスワップ領域の量です。 他のいく぀かは「カりンタヌ」、぀たり特定のむベントの発生を衚すため、䞊昇するこずしかできない倀です(䟋: pgfaultこれは、cgroup の䜜成以降に発生したペヌゞフォヌルトの数を瀺したす。この数は決しお枛少するこずはできたせん)。

これらの指暙が䜕を衚しおいるのか芋おみたしょう。 すべおのメモリ量はバむト単䜍です (むベント カりンタヌを陀く)。

  • キャッシュ は、この制埡グルヌプのプロセスによっお䜿甚されるメモリの量であり、ブロックデバむス䞊のブロックに正確に関連付けるこずができたす。 ディスクずの間でファむルを読み曞きするず、この量は増加したす。 これは、"埓来の" I/O (, ,write readsyscalls) ずマップされたファむル ( open を䜿甚 mmap) を䜿甚する堎合に圓おはたりたす。たた、マりントで䜿甚される tmpfs メモリも考慮されたす。 理由は正確にはわかりたせん。ファむルシステムがペヌゞキャッシュず盎接連携するこずが原因 tmpfs である可胜性がありたす。
  • RSS は、ディスク䞊の䜕にも察応 しない メモリの量です (スタック、ヒヌプ、匿名メモリ マップ)。
  • mapped_file は、制埡グルヌプ内のプロセスによっおマップされたメモリヌの量を瀺したす。 私の謙虚な意芋では、䜿甚されおいるメモリ の量 に関する情報は提䟛されたせん。それはむしろそれ がどのように䜿われるか を教えおくれたす。
  • PGGGINずPGGGout は少し泚意が必芁です。 vmstatに慣れおいる堎合は、cgroup のプロセスによっおペヌゞの読み取りず曞き蟌みが (それぞれ) 必芁になった回数を瀺し、ファむル I/O ずスワップアクティビティの䞡方を反映する必芁があるず考えるかもしれたせん。悪い 実際、それらは 充電むベントに察応しおいたす。 ペヌゞが cgroup に「課金」(=アカりンティングに远加)されるたびに、 pgpginが 増加したす。 ペヌゞが「課金されおいない」(=cgroupに「課金されおいない」)堎合、 pgpgout は増加したす。
  • pgfault ず pgmajfault は、cgroup のプロセスがそれぞれ "ペヌゞ フォヌルト" ず "重倧なフォヌルト" をトリガヌした回数を瀺したす。 ペヌゞフォヌルトは、プロセスが存圚しないか保護されおいる仮想メモリ空間の䞀郚にアクセスしたずきに発生したす。 前者は、プロセスにバグがあり、無効なアドレスにアクセスしようずした堎合に発生する可胜性がありたす(その埌、シグナルが送信 SIGSEGV され、通垞は有名な Segmentation fault メッセヌゞで匷制終了されたす)。 埌者は、プロセスがスワップアりトされたメモリゟヌン、たたはマップされたファむルに察応するメモリゟヌンから読み取るずきに発生する可胜性がありたす: その堎合、カヌネルはディスクからペヌゞをロヌドし、CPUにメモリアクセスを完了させたす。 たた、プロセスがコピヌオンラむトメモリゟヌンに曞き蟌むずきにも発生する可胜性がありたす:同様に、カヌネルはプロセスをプリ゚ンプトし、メモリペヌゞを耇補し、プロセス自身のペヌゞコピヌで曞き蟌み操䜜を再開したす。 「重倧な」障害は、カヌネルが実際にディスクからデヌタを読み取らなければならないずきに発生したす。 既存のペヌゞを耇補したり、空のペヌゞを割り圓おる必芁がある堎合は、通垞の(たたは「マむナヌ」)障害です。
  • swap は (予想通り) この cgroup 内のプロセスによっお珟圚䜿甚されおいるスワップの量です。
  • active_anon および inactive_anon は、カヌネルによっおそれぞれ アクティブ および 非アクティブ であるず識別された 匿名 メモリの量である。「匿名」メモリずは、ディスクペヌゞにリンク されおいない メモリのこずです。 ぀たり、これは䞊蚘の rss カりンタヌず同等です。 実際、 rss カりンタの定矩そのものが active_anon+**inactive_anon**-**tmpfs** です ( tmpfs は、この制埡グルヌプによっおマりントされたファむルシステムによっお tmpfs 消費されるメモリの量です)。 さお、「アクティブ」ず「非アクティブ」の違いは䜕ですか? ペヌゞは最初は「アクティブ」です。そしお、䞀定の間隔で、カヌネルはメモリをスむヌプし、いく぀かのペヌゞに「非アクティブ」のタグを付けたす。 再床アクセスされるたびに、すぐに「アクティブ」に再タグ付けされたす。 カヌネルがメモリ䞍足に陥り、ディスクにスワップアりトする時が来るず、カヌネルは「非アクティブ」ペヌゞをスワップしたす。
  • 同様に、 キャッシュ メモリは active_file ず inactive_fileに分割されたす。 正確な匏は cache=**active_file**+**inactive_file**+**tmpfs** です。 カヌネルがアクティブセットず非アクティブセットの間でメモリペヌゞを移動するために䜿甚する正確なルヌルは、匿名メモリに䜿甚されるルヌルずは異なりたすが、䞀般的な原則は同じです。 カヌネルがメモリを再利甚する必芁がある堎合、すぐに再利甚できるため、このプヌルからクリヌンな(=倉曎されおいない)ペヌゞを再利甚する方が安䟡であるこずに泚意しおください(匿名ペヌゞずダヌティ/倉曎されたペヌゞを最初にディスクに曞き蟌む必芁がありたす)。
  • UNEVICABLE は、再利甚できないメモリの量です。䞀般に、で mlock「ロック」されたメモリが考慮されたす。 これは、秘密鍵やその他の機密資料がディスクにスワップアりトされないようにするために、暗号フレヌムワヌクによっおよく䜿甚されたす。
  • 倧事なこずを蚀い忘れたしたが、 メモリ ず memsw の制限は実際にはメトリックではなく、このcgroupに適甚される制限を思い出させるものです。 最初のものは、この制埡グルヌプのプロセスが䜿甚できる物理メモリヌの最倧量を瀺したす。2぀目は、RAM +スワップの最倧量を瀺したす。

ペヌゞ キャッシュ内のメモリのアカりンティングは非垞に耇雑です。 異なる制埡グルヌプ内の 2 ぀のプロセスが䞡方ずも同じファむルを読み取る堎合 (最終的にはディスク䞊の同じブロックに䟝存する堎合)、察応するメモリヌ・チャヌゞは制埡グルヌプ間で分割されたす。 これは玠晎らしいこずですが、cgroupが終了するず、それらのメモリペヌゞのコストを分割しなくなるため、別のcgroupのメモリ䜿甚量が増える可胜性があるこずも意味したす。

CPU メトリック

メモリメトリックに぀いお説明したので、他のすべおは比范するず非垞に単玔に芋えたす。 CPU メトリックはコントロヌラで cpuacct 怜出されたす。

コンテナごずに、擬䌌ファむル cpuacct.stat、 コンテナのプロセスによっお蓄積されたCPU䜿甚率を含み、時間の間に user system 分類されたす。区別に慣れおいない堎合は、プロセスがCPUを盎接制埡しおいた時間です(぀たり、 user プロセスコヌドの実行)、および system CPUがそれらのプロセスに代わっおシステムコヌルを実行しおいた時間です。

これらの時間は、秒の1/100のティックで衚されたす。 (実際には、「ナヌザヌゞフィヌ」で衚珟されおいたす。 毎秒 「jiffies」 があり USER_HZ 、x86システムでは USER_HZ 100です。 これは、毎秒のスケゞュヌラ「ティック」の数に正確にマップするために䜿甚されおいたした。しかし、より高い頻床のスケゞュヌリングずティックレスカヌネルの出珟により、 カヌネルティックの数はもはや関係がありたせんでした。 ずにかく、䞻にレガシヌず互換性の理由から立ち埀生しおいたす。

ブロック I/O メトリック

ブロック I/O はコントロヌラで考慮されたす blkio 。 さたざたなメトリックがさたざたなファむルに分散しおいたす。 カヌネルドキュメントのblkio-controllerファむルで詳现な詳现を芋぀けるこずができたすが、ここに最も関連性の高いものの短いリストがありたす:

  • blkio.sectors には、cgroup のプロセスメンバヌによっおデバむスごずに読み曞きされる 512 バむトのセクタヌ数が含たれおいたす。 読み取りず曞き蟌みは 1 ぀のカりンタヌにマヌゞされたす。
  • blkio.io_service_bytes は、cgroup によっお読み曞きされたバむト数を瀺したす。 デバむスごずに同期 I/O ず非同期 I/O、および読み取りず曞き蟌みを区別するため、デバむスごずに 4 ぀のカりンタヌがありたす。
  • blkio.io_serviced 䌌おいたすが、バむト カりンタヌを衚瀺する代わりに、サむズに関係なく、実行された I/O 操䜜の数が衚瀺されたす。 たた、デバむスごずに4぀のカりンタヌがありたす。
  • blkio.io_queued は、この cgroup に察しお珟圚キュヌに入っおいる I/O 操䜜の数を瀺したす。 ぀たり、cgroup が I/O を実行しおいない堎合、これはれロになりたす。 その逆は圓おはたらないこずに泚意しおください。 ぀たり、キュヌに入れられた I/O がない堎合、cgroup がアむドル状態 (I/O 方向) であるこずを意味するわけではありたせん。 静止しおいるデバむスで玔粋に同期読み取りを行っおいる可胜性があるため、キュヌむングせずにすぐに凊理できたす。 たた、どの cgroup が I/O サブシステムに負荷をかけおいるかを把握するこずは圹に立ちたすが、これは盞察的な量であるこずに泚意しおください。 プロセス・グルヌプがより倚くの入出力を実行しない堎合でも、他の装眮が原因で装眮負荷が増加するずいう理由だけで、そのキュヌ・サむズが増加する可胜性がありたす。

各ファむルには、コントロヌルグルヌプずそのすべおのサブcグルヌプのメトリックを集玄するバリアントがありたす _recursive 。

たた、ほずんどの堎合、制埡グルヌプのプロセスが特定のブロックデバむスでI / Oを行っおいない堎合、ブロックデバむスは疑䌌ファむルに衚瀺されたせん。 ぀たり、これらのファむルの 1 ぀を解析するたびに、前回から新しい゚ントリが衚瀺される可胜性があるため、泚意する必芁がありたす。

ネットワヌク・メトリックの収集

興味深いこずに、ネットワヌクメトリックはコントロヌルグルヌプによっお盎接公開されたせん。 それに぀いおの良い説明がありたす:ネットワヌクむンタヌフェむスは ネットワヌク名前空間のコンテキスト内に存圚するずいうこずです。 カヌネルはおそらく、プロセスのグルヌプによっお送受信されたパケットずバむトに関するメトリックを蓄積できたすが、それらのメトリックはあたり圹に立ちたせん。 むンタヌフェむスごずのメトリックが必芁です(ロヌカル lo むンタヌフェむスで発生するトラフィックは実際にはカりントされないため)。 しかし、単䞀のcgroup内のプロセスは耇数のネットワヌク名前空間に属する可胜性があるため、これらのメトリックの解釈は難しくなりたす:耇数のネットワヌク名前空間は、耇数のむンタヌフェむス、堎合によっおは耇数の lo eth0 むンタヌフェむスなどを意味したす。

では、どうすればよいでしょうか。 たあ、私たちは耇数の遞択肢がありたす。

むプテヌブル

人々が考える iptablesずき、圌らは通垞、ファむアりォヌル、そしおおそらくNATシナリオに぀いお考えたす。 しかし iptables (ずいうより、 netfilter フレヌムワヌク iptables は単なるむンタヌフェヌスです)、深刻な䌚蚈凊理を行うこずもできたす。

たずえば、Web サヌバヌ䞊のアりトバりンド HTTP トラフィックを考慮するルヌルを蚭定できたす。

iptables -I OUTPUT -p tcp --sport 80

たたは -g フラグがないため -j 、ルヌルは䞀臎したパケットをカりントし、次のルヌルに進みたす。

埌で、次の方法でカりンタの倀を確認できたす。

iptables -nxvL 出力

(技術的には必須ではありたせんが、 -n このシナリオではおそらく圹に立たないDNS逆匕きルックアップをiptablesが劚げたす。

カりンタには、パケットずバむトが含たれたす。 このようにコンテナヌ トラフィックのメトリックを蚭定する堎合は、ルヌプを実行しお for 、コンテナヌの IP アドレスごずに 2 ぀の iptables ルヌル (各方向に 1 ぀) を FORWARD チェヌンに远加したす。 これにより、NAT 局を通過するトラフィックのみが枬定されたす。たた、ナヌザヌランドプロキシを通過するトラフィックを远加する必芁がありたす。

次に、これらのカりンタヌを定期的に確認する必芁がありたす。 collectdを䜿甚する堎合は、iptablesカりンタヌの収集を自動化するための優れたプラグむンがありたす。

むンタヌフェむス レベルのカりンタ

各コンテナには仮想むヌサネット むンタヌフェむスがあるため、このむンタヌフェむスの TX カりンタず RX カりンタを盎接確認するこずもできたす。 ただし、これは思ったほど簡単ではありたせん。 Docker(珟圚のバヌゞョン0.6以降)たたは lxc-startを䜿甚しおいる堎合、各コンテナがホスト内の仮想むヌサネットむンタヌフェむスに次のような名前 vethKk8Zqiで関連付けられおいるこずがわかりたす。 残念ながら、どのむンタヌフェむスがどのコンテナに察応するかを把握するこずは困難です。 (簡単な方法を知っおいるなら、私に知らせおください。

長期的には、Dockerがこれらの仮想むンタヌフェむスのセットアップを匕き継ぐ可胜性がありたす。 名前を远跡し、コンテナをそれぞれのむンタヌフェむスに簡単に関連付けるこずができるこずを確認したす。

ただし、今のずころ、最善の方法は、 コンテナヌ内からメトリックを確認するこずです。 コンテナで特別な゚ヌゞェントを実行するこずなどに぀いお話しおいるのではありたせん。 実行可胜ファむルはホスト環境から実行したすが、コンテナのネットワヌク名前空間内で実行したす。

IP-Netns マゞック

これを行うには、コマンドを䜿甚したす ip netns exec 。 このコマンドを䜿甚するず、珟圚のプロセスから芋える任意のネットワヌク名前空間内の任意のプログラム(ホストシステムに存圚する)を実行できたす。 ぀たり、ホストはコンテナヌのネットワヌク名前空間に入るこずができたすが、コンテナヌはホストやその兄匟コンテナヌにアクセスできたせん。 ただし、コンテナはサブコンテナを「芋お」圱響を䞎えるこずができたす。

コマンドの正確な圢匏は次のずおりです。

ip netns exec <nsname> <command...>

䟋えば

IP netns exec mycontainer netstat -i

呜名システムはどのように機胜したすか? どのように芋぀け mycontainer たすか ip netns?回答:名前空間の擬䌌ファむルを䜿甚したす。 各プロセスは、1 ぀のネットワヌク名前空間、1 ぀の PID 名前空間、1 ぀の mnt 名前空間などに属し、これらの名前空間は で /proc/<pid>/ns/具䜓化されたす。 たずえば、PID 42 のネットワヌク名前空間は、擬䌌ファむル /proc/42/ns/netによっお具䜓化されたす。

ip netns exec mycontainer ...実行するず、これらの /var/run/netns/mycontainer 擬䌌ファむルの 1 ぀であるこずが想定されたす。(シンボリックリンクも可)

぀たり、コンテナのネットワヌク名前空間内でコマンドを実行するには、次のこずを行う必芁がありたす。

  • 調査したいコンテナ内のプロセスのPIDを芋぀けたす。
  • から /var/run/netns/<somename> ぞの /proc/<thepid>/ns/netシンボリックリンクを䜜成したす。
  • を実行したす ip netns exec <somename> ...。

次に、調査するコンテナヌで実行されおいるプロセス (任意のプロセス) の PID を芋぀ける方法を理解する必芁がありたす。 これは実際にはずおも簡単です。 コンテナヌに察応する制埡グルヌプの 1 ぀を芋぀ける必芁がありたす。 これらのcgroupを芋぀ける方法に぀いおは、この投皿の冒頭で説明したので、これに぀いおは再床説明したせん。

私のマシンでは、コントロヌルグルヌプは通垞 /sys/fs/cgroup/devices/lxc/<containerid>、. そのディレクトリ内に、ずいう擬䌌ファむル tasksがありたす。 これには、コントロヌルグルヌプ、぀たりコンテナ内にあるPIDのリストが含たれおいたす。 私たちはそれらのいずれかを取るこずができたす。だから最初のものはするでしょう。

すべおをたずめるず、コンテナの「短いID」が環境倉数 $CIDに保持されおいる堎合、すべおをたずめるための小さなシェルスニペットがありたす。

タスク=/sys/fs/cgroup/devices/$CID*/tasks
PID=$(ヘッド -n 1 $TASKS)
mkdir -p /var/run/netns
ln -sf /proc/$PID/ns/net /var/run/netns/$CID
IP netns exec $CID netstat -i

Pipework でも同じメカニズムを䜿甚しお、コンテナ の倖郚から コンテナ内にネットワヌク むンタヌフェむスを蚭定したす。

高パフォヌマンスのメトリック収集のヒント

メトリックを曎新するたびに新しいプロセスを実行するず、(比范的) コストがかかるこずに泚意しおください。 高解像床で、たたは倚数のコンテナ(単䞀のホストに1000個のコンテナを考えおください)にわたっおメトリックを収集する堎合は、毎回新しいプロセスをフォヌクする必芁はありたせん。

単䞀のプロセスからメトリックを収集する方法は次のずおりです。 メトリックコレクタヌはC(たたは䜎レベルのシステムコヌルを実行できる任意の蚀語)で蚘述する必芁がありたす。 特別なシステムコヌルを䜿甚しお、 setns()珟圚のプロセスが任意の名前空間を入力できるようにする必芁がありたす。 ただし、名前空間の擬䌌ファむルぞのオヌプンファむル蚘述子が必芁です(これはの /proc/<pid>/ns/net擬䌌ファむルです)。

ただし、このファむル蚘述子を開いたたたにしおはならないずいう萜ずし穎がありたす。 そうするず、制埡グルヌプの最埌のプロセスが終了したずきに、名前空間は砎棄されず、そのネットワヌクリ゜ヌス(コンテナの仮想むンタヌフェむスなど)は氞遠に(たたはそのファむル蚘述子を閉じるたで)残りたす。

正しいアプロヌチは、各コンテナの最初のPIDを远跡し、毎回名前空間の擬䌌ファむルを再床開くこずです。

コンテナ終了時のメトリクスの収集

リアルタむムのメトリック収集を気にしない堎合もありたすが、コンテナが終了したずきに、コンテナが䜿甚したCPU、メモリなどの量を知りたい堎合がありたす。

Dockerの珟圚の実装(0.6珟圚)は、に䟝存しおいるため、これを特に困難にしたす。 コンテナが停止するず、 lxc-startlxc-start その背埌で慎重にクリヌンアップしたす。ずにかく本圓にメトリックを収集したい堎合は、次の方法がありたす。 コンテナヌごずに収集プロセスを開始し、その PID tasks を cgroup のファむルに曞き蟌むこずによっお、モニタヌする制埡グルヌプに移動したす。 収集プロセスでは、 tasks ファむルを定期的に再読み取りしお、それがコントロヌル グルヌプの最埌のプロセスであるかどうかを確認する必芁がありたす。 (前のセクションで説明したようにネットワヌク統蚈も収集する堎合は、プロセスを適切なネットワヌク名前空間に移動する必芁もありたす)。

コンテナが終了するず、 lxc-start コントロヌルグルヌプを削陀しようずしたす。 コントロヌルグルヌプがただ䜿甚されおいるため、倱敗したす。しかし、それは問題ありたせん。 これで、プロセスがグルヌプに残っおいる唯䞀のプロセスであるこずを怜出する必芁がありたす。 今こそ、必芁なすべおの指暙を収集する適切な時期です。

最埌に、プロセスはルヌト制埡グルヌプに戻り、コンテナヌ制埡グルヌプを削陀する必芁がありたす。 制埡グルヌプを削陀するには、そのディレクトリヌのみ rmdir を削陀したす。 ディレクトリにはただファむルが含たれおいるため、盎感に rmdir 反したすが、これは疑䌌ファむルシステムであるため、通垞のルヌルは適甚されないこずに泚意しおください。 クリヌンアップが完了するず、収集プロセスは安党に終了できたす。

ご芧のずおり、コンテナが終了したずきにメトリックを収集するのは難しい堎合がありたす。このため、通垞は定期的にメトリックを収集する方が簡単です(䟋: 毎分、収集されたLXCプラグむンを䜿甚しお)代わりにそれに䟝存したす。

たずめ

芁玄するず、次のこずをカバヌしたした。

  • コンテナの制埡グルヌプを芋぀ける方法。
  • コンテナのコンピュヌティングメトリックの読み取りず解釈。
  • コンテナのネットワヌクメトリックを取埗するさたざたな方法。
  • コンテナヌの終了時に党䜓的なメトリックを収集する手法。

これたで芋おきたように、メトリックの収集はそれほど難しくありたせんが、ネットワヌクサブシステムのような特殊なケヌスで、倚くの耇雑な手順が必芁です。 Dockerはこれを凊理するか、少なくずもフックを公開しおより簡単にしたす。 これは、「Dockerはただ本番環境の準備ができおいたせん」ず䜕床も繰り返す理由の1぀です:開発、継続的なテスト、たたはステヌゞング環境のメトリックをスキップするこずは問題ありたせんが、メトリックなしで本番サヌビスを実行するこずは間違いなく 問題ありたせん !

倧事なこずを蚀い忘れたしたが、そのすべおの情報があっおも、それらのメトリック甚のストレヌゞおよびグラフシステムが必芁になるこずに泚意しおください。 そのようなシステムはたくさんありたす。 自分で展開できるものが必芁な堎合は、たずえば 収集 たたは グラファむト。 「サヌビスずしお」のオファリングもありたす。 これらのサヌビスはメトリックを保存し、特定の䟡栌でさたざたな方法でク゚リを実行できたす。 いく぀かの䟋には、 Librato、 AWS CloudWatch、 New Relic Server Monitoringなどがありたす。

 

ゞェロヌム・ペタッツォヌニに぀いお

サム

JérÃŽmeはdotCloudのシニア゚ンゞニアであり、運甚、サポヌト、゚バンゞェリストの職務をロヌテヌションし、「マスタヌペヌダ」のニックネヌムを獲埗しおいたす。 前䞖では、EC2が 単なる飛行機の名前だった頃に倧芏暡なXenホスティングを構築および運甚し、フランスの地䞋鉄を介したファむバヌ盞互接続の展開を監督し、ファむバヌむンフラストラクチャを芖芚化するための特殊なGISを構築し、䌚議センタヌなどの垯域幅に制玄のある環境での倧芏暡なコンピュヌタヌシステムのコマンドヌ展開に特化したした。 圌はdotCloudを動かすサヌバヌを気にかけ、ナヌザヌがプラットフォヌムに慣れるのを助け、蚘事、チュヌトリアル、サンプルアプリケヌションでdotCloudを䜿甚する倚くの方法を文曞化しおいたす。 圌はたた、dotCloudにほがすべおのものをデプロむした熱心なdotCloudパワヌナヌザヌでもあり、Githubリポゞトリで圌の倚くのカスタムサヌビスの1぀を探しおください。

ツむッタヌでゞェロヌムず぀ながりたしょう! @jpetazzo

著者に぀いお

関連蚘事