コンテナ名のプレフィックスごとにDocker統計をグループ化する方法は?

コンテナ名のプレフィックスごとにDocker統計をグループ化する方法は?

docker stats --no-streamコンテナプレフィックスでグループ化し、RAM、CPU、ネットワーク、IOの合計を表示するにはどうすればよいですか?

コマンドの最初の2つの列が次のようになるdocker stats --no-streamと思う場合:

CONTAINER ID   NAME
9b0ef23b9c11   CompanyOneDatabase
e8bd20985752   CompanyOneAdminer
0931f3ece839   CompanyOneSite
ecbf58f6373c   CompanyOneApi
61a5c5853061   CopmanyTwoDatabase
545f6f7d6f03   CopmanyTwoAdminer
28c026a8b048   CopmanyTwoSite
358a1791c233   CopmanyTwoApi
e31c842b7a35   CopmanyTwoAdminPanel
e31c842b7a35   CopmanyTwoAdminApi

この結果をどのように取得できますか?

CompanyOne RAM_SUM CPU_SUM Network_SUM IO_SUM
CopmanyTwo RAM_SUM CPU_SUM Network_SUM IO_SUM

~からこの問題そしてアッこのスクリプトを思い出しましたが、うまくいきません。

#!/bin/bash

docker stats --no-stream | awk '/CompanyOne/  {print $3, $4, $8, $11}' | xargs awk '{
    for (i=2; i<=NF; i++) {
        sumcols[i]+= $i; sumrows+= $i 
    }; print $0, sumrows
}
END { for (x in sumcols)
         { printf SEP sumcols[x]; SEP=FS };
     print ""
}' infile

デフォルトでは、シェルでマッピング/縮小を実行する必要があります。どのように実装できますか?

修正する:これはVPSインスタンスの1つの実際のサンプルです。プライバシー保護のために、会社名は次の文字に置き換えられました。

https://textuploader.com/tdftd

答え1

私はそれを知っています

count.awk:

NF == 1 {
   ram[$1] = cpu[$1] = network[$1] = io[$1] = 0 ;
}
NF > 1 {
   for (r in ram ) 
       if (substr($2,1,length(r)) == r ) {
          ram[r]+=$3 ; cpu[r]+=$4 ; network[r] += $8 ; io[r] += $11 ;
   }
}
END { for (r in ram )
       printf "%-25s %6.2f %6d %6d %6d\n",r,ram[r],cpu[r],network[r],io[r] ; 
    }

会社のリストが必要です(サンプルにあります)。

Aaaaaaaa
Bbbbbbbbbbb
Cccccccccc
Ddddddddddd

と言う

docker stats --no-stream | awk -f count.awk l -

これは

Bbbbbbbbbbb                 0.25   1071   1235    360
Aaaaaaaa                    0.27   1118   2674    382
Ddddddddddd                 0.23   1372   3310    432
Cccccccccc                  0.24   1183   2388   1302
  • フォーマット文字列( "%-25s%6d%6d%6d%6d \ n")を調整して、より多くまたは少ないスペースを提供できます。
  • 各会社が常に同じコンテナ在庫を保有している場合は、手動在庫を避けることができます。
  • コメントで指摘したように、docker stats書式文字列()を指定すると、--format=" "必須フィールドのみが印刷されます。
  • 地域によっては awk に電話する必要があります。LC_NUMERIC=C awk -f ...

関連情報