Spec-Zone.ru › Graphite

Функции

Функции используются для преобразования, объединения и выполнения вычислений над данными рядов. Функции применяются с помощью интерфейса Composer или путем манипулирования параметрами target в API рендеринга.

Использование

Большинство функций применяются к одному списку рядов. Функции с параметром *seriesLists могут принимать произвольное количество списков рядов. Чтобы передать несколько списков рядов функции, которая принимает только один, используйте функцию group().

Список функций

absolute(seriesList)

Принимает один метрический показатель или список рядов с подстановкой шаблонов и применяет математическую функцию abs к каждой точке данных, преобразуя её в абсолютное значение.

Пример:

&target=absolute(Server.instance01.threads.busy)
&target=absolute(Server.instance*.threads.busy)
aggregate(seriesList, func, xFilesFactor=None)

Агрегирует ряды, используя указанную функцию.

Пример:

&target=aggregate(host.cpu-[0-7].cpu-{user,system}.value, "sum")

Это эквивалентно

&target=sumSeries(host.cpu-[0-7].cpu-{user,system}.value)

Эта функция может использоваться с функциями агрегирования average, median, sum, min, max, diff, stddev, count, range, multiply & last.

aggregateLine(seriesList, func='average', keepStep=False)

Принимает метрический показатель или список рядов с подстановкой шаблонов и строит горизонтальную линию, основанную на функции, применённой к каждому ряду.

Если необязательный параметр keepStep установлен в True, результат будет иметь тот же период времени и шаг, что и исходный ряд.

Примечание: По умолчанию рендерер Graphite консолидирует точки данных, усредняя точки данных за определённый период времени. Если вы используете функции ‘min’ или ‘max’ для aggregateLine, это может привести к необычному разрыву на графике. Для решения этой проблемы используйте функцию consolidateBy() с тем же аргументом функции, что и для aggregateLine. Это обеспечит сохранение необходимых точек данных, и график будет отображаться правильно.

Пример:

&target=aggregateLine(server01.connections.total, 'avg')
&target=aggregateLine(server*.connections.total, 'avg')
aggregateWithWildcards(seriesList, func, *positions)

Вызывает агрегатор после вставки подстановочных знаков в заданной позиции/позициях.

Пример:

&target=aggregateWithWildcards(host.cpu-[0-7].cpu-{user,system}.value, "sum", 1)

Это эквивалентно

&target=sumSeries(host.cpu-[0-7].cpu-user.value)&target=sumSeries(host.cpu-[0-7].cpu-system.value)
# or
&target=aggregate(host.cpu-[0-7].cpu-user.value,"sum")&target=aggregate(host.cpu-[0-7].cpu-system.value,"sum")

Эта функция может использоваться со всеми функциями агрегирования, поддерживаемыми aggregate: average, median, sum, min, max, diff, stddev, range & multiply.

Это дополняет groupByNodes, которая принимает список узлов, которые должны совпадать в каждой группе.

alias(seriesList, newName)

Принимает один метрический показатель или список рядов с подстановкой шаблонов и строку в кавычках. Выводит строку вместо имени метрики в легенде.

&target=alias(Sales.widgets.largeBlue,"Large Blue Widgets")
aliasByMetric(seriesList)

Принимает список рядов и применяет псевдоним, полученный из базового имени метрики.

&target=aliasByMetric(carbon.agents.graphite.creates)
aliasByNode(seriesList, *nodes)

Принимает список рядов и применяет псевдоним, полученный из одного или нескольких элементов «узла» целевого имени или тегов. Индексы узлов нумеруются с 0.

&target=aliasByNode(ganglia.*.cpu.load5,1)

Каждый узел может быть целым числом, ссылающимся на узел в имени ряда, или строкой, идентифицирующей тег.

&target=seriesByTag("name=~cpu.load.*", "server=~server[1-9]+", "datacenter=dc1")|aliasByNode("datacenter", "server", 1)

# will produce output series like
# dc1.server1.load5, dc1.server2.load5, dc1.server1.load10, dc1.server2.load10
aliasByTags(seriesList, *tags)

Принимает список рядов и применяет псевдоним, полученный из одного или нескольких тегов и/или узлов.

&target=seriesByTag("name=cpu")|aliasByTags("server","name")

Это псевдоним для aliasByNode.

aliasQuery(seriesList, search, replace, newName)

Выполняет запрос для присвоения псевдонимов метрикам в списке рядов.

&target=aliasQuery(channel.power.*,"channel\.power\.([0-9]+)","channel.frequency.\1", "Channel %d MHz")

Ряды в seriesList будут переименованы путём сначала преобразования имён рядов с помощью параметров search и replace, а затем использования последнего значения результирующего ряда для построения псевдонима с использованием синтаксиса в стиле sprintf.

aliasSub(seriesList, search, replace)

Применяет к именам рядов поиск и замену с помощью регулярных выражений.

&target=aliasSub(ip.*TCP*,"^.*TCP(\d+)","\1")
alpha(seriesList, alpha)

Назначает заданное значение прозрачности альфа-канала ряду. Принимает число с плавающей точкой от 0 до 1.

applyByNode(seriesList, nodeNum, templateFunction, newName=None)

Принимает список рядов и применяет сложную функцию (описанную строкой), заменяя шаблоны уникальными префиксами ключей из списка рядов (ключ — все узлы до индекса, заданного как nodeNum).

Если параметр newName указан, имя результирующего ряда будет задано этим параметром, при этом все символы «%» будут заменены уникальным префиксом.

Пример:

&target=applyByNode(servers.*.disk.bytes_free,1,"divideSeries(%.disk.bytes_free,sumSeries(%.disk.bytes_*))")

Найдёт все ряды, которые соответствуют шаблону servers.*.disk.bytes_free, затем обрежет их до уникальных рядов до узла, заданного nodeNum, а затем заполнит их в предоставленную функцию шаблона (заменяя % префиксами).

Дополнительные примеры:

Учитывая ключи

  • stats.counts.haproxy.web.2XX
  • stats.counts.haproxy.web.3XX
  • stats.counts.haproxy.web.5XX
  • stats.counts.haproxy.microservice.2XX
  • stats.counts.haproxy.microservice.3XX
  • stats.counts.haproxy.microservice.5XX

Следующее вернёт скорость 5XX на каждый сервис:

applyByNode(stats.counts.haproxy.*.*XX, 3, "asPercent(%.5XX, sumSeries(%.*XX))", "%.pct_5XX")

Выходные ряды будут иметь ключи stats.counts.haproxy.web.pct_5XX и stats.counts.haproxy.microservice.pct_5XX.

areaBetween(seriesList)

Отображает вертикальную область между двумя рядами в списке рядов. Полезно для визуализации диапазона, например, минимальной и максимальной задержки для службы.

areaBetween ожидает **ровно один аргумент**, в результате чего получаются ровно два ряда (см. пример ниже). Порядок нижнего и верхнего значений рядов не имеет значения. Визуализация работает только при использовании в сочетании с areaMode=stacked.

Вероятный случай использования – это построение диапазона, в котором должна двигаться другая метрика. В таком случае применение alpha(), как во втором примере, даёт лучшие визуальные результаты.

Пример:

&target=areaBetween(service.latency.{min,max})&areaMode=stacked

&target=alpha(areaBetween(service.latency.{min,max}),0.3)&areaMode=stacked

Если, например, вам нужно создать список рядов, вы должны использовать функцию group, как показано ниже:

&target=areaBetween(group(minSeries(a.*.min),maxSeries(a.*.max)))
asPercent(seriesList, total=None, *nodes)

Вычисляет процент от общего количества рядов с подстановкой шаблонов. Если total указан, каждый ряд будет вычисляться как процент от этого total. Если total не указан, в качестве total будет использована сумма всех точек данных в списке рядов с подстановкой шаблонов.

Список узлов может быть указан, при этом узлы будут использоваться для сопоставления рядов с их соответствующими total значениями, следуя той же логике, что и groupByNodes.

Если передаются узлы, параметр total может быть списком рядов или None. Если это None, для каждого ряда в seriesList будет возвращаться процент от суммы рядов в этой группе.

Если не передаются узлы, параметр total может быть одним рядом, ссылаться на такое же количество рядов, как seriesList, или быть числовым значением.

Пример:

# Server01 connections failed and succeeded as a percentage of Server01 connections attempted
&target=asPercent(Server01.connections.{failed,succeeded}, Server01.connections.attempted)

# For each server, its connections failed as a percentage of its connections attempted
&target=asPercent(Server*.connections.failed, Server*.connections.attempted)

# For each server, its connections failed and succeeded as a percentage of its connections attemped
&target=asPercent(Server*.connections.{failed,succeeded}, Server*.connections.attempted, 0)

# apache01.threads.busy as a percentage of 1500
&target=asPercent(apache01.threads.busy,1500)

