Atom Feed
Comments Atom Feed


Similar Articles

26/04/2012 16:59
MySQL Performance Graphs on Cacti via SNMP
16/10/2012 19:23
vmstat on Cacti via SNMP
24/03/2013 15:44
fail2ban on Cacti via SNMP
24/03/2013 16:19
Detailed process statistics on Cacti via SNMP (processes+)
31/10/2009 14:46
SMART stats on Cacti (via SNMP)
31/10/2009 11:03
Linux (Debian, Ubuntu) SNMP basics

Recent Articles

23/04/2017 14:21
Raspberry Pi SD Card Test
07/04/2017 10:54
DNS Firewall (blackhole malicious, like Pi-hole) with bind9
28/03/2017 13:07
Kubernetes to learn Part 4
23/03/2017 16:09
Kubernetes to learn Part 3
21/03/2017 15:18
Kubernetes to learn Part 2

Glen Pitt-Pladdy :: Blog

iostat on Cacti via SNMP

After a long silence I've finally got round to releasing these templates. The theme is rather simple: take a standard tuning tool and with a tiny bit of scripting deliver it's output via SNMP for Cacti to graph.

This gives you always-on data about the performance of a system and allows unexpected changes to be easily spotted on Cacti graphs.

iostat to SNMP

Like I described previously in my SNMP Basics article, I run a cron job to pick up data and dump it in files where snmpd can pick it up as a low privilege user. I'm doing the same here, except that I'm using it to run iostat in the background to collect data over the polling period.

Download: all the iostat Cacti scripts, files and templates are now on GitHub

Take the data collection script iostat-cron, make this executable and stick it somewhere convenient. I will assume /etc/snmp for this article with the output files in /var/local/snmp. Then add to the SNMP cron job (described previously) some lines to run this in the background:

# background the iostat run
/etc/snmp/iostat-cron /var/local/snmp/iostat &

That will launch iostat in a wrapper which will run for 5 minutes (300 seconds) outputting to a temporary file and rename the temporary file to the name given as the first argument. You can easily alter the script if you poll more/less frequently. Also you can modify the iostat arguments to output per-partition statistics if you require.

Check that the output file is being created and has data in it - it will take 5 minutes from the next cron run before the file is created.

Make the extension script iostat-stats executable and put it somewhere suitable like /etc/snmp which is what we will assume for this article. There are two different variants I know of with the format of the output of iostat: recent versions have additional r_await and w_await columns. Run "iostat -x" to check. Next, to get the data into snmpd add the following to the /etc/snmp/snmpd.conf file if you don't have r_await and w_await columns:

extend iostatdev /etc/snmp/iostat-stats 1
extend iostatmountpoint /etc/snmp/iostat-stats mountpoint
extend iostatrrqms /etc/snmp/iostat-stats 2
extend iostatwrqms /etc/snmp/iostat-stats 3
extend iostatrs /etc/snmp/iostat-stats 4
extend iostatws /etc/snmp/iostat-stats 5
extend iostatrkbs /etc/snmp/iostat-stats 6
extend iostatwkbs /etc/snmp/iostat-stats 7
extend iostatavgrqsz /etc/snmp/iostat-stats 8
extend iostatavgqusz /etc/snmp/iostat-stats 9
extend iostatawait /etc/snmp/iostat-stats 10
extend iostatsvctm /etc/snmp/iostat-stats 11
extend iostatutil /etc/snmp/iostat-stats 12

Or, if you do have r_await and w_await columns:

extend iostatdev /etc/snmp/iostat-stats 1
extend iostatmountpoint /etc/snmp/iostat-stats mountpoint
extend iostatrrqms /etc/snmp/iostat-stats 2
extend iostatwrqms /etc/snmp/iostat-stats 3
extend iostatrs /etc/snmp/iostat-stats 4
extend iostatws /etc/snmp/iostat-stats 5
extend iostatrkbs /etc/snmp/iostat-stats 6
extend iostatwkbs /etc/snmp/iostat-stats 7
extend iostatavgrqsz /etc/snmp/iostat-stats 8
extend iostatavgqusz /etc/snmp/iostat-stats 9
extend iostatawait /etc/snmp/iostat-stats 10
extend iostatrawait /etc/snmp/iostat-stats 11
extend iostatwawait /etc/snmp/iostat-stats 12
extend iostatsvctm /etc/snmp/iostat-stats 13
extend iostatutil /etc/snmp/iostat-stats 14

