How to export system activity information

You already know how to collect and report system activity information, so it is the best time to learn how to export already collected data.

I will use sadf utility to display collected data using multiple different formats. Command invocation is very simple - specify format options, datafile and sar flags.

$ sadf format_options datafile -- sar_flags

Semicolon separated values

Export data using semicolon separated values.

$ sadf -d -s 17:30 -e 18:30  /var/log/sysstat/sa20190413 -- -b
# hostname;interval;timestamp;tps;rtps;wtps;bread/s;bwrtn/s
debian-test;600;2019-04-13 17:45:01 UTC;0.00;0.00;0.00;0.00;0.00
debian-test;600;2019-04-13 17:55:01 UTC;0.08;0.08;0.00;2.12;0.00
debian-test;601;2019-04-13 18:05:01 UTC;0.08;0.08;0.00;4.49;0.00
debian-test;600;2019-04-13 18:15:01 UTC;7.64;7.64;0.00;90.37;0.00
debian-test;600;2019-04-13 18:25:01 UTC;0.00;0.00;0.00;0.00;0.00

Create SVG image

Export data using Scalable Vector Graphics format.

$ sadf -g -s 17:30 -e 18:30  /var/log/sysstat/sa20190413 -- -b
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" width="1060" height="680" fill="black" stroke="gray" stroke-width="1">
<text x="0" y="30" text-anchor="start" stroke="brown">Linux 4.18.0-15-generic (debian-test)     04/13/19        _x86_64_        (8 CPU)
</text>
<g id="g6-0" transform="translate(0,60)">
<rect x="0" y="0" height="300" width="1050"/>
<text x="0" y="20" style="fill: yellow; stroke: none">I/O and transfer rate statistics (1)
<tspan x="795" y="25" style="fill: yellow; stroke: none; font-size: 12px">(Min, Max values)</tspan>
</text>
<polyline points="70,50 70,250 790,250" stroke="white" stroke-width="2"/>
<text x="795" y="50" style="fill: #00cc00; stroke: none; font-size: 12px">tps (0.00, 7.64)</text>
<text x="795" y="65" style="fill: #ff00bf; stroke: none; font-size: 12px">rtps (0.00, 7.64)</text>
<text x="795" y="80" style="fill: #00ffff; stroke: none; font-size: 12px">wtps (0.00, 0.00)</text>
<g transform="translate(70,250)">
<text x="0" y="0" style="fill: white; stroke: none; font-size: 12px; text-anchor: end">0.</text>
<polyline points="0,2.00 720,2.00" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(1,-26.172301)"/>
<text x="0" y="-52" style="fill: white; stroke: none; font-size: 12px; text-anchor: end">2.</text>
<polyline points="0,4.00 720,4.00" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(1,-26.172301)"/>
<text x="0" y="-104" style="fill: white; stroke: none; font-size: 12px; text-anchor: end">4.</text>
<polyline points="0,6.00 720,6.00" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(1,-26.172301)"/>
<text x="0" y="-157" style="fill: white; stroke: none; font-size: 12px; text-anchor: end">6.</text>
<polyline points="0,0 0,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="0" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,0,0)">17:35:01</text>
<polyline points="300,0 300,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="72" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,72,0)">17:40:01</text>
<polyline points="600,0 600,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="144" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,144,0)">17:45:01</text>
<polyline points="900,0 900,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="216" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,216,0)">17:50:01</text>
<polyline points="1200,0 1200,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="288" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,288,0)">17:55:01</text>
<polyline points="1500,0 1500,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="360" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,360,0)">18:00:01</text>
<polyline points="1800,0 1800,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="432" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,432,0)">18:05:01</text>
<polyline points="2100,0 2100,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="504" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,504,0)">18:10:01</text>
<polyline points="2400,0 2400,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="576" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,576,0)">18:15:01</text>
<polyline points="2700,0 2700,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="648" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,648,0)">18:20:01</text>
<polyline points="3000,0 3000,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="720" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,720,0)">18:25:01</text>
<text x="-10" y="30" style="fill: yellow; stroke: none; font-size: 12px; text-anchor: end">UTC</text>
<path d=" M600,0.00 L1200,0.08 L1800,0.08 L2400,7.64 L3000,0.00" style="vector-effect: non-scaling-stroke; stroke: #00cc00; stroke-width: 1$
 fill-opacity: 0" transform="scale(0.240000,-26.172301)"/>