# Server01 cpu stats as a percentage of its total
&target=asPercent(Server01.cpu.*.jiffies)

# cpu stats for each server as a percentage of its total
&target=asPercent(Server*.cpu.*.jiffies, None, 0)

При использовании узлов, любые ряды или total, которые не могут быть сопоставлены, создадут выходные ряды с именами, похожими на asPercent(someSeries,MISSING) или asPercent(MISSING,someTotalSeries), и все значения будут установлены в None. При необходимости, эти ряды можно отфильтровать, передав результат через |exclude("MISSING"), как показано ниже:

&target=asPercent(Server{1,2}.memory.used,Server{1,3}.memory.total,0)

# will produce 3 output series:
# asPercent(Server1.memory.used,Server1.memory.total) [values will be as expected]
# asPercent(Server2.memory.used,MISSING) [all values will be None]
# asPercent(MISSING,Server3.memory.total) [all values will be None]

&target=asPercent(Server{1,2}.memory.used,Server{1,3}.memory.total,0)|exclude("MISSING")

# will produce 1 output series:
# asPercent(Server1.memory.used,Server1.memory.total) [values will be as expected]

Каждый узел может быть целым числом, ссылающимся на узел в имени ряда, или строкой, идентифицирующей тег.

Примечание

Если total является списком рядов, указание узлов для сопоставления рядов с соответствующим total рядом повысит надёжность.

averageAbove(seriesList, n)

Принимает один метрический показатель или список рядов с подстановкой шаблонов и целое число N. Из всех переданных метрик отображаются только метрики со средним значением выше N за указанный период времени.

Пример:

&target=averageAbove(server*.instance*.threads.busy,25)

Отображаются серверы со средними значениями выше 25.

averageBelow(seriesList, n)

Принимает один метрический показатель или список рядов с подстановкой шаблонов и целое число N. Из всех переданных метрик отображаются только метрики со средним значением ниже N за указанный период времени.

Пример:

&target=averageBelow(server*.instance*.threads.busy,25)

Отображаются серверы со средними значениями ниже 25.

averageOutsidePercentile(seriesList, n)

Удаляет ряды, лежащие внутри интервала среднего процентиля.

averageSeries(*seriesLists)

Короткое обозначение: avg()

Принимает один метрический показатель или список рядов с подстановкой шаблонов. Отображает среднее значение всех переданных метрик в каждой точке времени.

Пример:

&target=averageSeries(company.server.*.threads.busy)

Это псевдоним для aggregate с агрегированием average.

averageSeriesWithWildcards(seriesList, *position)

Вызов averageSeries после вставки подстановочных знаков в заданной позиции(ях).

Пример:

&target=averageSeriesWithWildcards(host.cpu-[0-7].cpu-{user,system}.value, 1)

Это эквивалентно

&target=averageSeries(host.*.cpu-user.value)&target=averageSeries(host.*.cpu-system.value)

Это псевдоним для aggregateWithWildcards с агрегацией average.

cactiStyle(seriesList, system=None, units=None)

Принимает список рядов и изменяет псевдонимы, чтобы обеспечить выравнивание столбцов с текущими, максимальными и минимальными значениями в стиле cacti. Дополнительно принимает значение «system», чтобы применить форматирование единиц измерения в том же стиле, что и ось Y, или строку «unit», чтобы добавить произвольный суффикс единиц измерения.

&target=cactiStyle(ganglia.*.net.bytes_out,"si")
&target=cactiStyle(ganglia.*.net.bytes_out,"si","b")

Возможным значением для system является si, что выразит ваши значения в кратных тысячам. Вторая опция - использовать binary, что вместо этого выразит ваши значения в кратных 1024 (полезно для сетевых устройств).

Выравнивание столбцов значений Current, Max, Min работает при двух условиях: вы используете моноширинный шрифт, например terminus, и используете один вызов cactiStyle, так как отдельные вызовы cactiStyle не знают друг о друге. В случае, если у вас есть разные цели, для которых вы хотели бы выровнять cactiStyle, вы можете использовать group() для их объединения перед применением cactiStyle, например:

&target=cactiStyle(group(metricA,metricB))
changed(seriesList)

Принимает один метрик или список рядов с подстановочными знаками. Выводит 1, когда значение изменилось, 0, когда значение равно null или одинаково.

Пример:

&target=changed(Server01.connections.handled)
color(seriesList, theColor)

Присваивает заданный цвет списку seriesList.

Пример:

&target=color(collectd.hostname.cpu.0.user, 'green')
&target=color(collectd.hostname.cpu.0.system, 'ff0000')
&target=color(collectd.hostname.cpu.0.idle, 'gray')
&target=color(collectd.hostname.cpu.0.idle, '6464ffaa')
consolidateBy(seriesList, consolidationFunc)

Принимает один метрик или список рядов с подстановочными знаками и имя функции консолидации.

Допустимые имена функций: ‘sum’, ‘average’, ‘min’, ‘max’, ‘first’ и ‘last’.

Когда график рисуется, где ширина графика в пикселях меньше количества точек данных, которые нужно отобразить, Graphite консолидирует значения, чтобы предотвратить перекрытие линий. Функция consolidateBy() изменяет функцию консолидации с по умолчанию ‘average’ на одну из ‘sum’, ‘max’, ‘min’, ‘first’ или ‘last’. Это особенно полезно в графиках продаж, где дробные значения не имеют смысла, и уместна ‘сумма’ консолидированных значений.

&target=consolidateBy(Sales.widgets.largeBlue, 'sum')
&target=consolidateBy(Servers.web01.sda1.free_space, 'max')
constantLine(value)

Принимает число с плавающей точкой F.

Рисует горизонтальную линию в значении F по всему графику.

Пример:

&target=constantLine(123.456)
countSeries(*seriesLists)

Рисует горизонтальную линию, представляющую количество узлов, найденных в seriesList.

&target=countSeries(carbon.agents.*.*)
cumulative(seriesList)

Принимает один метрик или список рядов с подстановочными знаками.

Когда график рисуется, где ширина графика в пикселях меньше количества точек данных, которые нужно отобразить, Graphite консолидирует значения, чтобы предотвратить перекрытие линий. Функция cumulative() изменяет функцию консолидации с по умолчанию ‘average’ на ‘sum’. Это особенно полезно в графиках продаж, где дробные значения не имеют смысла, и уместна ‘сумма’ консолидированных значений.

Псевдоним для consolidateBy(series, 'sum')

&target=cumulative(Sales.widgets.largeBlue)
currentAbove(seriesList, n)

Принимает один метрик или список рядов с подстановочными знаками и целое число N. Из всех переданных метрик отображаются только метрики, значение которых выше N в конце указанного периода времени.

Пример:

&target=currentAbove(server*.instance*.threads.busy,50)

Отображает серверы с более чем 50 занятыми потоками.

currentBelow(seriesList, n)

Принимает один метрик или список рядов с подстановочными знаками и целое число N. Из всех переданных метрик отображаются только метрики, значение которых ниже N в конце указанного периода времени.

Пример:

&target=currentBelow(server*.instance*.threads.busy,3)

Отображает серверы с менее чем 3 занятыми потоками.

dashed(seriesList, dashLength=5)

Принимает один метрик или список рядов с подстановочными знаками, за которым следует число с плавающей точкой F.

Рисует выбранные метрики пунктирной линией с отрезками длиной F. Если опущено, по умолчанию длина отрезков составляет 5.0.

Пример:

&target=dashed(server01.instance01.memory.free,2.5)
delay(seriesList, steps)

Это сдвигает все образцы позже на целое число шагов. Это может использоваться для расчета производных и других задач. Примечание: это заполнит ранний конец данных None для каждого сдвинутого шага.

Это дополняет другие функции смещения времени, такие как timeShift и timeSlice, поскольку эта функция не учитывает интервалы шагов, которые смещаются.

Пример:

&target=divideSeries(server.FreeSpace,delay(server.FreeSpace,1))

Это вычисляет изменение свободного пространства сервера как процент от предыдущего свободного пространства.

derivative(seriesList)

Это противоположность функции интеграла. Это полезно для вычисления дельты между последующими точками данных для метрики, которая является текущей суммой.

Эта функция не нормализует периоды времени, как это делала бы истинное производное. Вместо этого см. функцию perSecond() для расчета скорости изменения во времени.

Пример:

&target=derivative(company.server.application01.ifconfig.TXPackets)

Каждый раз, когда вы выполняете ifconfig, RX и TXPackets выше (при условии, что есть сетевой трафик). Применяя функцию производной, вы можете получить представление о пакетах в минуту, отправленных или полученных, даже если вы записываете только итог.

diffSeries(*seriesLists)

Вычитает ряды 2 до n из ряда 1.

Пример:

