[ZBX-4671] Maximum length of calculated item formula Created: 2012 Feb 17  Updated: 2017 May 30  Resolved: 2012 Apr 23

Status: Closed
Project: ZABBIX BUGS AND ISSUES
Component/s: Server (S)
Affects Version/s: 1.8.9
Fix Version/s: 2.0.0rc4

Type: Incident report Priority: Blocker
Reporter: Attilla de Groot Assignee: Unassigned
Resolution: Fixed Votes: 0
Labels: calculateditems
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Linux Debian, Mysql


Attachments: File lrace_r25479_trunk_debian603.log.tar.bz2     File zabbix.1.8.diff     File zabbix.trunk.diff     Text File zabbix_server_r25479.log    
Issue Links:
Duplicate

 Description   

In our setup we would like to have total traffic statistics for a switch. This is something very important to us, because these statistics might indicate a bigger issue that isn't noticeable on individual traffic statistics.

To accomplish this we have to add all traffic stat items of the applicable ports in a calculated item. It seems however that there is a maximum length in the formula field for a calculated item. The formula is accepted by the frontend and API, but the items become unsupported with the following messages:

2916:20120217:102745.550 item [stub-tel-220.ams-ix.net:testcust[all,bits,out]] became not supported: Format error or unsupported operator. Exp: [last("if[24]
2918:20120217:101244.067 item [stub-tel-220.ams-ix.net:testcust[all,bits,in]] became not supported: Format error or unsupported operator. Exp: [la]

You can see that is is a maximum number characters somewhere and not the actual number of items, because the formula is cut off in different places for the different calculated items. [if[x/x],bits,in] can hold more items, because it key length is one character less than [if[x/x,bits,out]. It seems there is a limit at 2048 characters.

Original formulas:

+last("if[7/1,bits,out]")+last("if[22/7,bits,out]")+last("if[2/1,bits,out]")+last("if[19/2,bits,out]")+last("if[7/2,bits,out]")+last("if[3/1,bits,out]")+last("if[3/3,bits,out]")+last("if[19/3,bits,out]")+last("if[8/3,bits,out]")+last("if[1/4,bits,out]")+last("if[8/1,bits,out]")+last("if[3/4,bits,out]")+last("if[8/2,bits,out]")+last("if[2/2,bits,out]")+last("if[24/5,bits,out]")+last("if[21/3,bits,out]")+last("if[24/2,bits,out]")+last("if[19/6,bits,out]")+last("if[22/3,bits,out]")+last("if[5/2,bits,out]")+last("if[17/1,bits,out]")+last("if[17/2,bits,out]")+last("if[17/4,bits,out]")+last("if[17/7,bits,out]")+last("if[20/6,bits,out]")+last("if[17/5,bits,out]")+last("if[21/1,bits,out]")+last("if[22/5,bits,out]")+last("if[17/6,bits,out]")+last("if[19/1,bits,out]")+last("if[17/3,bits,out]")+last("if[20/1,bits,out]")+last("if[18/5,bits,out]")+last("if[23/8,bits,out]")+last("if[18/8,bits,out]")+last("if[24/6,bits,out]")+last("if[18/6,bits,out]")+last("if[18/7,bits,out]")+last("if[21/8,bits,out]")+last("if[6/1,bits,out]")+last("if[2/4,bits,out]")+last("if[23/6,bits,out]")+last("if[22/8,bits,out]")+last("if[1/1,bits,out]")+last("if[1/2,bits,out]")+last("if[9/1,bits,out]")+last("if[3/2,bits,out]")+last("if[4/4,bits,out]")+last("if[4/2,bits,out]")+last("if[5/1,bits,out]")+last("if[5/4,bits,out]")+last("if[6/2,bits,out]")+last("if[6/3,bits,out]")+last("if[7/3,bits,out]")+last("if[8/4,bits,out]")+last("if[21/2,bits,out]")+last("if[21/4,bits,out]")+last("if[21/7,bits,out]")+last("if[20/8,bits,out]")+last("if[22/2,bits,out]")+last("if[22/4,bits,out]")+last("if[24/1,bits,out]")+last("if[22/6,bits,out]")+last("if[17/8,bits,out]")+last("if[19/5,bits,out]")+last("if[18/4,bits,out]")+last("if[19/4,bits,out]")+last("if[19/7,bits,out]")+last("if[20/2,bits,out]")+last("if[6/4,bits,out]")+last("if[24/4,bits,out]")+last("if[20/3,bits,out]")+last("if[20/4,bits,out]")+last("if[23/3,bits,out]")+last("if[23/5,bits,out]")+last("if[7/4,bits,out]")+last("if[18/1,bits,out]")+last("if[5/3,bits,out]")+last("if[4/1,bits,out]")+last("if[24/7,bits,out]")+last("if[18/2,bits,out]")+last("if[24/8,bits,out]")+last("if[23/7,bits,out]")+last("if[21/6,bits,out]")+last("if[23/1,bits,out]")+last("if[23/2,bits,out]")+last("if[18/3,bits,out]")+last("if[22/1,bits,out]")+last("if[4/3,bits,out]")+last("if[2/3,bits,out]")+last("if[1/3,bits,out]")+last("if[19/8,bits,out]")+last("if[9/4,bits,out]")+last("if[9/5,bits,out]")+last("if[9/2,bits,out]")+last("if[9/3,bits,out]")+last("if[23/4,bits,out]")
Characters: 2485

+last("if[7/1,bits,in]")+last("if[22/7,bits,in]")+last("if[2/1,bits,in]")+last("if[19/2,bits,in]")+last("if[7/2,bits,in]")+last("if[3/1,bits,in]")+last("if[3/3,bits,in]")+last("if[19/3,bits,in]")+last("if[8/3,bits,in]")+last("if[1/4,bits,in]")+last("if[8/1,bits,in]")+last("if[3/4,bits,in]")+last("if[8/2,bits,in]")+last("if[2/2,bits,in]")+last("if[24/5,bits,in]")+last("if[21/3,bits,in]")+last("if[24/2,bits,in]")+last("if[19/6,bits,in]")+last("if[22/3,bits,in]")+last("if[5/2,bits,in]")+last("if[17/1,bits,in]")+last("if[17/2,bits,in]")+last("if[17/4,bits,in]")+last("if[17/7,bits,in]")+last("if[20/6,bits,in]")+last("if[17/5,bits,in]")+last("if[21/1,bits,in]")+last("if[22/5,bits,in]")+last("if[17/6,bits,in]")+last("if[19/1,bits,in]")+last("if[17/3,bits,in]")+last("if[20/1,bits,in]")+last("if[18/5,bits,in]")+last("if[23/8,bits,in]")+last("if[18/8,bits,in]")+last("if[24/6,bits,in]")+last("if[18/6,bits,in]")+last("if[18/7,bits,in]")+last("if[21/8,bits,in]")+last("if[6/1,bits,in]")+last("if[2/4,bits,in]")+last("if[23/6,bits,in]")+last("if[22/8,bits,in]")+last("if[1/1,bits,in]")+last("if[1/2,bits,in]")+last("if[9/1,bits,in]")+last("if[3/2,bits,in]")+last("if[4/4,bits,in]")+last("if[4/2,bits,in]")+last("if[5/1,bits,in]")+last("if[5/4,bits,in]")+last("if[6/2,bits,in]")+last("if[6/3,bits,in]")+last("if[7/3,bits,in]")+last("if[8/4,bits,in]")+last("if[21/2,bits,in]")+last("if[21/4,bits,in]")+last("if[21/7,bits,in]")+last("if[20/8,bits,in]")+last("if[22/2,bits,in]")+last("if[22/4,bits,in]")+last("if[24/1,bits,in]")+last("if[22/6,bits,in]")+last("if[17/8,bits,in]")+last("if[19/5,bits,in]")+last("if[18/4,bits,in]")+last("if[19/4,bits,in]")+last("if[19/7,bits,in]")+last("if[20/2,bits,in]")+last("if[6/4,bits,in]")+last("if[24/4,bits,in]")+last("if[20/3,bits,in]")+last("if[20/4,bits,in]")+last("if[23/3,bits,in]")+last("if[23/5,bits,in]")+last("if[7/4,bits,in]")+last("if[18/1,bits,in]")+last("if[5/3,bits,in]")+last("if[4/1,bits,in]")+last("if[24/7,bits,in]")+last("if[18/2,bits,in]")+last("if[24/8,bits,in]")+last("if[23/7,bits,in]")+last("if[21/6,bits,in]")+last("if[23/1,bits,in]")+last("if[23/2,bits,in]")+last("if[18/3,bits,in]")+last("if[22/1,bits,in]")+last("if[4/3,bits,in]")+last("if[2/3,bits,in]")+last("if[1/3,bits,in]")+last("if[19/8,bits,in]")+last("if[9/4,bits,in]")+last("if[9/5,bits,in]")+last("if[9/2,bits,in]")+last("if[9/3,bits,in]")+last("if[23/4,bits,in]")
Characters: 2388

Working formulas (made a bit shorter)

+last("if[7/1,bits,out]")+last("if[22/7,bits,out]")+last("if[2/1,bits,out]")+last("if[19/2,bits,out]")+last("if[7/2,bits,out]")+last("if[3/1,bits,out]")+last("if[3/3,bits,out]")+last("if[19/3,bits,out]")+last("if[8/3,bits,out]")+last("if[1/4,bits,out]")+last("if[8/1,bits,out]")+last("if[3/4,bits,out]")+last("if[8/2,bits,out]")+last("if[2/2,bits,out]")+last("if[24/5,bits,out]")+last("if[21/3,bits,out]")+last("if[24/2,bits,out]")+last("if[19/6,bits,out]")+last("if[22/3,bits,out]")+last("if[5/2,bits,out]")+last("if[17/1,bits,out]")+last("if[17/2,bits,out]")+last("if[17/4,bits,out]")+last("if[17/7,bits,out]")+last("if[20/6,bits,out]")+last("if[17/5,bits,out]")+last("if[21/1,bits,out]")+last("if[22/5,bits,out]")+last("if[17/6,bits,out]")+last("if[19/1,bits,out]")+last("if[17/3,bits,out]")+last("if[20/1,bits,out]")+last("if[18/5,bits,out]")+last("if[23/8,bits,out]")+last("if[18/8,bits,out]")+last("if[24/6,bits,out]")+last("if[18/6,bits,out]")+last("if[18/7,bits,out]")+last("if[21/8,bits,out]")+last("if[6/1,bits,out]")+last("if[2/4,bits,out]")+last("if[23/6,bits,out]")+last("if[22/8,bits,out]")+last("if[1/1,bits,out]")+last("if[1/2,bits,out]")+last("if[9/1,bits,out]")+last("if[3/2,bits,out]")+last("if[4/4,bits,out]")+last("if[4/2,bits,out]")+last("if[5/1,bits,out]")+last("if[5/4,bits,out]")+last("if[6/2,bits,out]")+last("if[6/3,bits,out]")+last("if[7/3,bits,out]")+last("if[8/4,bits,out]")+last("if[21/2,bits,out]")+last("if[21/4,bits,out]")+last("if[21/7,bits,out]")+last("if[20/8,bits,out]")+last("if[22/2,bits,out]")+last("if[22/4,bits,out]")+last("if[24/1,bits,out]")+last("if[22/6,bits,out]")+last("if[17/8,bits,out]")+last("if[19/5,bits,out]")+last("if[18/4,bits,out]")+last("if[19/4,bits,out]")+last("if[19/7,bits,out]")+last("if[20/2,bits,out]")+last("if[6/4,bits,out]")+last("if[24/4,bits,out]")+last("if[20/3,bits,out]")+last("if[20/4,bits,out]")+last("if[23/3,bits,out]")+last("if[23/5,bits,out]")+last("if[7/4,bits,out]")+last("if[18/1,bits,out]")+last("if[5/3,bits,out]")+last("if[4/1,bits,out]")
Characters: 2024

+last("if[7/1,bits,in]")+last("if[22/7,bits,in]")+last("if[2/1,bits,in]")+last("if[19/2,bits,in]")+last("if[7/2,bits,in]")+last("if[3/1,bits,in]")+last("if[3/3,bits,in]")+last("if[19/3,bits,in]")+last("if[8/3,bits,in]")+last("if[1/4,bits,in]")+last("if[8/1,bits,in]")+last("if[3/4,bits,in]")+last("if[8/2,bits,in]")+last("if[2/2,bits,in]")+last("if[24/5,bits,in]")+last("if[21/3,bits,in]")+last("if[24/2,bits,in]")+last("if[19/6,bits,in]")+last("if[22/3,bits,in]")+last("if[5/2,bits,in]")+last("if[17/1,bits,in]")+last("if[17/2,bits,in]")+last("if[17/4,bits,in]")+last("if[17/7,bits,in]")+last("if[20/6,bits,in]")+last("if[17/5,bits,in]")+last("if[21/1,bits,in]")+last("if[22/5,bits,in]")+last("if[17/6,bits,in]")+last("if[19/1,bits,in]")+last("if[17/3,bits,in]")+last("if[20/1,bits,in]")+last("if[18/5,bits,in]")+last("if[23/8,bits,in]")+last("if[18/8,bits,in]")+last("if[24/6,bits,in]")+last("if[18/6,bits,in]")+last("if[18/7,bits,in]")+last("if[21/8,bits,in]")+last("if[6/1,bits,in]")+last("if[2/4,bits,in]")+last("if[23/6,bits,in]")+last("if[22/8,bits,in]")+last("if[1/1,bits,in]")+last("if[1/2,bits,in]")+last("if[9/1,bits,in]")+last("if[3/2,bits,in]")+last("if[4/4,bits,in]")+last("if[4/2,bits,in]")+last("if[5/1,bits,in]")+last("if[5/4,bits,in]")+last("if[6/2,bits,in]")+last("if[6/3,bits,in]")+last("if[7/3,bits,in]")+last("if[8/4,bits,in]")+last("if[21/2,bits,in]")+last("if[21/4,bits,in]")+last("if[21/7,bits,in]")+last("if[20/8,bits,in]")+last("if[22/2,bits,in]")+last("if[22/4,bits,in]")+last("if[24/1,bits,in]")+last("if[22/6,bits,in]")+last("if[17/8,bits,in]")+last("if[19/5,bits,in]")+last("if[18/4,bits,in]")+last("if[19/4,bits,in]")+last("if[19/7,bits,in]")+last("if[20/2,bits,in]")+last("if[6/4,bits,in]")+last("if[24/4,bits,in]")+last("if[20/3,bits,in]")+last("if[20/4,bits,in]")+last("if[23/3,bits,in]")+last("if[23/5,bits,in]")+last("if[7/4,bits,in]")+last("if[18/1,bits,in]")+last("if[5/3,bits,in]")+last("if[4/1,bits,in]")+last("if[24/7,bits,in]")+last("if[18/2,bits,in]")+last("if[24/8,bits,in]")+last("if[23/7,bits,in]")
Characters: 2045



 Comments   
Comment by Attilla de Groot [ 2012 Feb 17 ]

I'm guessing that this is just related to the maximum number of characters of a field in the database. I would be very happy if you could tell me which field to adjust (and how) as a work around for this.

Comment by Alexander Vladishev [ 2012 Feb 17 ]

Fixed in the development branch svn://svn.zabbix.com/branches/dev/ZBX-4671

Comment by Attilla de Groot [ 2012 Feb 17 ]

I'm not a C programmer. Can you explain the cause & fix?

Comment by Alexei Vladishev [ 2012 Feb 20 ]

Tested and code reviewed, works fine!

Comment by Alexander Vladishev [ 2012 Feb 20 ]

Fixed in the version pre-1.8.11 (revision 25478) and pre-1.9.10 (revision 25479)

Comment by Oleksii Zagorskyi [ 2012 Feb 21 ]

Server crashes on start after this commit.
Confirmed for both branches (trunk, 1.8) by Dotneft as well.
Tried several times, all time died process is "icmp pinger". Debuglog with the crash attached as "zabbix_server_r25479.log"
REOPENED

Comment by Oleksii Zagorskyi [ 2012 Feb 21 ]

attached output of a command:
ltrace -f -tt ./zabbix_server_2012-02-21_00-51-17 -c /etc/zabbix/zabbix_server.conf 2> lrace_r25479_trunk_debian603.log

Comment by Alexander Vladishev [ 2012 Feb 21 ]

All changes are reverted in 1.8 and trunk branches in revisions 25522 and 25523.

The issue will be fixed later.

Comment by Jumpei Ogawa [ 2012 Feb 27 ]

> The formula is accepted by the frontend and API
This is another problem. There seems no validation in PHP web interface.
I've confirmed this problem also happens in SSH agent. (on trunk version)
It may also happen in odbc, which I haven't confirmed.

I created patches to add validation.
If you apply these patches, error messages are shown when you enter more than 2048 bytes characters into the text field.

In these patches, maximum length is 2048 bytes.
If it takes a time to change the maximum length, could you apply this patch in next release?

  1. zabbix.1.8.diff is patch for 1.8 and zabbix.trunk.diff is for trunk.
Comment by Attilla de Groot [ 2012 Mar 08 ]

Did anyone have a look at this already? An extension to say .. 4096bytes would solve the current issue for me and would allow me to finish the total item/graphs I'm trying to make.

Comment by richlv [ 2012 Mar 11 ]

it was looked at, but the change turned out to be not that trivial, so it's postponed for now

Comment by Attilla de Groot [ 2012 Mar 12 ]

So it was fixed now?

Comment by Oleksii Zagorskyi [ 2012 Mar 13 ]

This problem is not related to DB schema.
The Formula for calculated items stored in a "params" column, which is type "text".

Comment by Alexander Vladishev [ 2012 Apr 23 ]

Fixed in the development branch svn://svn.zabbix.com/branches/dev/ZBX-4671 (pre-2.0.0rc4)

Comment by dimir [ 2012 Apr 24 ]

Tested, perfect fix. Small comment fix in r27058.

<Sasha> CLOSED

Comment by Alexander Vladishev [ 2012 Apr 24 ]

Fixed in version pre-2.0.0rc4 revision 27066.

Generated at Tue Apr 16 10:48:54 EEST 2024 using Jira 9.12.4#9120004-sha1:625303b708afdb767e17cb2838290c41888e9ff0.