<path d=" M600,0.00 L1200,0.08 L1800,0.08 L2400,7.64 L3000,0.00" style="vector-effect: non-scaling-stroke; stroke: #ff00bf; stroke-width: 1$
 fill-opacity: 0" transform="scale(0.240000,-26.172301)"/>
<path d=" M600,0.00 L1200,0.00 L1800,0.00 L2400,0.00 L3000,0.00" style="vector-effect: non-scaling-stroke; stroke: #00ffff; stroke-width: 1;
 fill-opacity: 0" transform="scale(0.240000,-26.172301)"/>
</g>
<rect x="0" y="310" height="300" width="1050"/>
<text x="0" y="330" style="fill: yellow; stroke: none">I/O and transfer rate statistics (2)
<tspan x="795" y="335" style="fill: yellow; stroke: none; font-size: 12px">(Min, Max values)</tspan>
</text>
<polyline points="70,360 70,560 790,560" stroke="white" stroke-width="2"/>
<text x="795" y="360" style="fill: #ff0000; stroke: none; font-size: 12px">bread/s (0.00, 90.37)</text>
<text x="795" y="375" style="fill: #e85f00; stroke: none; font-size: 12px">bwrtn/s (0.00, 0.00)</text>
<g transform="translate(70,560)">
<text x="0" y="0" style="fill: white; stroke: none; font-size: 12px; text-anchor: end">0.</text>
<polyline points="0,30.00 720,30.00" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(1,-2.213165)"/>
<text x="0" y="-66" style="fill: white; stroke: none; font-size: 12px; text-anchor: end">30.</text>
<polyline points="0,60.00 720,60.00" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(1,-2.213165)"/>
<text x="0" y="-132" style="fill: white; stroke: none; font-size: 12px; text-anchor: end">60.</text>
<polyline points="0,90.00 720,90.00" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(1,-2.213165)"/>
<text x="0" y="-199" style="fill: white; stroke: none; font-size: 12px; text-anchor: end">90.</text>
<polyline points="0,0 0,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="0" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,0,0)">17:35:01</text>
<polyline points="300,0 300,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="72" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,72,0)">17:40:01</text>
<polyline points="600,0 600,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="144" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,144,0)">17:45:01</text>
<polyline points="900,0 900,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="216" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,216,0)">17:50:01</text>
<polyline points="1200,0 1200,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="288" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,288,0)">17:55:01</text>
<polyline points="1500,0 1500,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="360" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,360,0)">18:00:01</text>
<polyline points="1800,0 1800,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="432" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,432,0)">18:05:01</text>
<polyline points="2100,0 2100,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="504" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,504,0)">18:10:01</text>
<polyline points="2400,0 2400,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="576" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,576,0)">18:15:01</text>
<polyline points="2700,0 2700,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="648" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,648,0)">18:20:01</text>
<polyline points="3000,0 3000,-200" style="vector-effect: non-scaling-stroke; stroke: #202020" transform="scale(0.240000,1)"/>
<text x="720" y="10" style="fill: white; stroke: none; font-size: 12px; text-anchor: start" transform="rotate(45,720,0)">18:25:01</text>
<text x="-10" y="30" style="fill: yellow; stroke: none; font-size: 12px; text-anchor: end">UTC</text>
<path d=" M600,0.00 L1200,2.12 L1800,4.49 L2400,90.37 L3000,0.00" style="vector-effect: non-scaling-stroke; stroke: #ff0000; stroke-width: 1
; fill-opacity: 0" transform="scale(0.240000,-2.213165)"/>
<path d=" M600,0.00 L1200,0.00 L1800,0.00 L2400,0.00 L3000,0.00" style="vector-effect: non-scaling-stroke; stroke: #e85f00; stroke-width: 1;
 fill-opacity: 0" transform="scale(0.240000,-2.213165)"/>