&target=diffSeries(service.connections.total,service.connections.failed)

Для дифференцирования ряда и константы следует использовать offset вместо (или в дополнение к) diffSeries.

Пример:

&target=offset(service.connections.total,-5)

&target=offset(diffSeries(service.connections.total,service.connections.failed),-4)

Это псевдоним для aggregate с агрегацией diff.

divideSeries(dividendSeriesList, divisorSeries)

Принимает метрику-делимое и метрику-делитель и отображает результат деления. Константу нельзя передавать. Для деления на константу используйте функцию scale() (которая по сути является операцией умножения) и используйте обратную величину делимого. (Деление на 8 = умножение на 1/8 или 0,125).

Пример:

&target=divideSeries(Series.dividends,Series.divisors)
divideSeriesLists(dividendSeriesList, divisorSeriesList)

Итерируется по двум спискам и делит list1[0] на list2[0], list1[1] на list2[1] и так далее. Список должен иметь одинаковую длину.

drawAsInfinite(seriesList)

Принимает один метрик или список рядов с подстановочными знаками. Если значение равно нулю, рисует линию в 0. Если значение больше нуля, рисует линию на бесконечности. Если значение равно null или меньше нуля, не рисует линию.

Полезно для отображения метрик включения/выключения, таких как коды завершения. (0 = успех, любое другое значение = неудача).

Пример:

drawAsInfinite(Testing.script.exitCode)
events(*tags)

Возвращает количество событий в данный момент времени. Используется с drawAsInfinite.

Пример:

&target=events("tag-one", "tag-two")
&target=events("*")

Возвращает все события с метками «tag-one» и «tag-two», а второе - все события.

exclude(seriesList, pattern)

Принимает метрик или список рядов с подстановочными знаками, за которым следует регулярное выражение в двойных кавычках. Исключает метрики, которые соответствуют регулярному выражению.

Пример:

&target=exclude(servers*.instance*.threads.busy,"server02")
exponentialMovingAverage(seriesList, windowSize)

Принимает ряд значений и размер окна и вычисляет экспоненциальное скользящее среднее, используя следующую формулу:

ema(current) = constant * (Current Value) + (1 - constant) * ema(previous)

Постоянная вычисляется как:

constant = 2 / (windowSize + 1)

EMA первого периода использует простое скользящее среднее для своего значения.

Пример:

&target=exponentialMovingAverage(*.transactions.count, 10)
&target=exponentialMovingAverage(*.transactions.count, '-10s')
fallbackSeries(seriesList, fallback)

Принимает список рядов с подстановочными знаками и вторую метрику по умолчанию. Если подстановочные знаки не совпадают ни с одним рядом, рисует метрику по умолчанию.

Пример:

&target=fallbackSeries(server*.requests_per_second, constantLine(0))

Рисует линию 0, когда метрика сервера не существует.

filterSeries(seriesList, func, operator, threshold)

Принимает один метрик или список рядов с подстановочными знаками, за которым следуют функция консолидации, оператор и порог. Отображает только те метрики, которые соответствуют выражению фильтра.

Пример:

&target=filterSeries(system.interface.eth*.packetsSent, 'max', '>', 1000)

Это будет отображать только интерфейсы, у которых пиковая пропускная способность выше 1000 пакетов/мин.

Поддерживаемые функции агрегации: average, median, sum, min, max, diff, stddev, range, multiply и last.

Поддерживаемые операторы: =, !=, >, >=, < и <=.

grep(seriesList, pattern)

Принимает метрик или список рядов с подстановочными знаками, за которым следует регулярное выражение в двойных кавычках. Исключает метрики, которые не соответствуют регулярному выражению.

Пример:

&target=grep(servers*.instance*.threads.busy,"server02")
group(*seriesLists)

Принимает произвольное количество списков seriesLists и добавляет их в один список seriesList. Используется для передачи нескольких списков seriesLists в функцию, которая принимает только один.

groupByNode(seriesList, nodeNum, callback='average')

Принимает список рядов и применяет обратный вызов к подгруппам, определённым общим узлом

&target=groupByNode(ganglia.by-function.*.*.cpu.load5,2,"sumSeries")

Возвращает несколько рядов, каждый из которых является результатом применения функции “sumSeries” к группам, объединённым по второму узлу (индексация с 0), что приводит к списку целей, подобному

sumSeries(ganglia.by-function.server1.*.cpu.load5),sumSeries(ganglia.by-function.server2.*.cpu.load5),...

Узел может быть целым числом, ссылающимся на узел в имени ряда, или строкой, идентифицирующей тег.

Это псевдоним для использования groupByNodes с одним узлом.

groupByNodes(seriesList, callback, *nodes)

Принимает список рядов и применяет обратный вызов к подгруппам, определённым несколькими узлами

&target=groupByNodes(ganglia.server*.*.cpu.load*,"sum",1,4)

Возвращает несколько рядов, каждый из которых является результатом применения агрегирования “sum” к группам, объединённым по списку узлов (индексация с 0), что приводит к списку целей, подобному

sumSeries(ganglia.server1.*.cpu.load5),sumSeries(ganglia.server1.*.cpu.load10),sumSeries(ganglia.server1.*.cpu.load15),sumSeries(ganglia.server2.*.cpu.load5),sumSeries(ganglia.server2.*.cpu.load10),sumSeries(ganglia.server2.*.cpu.load15),...

Эта функция может быть использована со всеми функциями агрегирования, поддерживаемыми aggregate: average, median, sum, min, max, diff, stddev, range и multiply.

Каждый узел может быть целым числом, ссылающимся на узел в имени ряда, или строкой, идентифицирующей тег.

&target=seriesByTag("name=~cpu.load.*", "server=~server[1-9]+", "datacenter=~dc[1-9]+")|groupByNodes("average", "datacenter", 1)

# will produce output series like
# dc1.load5, dc2.load5, dc1.load10, dc2.load10

Это дополнение к aggregateWithWildcards, который принимает список узлов с подстановкой.

groupByTags(seriesList, callback, *tags)

Принимает список рядов и применяет обратный вызов к подгруппам, определённым несколькими тегами

&target=seriesByTag("name=cpu")|groupByTags("average","dc")

Возвращает несколько рядов, каждый из которых является результатом применения функции “averageSeries” к группам, объединённым по указанным тегам, что приводит к списку целей, подобному

averageSeries(seriesByTag("name=cpu","dc=dc1")),averageSeries(seriesByTag("name=cpu","dc=dc2")),...

Эта функция может быть использована со всеми функциями агрегирования, поддерживаемыми aggregate: average, median, sum, min, max, diff, stddev, range и multiply.

highest(seriesList, n=1, func='average')

Принимает один метрику или список рядов с подстановкой, за которым следует целое число N и функция агрегирования. Из всех переданных метрик выбирает только N метрик с наибольшим агрегированным значением за указанный период времени.

Пример:

&target=highest(server*.instance*.threads.busy,5,'max')

Отображает 5 серверов с наибольшим количеством занятых потоков.

highestAverage(seriesList, n)

Принимает одну метрику или список рядов с подстановкой, за которым следует целое число N. Из всех переданных метрик отображает только верхние N метрик с наибольшим средним значением за указанный период.

Пример:

&target=highestAverage(server*.instance*.threads.busy,5)

Отображает 5 лучших серверов с наибольшим средним значением.

Это псевдоним для highest с агрегированием average.

highestCurrent(seriesList, n)

Принимает одну метрику или список рядов с подстановкой, за которым следует целое число N. Из всех переданных метрик отображает только N метрик с наибольшим значением в конце указанного периода.

Пример:

&target=highestCurrent(server*.instance*.threads.busy,5)

Отображает 5 серверов с наибольшим количеством занятых потоков.

Это псевдоним для highest с агрегированием current.

highestMax(seriesList, n)

Принимает одну метрику или список рядов с подстановкой, за которым следует целое число N.

Из всех переданных метрик отображает только N метрик с наибольшим максимальным значением в указанный период времени.

Пример:

&target=highestMax(server*.instance*.threads.busy,5)

Отображает 5 лучших серверов, у которых было больше всего занятых потоков за указанный период времени.

Это псевдоним для highest с агрегированием max.

hitcount(seriesList, intervalString, alignToInterval=False)

Оценить количество хитов из списка временных рядов.

Эта функция предполагает, что значения в каждом временном ряде представляют собой хиты в секунду. Она вычисляет количество хитов за больший интервал, например, за день или за час. Эта функция похожа на summarize(), но автоматически компенсирует разные масштабы времени (чтобы график был похожим при использовании данных с высокой или низкой частотой) и грамотно обрабатывает редко встречающиеся события.

holtWintersAberration(seriesList, delta=3, bootstrapInterval='7d', seasonality='1d')

