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つの実際のサンプルです。プライバシー保護のために、会社名は次の文字に置き換えられました。
答え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 ...