nmonchart - webpage graphs from nmon data
|nmonchart is a Korn shell script for AIX or Linux to convert nmon collected files to a webpage (.html) including Google Chart and |
- nmonchart <nmon-file> <output-file>.html
- nmonchart blue_150508_0800.nmon blue_150508_0800.html
or you could put the .html straight on to your website (assuming Apache is using /var/www/html)
- nmonchart blue_150508_0800.nmon /var/www/html/blue_150508_0800.html
Here is a simple small sample file so you can see what the graphs look like:
- sampleC.html - small sample and quick to load but some data faked to make the graphs look good (not largely full of zeros).
- sampleD.html - large real life sample and can take a few seconds to load
- Used the nmonchart version 31 like this:
- ./nmonchart sampleC.nmon sampleC.html
- ./nmonchart sampleD.nmon sampleD.html
- Both of these and the original .nmon files are in the download files below for you to try.
|nmonchart31.tar||Current version 31 - 9th Dec 2016 |
- Fix for Top Processes sort arguments for Linux which handles -t, differently resulting in not having the Top 20 processes on Linux.
- Fix Linux machines with no disks reported in AAA,disks,0 line - we skip graphing the disks.
- Added sampleD.nmon and sampleD.html as a much larger & more interesting set of nmon stats.
- Note: sampleC had some stats faked up my me!
|nmonchart30.tar||Version 30 - 22nd Sept 2016 |
Fix for running the nmonchart Ksh script on Linux. AIX has "print -n" option but Linux does not.
|nmonchart29.tar||Version 29 - 21st July 2016|
|Comments on v29||New Features: for nmonchart version 29|
Zoom In and Out added - thanks to Ivan Goncharov for the hint
- Left-click and drag the mouse to highlight an area to Zoom then when you let go it will Zoom In
- Right-click to Zoom Out (reset) and see the whole graph again
|nmonchart28.tar||Version 28 - 6th July 2016|
|Comments on v28||New Features: for nmonchart version 28|
1) Added PROCCOUNT (count of processes) as this was release via an AIXpert Blog about nmon External Data Collectors
2) Added MORE1 and MORE3 examples for people adding their own stats.
3) Buttons for adapter typo fixed
|nmonchart27.tar||Version 27 - 3rd March 2016|
|Comments on v27||New Features: |
The buttons labels are upper and lowercase = look nicer
Added the nmon Configuration button to pop-up a window with the AAA and BBB data
Unfortunately, this highlights browser behaving differently
- Firefox no scroll bars so use PageDown
- Chrome has scroll bars
- Internet Explorer I get a blank windows but it works for other people
If you do not want the Config button (it does add to the .html size) set
wantCONFIG=0 near the top of the nmonchart script - =1 means we want it.
The Top Process Summary and Top Commands Buttons moved up at the top line to save space
|nmonchart25.tar||12th Feb 2016|
|Comments on v25||New Graphs: |
- Disk Service time in milli-seconds
- Disk Read Service time in milli-seconds
- Disk Write Service time in milli-seconds
- Disk Wait time in milli-seconds
You have to switch the collecting of these stats on by running nmon with the -d option
And this generates extra line in the nmon file starting with DISKSERV DISKREADSERV DISKWRITESERV DISKWAIT
|nmonchart24.tar||15th Jan 2016|
|Comments on v24||New Graphs: |
1) Now supported User Defined Disks Groups - good for nmon for Linux -g auto
2) POWER8 S822LC can have NVidia GPU adapters - GPU stats: GPU Util, memory Util, temperature, Watts and GPU MHz
3) Linux Utilisation all 10 stats: user, nice, system, idle, wait for IO, steal, irq, soft irq, guest and guest nice
|nmonchart23.tar||1st Dec 2015|
|Comments on v23||Small change in handling November and December dates |
- Google chart decided Nov month as 010 was in binary!
Bug identified and fix found by Clifford Weinmann - many thanks
Plus more comments in the code.
|nmonchart22.tar||Initial Release - 8th May 2015|
| || || |
| || || |
| || || |
| || || |
| || || |
| || || |
| || || |
|nmon version 16 additional stats |
and nmonchart 24 graphs
| || |
|All ten Linux Utilisation stats||MHz changing on a S822LC|| |
| || || |
|nmon version 16 Nvidia GPU support on S822LC|| || |
|GPU CPU Utilisation||GPU Memory Utilisation||GPU Temperature|
| || || |
|GPU Electrical Watts Used||GPU MHz|| |
| || || |
|nmon Disk Group Graphs||Captured on nmon for Linux with nmon -f -g auto |
So its only disks and the disk partitions
|DG busy, |
DG read, DG write,
DG block size & DG Xfers
| || || |
| || || |
| || || |
|nmon Disk Service & Wait Time||Captured on nmon for AIX with nmon -f -d||Disk Service Time, Disk Wait Time, |
Service Read Time & Service Write Time
| || || |
| || || |
|Version 27 new buttons AIX||New buttons Linux||Configuration Details pop-up|
| || || |
README for nmonchart 22 by Nigel Griffiths
The Korn shell script file nmonchart transforms .nmon performance capture files in to .html files for a webserver site.
If your .nmon is called hostname_date_time.nmon and the website pages are at /webpages/docs then use it like this:
./nmonchart hostname_date_time.nmon /webpages/docs/hostname_date_time.html
Then nmonchart Korn shell script needs the Korn shell installed.
- it has NOT been tested on Csh or bash.
AIX and Linux have Korn Shell called ksh - if your Linux does not have it you should install it.
The script works out if it is running on AIX or Linux and makes two changes based on that.
- see the top 10 lines for this.
nmonchart is a fairly simple Korn shell, grep, sed and awk.
For data that is in fixed format like physical CPU, run queue and memory stats in the nmon output it is simple to pick out the column and graph it.
For data that is not fixed format as it depends on the resources like disk, network, CPUs it is more complex as it has to workout the number of header line (the resource names) and data lines.
The graphs like TOPSUM and TOPCMD are quite tricky.
For testing I have supplied a sample nmon file called: sampleC.nmon and a sample output file called: sampleC.html
which was generated using the following command: ./nmonchart sampleC.nmon sampleC.html
Examine the sample.html to find out how the data and graphs are generated.
- The Google-chart library (directly from the web) is used to generate the graphs
- - find more information here https://developers.google.com/chart/
- - it has lots of functions and pretty graphs
- then for each graphs
- - There is the data in an array format and the ZZZ data transformed in to a Java date format
- - Then the chart drawing options and graph instructions
Output file size
Also note nmonchart output files are typically much smaller than the original nmon file.
Something like 20% of the size.
This is unlike the nmon Analyser file output which can typically be twice the size.
Summary of the graphs
- PHYSICAL_CPU - PhysicalCPU, VirtualCPU and entitlement (AIX only LPAR stats))
- POOLIDLE - If switched on at the LPAR level PoolIdle and Pool CPU count (AIX only
- CPU_UTILisation - User%, System%, Wait% and Idle%
- CPU_USE - Logical CPU Core Use (Power SMT or x86 Hyper-threads) Average(User%+System%)
- RUNQ - Run Queue in number of processes
- PSWITCH - Process Switches as the kernel rns different programs
- SYSCALL - Systems calls of processes requesting Kernel operations - Total and read, write calls
- READWRITE - Read and Write System calls only
- FORKEXEC - Systems call fork (duplicate a process) and exec (overwrite current process with a new program)
- FILEIO - System call - number of bytes on the read + write system call - includes disks, network sockets and pipes
- REALMEM - Total RAM (MB) and Free RAM (MB) (AIX only)
- VIRTMEM - Virtual memory (paging space) Total (MB) and Free (MB) (AIX only)
- MEM_LINUX - Total RAM, Free RAM (MB), and other Linux memory stats (Linux Only)
- SWAP_LINUX - Swap size (MB) and Swap Free (MB (Linux only)
- FSCACHE - File system Cache (numperm) size in percent with minperm% and maxperm%
- PAGING - Paging space: pages in (pgin) and out (pgout) plus File system paging: in (pgsin) and out (psout)
- SWAPIN - Process swap back in to memory per second
- TOPSUM - If your nmon file includes TOP process (nmon -t or nmon -T) - Bubble diagram of top process by total CPU cycles, total I/O KB and max Memory size
- horizontal axis = CPU cycles in total
- vertical axis the I/O generated this could be network, disk, pipes, sockets
- size of the bubble is the memory size
- TOPCMD - If your nmon file includes TOP process (nmon -t or nmon -T) - top 15 commands nd their CPU use over time.
- NET - Network throughput read and write for each network in KBytes per second
- NETPACKET - Numbers of read and write packets per second for each network
- NETSIZE - The average number of bytes in each packet for each network read and write
- ADAPT_KPS - Throughput in KBytes per second read and write for each disk adapter
- ADAPT_TPS - Transactions per second read and write for each disk adapter
- DISKBUSY - Disk busy percentage for each disk - Stacked lines
- DISKBUSYu - Disk busy percentage for each disk - Unstacked lines
- DISKREAD - Disk read throughput in KBytes per second for each disk - Stacked lines
- DISKREADu - Disk read throughput in KBytes per second for each disk - Unstacked lines
- DISKWRITE - Disk write throughput in KBytes per second for each disk - Stacked lines
- DISKWRITEu - Disk write throughput in KBytes per second for each disk - Unstacked lines
- DISKBSIZE - Disk block sizes
- DISKXTER - Disk Transfers per second
- JFS - Journaled File System Percent Full
- IPC - Interprocess Communication meaning Semaphores and messages queues.
- DGBUSY - Disk Group busy percentage for each disk - Stacked lines
- DGBUSYu - Disk Group busy percentage for each disk - Unstacked lines
- DGREAD - Disk Group read throughput in KBytes per second for each disk - Stacked lines
- DGREADu - Disk Group read throughput in KBytes per second for each disk - Unstacked lines
- DGWRITE - Disk Group write throughput in KBytes per second for each disk - Stacked lines
- DGWRITEu - Disk Group write throughput in KBytes per second for each disk - Unstacked lines
- DGBSIZE - Disk Group block sizes
- DGXTER - Disk Group Transfers per second
- MHZ - Main CPU MHz for machines that vary these CPU clock frequency
- CPUUNTIL_ALL - for Linux it covers all 10 CPU matrix stats
- GPU_UTIL - NVidea GPU stats, GPU CPU Utilisation percentage
- GPU_MEM- NVidea GPU stats, GPU Memory Utilisation percentage
- GPU_TEMP - NVidea GPU stats, Temperature in C
- GPU_WATTS - NVidea GPU stats, Electricity Input
- GPU_MHZ - NVidea GPU stats, GPU MHz
- DISKSERV - Disk Service time in milliseconds
- DISKREADSERV - Disk Service time for Reads in milliseconds
- DISKWRITESERV - Disk Service time for Writes in milliseconds
- DISKWAIT - Disk Wait time in milliseconds
Graphs not supported
- More than 150 Disks
- You have the adapter view for overall Disk stats.
- Data files with crazy numbers of disks in the thousands are just impossible or graph or manage (IMHO).
- The first 150 plus the adapter totals is a good compromise.
- Use Disk Groups to reduce the complexity. When starting nmon use -g dgfile or on nmon for Linux -g auto to at least remove the partition stats.
- Personally, we should get the disk subsystems to do the I/O spreading work and hid a disk mess from the UNIX / Linux System admin team.
Graphs that are not going to happen and why?
- Individual Logical CPU Utilisation (up to 1536 with the new E880 with 192 cores)
- Mostly pointless and misleading - they are time sharing the physical CPU cores.
- Better to study the VM LPAR physical CPU use and UTIL graphs to check the system to user time ratio.
Adding new graphs
- I am interested in hearing you ideas on new graphs you would like to have.
- They need to add value for most nmon users
- Adding graphs from the nmon file is pretty easy as we have already worked though the issues of most formatting options
- So it is a cut'n'paste rename the graph and make minor formatting changes for the column, don't forget the button line
at the bottom.
- Yet more disks graphs for stupidly high numbers of disks is not a good idea. We could give an option to find the top 20 over used disk names!
nmonchart created web pages or Graph failures
If you transform the nmon data but the webpage does not work - what should you do?
- Feel free to send me the original nmon file to investigate
- Mostly, the webpage will probably display OK but the buttons will not work
- Sometimes the first few graphs work but later in the page ones will not do anything - this is a good indicator of where the syntax issue is in the file.
- If something like the number of disks changes during the collecting of data then you will find the disk buttons and later buttons will not work.
- The nmon data collect does NOT handle this by design. This is to reduce nmon CPU time by a large amount.
- You could go looking at the .html file looking for oddly formatted lines - I have tried to indent the Java script code to make this possible.
- If you work a fix please email the original and the fixed nmonchart scripts.
Testing of nmonchart
Using the internal to IBM website we had more than 200 nmon files to test.
- Current AIX 6 and 7
- Back dated AIX 6 and 7 including some with nmon errors of 5 years ago
- Old AIX 5 files - mostly to check utilisation before upgrading to POWER8
Current Linux on Power from SUSE, Ubuntu and Red Hat
Current Linux on x86 and x86_64 from SUSE, Ubuntu and Red Hat and also other hardware like ARM.
Other Linux Distro's and some older releases too.
I would like more examples from Mainframe and Linux Distro's like Fedora OpenSUSE, Debian etc. and collected by nmon 15 from within a VM especially overworked machines showing CPU Steal utilisation time.
On strange, rare or older nmon files a lot of work has gone in to support oddly formatted data
- nmonchart is now pretty robust ... unless you know differently
Upload and Generate Graphs Website
IBMers can use this internal site:
This is just a starter for ten - you will be required to do significant work.
You will have to know HTML, scripting and a little PHP.
I am not offering hand holding support to get your working.
I set up a crude upload your nmon file webpage and a cron job to create the .html files and a further script to generate a webpage to list the resulting .html files listed by hostname and then the date and listing the OS.
- nmon_upload.html - the upload webpage
- nmon_upload.php - the PHP that actually uploads the file
- nmonchart_cron - the cron job that runs nmonchart on new uploads and generated the webpage of hosts and graphs.
This is provided "as is" but comes with loads of assumptions in the code:
- My apache website /webpages/docs
- the resulting .html are placed here /webpages/docs/nmonchart
- the cron generate index.html of graphs here /webpages/docs/nmonchart/index.html
- the uploads end up here /webpages/docs/nmon_upload
- the final place for the .nmon files /home/nag/nmoncharttmp
I may try to clean these up and make them generic.
I would actually like some help doing a much better job and the above has a 8 MB limit and is slow and
I would like a multiple file upload system.
The 60 second cron job is also crude.
The index.html needs to automatically refresh once a minute or so.
I actually have a budget to run a WWW upload website to help those not interested in setting up their own.
- expect more information as soon as I can set this up.
Cheers Nigel Griffiths