Производит прогнозирование Хольта-Винтера, используя ряд как входные данные, и строит положительное или отрицательное отклонение данных ряда от прогноза.

holtWintersConfidenceArea(seriesList, delta=3, bootstrapInterval='7d', seasonality='1d')

Производит прогнозирование Хольта-Винтера, используя ряд как входные данные, и строит область между верхней и нижней полосами предсказанных отклонений прогноза.

holtWintersConfidenceBands(seriesList, delta=3, bootstrapInterval='7d', seasonality='1d')

Производит прогнозирование Хольта-Винтера, используя ряд как входные данные, и строит верхнюю и нижнюю полосы с предсказанными отклонениями прогноза.

holtWintersForecast(seriesList, bootstrapInterval='7d', seasonality='1d')

Производит прогнозирование Хольта-Винтера, используя ряд как входные данные. Данные из bootstrapInterval (по умолчанию одна неделя) до ряда используются для начального прогнозирования.

identity(name)

Функция тождества: Возвращает точки данных, где значение равно временной метке точки данных. Полезно, когда у вас есть другой ряд, где значение является временной меткой, и вы хотите сравнить его с временем точки данных, чтобы отобразить возраст.

Пример:

&target=identity("The.time.series")

Это создаст ряд с именем “The.time.series”, содержащий точки, где x(t) == t.

integral(seriesList)

Показывает сумму во времени, что-то вроде непрерывной функции сложения. Полезно для нахождения сумм или трендов в метриках, которые собираются каждую минуту.

Пример:

&target=integral(company.sales.perMinute)

Это начнёт с нуля в левой части графика, добавляя продажи каждую минуту и покажет общую сумму продаж за выбранный период (текущее время или время, указанное с помощью ‘&until=’).

integralByInterval(seriesList, intervalUnit)

Это выполняет то же, что и функция integral(), но сбрасывает общую сумму до 0 в указанное время в параметре “from”. Полезно для нахождения сумм за час/день/неделю/…

Пример:

&target=integralByInterval(company.sales.perMinute, "1d")&from=midnight-10days

Это начнёт с нуля в левой части графика, добавляя продажи каждую минуту, и покажет изменения продаж в день за последние 10 дней.

interpolate(seriesList, limit=inf)

Принимает одну метрику или список рядов с подстановкой, и необязательно лимит на количество пропускаемых значений None. Продолжает линию с последним полученным значением, когда появляются пробелы (значения None), а не обрывает линию.

Пример:

&target=interpolate(Server01.connections.handled)
&target=interpolate(Server01.connections.handled, 10)
invert(seriesList)

Принимает одну метрику или список рядов с подстановкой и инвертирует каждую точку данных (т.е. 1/x).

Пример:

&target=invert(Server.instance01.threads.busy)
isNonNull(seriesList)

Принимает метрику или список рядов с подстановкой и считает количество ненулевых значений. Это полезно для понимания количества метрик, имеющих данные в данный момент времени (например, для подсчёта, какие серверы активны).

Пример:

&target=isNonNull(webapp.pages.*.views)

Возвращает список рядов, где 1 указано для ненулевых значений, а 0 — для нулевых значений.

keepLastValue(seriesList, limit=inf)

Принимает одну метрику или список рядов с подстановкой, и необязательно лимит на количество пропускаемых значений None. Продолжает линию с последним полученным значением, когда появляются пробелы (значения None), а не обрывает линию.

Пример:

&target=keepLastValue(Server01.connections.handled)
&target=keepLastValue(Server01.connections.handled, 10)
legendValue(seriesList, *valueTypes)

Принимает одну метрику или список рядов с подстановкой и строку в кавычках. Добавляет значение к имени метрики в легенде. В настоящее время поддерживаются: last, avg, total, min, max. Последний аргумент может быть si (по умолчанию) или binary, в этом случае значения будут отформатированы в соответствующей системе.

&target=legendValue(Sales.widgets.largeBlue, 'avg', 'max', 'si')
limit(seriesList, n)

Принимает одну метрику или список рядов с подстановкой, за которым следует целое число N.

Отображает только первые N метрик. Полезно при тестировании подстановки в метрике.

Пример:

&target=limit(server*.instance*.memory.free,5)

Отображает только свободную память первых 5 экземпляров.

lineWidth(seriesList, width)

Принимает одну метрику или список рядов с подстановкой, за которым следует число F с плавающей точкой.

Отображает выбранные метрики с шириной линии F, переопределяя значение по умолчанию 1 или параметр &lineWidth=X.X.

Полезно для выделения одной метрики из многих или задания разных ширин линий на одном графике.

Пример:

&target=lineWidth(server01.instance01.memory.free,5)
linearRegression(seriesList, startSourceAt=None, endSourceAt=None)

Строит функцию линейной регрессии методом наименьших квадратов.

Принимает один метрик или список метрик с подстановкой подстановочного знака, за которым следуют строка со временем начала линии и строка со временем окончания линии в кавычках. Время начала и окончания линии включительно (диапазон по умолчанию — от начала до конца). Примеры форматов времени см. в from / until, в разделе API отображения. Для регрессии используются точки данных в указанном диапазоне.

Пример:

&target=linearRegression(Server.instance01.threads.busy, '-1d')
&target=linearRegression(Server.instance*.threads.busy, "00:00 20140101","11:59 20140630")
linearRegressionAnalysis(series)

Возвращает коэффициент и смещение функции линейной регрессии методом наименьших квадратов.

logarithm(seriesList, base=10)

Принимает один метрик или список метрик с подстановкой подстановочного знака, основание и строит график с логарифмической шкалой по оси Y. Если основание не указано, используется основание 10.

Пример:

&target=log(carbon.agents.hostname.avgUpdateTime,2)
lowest(seriesList, n=1, func='average')

Принимает один метрик или список метрик с подстановкой подстановочного знака, целое число N и функцию агрегации. Из всех переданных метрик отображаются только N метрик с наименьшим значением агрегированной величины за указанный период времени.

Пример:

&target=lowest(server*.instance*.threads.busy,5,'min')

Отображает 5 серверов с наименьшим количеством занятых потоков.

lowestAverage(seriesList, n)

Принимает один метрик или список метрик с подстановкой подстановочного знака и целое число N. Из всех переданных метрик отображаются только N метрик с наименьшим средним значением за указанный период времени.

Пример:

&target=lowestAverage(server*.instance*.threads.busy,5)

Отображает 5 серверов с наименьшим средним значением.

Это псевдоним для lowest с функцией агрегации average.

lowestCurrent(seriesList, n)

Принимает один метрик или список метрик с подстановкой подстановочного знака и целое число N. Из всех переданных метрик отображаются только N метрик с наименьшим значением в конце указанного периода времени.

Пример:

&target=lowestCurrent(server*.instance*.threads.busy,5)

Отображает 5 серверов с наименьшим количеством занятых потоков прямо сейчас.

Это псевдоним для lowest с функцией агрегации current.

mapSeries(seriesList, *mapNodes)

Краткая форма: map()

Принимает список метрик и отображает его в список списков метрик. Каждый список метрик имеет указанные mapNodes в общем.

Примечание

Эта функция не очень полезна сама по себе. Её следует использовать с reduceSeries()

mapSeries(servers.*.cpu.*,1) =>

  [
    servers.server1.cpu.*,
    servers.server2.cpu.*,
    ...
    servers.serverN.cpu.*
  ]

Каждый узел может быть целым числом, ссылающимся на узел в имени метрики, или строкой, определяющей метку.

maxSeries(*seriesLists)

Принимает один метрик или список метрик с подстановкой подстановочного знака. Для каждой точки данных от каждой переданной метрики выбирается максимальное значение и отображается график.

Пример:

&target=maxSeries(Server*.connections.total)

Это псевдоним для aggregate с функцией агрегации max.

maximumAbove(seriesList, n)

Принимает один метрик или список метрик с подстановкой подстановочного знака и константу n. Отображаются только метрики с максимальным значением выше n.

Пример:

&target=maximumAbove(system.interface.eth*.packetsSent,1000)

Это отобразит только интерфейсы, которые отправили более 1000 пакетов/мин.

maximumBelow(seriesList, n)

Принимает один метрик или список метрик с подстановкой подстановочного знака и константу n. Отображаются только метрики с максимальным значением ниже n.

Пример:

&target=maximumBelow(system.interface.eth*.packetsSent,1000)

Это отобразит только интерфейсы, которые отправили менее 1000 пакетов/мин.

minMax(seriesList)

Применяет популярную технику нормализации min-max, которая для каждой точки данных применяет следующее преобразование нормализации: нормализованное = (точка - мин) / (макс - мин).

Пример:

&target=minMax(Server.instance01.threads.busy)
minSeries(*seriesLists)

Принимает один метрик или список метрик с подстановкой подстановочного знака. Для каждой точки данных от каждой переданной метрики выбирается минимальное значение и отображается график.