</g>
</g>
<!-- Actual canvas height: 680 -->
</svg>

sysstat svg export

JSON format

Export data using JavaScript Object Notation format.

$ sadf -j -s 17:30 -e 18:30  /var/log/sysstat/sa20190413 -- -b
{"sysstat": {
        "hosts": [
                {
                        "nodename": "debian-test",
                        "sysname": "Linux",
                        "release": "4.18.0-15-generic",
                        "machine": "x86_64",
                        "number-of-cpus": 8,
                        "file-date": "2019-04-13",
                        "file-utc-time": "00:00:01",
                        "statistics": [
                                {
                                        "timestamp": {"date": "2019-04-13", "time": "17:45:01", "utc": 1, "interval": 600},
                                        "io": {"tps": 0.00, "io-reads": {"rtps": 0.00, "bread": 0.00}, "io-writes": {"wtps": 0.00, "bwrtn":
0.00}}
                                },
                                {
                                        "timestamp": {"date": "2019-04-13", "time": "17:55:01", "utc": 1, "interval": 600},
                                        "io": {"tps": 0.08, "io-reads": {"rtps": 0.08, "bread": 2.12}, "io-writes": {"wtps": 0.00, "bwrtn":
0.00}}
                                },
                                {
                                        "timestamp": {"date": "2019-04-13", "time": "18:05:01", "utc": 1, "interval": 601},
                                        "io": {"tps": 0.08, "io-reads": {"rtps": 0.08, "bread": 4.49}, "io-writes": {"wtps": 0.00, "bwrtn":
0.00}}
                                },
                                {
                                        "timestamp": {"date": "2019-04-13", "time": "18:15:01", "utc": 1, "interval": 600},
                                        "io": {"tps": 7.64, "io-reads": {"rtps": 7.64, "bread": 90.37}, "io-writes": {"wtps": 0.00, "bwrtn": 0.00}}
                                },
                                {
                                        "timestamp": {"date": "2019-04-13", "time": "18:25:01", "utc": 1, "interval": 600},
                                        "io": {"tps": 0.00, "io-reads": {"rtps": 0.00, "bread": 0.00}, "io-writes": {"wtps": 0.00, "bwrtn":
0.00}}
                                },
                                {
                                }
                        ],
                        "restarts": [
                        ]
                }
        ]
}}

Tab separated values

Export data using tab separated values.

$ sadf -p -s 17:30 -e 18:30  /var/log/sysstat/sa20190413 -- -b
debian-test     600     2019-04-13 17:45:01 UTC -       tps     0.00
debian-test     600     2019-04-13 17:45:01 UTC -       rtps    0.00
debian-test     600     2019-04-13 17:45:01 UTC -       wtps    0.00
debian-test     600     2019-04-13 17:45:01 UTC -       bread/s 0.00
debian-test     600     2019-04-13 17:45:01 UTC -       bwrtn/s 0.00
debian-test     600     2019-04-13 17:55:01 UTC -       tps     0.08
debian-test     600     2019-04-13 17:55:01 UTC -       rtps    0.08
debian-test     600     2019-04-13 17:55:01 UTC -       wtps    0.00
debian-test     600     2019-04-13 17:55:01 UTC -       bread/s 2.12
debian-test     600     2019-04-13 17:55:01 UTC -       bwrtn/s 0.00
debian-test     601     2019-04-13 18:05:01 UTC -       tps     0.08
debian-test     601     2019-04-13 18:05:01 UTC -       rtps    0.08
debian-test     601     2019-04-13 18:05:01 UTC -       wtps    0.00
debian-test     601     2019-04-13 18:05:01 UTC -       bread/s 4.49
debian-test     601     2019-04-13 18:05:01 UTC -       bwrtn/s 0.00
debian-test     600     2019-04-13 18:15:01 UTC -       tps     7.64
debian-test     600     2019-04-13 18:15:01 UTC -       rtps    7.64
debian-test     600     2019-04-13 18:15:01 UTC -       wtps    0.00
debian-test     600     2019-04-13 18:15:01 UTC -       bread/s 90.37
debian-test     600     2019-04-13 18:15:01 UTC -       bwrtn/s 0.00
debian-test     600     2019-04-13 18:25:01 UTC -       tps     0.00
debian-test     600     2019-04-13 18:25:01 UTC -       rtps    0.00
debian-test     600     2019-04-13 18:25:01 UTC -       wtps    0.00
debian-test     600     2019-04-13 18:25:01 UTC -       bread/s 0.00
debian-test     600     2019-04-13 18:25:01 UTC -       bwrtn/s 0.00

