ā‰” Menu

How To Add Timestamp to Unix Vmstat Command Output

Question: Vmstat output does not display date and time, which is a pain when trying to store the vmstat output to do some performance analysis.

So, how do I add timestamp to Linux vmstat output ?

Answer: You can display timestamp on every line of the vmstat command output using a simple perl script as shown below.

Default Vmstat output (without timestamp)

$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
 0  0  33308 450080  59020 6757044    1    1   551   148    1     6 26  9 60  5
 0  0  33308 449960  59020 6757044    0    0     0     0 1068  1576  1  1 98  0
 1  0  33308 453928  59020 6757044    0    0     0    48 1049  1628  2  1 97  0
 0  0  33308 454120  59020 6757044    0    0     0     0 1034  1663  2  1 96  0
 0  0  33308 454112  59020 6757044    0    0     0     0 1025  1535  1  1 98  0

Vmstat output with timestamp

Create the following simple timestamp.pl

$ vi timestamp.pl
#!/usr/bin/perl
while (<>) { print localtime() . ": $_"; }

Now pipe the vmstat command output to this timestamp.pl to display the timestamp as shown below.

$ vmstat 1 5 | timestamp.pl
Sat Aug 22 20:50:36 2009: procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
Sat Aug 22 20:50:36 2009:  r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
Sat Aug 22 20:50:36 2009:  2  0  33308 452080  59084 6761140    1    1   551   148    1     6 26  9 60  5
Sat Aug 22 20:50:37 2009:  0  0  33308 454368  59084 6761140    0    0     0     0 1028  1713  2  1 96  0
Sat Aug 22 20:50:38 2009:  0  0  33308 454368  59084 6761140    0    0     0     0 1010  1432  0  0 100  0
Sat Aug 22 20:50:39 2009:  0  0  33308 454368  59084 6761140    0    0     0    12 1021  1481  1  0 99  0
Sat Aug 22 20:50:40 2009:  0  0  33308 457184  59084 6761140    0    0     0     0 1029  1549  1  1 98  0
Add your comment

If you enjoyed this article, you might also like..

  1. 50 Linux Sysadmin Tutorials
  2. 50 Most Frequently Used Linux Commands (With Examples)
  3. Top 25 Best Linux Performance Monitoring and Debugging Tools
  4. Mommy, I found it! ā€“ 15 Practical Linux Find Command Examples
  5. Linux 101 Hacks 2nd Edition eBook Linux 101 Hacks Book

Bash 101 Hacks Book Sed and Awk 101 Hacks Book Nagios Core 3 Book Vim 101 Hacks Book