Пример:

&target=minSeries(Server*.connections.total)

Это псевдоним для aggregate с функцией агрегации min.

minimumAbove(seriesList, n)

Принимает один метрик или список метрик с подстановкой подстановочного знака и константу n. Отображаются только метрики с минимальным значением выше n.

Пример:

&target=minimumAbove(system.interface.eth*.packetsSent,1000)

Это отобразит только интерфейсы, которые отправили более 1000 пакетов/мин.

minimumBelow(seriesList, n)

Принимает один метрик или список метрик с подстановкой подстановочного знака и константу n. Отображаются только метрики с минимальным значением ниже n.

Пример:

&target=minimumBelow(system.interface.eth*.packetsSent,1000)

Это отобразит только интерфейсы, которые в какой-то момент отправили менее 1000 пакетов/мин.

mostDeviant(seriesList, n)

Принимает один метрик или список метрик с подстановкой подстановочного знака и целое число N. Отображает N наиболее отклоняющихся метрик. Для определения отклоняющихся значений вычисляется стандартное отклонение (сигма) каждой серии и производится сортировка. Возвращаются N серий с наибольшими стандартными отклонениями.

Пример:
&target=mostDeviant(server*.instance*.memory.free, 5)

Отображает 5 экземпляров, которые наиболее сильно отклоняются от среднего значения свободной памяти.

movingAverage(seriesList, windowSize, xFilesFactor=None)

Отображает скользящее среднее значение метрики (или метрик) за определенное количество прошлых точек или временной интервал.

Принимает один метрик или список метрик с подстановкой подстановочного знака, число N точек данных или строку с длительностью времени, например, '1hour' или '5min' (примеры форматов времени см. в from / until, в разделе API отображения), и значение xFilesFactor, определяющее количество точек в окне, которые должны быть не нулевыми для того, чтобы вывод считался допустимым. Отображает среднее значение предшествующих точек данных для каждой точки на графике.

Пример:

&target=movingAverage(Server.instance01.threads.busy,10)
&target=movingAverage(Server.instance*.threads.idle,'5min')
movingMax(seriesList, windowSize, xFilesFactor=None)

Отображает скользящий максимум метрики (или метрик) за определенное количество прошлых точек или временной интервал.

Принимает один метрик или список метрик с подстановкой подстановочного знака, число N точек данных или строку с длительностью времени, например, '1hour' или '5min' (примеры форматов времени см. в from / until, в разделе API отображения), и значение xFilesFactor, определяющее количество точек в окне, которые должны быть не нулевыми для того, чтобы вывод считался допустимым. Отображает максимальное значение предшествующих точек данных для каждой точки на графике.

Пример:

&target=movingMax(Server.instance01.requests,10)
&target=movingMax(Server.instance*.errors,'5min')
movingMedian(seriesList, windowSize, xFilesFactor=None)

Отображает скользящую медиану метрики (или метрик) за определенное количество прошлых точек или временной интервал.

Принимает один метрик или список метрик с подстановкой подстановочного знака, число N точек данных или строку с длительностью времени, например, '1hour' или '5min' (примеры форматов времени см. в from / until, в разделе API отображения), и значение xFilesFactor, определяющее количество точек в окне, которые должны быть не нулевыми для того, чтобы вывод считался допустимым. Отображает медиану предшествующих точек данных для каждой точки на графике.

Пример:

&target=movingMedian(Server.instance01.threads.busy,10)
&target=movingMedian(Server.instance*.threads.idle,'5min')
movingMin(seriesList, windowSize, xFilesFactor=None)

Отображает скользящий минимум метрики (или метрик) за определенное количество прошлых точек или временной интервал.

Принимает один метрик или список метрик с подстановкой подстановочного знака, число N точек данных или строку с длительностью времени, например, '1hour' или '5min' (примеры форматов времени см. в from / until, в разделе API отображения), и значение xFilesFactor, определяющее количество точек в окне, которые должны быть не нулевыми для того, чтобы вывод считался допустимым. Отображает минимальное значение предшествующих точек данных для каждой точки на графике.

Пример:

&target=movingMin(Server.instance01.requests,10)
&target=movingMin(Server.instance*.errors,'5min')
movingSum(seriesList, windowSize, xFilesFactor=None)

Отображает скользящую сумму метрики (или метрик) за определенное количество прошлых точек или временной интервал.

Принимает один метрик или список метрик с подстановкой подстановочного знака, число N точек данных или строку с длительностью времени, например, '1hour' или '5min' (примеры форматов времени см. в from / until, в разделе API отображения), и значение xFilesFactor, определяющее количество точек в окне, которые должны быть не нулевыми для того, чтобы вывод считался допустимым. Отображает сумму предшествующих точек данных для каждой точки на графике.

Пример:

&target=movingSum(Server.instance01.requests,10)
&target=movingSum(Server.instance*.errors,'5min')
movingWindow(seriesList, windowSize, func='average', xFilesFactor=None)

Отображает функцию скользящего окна метрики (или метрик) на заданном числе прошлых точек или временном интервале.

Принимает одну метрику или список метрик с подстановкой шаблонов, число N точек данных или строку с длительностью времени, например, ‘1час’ или ‘5мин’ (см. %%%CODE_BLOCK_193%% в API рендера для примеров форматов времени), функцию для применения к точкам в окне для получения результата и значение xFilesFactor для указания того, сколько точек в окне должны быть отличны от нуля, чтобы результат считался допустимым. Отображает результат функции для предшествующих точек данных для каждой точки на графике.

Пример:

&target=movingWindow(Server.instance01.threads.busy,10)
&target=movingWindow(Server.instance*.threads.idle,'5min','median',0.5)

Примечание

xFilesFactor использует те же семантику, что и в схемах хранения Whisper. Установка его в 0 (по умолчанию) означает, что только одно значение в заданном интервале должно быть отличным от нуля, установка его в 1 означает, что все значения в интервале должны быть отличны от нуля. Значение 0,5 означает, что по крайней мере половина значений в интервале должна быть отлична от нуля.

multiplySeries(*seriesLists)

Принимает две или более ряды и перемножает их точки. Постоянная не может быть использована. Для умножения на константу используйте функцию scale().

Пример:

&target=multiplySeries(Series.dividends,Series.divisors)

Это псевдоним для aggregate с агрегацией multiply.

multiplySeriesWithWildcards(seriesList, *position)

Вызывает multiplySeries после вставки подстановочных знаков в заданном положении(ях).

Пример:

&target=multiplySeriesWithWildcards(web.host-[0-7].{avg-response,total-request}.value, 2)

Это эквивалентно

&target=multiplySeries(web.host-0.{avg-response,total-request}.value)&target=multiplySeries(web.host-1.{avg-response,total-request}.value)...

Это псевдоним для aggregateWithWildcards с агрегацией multiply.

nPercentile(seriesList, n)

Возвращает n-процентное значение каждого ряда в seriesList.

nonNegativeDerivative(seriesList, maxValue=None)

Аналогично функции производной выше, но игнорирует точки данных, которые снижаются. Полезно для счетчиков, которые долгое время увеличиваются, а затем обнуляются или сбрасываются (например, если сетевой интерфейс разрушен и пересоздан путем выгрузки и перезагрузки модуля ядра, это часто встречается с картами USB/Wi-Fi).

Пример:

&target=nonNegativederivative(company.server.application01.ifconfig.TXPackets)
offset(seriesList, factor)

Принимает одну метрику или список метрик с подстановкой шаблонов и константу, и добавляет константу к каждой точке данных.

Пример:

&target=offset(Server.instance01.threads.busy,10)
offsetToZero(seriesList)

Смещает метрику или список метрик с подстановкой шаблонов, вычитая минимальное значение в ряде из каждой точки данных.

Полезно для сравнения различных рядов, где значения в каждом ряде могут быть выше или ниже в среднем, но вас интересует только относительная разница.

Пример использования: для сравнения результатов различных временных задержек. При измерении RTT (например, при пропинге сервера), разные устройства могут возвращать последовательно разные результаты из-за задержки сети, которая будет разной в зависимости от количества сетевых хопов между датчиком и устройством. Чтобы сравнить разные устройства на одном графике, задержка сети каждого устройства должна быть исключена из результатов. Это сокращение, которое берет самый быстрый ответ (наименьшее число в ряде) и устанавливает его в ноль, а затем смещает все остальные точки данных в этом ряду на это значение. Это предполагает, что самый низкий ответ – это самый быстрый ответ устройства, конечно, чем больше точек данных в ряде, тем точнее это предположение.

Пример:

&target=offsetToZero(Server.instance01.responseTime)
&target=offsetToZero(Server.instance*.responseTime)
perSecond(seriesList, maxValue=None)

