/api/query/gexp¶
Graphite is an excellent storage system for time series data with a number of built in functions to manipulate the data. To support transitions from Graphite to OpenTSDB, the /api/query/gexp
endpoint supports URI queries similar but not identical to Graphite`s expressions. Graphite functions are generally formatted as func(<series>[, param1][, paramN])
with the ability to nest functions. TSD`s implementation follows the same pattern but uses an m
style query (e.g. sum:proc.stat.cpu{host=foo,type=idle}
) in place of the <series>
. Nested functions are supported.
TSDB implements a subset of Graphite functions though we hope to add more in the future. For a list of Graphite functions and descriptions, see the Documentation. TSD supported functions appear below.
Note
Supported as of version 2.3
Verbs¶
GET
Requests¶
Queries can only be executed via GET using the URI at this time. (In the future, the /api/query/exp endpoint will support more flexibility.) This is an extension of the main /api/query endpoint so parameters in the request table are also supported here. Additional parameters include:
Name |
Data Type |
Required |
Description |
Example |
---|---|---|---|---|
exp |
String |
Required |
The Graphite style expression to execute. The first parameter of a function must either be another function or a URI formatted Sub Query |
scale(sum:if.bytes_in{host=*},1024) |
Example Query String Requests¶
http://localhost:4242/api/query/gexp?start=1h-ago&exp=scale(sum:if.bytes_in{host=*},1024)
Response¶
The output is identical to /api/query.
Functions¶
Functions that accept a single metric query will operate across each time series result. E.g. if a query includes a group by on host such as scale(sum:if.bytes_in{host=*},1024)
, and multiple hosts exist with that metric, then a series for each host will be emitted and the function applied. For functions that take multiple metrics, a union is performed across each metric and the function is executed across each resulting series with matching tags. E.g with the query sum(sum:if.bytes_in{host=*},sum:if.bytes_out{host=*})
, assume two hosts exist, web01
and web02
. In this case, the output will be if.bytes_in{host=web01} + if.bytes_out{host=web01}
and if.bytes_in{host=web02} + if.bytes_out{host=web02}
. Missing series in any metric result set will be filled with the default fill value of the function.
Currently supported expressions include:
absolute(<metric>)¶
Emits the results as absolute values, converting negative values to positive.
diffSeries(<metric>[,<metricN>])¶
Returns the difference of all series in the list. Performs a UNION across tags in each metric result sets, defaulting to a fill value of zero. A maximum of 26 series are supported at this time.
divideSeries(<metric>[,<metricN>])¶
Returns the quotient of all series in the list. Performs a UNION across tags in each metric result sets, defaulting to a fill value of zero. A maximum of 26 series are supported at this time.
highestCurrent(<metric>,<n>)¶
Sorts all resulting time series by their most recent value and emits n
number of series with the highest values. n
must be a positive integer value.
highestMax(<metric>,<n>)¶
Sorts all resulting time series by the maximum value for the time span and emits n
number of series with the highest values. n
must be a positive integer value.
movingAverage(<metric>,<window>)¶
Emits a sliding window moving average for each data point and series in the metric. The window
parameter may either be a positive integer that reflects the number of data points to maintain in the window (non-timed) or a time span specified by an integer followed by time unit such as `60s`
or `60m`
or `24h`
. Timed windows must be in single quotes.
multiplySeries(<metric>[,<metricN>])¶
Returns the product of all series in the list. Performs a UNION across tags in each metric result sets, defaulting to a fill value of zero. A maximum of 26 series are supported at this time.
scale(<metric>,<factor>)¶
Multiplies each series by the factor where the factor can be a positive or negative floating point or integer value.
sumSeries(<metric>[,<metricN>])¶
Returns the sum of all series in the list. Performs a UNION across tags in each metric result sets, defaulting to a fill value of zero. A maximum of 26 series are supported at this time.