Как отобразить 95% в виде линии на графике - PullRequest
0 голосов
/ 06 апреля 2020

Сначала немного информации о данных.
У меня есть база данных InfluxDB с одним измерением, autobandwidth, которая заполняется каждую минуту статистикой интерфейсов, собранной из snmp, но здесь интересны теги host, snmp_id и значения ifInOctets и ifOutOctets.
Затем у меня есть непрерывный запрос, который заполняет производную для изменения байтов в байтах / секундах с использованием non_negative_derivative и заполняет autobandwidth_deriv.

Я использую Grafana для отображения данных и использую этот запрос:

SELECT
  mean("non_negative_derivative_ifInOctets") *8 AS "in",
  mean("non_negative_derivative_ifOutOctets") *8 AS "out"
FROM "autobandwidth_deriv"
WHERE ("host" =~ /^$host$/ AND "snmp_id" =~ /^$snmp_id$/) AND $timeFilter
GROUP BY time($__interval), "host", "snmp_id"

Он прекрасно отображает данные.

Теперь у меня есть еще один запрос к получить значения 95%:

SELECT
  percentile("non_negative_derivative_ifInOctets", 95) *8 AS "in 95%",
  percentile("non_negative_derivative_ifOutOctets", 95) *8 AS "out 95%"
FROM "autobandwidth_deriv"
WHERE ("host" =~ /^$host$/ AND "snmp_id" =~ /^$snmp_id$/) AND $timeFilter
GROUP "host", "snmp_id"

Это дает мне значения 95% в легенде графика.

Теперь, что я хотел бы получить прямую линию, где 95 %, чтобы иметь визуальное пособие и видеть, когда трафик c поднимается выше.
Поскольку запрос effxdb возвращает только одно временное значение, он не отображается на графике.
Кроме того, потому что я иметь только одно значение времени, использование любого значения fill() не Т помочь, нечего заполнять. И при этом установка значения NULL для подключенного в настройках графа grafana по той же причине невозможна.

После нескольких дней чтения все, что я смог найти о процентилях и графиках, все, что я в итоге сделал, - это использование подобъекта:

SELECT
  MEAN("in 95%") as "in 95%", MEAN("out 95%") as "out 95%"
FROM (
  SELECT
    percentile("non_negative_derivative_ifInOctets", 95) *8 AS "in 95%",
    percentile("non_negative_derivative_ifOutOctets", 95) *8 AS "out 95%"
  FROM "autobandwidth_deriv"
  WHERE ("host" =~ /^$host$/ AND "snmp_id" =~ /^$snmp_id$/) AND $timeFilter
  GROUP BY time(600d), "host", "snmp_id"
)
GROUP BY time($__interval), "host", "snmp_id" fill(previous)

Теперь у меня есть линия, которую я хочу ... за исключением случаев, когда мой временной ряд пересекает границу time(600d), где у меня есть два значения.

Мне нужно GROUP BY time(600d) в подвыборке в противном случае InfluxDB умничает и вычисляет, что я хочу получить все значения времени из подвыбора, и в итоге получаю данные, которые без вычисления процентиля ...

Итак, это не решение, и я делаю не знаю, что делать дальше.
Может быть, мне нужно что-то сделать в Графане, но я не могу понять, что ...

...