Como exibir a hora de sadf no formato de época

3

Eu tenho um problema no sadf entre o ubuntu e o centos. A coisa é como a data é exibida em ambos.

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

Centos:

[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

Eu preciso mostrar o tempo no Ubuntu como é exibido em centos (época da época).

Eu não tive a sorte de encontrar algum arquivo de configuração que pudesse corrigir esse problema.

    
por mijhael3000 15.05.2014 / 18:48

3 respostas

6

Você deve verificar sadf manpage para saber exatamente qual opção exibirá segundos desde o horário da época. Há uma diferença entre as versões de sysstat .

Com meu Ubuntu 12.04.4 LTS:

$ sadf -V
sysstat version 10.0.3
(C) Sebastien Godard (sysstat <at> orange.fr)

Com esta versão, a opção para mostrar a hora da época é -T :

-T     Display timestamp (UTC - Coordinated Universal Time) in  seconds
       from the epoch.

Mas com o sysstat 8.1.2-2 , esta opção é -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).
    
por 15.05.2014 / 19:20
0

No ubuntu a opção que funcionou para mim é -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

Muito obrigado!

    
por 16.05.2014 / 22:03
0

Se, por alguma razão estranha, a bandeira sugerida pelo Gnouc não existir no seu sistema, você sempre pode usar date para analisar a sadf de saída e converter para a hora da época:

$ 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

ou, se você não precisa manter o formato exatamente, mas pode perder alguns espaços em branco:

$ 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
    
por 16.05.2014 / 03:49