我在 ubuntu 和 centos 之间使用 Sadf 时遇到问题。问题在于日期在两者中的显示方式。
乌班图:
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
我需要在 ubuntu 中显示时间,因为它在 centos 中显示(纪元时间)。
我没有幸运地找到一些可以解决此问题的配置文件。
答案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