NonNegativeDerivative, скорректированная для временного интервала ряда. Это полезно для получения метрики текущего общего итога и показания количества обработанных запросов в секунду.

Пример:

&target=perSecond(company.server.application01.ifconfig.TXPackets)

Каждый раз, когда вы выполняете ifconfig, пакеты RX и TXPackets увеличиваются (при условии, что есть сетевой трафик). Применив функцию perSecond, вы можете получить представление о пакетах в секунду, отправленных или полученных, даже если вы записываете только общее количество.

percentileOfSeries(seriesList, n, interpolate=False)

percentileOfSeries возвращает один ряд, который состоит из значений n-перцентиля, взятых по всему ряду с подстановкой шаблонов в каждой точке. Если interpolate не установлено в True, значения перцентилей являются фактическими значениями, содержащимися в одном из предоставленных рядов.

pieAverage(series)

Возвращает среднее значение

pieMaximum(series)

Возвращает максимальное значение

pieMinimum(series)

Возвращает минимальное значение

pow(seriesList, factor)

Принимает одну метрику или список метрик с подстановкой шаблонов, за которым следует константа, и возводит точку данных в степень, указанную константой в каждой точке.

Пример:

&target=pow(Server.instance01.threads.busy,10)
&target=pow(Server.instance*.threads.busy,10)
powSeries(*seriesLists)

Принимает два или более ряда и возводит их точки в степень. Может быть использована константная линия.

Пример:

&target=powSeries(Server.instance01.app.requests, Server.instance01.app.replies)
randomWalkFunction(name, step=60)

Короткое имя: randomWalk()

Возвращает случайную прогулку, начинающуюся с 0. Это отлично подходит для тестирования, когда нет реальных данных в whisper.

Пример:

&target=randomWalk("The.time.series")

Это создаст ряд с именем “The.time.series”, который содержит точки, где x(t) == x(t-1)+random()-0.5, и x(0) == 0. Принимает необязательный второй аргумент как параметр 'шаг' (по умолчанию шаг 60 сек).

rangeOfSeries(*seriesLists)

Принимает список метрик с подстановкой шаблонов. Сжимает набор входов в диапазон ряда.

Пример:

&target=rangeOfSeries(Server*.connections.total)

Это псевдоним для aggregate с агрегацией rangeOf.

reduceSeries(seriesLists, reduceFunction, reduceNode, *reduceMatchers)

Сокращенная форма: reduce()

Принимает список списков рядов и сводит их к списку рядов с помощью reduceFunction.

Сведение выполняется путем сопоставления reduceNode в каждом ряду со списком reduceMatchers. Затем каждый ряд передается в reduceFunction в качестве аргументов в порядке, заданном reduceMatchers. reduceFunction должен возвращать один ряд.

Полученный список рядов получает псевдонимы, чтобы их можно было легко встраивать в другие функции.

Пример: Map/Reduce как процент (bytes_used,total_bytes) для каждого сервера

Предположим, что существуют метрики в формате ниже:

servers.server1.disk.bytes_used
servers.server1.disk.total_bytes
servers.server2.disk.bytes_used
servers.server2.disk.total_bytes
servers.server3.disk.bytes_used
servers.server3.disk.total_bytes
...
servers.serverN.disk.bytes_used
servers.serverN.disk.total_bytes

Чтобы получить процент использованного диска для каждого сервера:

reduceSeries(mapSeries(servers.*.disk.*,1),"asPercent",3,"bytes_used","total_bytes") =>

  alias(asPercent(servers.server1.disk.bytes_used,servers.server1.disk.total_bytes),"servers.server1.disk.reduce.asPercent"),
  alias(asPercent(servers.server2.disk.bytes_used,servers.server2.disk.total_bytes),"servers.server2.disk.reduce.asPercent"),
  alias(asPercent(servers.server3.disk.bytes_used,servers.server3.disk.total_bytes),"servers.server3.disk.reduce.asPercent"),
  ...
  alias(asPercent(servers.serverN.disk.bytes_used,servers.serverN.disk.total_bytes),"servers.serverN.disk.reduce.asPercent")

Другими словами, мы получим следующие метрики:

servers.server1.disk.reduce.asPercent
servers.server2.disk.reduce.asPercent
servers.server3.disk.reduce.asPercent
...
servers.serverN.disk.reduce.asPercent

См. также

mapSeries()

removeAbovePercentile(seriesList, n)

Удаляет данные выше n-й перцентиля из ряда или списка рядов. Значения выше этой перцентили присваиваются значение None.

removeAboveValue(seriesList, n)

Удаляет данные выше заданного порога из ряда или списка рядов. Значения выше этого порога присваиваются значение None.

removeBelowPercentile(seriesList, n)

Удаляет данные ниже n-й перцентили из ряда или списка рядов. Значения ниже этой перцентили присваиваются значение None.

removeBelowValue(seriesList, n)

Удаляет данные ниже заданного порога из ряда или списка рядов. Значения ниже этого порога присваиваются значение None.

removeBetweenPercentile(seriesList, n)

Удаляет ряды, у которых нет значения, лежащего в x-й перцентили всех значений в момент времени.

removeEmptySeries(seriesList, xFilesFactor=None)

Принимает одну метрику или список метрик с подстановкой шаблонов. Из всех переданных метрик отображаются только метрики с непустыми данными.

Пример:

&target=removeEmptySeries(server*.instance*.threads.busy)

Отображаются только активные серверы с непустыми данными.

xFilesFactor использует те же семантику, что и в схемах хранения Whisper. Установка его в 0 (по умолчанию) означает, что только одно значение в ряду должно быть отличным от None для того, чтобы ряд считался непустым; установка его в 1 означает, что все значения в ряду должны быть отличны от None. Значение 0,5 означает, что по крайней мере половина значений в ряду должна быть отлична от None.

roundFunction(seriesList, precision=None)

Принимает одну метрику или список метрик с подстановкой шаблонов, необязательно с точностью, и округляет каждую точку данных до указанной точности.

Пример:

&target=round(Server.instance01.threads.busy)
&target=round(Server.instance01.threads.busy,2)
scale(seriesList, factor)

Принимает одну метрику или список метрик с подстановкой шаблонов и константу, и умножает каждую точку данных на указанную константу.

Пример:

&target=scale(Server.instance01.threads.busy,10)
&target=scale(Server.instance*.threads.busy,10)
scaleToSeconds(seriesList, seconds)

Принимает одну метрику или список метрик с подстановкой шаблонов и возвращает «значение в секунду», где seconds – последний аргумент этой функции.

Полезно в сочетании с функциями производной или интеграла, если вы хотите нормализовать ее результат до известного разрешения для произвольных хранилищ.

secondYAxis(seriesList)

Отображает ряд на дополнительной оси Y.

seriesByTag(*tagExpressions)

Возвращает список рядов, соответствующих всем указанным выражениям тегов.

Пример:

&target=seriesByTag("tag1=value1","tag2!=value2")

Возвращает список рядов, у которых тег tag1 имеет значение value1, И не имеет тега tag2 со значением value2.

Указатели тегов — это строки и могут иметь следующие форматы:

tag=spec    tag value exactly matches spec
tag!=spec   tag value does not exactly match spec
tag=~value  tag value matches the regular expression spec
tag!=~spec  tag value does not match the regular expression spec

Любой указатель тега, который соответствует пустому значению, считается соответствующим рядам, у которых нет этого тега.

По крайней мере, один указатель тега должен требовать ненулевого значения.

Условия регулярных выражений обрабатываются как закрепленные в начале значения.

См. запрос по тегированным рядам для получения более подробной информации.

setXFilesFactor(seriesList, xFilesFactor)

Короткая форма: xFilesFactor()

Принимает один метрический или wildcard список seriesList и значение xFilesFactor между 0 и 1

Когда ряд нуждается в консолидации, это устанавливает долю значений в интервале, которые не должны быть нулевыми, чтобы консолидация считалась валидной. Если значений недостаточно, для этого интервала будет возвращено None.

&target=xFilesFactor(Sales.widgets.largeBlue, 0.5)
&target=Servers.web01.sda1.free_space|consolidateBy('max')|xFilesFactor(0.5)

Значение xFilesFactor, установленное с помощью этой функции, используется в качестве значения по умолчанию для всех функций, которые принимают параметр xFilesFactor, всех функций, агрегирующих данные по нескольким рядам и/или интервалам, и консолидации maxDataPoints.

Значение по умолчанию для всего запроса отрисовки также можно установить с помощью параметра запроса xFilesFactor.

Примечание

xFilesFactor следует тем же семантикам, что и в схемах хранения Whisper. Установка его в 0 (значение по умолчанию) означает, что только одно значение в данном интервале должно быть не нулевым; установка его в 1 означает, что все значения в интервале должны быть не нулевыми. Значение 0,5 означает, что по крайней мере половина значений в интервале должна быть не нулевыми.