That simply picks up the column specified from data file when SNMP is queried. Restart snmpd and you should be able to test that with snmpwalk as described in previous articles.

SNMP to Cacti

I have the query xml iostat.xml in /usr/local/share/cacti/resource/snmp_queries/ however if you put it elsewhere then you will need to modify the data query path in the template to match.

Import the Cacti template cacti_host_template_iostat.xml into Cacti and add it to the host you have configured above. Add the graphs and all going well after a couple polls data should start appearing on the graphs.

IMPORTANT: You can only use the "rwawait" graph if your iostat has r_await and w_await columns.

What it looks like

iostat %util statistics on Cacti

iostat avgqu-sz statistics on Cacti

iostat avgrq-sz statistics on Cacti

iostat await statistics on Cacti

iostat merge efficiency statistics on Cacti

iostat rqm/s statistics on Cacti

iostat rw/s statistics on Cacti

iostat svctm statistics on Cacti

iostat rwB/s statistics on Cacti


Gonzalo Image  21/12/2012 16:28 :: Gonzalo

Hi! First of all, thanks so much for this set, I am in the need of getting iostats graphs for some of our database servers and your scripts/ templates seem to be great. I have managed to extend the info to snmpd well, but there is just one thing, the "iostatmountpoint" is displaying some errors like this=