Comments on this entry are closed.

  • JJ August 28, 2009, 3:22 am

    Thanks for great website.
    Unfortunately I’m unable to get this to work. One part that seems to be missing is following:
    chmod +x timestamp.pl
    But when I type in your command “vmstat 1 5 | timestamp.pl” I get the following error message:
    bash: timestamp.pl: command not found
    What am I doing wrong?

  • NetSpider August 28, 2009, 4:55 am

    [root ~]# vmstat 1 5 | timestamp.pl
    bash: timestamp.pl: command not found

    [root@220 ~]# vmstat 1 5 | perl timestamp.pl
    Fri Aug 28 13:53:23 2009: procs memory page disks faults cpu
    Fri Aug 28 13:53:23 2009: r b w avm fre flt re pi po fr sr ad18 ad20 in sy cs us sy id
    Fri Aug 28 13:53:23 2009: 0 2 0 606280 170548 3308 0 0 1 3041 65 0 0 222 17009 5351 6 2 92

    2-nd variant:

    vmstat 1 5 | ./timestamp.pl

  • NetSpider August 28, 2009, 5:28 am

    another way is to copy script or program to bin catalog

    (csh):
    ~ ~> cp timestamp.pl bin/timestamp
    ~ ~> rehash
    ~ ~> vmstat 1 5 | timestamp

  • Banzet August 28, 2009, 9:12 am

    I hope so:

    vmstat |awk ‘{print system (“date +%D\” \”%H:%M:|tr -d ‘\”\n’\””)$0}’

    RNDr. Michael Banzet

  • Vince August 28, 2009, 9:58 am

    Another way is :

    vmstat 1 5 | awk ‘{print strftime(“%D %H:%M:%S”, systime()) ” ” $0 }’

  • Ulrich Hiller August 28, 2009, 10:12 am

    here is a suggestion for awk in a shell:
    :~> vmstat 1 5 | awk ‘{system(“/bin/echo -n `/bin/date`”); print “: ” $0}’
    Fri Aug 28 17:58:17 CEST 2009: procs ———–memory———- —swap– —–io—- -system– —-cpu—-
    Fri Aug 28 17:58:17 CEST 2009: r b swpd free buff cache si so bi bo in cs us sy id wa
    Fri Aug 28 17:58:17 CEST 2009: 3 0 104 88460 280268 1038164 0 0 67 13 35 30 1 0 99 1
    Fri Aug 28 17:58:18 CEST 2009: 0 0 104 87760 280276 1038168 0 0 0 100 103 248 2 1 97 1
    Fri Aug 28 17:58:19 CEST 2009: 0 0 104 87636 280276 1038168 0 0 0 0 114 235 0 0 100 0
    Fri Aug 28 17:58:20 CEST 2009: 0 0 104 88124 280276 1038168 0 0 0 0 70 160 1 0 99 0
    Fri Aug 28 17:58:21 CEST 2009: 0 0 104 88092 280276 1038168 0 0 0 0 104 231 1 1 99 0

    you can modify the date output with the date command and the vmstat output with awk’s print and printf command (below is only an example for proof of concept – not meant to make sense šŸ˜‰ ):

    :~> vmstat 1 5 | awk ‘{system(“/bin/echo -n `/bin/date +’%A-%D-%H:%M:%S’`”); print ” ” $3 ” ” $4 ” ” $5 ” ” $6}’
    Friday-08/28/09-18:04:09 —swap– —–io—- -system– —-cpu—-
    Friday-08/28/09-18:04:09 swpd free buff cache
    Friday-08/28/09-18:04:09 104 56596 281372 1068124
    Friday-08/28/09-18:04:10 104 55716 281372 1068124
    Friday-08/28/09-18:04:11 104 55596 281372 1068124
    Friday-08/28/09-18:04:12 104 55456 281380 1068124
    Friday-08/28/09-18:04:13 104 55828 281380 1068124

    Ulrich

  • Ulrich Hiller August 28, 2009, 10:26 am

    Ok, Michael’s suggestion is much better than mine.
    I would set the system command out of the print command, because you get an ugly zero at the end of the date. Here is what I mean:
    :~> vmstat 1 5 |awk ‘{print system (“date +%A:|tr -d ā€˜\”\nā€™\””)$0}’
    Friday:0procs ———–memory———- —swap– —–io—- -system– —-cpu—-
    Friday:0 r b swpd free buff cache si so bi bo in cs us sy id wa
    Friday:0 4 0 104 50060 283668 1070152 0 0 67 13 35 30 1 0 99 1
    Friday:0 0 0 104 49476 283676 1070152 0 0 0 100 84 206 2 1 98 1
    Friday:0 4 0 104 49684 283676 1070152 0 0 0 0 115 246 0 0 100 0
    Friday:0 0 0 104 49160 283676 1070152 0 0 0 0 80 256 2 0 99 0

    What I would do:
    :~> vmstat 1 5 |awk ‘{system (“date +%A:|tr -d ā€˜\”\nā€™\””) ; print $0}’
    Friday:procs ———–memory———- —swap– —–io—- -system– —-cpu—-
    Friday: r b swpd free buff cache si so bi bo in cs us sy id wa
    Friday: 2 0 104 49960 283708 1070156 0 0 67 13 35 30 1 0 99 1
    Friday: 0 0 104 49132 283708 1070156 0 0 0 0 98 213 2 0 98 0
    Friday: 3 0 104 49752 283708 1070156 0 0 0 0 110 247 0 0 100 0
    Friday: 0 0 104 49216 283708 1070156 0 0 0 0 87 364 1 1 98 0

    Ulrich

  • Milan Cvejic August 28, 2009, 1:28 pm

    You can do it just in bash and no awk

    vmstat 1 5 | while read line; do echo “`date`$line”; done

  • Ramesh Natarajan September 10, 2009, 11:55 pm

    @All,

    Thanks a lot for sharing your alternative ways to display the timestap on vmstat output. It looks great.

  • mermod February 28, 2012, 6:53 am

    Another solution in Perl:

    vmstat 1 4 | perl -pe ‘print localtime().” “‘