sinFunction(name, amplitude=1, step=60)

Короткое псевдоним: sin()

Просто возвращает синус текущего времени. Параметр amplitude (по умолчанию 1) изменяет амплитуду волны.

Пример:

&target=sin("The.time.series", 2)

Это создаст ряд с именем «The.time.series», содержащий sin(x)*2. Принимает необязательный второй аргумент как параметр «amplitude» (значение по умолчанию 1). Принимает необязательный третий аргумент как параметр «step» (значение по умолчанию 60 секунд).

smartSummarize(seriesList, intervalString, func='sum', alignTo=None)

Умная версия summarize.

Логический параметр alignToFrom был заменён на alignTo и больше не имеет никакого эффекта. Выравнивание может быть по годам, месяцам, неделям, дням, часам и минутам.

Эта функция может использоваться с функциями агрегации average, median, sum, min, max, stddev, count, range, multiply и last.

sortBy(seriesList, func='average', reverse=False)

Принимает одну метрику или список seriesList со wildcard, за которой следует функция агрегации и необязательный параметр reverse.

Возвращает метрики, отсортированные в соответствии с указанной функцией.

Пример:

&target=sortBy(server*.instance*.threads.busy,'max')

Отображает серверы в порядке возрастания по максимуму.

sortByMaxima(seriesList)

Принимает одну метрику или список seriesList со wildcard.

Сортирует список метрик в порядке убывания по максимальному значению за указанный период времени. Полезно с параметром &areaMode=all, чтобы сохранить видимость линий с наименьшими значениями.

Пример:

&target=sortByMaxima(server*.instance*.memory.free)
sortByMinima(seriesList)

Принимает одну метрику или список seriesList со wildcard.

Сортирует список метрик по минимальному значению за указанный период времени, включая только ряды, имеющие максимальное значение, большее 0.

Пример:

&target=sortByMinima(server*.instance*.memory.free)
sortByName(seriesList, natural=False, reverse=False)

Принимает одну метрику или список seriesList со wildcard. Сортирует список метрик по имени метрики, используя алфавитный порядок или естественную сортировку. Естественная сортировка позволяет более естественно сортировать имена, содержащие числа, например: - Алфавитная сортировка: server1, server11, server12, server2 - Естественная сортировка: server1, server2, server11, server12

sortByTotal(seriesList)

Принимает одну метрику или список seriesList со wildcard.

Сортирует список метрик в порядке убывания по сумме значений за указанный период времени.

squareRoot(seriesList)

Принимает одну метрику или список seriesList со wildcard и вычисляет квадратный корень каждого значения данных.

Пример:

&target=squareRoot(Server.instance01.threads.busy)
stacked(seriesLists, stackName='__DEFAULT__')

Принимает одну метрику или список seriesList со wildcard и меняет их так, чтобы они были стопкой. Это способ создания стопки нескольких метрик без использования режима стопки (который стопит все). С помощью этого можно создать смешанный стопочный и нестопочный график.

Он также может принимать необязательный аргумент с именем стека, в случае если их больше одного, например, для входных и выходных метрик.

Пример:

&target=stacked(company.server.application01.ifconfig.TXPackets, 'tx')
stddevSeries(*seriesLists)

Принимает одну метрику или список seriesList со wildcard. Отображает стандартное отклонение всех переданных метрик в каждой точке времени.

Пример:

&target=stddevSeries(company.server.*.threads.busy)

Это псевдоним для aggregate с агрегацией stddev.

stdev(seriesList, points, windowTolerance=0.1)

Принимает одну метрику или список seriesList со wildcard и целое число N. Отображает стандартное отклонение всех переданных метрик за последние N точек данных. Если отношение нулевых точек в окне больше, чем windowTolerance, вычисление пропускается. Значение по умолчанию для windowTolerance составляет 0,1 (до 10% точек в окне могут отсутствовать). Обратите внимание, что если это значение установлено в 0,0, это вызовет большие разрывы в выводе в любом месте, где отсутствует хотя бы одна точка.

Пример:

&target=stdev(server*.instance*.threads.busy,30)
&target=stdev(server*.instance*.cpu.system,30,0.0)
substr(seriesList, start=0, stop=0)

Принимает одну метрику или список seriesList со wildcard и 1 или 2 целых числа. Предполагается, что имя метрики — это список или массив, где каждый элемент разделен точками. Выводит n элементов массива (если передано только одно целое число n) или n-m элементов массива (если переданы два целых числа n и m). Список начинается с элемента 0 и заканчивается элементом (длина - 1).

Пример:

&target=substr(carbon.agents.hostname.avgUpdateTime,2,4)

Метка будет отображаться как «hostname.avgUpdateTime».

sumSeries(*seriesLists)

Короткая форма: sum()

Складывает метрики и возвращает сумму в каждой точке данных. (См. integral для суммы за период времени)

Пример:

&target=sum(company.server.application*.requestsHandled)

Это покажет сумму всех обработанных запросов в минуту (при условии, что requestsHandled собираются раз в минуту). Если метрики с разными интервалами хранения объединяются, отображается метрика с наименьшим интервалом хранения, а сумма других метрик усредняется для метрик с более мелкими интервалами хранения.

Это псевдоним для aggregate с агрегацией sum.

sumSeriesWithWildcards(seriesList, *position)

Вызов sumSeries после вставки wildcard в заданную позицию(и).

Пример:

&target=sumSeriesWithWildcards(host.cpu-[0-7].cpu-{user,system}.value, 1)

Это эквивалентно

&target=sumSeries(host.cpu-[0-7].cpu-user.value)&target=sumSeries(host.cpu-[0-7].cpu-system.value)

Это псевдоним для aggregateWithWildcards с агрегацией sum.

summarize(seriesList, intervalString, func='sum', alignToFrom=False)

Сводка данных в интервальные корзины определённого размера.

По умолчанию содержимое каждой интервальной корзины суммируется вместе. Это полезно для счетчиков, где каждое приращение представляет собой отдельное событие, и для получения значения “на X” необходимо просуммировать все события в этом интервале.

Если вместо этого указать «average», будет возвращено среднее значение для каждой корзины, что может быть полезнее, когда значение является измерителем, представляющим определённое значение во времени.

Эта функция может использоваться с функциями агрегации average, median, sum, min, max, diff, stddev, count, range, multiply и last.

По умолчанию корзины вычисляются путем округления до ближайшего интервала. Это хорошо работает для интервалов, меньших суток. Например, 22:32 попадет в корзину 22:00-23:00 при интервале 1 час.

Передача alignToFrom=true вместо этого создаст корзины, начиная с времени от. В этом случае корзина для 22:32 зависит от времени от. Если от=6:30, то корзина 1 часа для 22:32 — 22:30-23:30.

Пример:

&target=summarize(counter.errors, "1hour") # total errors per hour
&target=summarize(nonNegativeDerivative(gauge.num_users), "1week") # new users per week
&target=summarize(queue.size, "1hour", "avg") # average queue size per hour
&target=summarize(queue.size, "1hour", "max") # maximum queue size during each hour
&target=summarize(metric, "13week", "avg", true)&from=midnight+20100101 # 2010 Q1-4
threshold(value, label=None, color=None)

Принимает число F, а затем метку (в двойных кавычках) и цвет. (См. bgcolor в API отрисовки для допустимых имён и форматов цветов.)

Рисует горизонтальную линию на уровне F на графике.

Пример:

&target=threshold(123.456, "omgwtfbbq", "red")
timeFunction(name, step=60)

Короткое псевдоним: time()

Возвращает метку времени для каждого значения X.

Пример:

&target=time("The.time.series")

Это создаст ряд с именем «The.time.series», содержащий в Y такое же значение (в секундах), как и в X. Принимает необязательный второй аргумент как параметр «step» (значение по умолчанию 60 секунд).

END_OF_DOCUMENT_MARKER
timeShift(seriesList, timeShift, resetEnd=True, alignDST=False)

Принимает один метрику или серию данных с подстановкой значений, за которым следует строка с длительностью времени (см. %%%CODE_BLOCK_268%% в API отображения для примеров форматов времени).

Отображает выбранные метрики, сдвинутые во времени. Если знак не указан, подразумевается минус ( - ), который сдвинет метрику назад во времени. Если указан плюс ( + ), метрика будет сдвинута вперёд во времени.

Автоматически сбросит конечную дату диапазона до конца базовой статистики, если resetEnd не False. Пример: при сдвиге во времени на последнюю неделю и установке диапазона графика для включения времени в будущем, этот сдвиг будет ограничен текущим временем. Если resetEnd равен False, то будет отображён весь диапазон, включая будущее время.

