UbuntuとCentosの間でSadfを使用するのに問題があります。問題は、日付が両方表示される方法です。
Ubuntu:
root@db1:/usr/local/nagios/libexec/nrpe_local# sadf | head -10
db1.oas3.realmedia.xstrat.us 300 2014-05-15 03-05-01 UTC all %%user 0.14
db1.oas3.realmedia.xstrat.us 300 2014-05-15 03-05-01 UTC all %%nice 0.00
セントース:
[root@ui1 jboss]# sadf | head -5
ui1.oas3.realmedia.xstrat.us 595 1400123401 all %user 1.00
ui1.oas3.realmedia.xstrat.us 595 1400123401 all %nice 0.00
Centosで(エポック時間)を表示するので、Ubuntuでも時間を表示する必要があります。
この問題を解決する構成ファイルが見つかりませんでした。
答え1
マンページを確認して、どのオプションがエポック時間以降の秒数を表示するかを正確に確認する必要があります。sadf
バージョンごとに違いがありますsysstat
。
私のUbuntu 12.04.4 LTSを使う:
$ sadf -V
sysstat version 10.0.3
(C) Sebastien Godard (sysstat <at> orange.fr)
このバージョンでは、エポック時間を表示するオプションは次のとおりです-T
。
-T Display timestamp (UTC - Coordinated Universal Time) in seconds
from the epoch.
しかし、一緒にシステム状態8.1.2-2、このオプションはです-D
。
-D This option is equivalent to option -d below, except that the
timestamp is always expressed in seconds since the epoch
(00:00:00 UTC 01/01/1970).
答え2
Ubuntuで私に役立つオプションは-Tでした。
root@db1:/usr/local/nagios/libexec/nrpe_local# sadf -T | head -10 db1.oas3.realmedia.xstrat.us 300 1400123101 all %%user 0.14 db1.oas3.realmedia.xstrat.us 300 1400123101 all %%nice 0.00
ありがとうございます!
答え3
奇妙な理由で、Gnoucが提案したフラグがシステムに存在しない場合は、いつでもそれを使用して出力をdate
解析してエポック時間に変換できます。sadf
$ sadf | perl -plae '/.+? .+? (.+?) (.+?)/; $d=$1; $t=$2; $d=~s/-/\//g;
$t=~s/-/:/g; $k=`date -d "$d $t $F[4]" +%s`; chomp($k);
s/$F[2] $F[3] $F[4]/$k/'
db1.oas3.realmedia.xstrat.us 300 1400205600 all %%user 0.14
db1.oas3.realmedia.xstrat.us 300 1400205600 all %%nice 0.00
または、フォーマットを完全に維持する必要はありませんが、一部のスペースが失われる可能性がある場合:
$ sadf | while read a b date time zone rest; do
date=$(date -d "${date//-//} ${time//-/:} $zone" +%s);
printf "%s %s %s %s\n" "$a" "$b" "$date" "$rest";
done
db1.oas3.realmedia.xstrat.us 300 1400123101 all %%user 0.14
db1.oas3.realmedia.xstrat.us 300 1400123101 all %%nice 0.00