XML format

Export data using Extensible Markup Language format.

$ sadf -x -s 17:30 -e 18:30  /var/log/sysstat/sa20190413 -- -b
<sysstat
xmlns="http://pagesperso-orange.fr/sebastien.godard/sysstat"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pagesperso-orange.fr/sebastien.godard sysstat.xsd">
        <sysdata-version>3.4</sysdata-version>
        <host nodename="debian-test">
                <sysname>Linux</sysname>
                <release>4.18.0-15-generic</release>
                <machine>x86_64</machine>
                <number-of-cpus>8</number-of-cpus>
                <file-date>2019-04-13</file-date>
                <file-utc-time>00:00:01</file-utc-time>
                <statistics>
                        <timestamp date="2019-04-13" time="17:45:01" utc="1" interval="600">
                                <io per="second">
                                        <tps>0.00</tps>
                                        <io-reads rtps="0.00" bread="0.00"/>
                                        <io-writes wtps="0.00" bwrtn="0.00"/>
                                </io>
                        </timestamp>
                        <timestamp date="2019-04-13" time="17:55:01" utc="1" interval="600">
                                <io per="second">
                                        <tps>0.08</tps>
                                        <io-reads rtps="0.08" bread="2.12"/>
                                        <io-writes wtps="0.00" bwrtn="0.00"/>
                                </io>
                        </timestamp>
                        <timestamp date="2019-04-13" time="18:05:01" utc="1" interval="601">
                                <io per="second">
                                        <tps>0.08</tps>
                                        <io-reads rtps="0.08" bread="4.49"/>
                                        <io-writes wtps="0.00" bwrtn="0.00"/>
                                </io>
                        </timestamp>
                        <timestamp date="2019-04-13" time="18:15:01" utc="1" interval="600">
                                <io per="second">
                                        <tps>7.64</tps>
                                        <io-reads rtps="7.64" bread="90.37"/>
                                        <io-writes wtps="0.00" bwrtn="0.00"/>
                                </io>
                        </timestamp>
                        <timestamp date="2019-04-13" time="18:25:01" utc="1" interval="600">
                                <io per="second">
                                        <tps>0.00</tps>
                                        <io-reads rtps="0.00" bread="0.00"/>
                                        <io-writes wtps="0.00" bwrtn="0.00"/>
                                </io>
                        </timestamp>
                </statistics>
                <restarts>
                </restarts>
        </host>
</sysstat>

RAW data

Export raw as read from the kernel data.

$ sadf -r -s 17:30 -e 18:30  /var/log/sysstat/sa20190413 -- -b
17:45:01 UTC; tps; 3184; 3185; rtps; 3184; 3185; wtps; 0; 0; bread/s; 49673; 49674; bwrtn/s; 0; 0;
17:55:01 UTC; tps; 3185; 3232; rtps; 3185; 3232; wtps; 0; 0; bread/s; 49674; 50944; bwrtn/s; 0; 0;
18:05:01 UTC; tps; 3232; 3281; rtps; 3232; 3281; wtps; 0; 0; bread/s; 50944; 53642; bwrtn/s; 0; 0;
18:15:01 UTC; tps; 3281; 7866; rtps; 3281; 7866; wtps; 0; 0; bread/s; 53642; 107863; bwrtn/s; 0; 0;
18:25:01 UTC; tps; 7866; 7868; rtps; 7866; 7868; wtps; 0; 0; bread/s; 107863; 107863; bwrtn/s; 0; 0;