Поскольку время сдвигается на фиксированное количество секунд, сравнение временного периода с DST с временным периодом без DST, и наоборот, может привести к кажущемуся несовпадению. Например, 8:00 может наложиться на 7:00. Чтобы компенсировать это, используйте параметр alignDST.

Полезно для сравнения метрики с самой собой в прошлые периоды или для исправления данных, хранящихся со смещением.

Пример:

&target=timeShift(Sales.widgets.largeBlue,"7d")
&target=timeShift(Sales.widgets.largeBlue,"-7d")
&target=timeShift(Sales.widgets.largeBlue,"+1h")
timeSlice(seriesList, startSliceAt, endSliceAt='now')

Принимает одну метрику или метрику с подстановкой значений, за которой следуют две строки с временем начала и окончания линии. Временные отметки начала и конца включены. См. from / until в API отображения для примеров форматов времени.

Полезно для фильтрации части ряда данных из более широкого диапазона данных.

Пример:

&target=timeSlice(network.core.port1,"00:00 20140101","11:59 20140630")
&target=timeSlice(network.core.port1,"12:00 20140630","now")
timeStack(seriesList, timeShiftUnit='1d', timeShiftStart=0, timeShiftEnd=7)

Принимает одну метрику или серию данных с подстановкой значений, за которым следует строка с длительностью времени (см. from / until в API отображения для примеров форматов времени). Также принимает начальный и конечный множители для длительности времени.

Создаёт серию данных, состоящую из исходного ряда метрик, наложенных с временными сдвигами, начиная с начального множителя и заканчивая конечным множителем.

Полезно для просмотра истории или для использования в функциях averageSeries или stddevSeries.

Пример:

&target=timeStack(Sales.widgets.largeBlue,"1d",0,7)    # create a series for today and each of the previous 7 days
transformNull(seriesList, default=0, referenceSeries=None)

Принимает метрику или серию данных с подстановкой значений и заменяет нулевые значения значением, указанным в default. Значение 0 используется по умолчанию. Необязательный параметр referenceSeries, если указан, представляет собой метрику или серию данных, определяющую временные интервалы, в которых следует заменить нулевые значения. Если указан, нулевые значения заменяются только в тех интервалах, где для того же интервала в любом из referenceSeries найдено ненулевое значение. Эта функция дополняет функцию drawNullAsZero в графическом режиме, но также работает в текстовом режиме.

Пример:

&target=transformNull(webapp.pages.*.views,-1)

Это позволит взять любую страницу без значений и установить значение по умолчанию -1. Можно использовать и любые другие числовые значения.

unique(*seriesLists)

Принимает произвольное количество seriesLists и возвращает уникальные серии, отфильтрованные по имени.

Пример:

&target=unique(mostDeviant(server.*.disk_free,5),lowestCurrent(server.*.disk_free,5))

Отображает серверы с низким объёмом свободного места на диске и серверы с сильно отклоняющимися значениями, но никогда не отображает одну и ту же серию дважды.

useSeriesAbove(seriesList, value, search, replace)

Сравнивает максимальное значение каждой серии с заданным value. Если максимальное значение серии больше value, то к имени серии применяется регулярное выражение поиска и замены, чтобы отобразить связанную метрику.

Например, useSeriesAbove(ganglia.metric1.reqs,10,’reqs’,’time’), метрика времени отклика будет отображаться только тогда, когда максимальное значение соответствующей метрики запросов/ов больше 10

&target=useSeriesAbove(ganglia.metric1.reqs,10,"reqs","time")
verticalLine(ts, label=None, color=None)

Принимает строку с отметкой времени ts.

Отображает вертикальную линию в указанную временную отметку с необязательными параметрами ‘label’ и ‘color’. Поддерживаются форматы временных отметок, как относительные (например, -3ч), так и абсолютные (например, 16:00_20110501), такие же, как в параметрах from и until. При установке, ‘label’ появится в легенде графика.

Примечание: Любые временные отметки, определённые вне запрошенного диапазона, вызовут исключение ‘ValueError’.

Пример:

&target=verticalLine("12:3420131108","event","blue")
&target=verticalLine("16:00_20110501","event")
&target=verticalLine("-5mins")
weightedAverage(seriesListAvg, seriesListWeight, *nodes)

Принимает ряд средних значений и ряд весов и вычисляет средневзвешенное значение для всех значений. Соответствующие значения должны иметь один или несколько узлов (номеров) и/или тегов.

Пример:

&target=weightedAverage(*.transactions.mean,*.transactions.count,0)

Каждый узел может быть целым числом, ссылающимся на узел в имени серии, или строкой, идентифицирующей тег.

Плагины функций

Плагины функций могут определять дополнительные функции для использования в вызовах отображения.

Плагин функции — это просто файл, определяющий одну или несколько функций и экспортирующий словари SeriesFunctions и/или PieFunctions. Когда Graphite загрузит плагин, он добавит функции в SeriesFunctions и/или PieFunctions в список доступных функций.

Каждая экспортированная функция должна принимать как минимум параметр requestContext и seriesList, и может принимать дополнительные параметры по мере необходимости.

requestContext будет словарем, как определено в graphite.render.views.renderView(), seriesList будет списком TimeSeries объектов.

from graphite.functions.params import Param, ParamTypes

def toUpperCase(requestContext, seriesList):
  """Custom function that changes series names to UPPERCASE"""
  for series in seriesList:
    series.name = series.name.upper()
  return seriesList

# optionally set the group attribute
toUpperCase.group = 'Custom'
toUpperCase.params = [
  Param('seriesList', ParamTypes.seriesList, required=True),
]

SeriesFunctions = {
  'upper': toUpperCase,
}

Каждая функция может иметь строку документации, .group, и .params атрибуты, которые используются в выводе API функций в качестве подсказок для билдеров запросов.

Атрибут .group — это имя группы в виде строки, атрибут .params — список определений параметров.

Каждое определение параметра является Param объектом, конструктор Param принимает следующие аргументы (обратите внимание, что requestContext не включен в список параметров):

  • name: Имя параметра
  • paramtype: Тип параметра, один из:
    • ParamTypes.aggFunc: Имя функции агрегации
    • ParamTypes.boolean: True/False
    • ParamTypes.date: Дата
    • ParamTypes.float: Вещественное число
    • ParamTypes.integer: Целое число
    • ParamTypes.interval: Спецификатор интервала, например, 1h, 1d, и т. д.
    • ParamTypes.intOrInterval: Спецификатор целого числа или интервала
    • ParamTypes.node: Номер узла
    • ParamTypes.nodeOrTag: Номер узла или имя тега
    • ParamTypes.series: Одна серия
    • ParamTypes.seriesList: Список серий
    • ParamTypes.seriesLists: Список списков серий
    • ParamTypes.string: Строковое значение
    • ParamTypes.tag: Имя тега
  • required: Устанавливается в True для обязательных параметров
  • default: Значение по умолчанию для необязательных параметров
  • multiple: Устанавливается в True для параметров, принимающих несколько экземпляров (определены с помощью * в Python)
  • options: Список доступных значений для параметров, принимающих только определённый список
  • suggestions: Список рекомендуемых значений для параметров, принимающих значения в свободном формате

Пользовательские файлы плагинов могут быть размещены в папке /opt/graphite/webapp/graphite/functions/custom и будут загружаться автоматически при запуске Graphite.

Чтобы загрузить модуль плагина функций из пакета, добавьте его в параметр %%%CODE_BLOCK_304%%:

FUNCTION_PLUGINS = [
  'some.function_plugin',
]

API функций

Вы можете использовать HTTP-API, чтобы получить список доступных функций или подробности о конкретной функции.

Чтобы получить список доступных функций:

$ curl -s "http://graphite/functions?pretty=1"

{
  "absolute": {
    "description": "<function description>",
    "function": "absolute(seriesList)",
    "group": "Transform",
    "module": "graphite.render.functions",
    "name": "absolute",
    "params": [
      {
        "name": "seriesList",
        "required": true,
        "type": "seriesList"
      }
    ]
  },
  <more functions...>
}

Если параметр grouped=1 передан, возвращаемый список будет организован по группам:

$ curl -s "http://graphite/functions?pretty=1&grouped=1"

{
  "Alias": {
    <alias functions...>
  },
  <more groups...>
}

Чтобы получить определение конкретной функции:

$ curl -s "http://graphite/functions/absolute?pretty=1"

{
  "description": "<function description>",
  "function": "absolute(seriesList)",
  "group": "Transform",
  "module": "graphite.render.functions",
  "name": "absolute",
  "params": [
    {
      "name": "seriesList",
      "required": true,
      "type": "seriesList"
    }
  ]
}

© 2008–2012 Chris Davis
© 2011–2016 The Graphite Project
Licensed under the Apache License, Version 2.0.
https://graphite.readthedocs.io/en/latest/functions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API