[root@kenny snmp]# ./iostat-stats mountpoint
readlink: invalid option -- h
Try `readlink --help' for more information.
Not mounted
readlink: invalid option -- h

Do you have any idea of what could I be doing wrong? The rest of the options / extensions work perfect.


Glen Pitt-Pladdy Image  21/12/2012 18:35 :: Glen Pitt-Pladdy

Thanks for spotting that! I suspect you have a case that is exposing a bug in the script. I'll take a look and see if I can find what is causing that. Keep an eye on this for more info.

mancy Image  09/01/2013 14:01 :: mancy

Hi same problem here, it works on the mounted md1 raid volume
but gives 'Not mounted' for sda and sdb, which are not mounted and are part of the md1 raid volume.
Pity because the raid volume iostat does not show rrqm/s, await and %util: they report always 0

Glen Pitt-Pladdy Image  09/01/2013 19:19 :: Glen Pitt-Pladdy

Ah! That's interesting. I emailed Gonzalo to get some diagnostic info as I couldn't reproduce the problem on any of the platforms I've got, but never got a reply. It sounds like this may relate to md devices being used directly (ie. without LVM). Let me look into that (may take a few days as I'm real busy) and see if I can reproduce the problem. If I can't then I'll email you some extra diagnostic steps to work out what is going on.


Glen Pitt-Pladdy Image  11/01/2013 07:31 :: Glen Pitt-Pladdy

I now have a VM with md devices but it's still not producing any errors. I've emailed with some extra diagnostics that should tell me at what point it's erroring and waiting for a reply. Reporting "Not mounted" is correct for volumes that aren't mounted, but "readlink: invalid option -- h" would suggest there's something in the mounts and/or iostat output that the script is not coping with properly. Thanks!

Nathan Image  18/01/2013 08:42 :: Nathan

This blog post is super helpful, but if I could suggest one thing... this line seems designed to frustrate: "Restart snmpd and you should be able to test that with snmpwalk as described in previous articles."

As an snmp noob, I do not know hooooow to do this.  And I have no idea what previous articles I should be looking at.  I found your snmp basics post which suggests that if I request an OID of NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatawait".1 (for example), that should get me something, since iostatawait is one of the extend names we just created.  So... how do I do that?  Looking at the snmpwalk manpage suggests this should work (I think): snmpwalk -v 2c -c [my community name] localhost NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatawait".1

But that gives me
NET-SNMP-EXTEND-MIB::nsExtendOutLine.iostatawait.1: Unknown Object Identifier (Index out of range: iostatawait (nsExtendToken))

Nathan Image  18/01/2013 08:43 :: Nathan

Ran out of comment space.  Anyway, what I'm doing probably doesn't even make sense, but I'm rather over my head here having not even heard of snmp this morning.  Could you provide a link to these earlier articles that explain how to test with snmpwalk? Thanks!

Nathan Image  18/01/2013 10:51 :: Nathan

Aha!  A google search found me an answer from one of your comments on another post:

'This is most likely the shell swallowing your "

Try escaping them: \"'

That did the trick.  So I can now verify that I'm getting correct data with snmp.  

Note though that I had to tweak your iostat-stats script a bit because there was an entry in my /proc/mounts list that began with "-hosts", which readlink was interpreting as an option.  (I just routed 2>/dev/null for the readlink line since I have bigger fish to fry at the moment and have to look up how to do anything in shell script.  If you want to update the script, that'd be cool. :) )

Nathan Image  18/01/2013 10:52 :: Nathan

The other part I found tricky as a cacti beginner, in case it helps anyone else, was "Import the above template and add it to the host you have configured above. Add the graphs..."

Importing the template was fairly obvious using 'Import Templates' in the console.  'Add it to the host' was a bit trickier.  You have to go into Devices, click your device, then scroll down to the bottom to the 'Associated Data Queries' section.  Under the 'Add Data Query' dropdown, there should now be one called 'iostat' (from the template added above).  Select it and click add.

Continued next comment...

Nathan Image  18/01/2013 10:53 :: Nathan

To 'Add the graphs', you need to go to 'New Graphs' on the left, or 'Create graphs for this host' if you're still viewing your host under devices.  Under the 'Graph types' dropdown, choose iostat to simplify things.  You should see a Data Query section with a list of Indexes matching your drives and partitions (sda, sda1, sda2, etc), and to the right of that, 'Descriptions', which are the mount points.  If that field isn't there yet, click the little green circle on the right side of the Data Query dark blue header.  (You'll have to wait 5 minutes (or whatever your polling interval is) after setting it up for the data to be there.)  Check the partitions you want to monitor, then choose what you want to graph in the 'Select a graph type' dropdown below.  Click Create.  Repeat for each thing you want to graph.  Wait 5 minutes, and you should see your graphs with initial data under the graphs tab.  Hope that helps someone!

Nathan Image  19/01/2013 09:12 :: Nathan

Ah, didn't see the comments above.  Well, I guess there's your answer.  Hope these comments aren't going into a black hole! ;)

Glen Pitt-Pladdy Image  19/01/2013 13:20 :: Glen Pitt-Pladdy

Nope... just it sometimes takes me a while to get through comments that need to be manually approved. Perhaps my spam checks are a little too paranoid right now :-)

It also took me a little while to get my head around how all fits together, but now I have found a tidy way of doing things I create new templates whenever I find myself short on data to understand an aspect of system performance.

TdM Image  10/02/2013 01:23 :: TdM


I'm running a Debian Squeeze box and trying to get iostat-stats running.
It's giving me an error and can't figure out what's going on. Any idea?

iostat-stats: line 45: [: !=: unary operator expected

Glen Pitt-Pladdy Image  10/02/2013 09:03 :: Glen Pitt-Pladdy

What arguments are you giving it? iostat-stats is intended to be run with specific arguments as per the section of the snmpd.conf file, and if you don't have exactly the right arguments then that may happen - there is no checking of arguments.

Tim Image  10/04/2013 19:17 :: Tim

Re: readlink: invalid option -- h

That error is caused by the '-hosts' line in /proc/mounts.  I had the same problem and made a small change to iostat-stats:

                echo $dev | egrep '^-' > /dev/null
                if [ $? -ne 0 ]; then
                        link=`readlink $dev`

Glen Pitt-Pladdy Image  10/04/2013 23:15 :: Glen Pitt-Pladdy

Thanks for that! I would never have found that since none of my test systems have a "-hosts" entry.

I'll get that with some other fixes in a release shortly.

Glen Pitt-Pladdy Image  14/07/2013 07:30 :: Glen Pitt-Pladdy

I've finally managed to track down one of the remaining errors - came from parsing a particular format of NFS mount. Another problem was discovered relating to SNMP timeouts discovering the mountpoints. The result is that the iostat-stats and iostat-cron scripts have seen a big update with mountpoints now being determined in iostat-cron to avoid any chance of timeouts.

Martin Image  23/07/2013 13:25 :: Martin

Hi there!

I got a problem with your iostat mechanism. I implemented everything needed on one of my hosts and can do a snmpwalk (on my Cacti-host) through all values iostat provides. But when i try to do it in Cacti it self i get (debug-level logging):

07/23/2013 11:10:18 AM - CMDPHP: Poller[0] Host[23] RECACHE DQ[11] OID: NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatdev".1, output: sda
07/23/2013 11:10:18 AM - CMDPHP: Poller[0] Host[23] DS[275] WARNING: Result from SNMP not valid.  Partial Result: U
07/23/2013 11:10:18 AM - CMDPHP: Poller[0] Host[23] DS[275] SNMP: v2:, dsname: iostatutil, oid: NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatutil".1, output: U

It seems he can read the first info (sda), but nothing beyond. But he can on the command-line! What am i doing wrong?

Glen Pitt-Pladdy Image  24/07/2013 06:29 :: Glen Pitt-Pladdy

Hi! The extension script is dead simple - it just lifts the column specified from the stats file. The first thing I would check is what's in the /var/local/snmp/iostat file? How many columns do you have. Do they match with the output of "iostat -x"? Do they match with the snmp columns configured in snmpd.conf (see above)? If different, what OS version are you running?

Martin Image  29/07/2013 07:58 :: Martin

Hmmm... Interesting! /var/local/snmp/iostat has 14 columns, as does iostat -x. But snmpd.conf only has 12 entries, it seems r_await and w_await are missing (i am using Debian Wheezy with Kernel But it should be okay. Look what i can do from my Cacti-host:

<data in second post>

I get all i need, but no in Cacti. And it's all strings. And floating point. Is that OK?

Martin Image  29/07/2013 07:58 :: Martin

# snmpwalk -v 2c -c <cencored> <server> NET-SNMP-EXTEND-MIB::nsExtendOutLine
NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatrs".1 = STRING: 146,04
NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatws".1 = STRING: 217,41
NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatdev".1 = STRING: sda
NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatrkbs".1 = STRING: 10294,88
NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatutil".1 = STRING: 137,30
NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatwkbs".1 = STRING: 8881,94
NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatawait".1 = STRING: 84,60
NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatrrqms".1 = STRING: 0,42
NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatsvctm".1 = STRING: 6,14
NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatwrqms".1 = STRING: 0,81
NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatavgqusz".1 = STRING: 30,89
NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatavgrqsz".1 = STRING: 105,53
NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatmountpoint".1 = STRING: /

Glen Pitt-Pladdy Image  29/07/2013 19:09 :: Glen Pitt-Pladdy

Yup - I've only just put the wheezy updates out this last week so if you configured before that then that's part of what is going on. Extra colnumns doesn't mean missing data though - just that the wrong data will be picked up for the last columns on wheezy.

What does stand out with the snmpwalk you give is that there's commas in the data - that should not happen! I am guessing it's the decimal marker and it would be expected to be a '.' (dot). Cacti may be considering it invalid because of that. Where has the comma come from?

Martin Image  30/07/2013 14:06 :: Martin

The comma is the decimal separator in Germany. I changed your iostat-cron script to include "export LANG=en" before running the iostat. That got rid of the comma and got me a dot which in turn made Cacti accept the data. So it works now, thank you very much! Maybe you should incorporate that in your script (or use sed to convert commas to dots before moving the temp-file to the real file).

Glen Pitt-Pladdy Image  31/07/2013 06:22 :: Glen Pitt-Pladdy

That's really interesting. My script simply takes whatever numbers iostat produces and provides them via SNMP to Cacti. I would have expected if there was some regional formatting like this that Cacti would have been working on the same regional formatting, but it appears not.

The risk if I alter my script to ensure it uses a dot separator is that at some point someone may have a Cacti install that does respect regional formatting and it will just break in a different way. I prefer to leave this fix as something people can do themselves if their version of Cacti has problems with this.


Martin Image  31/07/2013 12:27 :: Martin

Sorry to bother you again, but i believe the "iostat data query xml for Cacti" download link above points to an older version as it does not includes the two new fields, right? The Cacti-template seems to have been modified six days ago but the XML has not, and i can't see how the template would work correctly without a fitting data query (but i am far from being an expert on Cacti!).

Glen Pitt-Pladdy Image  31/07/2013 19:49 :: Glen Pitt-Pladdy

Thanks - you are absolutely right, I missed that one. Should be there now.

Martin Image  01/08/2013 13:31 :: Martin

I got another small problem :-)

On the first box i installed your script i made a change to iostat-cron to report the mountpoint as "/" since he can not find my mounts. But now i have to roll it out company-wide and that looks ugly in cacti. The problem seems to be in line 35, after the first pipe:

path=`grep ^/dev/ /proc/mounts | grep -m  1 "^/[^ ]*/$dev " | cut -d' ' -f2`

Here is what i did to test it:

# grep ^/dev/ /proc/mounts
/dev/disk/by-uuid/<number> / ext4 <options>
/dev/sda3 /mnt/data xfs <options>

# grep ^/dev/ /proc/mounts | grep -m  1 "^/[^ ]*/$dev "
# (no result)

I can not quite decode your second grep, but can/should it catch the mountpoint for /dev/sda3? Or is the partition-number the problem since the device is just "sda" in iostat -x ?

Glen Pitt-Pladdy Image  01/08/2013 19:23 :: Glen Pitt-Pladdy

What this does is iterate through all the devices in the iostat output, trying to find something in /proc/mounts that matches the device or is symlinked to the device. Replace "$dev" in the second grep with a device from the output of iostat and it may make more sense. If it fails to find a match (oh... that's ugly - should have used "-n" and will fix in next release), it then tries to find something in /proc/mounts that symlinks to a device from iostat.

What is very curious is that you get a "disk/by-id" from /proc/mounts - I an unable do get that on my Debian machines:
# mount /dev/disk/by-id/<number> /boot
# grep ^/dev/ /proc/mounts
/dev/mapper/vg00-root / <options>
/dev/sda1 /boot <options>

I suspect that's where it's running into trouble. Has this been upgraded from older Debian, or is it a fresh Wheezy install?

Martin Image  02/08/2013 13:05 :: Martin

I am sorry, i cant't get that information right now, our external provider who had set up the server is out of reach today. Furthermore this is my last day before i go on a tow week vacation. I hope i can provide you with more data after my return.

Glen Pitt-Pladdy Image  04/08/2013 09:06 :: Glen Pitt-Pladdy

I've done an experiment with a modified script to read from a file rather than /proc/mounts so I can give it any devices & mountpoints. I can't get it to fail on my systems. The question that leaves is does the /dev/disk/by-id/<number> symlink to a a device given in the iostat output? If not then that's where it's having problems - what does it symlink to?

Martin Image  03/09/2013 13:59 :: Martin

Hi, i'm back from vacation and a short bout of the flu.

According to our provider this machine was setup freshly with wheezy.

And the UUID-thing comes from the fact that it's actually there in /etc/fstab - never seen something like this before, don't like it at all, but it's not "my" server, so i can't change it. Seems to be valid, syntax-wise, for modern Linuxes. Times sure have changed...

iostat seems to be flummoxed by this as well since it's simply ignoring the UUID-device - even thou it's the root filesystem! I think this special case can not be resolved with your script. I will therefor modify it to fake the correct mountpoint. It's no big deal since the real load we want to see is on a /dev/sda3 mounted as /mnt/data, the root-filesystem is basically sleeping :-)

PS: Your Anti-Spam captcha is no longer displayed in Firefox. IE 8.0 asked my to allow it because it has an invalid security certificate all of a sudden. Maybe you should look into that...

Glen Pitt-Pladdy Image  04/09/2013 19:39 :: Glen Pitt-Pladdy

Hi Martin, thanks for the update. I also updated API addresses for ReCAPTCHA.

I've built a test VM from clean on Wheezy and indeed it does use this syntax - I believe this is a good practice when not using LVM as it works no matter what order devices are detected.

iostat only reports "sda" (main device, not partitions) by default, and this is not mounted (partitions on it are), so behaviour is as expected. If I change iostat-cron to report partitions (add -p to iostat line) then all partitions are reported, and it correctly reports the one mounted as "/" - again correct behaviour.

I can't reproduce the problem you are seeing with the 20130711 version of the scripts I am using, but there is a chance that somehow you got a cached version of one of the scripts or something like that. Could you confirm you are using this version of the scripts?


voytek Image  31/10/2013 10:53 :: voytek

Thanks for the toolkit,
Thanks for how to.

Chris Image  10/04/2015 19:49 :: Chris

I too am very new to SNMP. When I attempt to run the script, I am unable to get snmpwalk or snmpget to retrieve the data. Then I try to run the script, I get a response that is complaining about the MIB search path. To get the info, I have tried both:
snmpwalk -v 2c -c public localhost NET-SNMP-EXTEND-MIB::nsExtendOutLine
snmpwalk -v 2c -c public localhost NET-SNMP-EXTEND-MIB::nsExtendOutLine.\"iostatawait\".1

I am testing this on a non-internet facing VM running Ubuntu (14.04 LTS). I have added the config lines listed above in the article, to the snmpd.conf file. But I am not sure what file I would need to edit to satisfy the error I am seeing. Has anyone seen something like this before?

Chris Image  10/04/2015 19:50 :: Chris

Starts with:
MIB search path: /home/chris/.snmp/mibs:/usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf:/usr/share/mibs/site:/usr/share/snmp/mibs:/usr/share/mibs/iana:/usr/share/mibs/ietf:/usr/share/mibs/netsnmp
Ends with:
NET-SNMP-EXTEND-MIB::nsExtendOutLine: Unknown Object Identifier

Glen Pitt-Pladdy Image  10/04/2015 21:04 :: Glen Pitt-Pladdy

I suspect you have fallen foul of the separation of MIBs from the main snmpd package. This is something that has happened since I wrote the original "SNMP Basics" article, so I've now updated that with a new section which will hopefully explain what you have to do with to get that working.

Let me know if that sorts your problem else we may need to dig a little deeper.

Stakor Image  11/04/2015 17:37 :: Stakor

Well, after installing the snmp-mibs-downloader package, I am now getting the following error:

snmpget -v2c -c public localhost NET-SNMP-EXTEND-MIB::nsExtendOutLine.\"iostatdev\".1
NET-SNMP-EXTEND-MIB::nsExtendOutLine."iostatdev".1 = No Such Object available on this agent at this OID

I am closer, but not there.

Glen Pitt-Pladdy Image  11/04/2015 18:12 :: Glen Pitt-Pladdy

Agreed, that's definitely progress. I suspect the next thing is that with the priveledge level (certainly the defaults as it ships) you will not have permission to NET-SNMP-EXTEND-MIB::nsExtendOutLine hence objects below this will not be visible. I tend to always use v3 for my own stuff (has authentication and encryption) but for <v3 you may need to uncomment the following line in /etc/snmp/snmpd.conf and then restart snmpd:

rocommunity public  localhost

See the associated comment above that line - it allows full access rather than the limited access of the next line below it.

Jorge Huerga Image  07/05/2015 08:46 :: Jorge Huerga

what Martin@30/07/2013 said is important, it happened to me again, i'm using spanish environment and values did not work. Just changing iostat-cron file adding "export LANG=en_US" at the beggining it gathers iostats well formed for cacti's parser.

Glen Pitt-Pladdy Image  07/05/2015 21:06 :: Glen Pitt-Pladdy

I don't have any systems to test this on so I rely on feedback from those who do. The one thing I was expecting was that language settings (and hence decimal behaviour) between the monitored system and Cacti to be consistent, and since the scripts don't alter number formats but simply pass them through I was expecting compatibility. What I am unclear on from feedback at this stage is if Cacti is using a fixed number format, or if there is more going on.

I have also tried on both Debian and Ubuntu systems setting LANG=es_ES and LANG=de_DE and all result in the same number format from iostat. This leads me to think that there is more information that I need to fully understand this without breaking other things by making a change. Could you let me know the exact distro, versions, etc. you are using.

Are you human? (reduces spam)
Note: Identity details will be stored in a cookie. Posts may not appear immediately