0
0
Fork 0
mirror of https://github.com/netdata/netdata.git synced 2025-03-15 21:44:57 +00:00
netdata_netdata/plugins.d
2014-10-03 23:30:59 +03:00
..
charts.d.dryrun-helper.sh compatibility fixes 2014-05-21 00:03:51 +03:00
charts.d.plugin switched to bash because a few system have problems with /bin/sh 2014-10-03 23:30:59 +03:00
loopsleepms.sh.inc added support for different update frequency per chart in charts.d.plugin 2014-05-30 21:21:39 +03:00
README Renamed charts.d to plugins.d 2014-05-03 16:59:38 +03:00
tc-qos-helper.sh charts.d restarts every hour to prevent memory leaks of the shell; initial update of plugins does not specify a duration to allow netdata re-calibrate the chart to the current time 2014-05-21 20:57:24 +03:00

-------------------------------------------------------------------------------
NETDATA CUSTOM PLUGINS

custom chart plugins can be any program that can print a few values on its
standard output.

There are 5 lines netdata parses. lines starting with:

CHART - create a new chart
DIMENSION - add a dimension to the chart just created

BEGIN - initialize data collection for a chart
SET - set the value of a dimension for the initialized chart
END - complete data collection for the initialized chart

a single script can produce any number of charts with any number of dimensions
each. charts can also be added any time (not just the beginning).

The script should accept just one parameter: the number of seconds it is
expected to update the values for its charts. The value passed by netdata
to the script is controlled via the configuration file.

The script can overwrite the update frequency. For example, the server may
request per second updates, but the script may overwrite this to one update
every 5 seconds.


-------------------------------------------------------------------------------
CREATE NEW CHART

 > CHART type.id name title units family[=id] category[=type] charttype[=line]
                                   priority[=1000] update_every[=user default]

 where:
 - type.id
   uniquely identifies the chart
   this is what will be needed to add values to the chart

 - name
   is the name that will be presented to the used for this chart

 - title
   the text above the chart

 - units
   the label of the vertical axis of the chart

 - family
   is used to group charts together.
   (for example all eth0 charts should say: eth0)

 - category
   is not used currently.
   it will be used to set the section under which the chart will appear
   (for example mem.ram should appear in the 'system' section)
   the special word 'none' means: do not show this chart on the home page

 - charttype
   line, area or stacked

 - priority
   is the relative priority of the charts as rendered on the web page
   lower numbers make the charts appear before the ones with higher numbers

 - update_every
   overwrite the update frequency set by the server


-------------------------------------------------------------------------------
ADD DIMENSIONS

 > DIMENSION id name[=id] algorithm[=absolute] multiplier[=1] divisor[=1]
                                                              hidden[=not set]

 where:

 - id
   the id of this dimension (it is a text value, not numeric)
   this will be needed to add values to the dimension

 - name
   the name of the dimension as it will appear at the legend of the chart

 - algorithms
   one of:

   * absolute
     the value is to drawn as-is

   * incremental
     the value increases over time.
     the difference from the last value is presented in the chart.
     the server stretches the difference to produce 1 second increments.
     it does this at the microsecond level.

   * percentage-of-absolute-row
     the % of this value compared to the total of all dimensions.

   * percentage-of-incremental-row
     the % of this value compared to the differential total of
     each dimension.

 - multiplier
   a value to multiply the collected value.

 - divisor
   a value to divide the collected value.

 - hidden
   giving the keyword 'hidden' will make this dimension hidden.
   it will take part in the calculation but will not be presented in the chart


-------------------------------------------------------------------------------
DATA COLLECTION

 data collection is defined as a series of BEGIN -> SET -> END lines.

 > BEGIN type.id

 - type.id
   is the unique identification of the chart (created with CHART)

 > SET id = value

  - id
    is the unique identification of the dimension (of the chart just began)

  - value
    is the collected value

  more SET lines may appear to update all the dimensions of the chart.
  all of them in one BEGIN -> END block.
  All SET lines within a single BEGIN -> END block have to refer to the
  same chart. If more charts need to be updated, each chart should have
  its own BEGIN -> SET -> END block.

 > END

 END does not take any parameters.
 it commits the collected values to the chart.
 

 
-------------------------------------------------------------------------------
A NOTE ABOUT VALUES

 NetData will collect any signed value in the 64bit range:

    -9.223.372.036.854.775.808   to   +9.223.372.036.854.775.807

 However, to lower its memory requirements, it stores all values in the
 signed 32bit range, divided by 10, that is:

                  -214.748.364   to   +214.748.364

 This division by 10, is used to give a decimal point in the charts.
 In memory, every number is 4 bytes (32bits).

 algorithm, multiplier and divisor help maintain all the detail required.

 The algorithm is applied in the wider 64bit numbers. Once the calculation
 is complete the value is multiplied by the multiplier, by 10, and then
 divided by the divider (all of these at the 64bit level).
 The 64bit result is then stored in a 32 bit signed int.

 So, at the chart level:

  - the finest number is 0.1
  - the smallest -214.748.364,8
  - the highest   214.748.364,7

 You should choose a multiplier and divisor to stay within these limits.

 Example:

 eth0 bytes-in is a 64bit number that is incremented every time.
 let say it is              1.000.000.000.000.000.000
 and one second later it is 1.000.000.000.999.000.000

 the dimension is 'incremental' with multiplier 8 (bytes to bits)
 and divider 1024 (bits to kilobits).

 netdata will store this value:

 value = (1.000.000.000.000.000.000 - 1.000.000.000.999.000.000)
                 * 10
                  * 8
               / 1024
         = 78.046.875

 or 7.804.687,5 kilobits/second (a little less than 8 gigabits/second)