Запрос InfxDB для 5 лучших использования процессора

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

Итак, мой InfluxDB это:

измерение: lve

поля: CPU,EP,IO,IOPS,MEM,MEMPHY,NETI,NETO,NPROC,fEP,fMEM,fMEMPHY,fNPROC,lCPU,lCPUW,lEP,lIO,lIOPS,lMEM,lMEMPHY,lNETI,lNeto, lCPRO

теги: xpool, хост, пользователь (где: xpool - это идентификатор xen-пула, хост - это имя хоста cloudLinux, пользователь - имя пользователя общего хостинга)

данные собираются каждые 5 секунд

Как это предложение запроса к:

  1. Выберите записи из определенного xpool+host, и

  2. получить 5 уникальных имен пользователей, которые выдают ТОП использования ЦП за 5 минут? Есть сотни имен, но я хочу получить только топ-5.

Примечание: То же самое, что и в примере 4 из TOP() из https://docs.influxdata.com/influxdb/v1.5/query_language/functions/, если только ожидаемые результаты не являются следующими:

name: h2o_feet
time                  top    location
----                  ---    --------
2015-08-18T00:00:00Z  8.12   coyote_creek
2015-08-18T00:54:00Z  2.054  santa_monica

Скорее, чем:

name: h2o_feet
time                  top    location
----                  ---    --------
2015-08-18T00:48:00Z  7.11   coyote_creek
2015-08-18T00:54:00Z  6.982  coyote_creek
2015-08-18T00:54:00Z  2.054  santa_monica
2015-08-18T00:24:00Z  7.635  coyote_creek
2015-08-18T00:30:00Z  7.5    coyote_creek
2015-08-18T00:36:00Z  7.372  coyote_creek
2015-08-18T00:00:00Z  8.12   coyote_creek
2015-08-18T00:06:00Z  8.005  coyote_creek
2015-08-18T00:12:00Z  7.887  coyote_creek

Поскольку "8,12" является самым высоким значением "coyote_creek", а "2,054" является самым высоким значением "Santa_monica"

Искренне

-bino-

1 ответ

Решение

Вероятно, подзапрос мог бы помочь, например, это из базы данных, использующей telegraf:

SELECT top,host FROM (SELECT TOP(usage_user, 1) AS top, host from cpu WHERE time > now() -1m GROUP BY host)

Это выведет что-то вроде:

name: cpu
time                top                 host
----                ---                 ----
1527489800000000000 1.4937106918238994  1.host.tld
1527489808000000000 0.3933910306845004  2.host.tld
1527489810000000000 4.17981072555205    3.host.tld
1527489810000000000 0.8654602675059009  4.host.tld

Первый запрос:

SELECT TOP(usage_user, 1) AS top, host from cpu WHERE time > now() -1m GROUP BY host

Использует TOP получить только 1 предмет и используя поле usage_user

Затем для "красивой печати" используется подзапрос:

SELECT top,host FROM (...)
Другие вопросы по тегам