如何以纪元格式显示sadf的时间

如何以纪元格式显示sadf的时间

我在 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

相关内容