Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Программирование с Grafana и InfluxDB

polarnik
February 04, 2020

Программирование с Grafana и InfluxDB

Доклад Вячеслава Смирнова из Райффайзенбанк для митапа сообщества по тестированию производительности (qa_load)

Рассказ про программирование с Grafana 6.5.2 и InfluxDB 1.7.

Рассмотрены две темы:
1. Фильтрация выпадающих списков с тегами InfluxDB по времени из Grafana
2. Вычисление длительности выполнения теста с ELAPSED и передача фильтров по времени из отчета в отчет через ссылки Grafana

Косвенно затронуты темы:
1. Вычисление интенсивности записи метрик из Gatling в InfluxDB с помощью функции ELAPSED
2. Настройка InfluxDB для разбора метрик по протоколу Graphite.
3. Настройка InfluxDB для сохранения идентификатора запуска теста Gatling.
4. Настройка Gatling для передачи идентификатора запуска теста в InfluxDB.

Чат сообщества QA — Load & Performance:
https://t.me/qa_load

Запись выступления:
https://youtu.be/sEcudxQB62M?t=573

polarnik

February 04, 2020
Tweet

More Decks by polarnik

Other Decks in Programming

Transcript

  1. 19 Gatling Realtime: проблемы 1 Нет фильтрации по тестам 2

    Нет фильтрации по запускам 3 Gatling HTML красивее и точнее, чем Realtime отчёт
  2. 20 Проблемы, решаемые в докладе 1 Нет фильтрации по тестам

    2 Нет фильтрации по запускам 3 Gatling HTML красивее и точнее, чем Realtime отчёт
  3. 21 Фильтрация по тестам (симуляциям) class OpenModelRampUsers extends Simulation {

    setUp( SimpleScenario.simpleScenario("rampUsers") .inject( rampUsers(1000) during (60 seconds) ).protocols(Protocol.httpConf) ) }
  4. 26 Простая выборка тегов из InfluxDB выдаёт теги, без фильтра

    по времени SHOW TAG VALUES FROM "gatling" WITH KEY = "simulation"
  5. 27 Простая выборка тегов из InfluxDB выдаёт теги, без фильтра

    по времени SHOW TAG VALUES FROM "gatling" WITH KEY = "simulation"
  6. 28 Простая выборка тегов из InfluxDB с фильтром по времени

    SHOW TAG VALUES FROM "gatling" WITH KEY = "simulation" WHERE $timeFilter
  7. 29 Простая выборка тегов из InfluxDB с фильтром по времени

    SHOW TAG VALUES FROM "gatling" WITH KEY = "simulation" WHERE $timeFilter
  8. 30 Размер шарды 168 часов точность фильтрации 168 часов >

    use gatling Using database gatling > show retention policies name duration shardGroupDuration replicaN def ---- -------- ------------------ -------- --- autogen 0s 168h0m0s 1 tru https://docs.influxdata.com/influxdb/v1.7/query_language/schema_exploration/#filter-meta-queries-by-time
  9. 32 Выборка тегов из InfluxDB c DISTINCT("tag") и подзапросом SELECT

    DISTINCT("simulation") FROM (SELECT "simulation","mean" FROM "gatling" WHERE $timeFilter)
  10. 33 Выборка тегов из InfluxDB c DISTINCT("tag") и подзапросом SELECT

    DISTINCT("simulation") FROM (SELECT "simulation","mean" FROM "gatling" WHERE $timeFilter) https://stackoverflow.com/questions/54931888/
  11. 34 Выборка тегов из InfluxDB c DISTINCT("tag") и подзапросом SELECT

    DISTINCT("simulation") FROM (SELECT "simulation","mean" FROM "gatling" WHERE $timeFilter) execution: 92 ms planning: 12 ms total: 104 ms https://stackoverflow.com/questions/54931888/
  12. 35 Выборка тегов из InfluxDB c GROUP BY "tag" и

    подзапросом SELECT "simulation" FROM ( SELECT last("mean") FROM "gatling" WHERE $timeFilter GROUP BY "simulation")
  13. 36 Выборка тегов из InfluxDB c GROUP BY "tag" и

    подзапросом SELECT "simulation" FROM ( SELECT last("mean") FROM "gatling" WHERE $timeFilter GROUP BY "simulation") execution: 4 ms planning: 28 ms total: 31 ms
  14. 37 Выборка тегов из InfluxDB c GROUP BY "tag" и

    подзапросом SELECT "tag" FROM ( SELECT last("field") FROM "measurement" WHERE $timeFilter AND ... GROUP BY "tag" )
  15. 38 Проблемы, решаемые в докладе 1 Есть фильтрация по тестам

    2 Нет фильтрации по запускам 3 Gatling HTML красивее и точнее, чем Realtime отчёт
  16. 39 Проблемы, решаемые в докладе 1 Есть фильтрация по тестам

    2 Нет фильтрации по запускам ◦ нет идентификатора запуска 3 Gatling HTML красивее и точнее, чем Realtime отчёт
  17. 40 Для фильтрации по запускам Расчитаем идентификатор запуска def getRunID(roundMinute:

    Int): String = { val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH") val startTime = OffsetDateTime.now().format(dateTimeFormatter) val date = new Date() val calendar = new GregorianCalendar() calendar.setTime(date) val minute = calendar.get(Calendar.MINUTE) val minuteRound = round(floor( 1.0d * minute / roundMinute) * roundMinute) s"${startTime}:${"%02d".format(minuteRound)}" }
  18. 42 Перед передачей идентификатора убираем rootPathPrefix из gatling.conf graphite {

    light = false # only send the al host = "localhost" # The host where t port = 2003 # The port to whic protocol = "tcp" # The protocol use #rootPathPrefix = "gatling" # The common prefi bufferSize = 81920 # Internal data bu writePeriod = 1 # Write period, in }
  19. 43 Передача идентификатора тесту Для maven artifact (Engine.scala) var config

    = scala.collection.mutable.Map( core.directory.Resources -> IDEPathHelper.resourcesDirectory.toString, data.graphite.RootPathPrefix -> s"v2.gatling.${getRunId(10)}.${getHost}", core.SimulationClass -> "io.qaload.gatling.simulation.OpenModel" ) Gatling.fromMap(config)
  20. 45 Разбор rootPathPrefix в influxdb.conf templates = [ "gatling.*.users.*.* measurement.simulation.measurement.request.field",

    "gatling.*.*.*.* measurement.simulation.request.status.field group=0", "gatling.*.*.*.*.* measurement.simulation.group1.request.status.field group=1", "gatling.*.*.*.*.*.* measurement.simulation.group1.group2.request.status.field group=2", "gatling.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.request.status.field group= "gatling.*.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.group4.request.status.field "v2.gatling.*.*.*.users.*.* .measurement.run.host.simulation.measurement.request.field", "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0", "v2.gatling.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.request.status.field group=1 "v2.gatling.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.request.status.field "v2.gatling.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.request.stat "v2.gatling.*.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.group4.req ]
  21. 46 Разбор rootPathPrefix в influxdb.conf gatling.openmodelatonceusers.allRequests.ok.count 1 1577784130 templates =

    [ "gatling.*.users.*.* measurement.simulation.measurement.request.field", "gatling.*.*.*.* measurement.simulation.request.status.field group=0", "gatling.*.*.*.*.* measurement.simulation.group1.request.status.field group=1", "gatling.*.*.*.*.*.* measurement.simulation.group1.group2.request.status.field group=2", "gatling.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.request.status.field group= "gatling.*.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.group4.request.status.field "v2.gatling.*.*.*.users.*.* .measurement.run.host.simulation.measurement.request.field", "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0", "v2.gatling.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.request.status.field group=1 "v2.gatling.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.request.status.field "v2.gatling.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.request.stat "v2.gatling.*.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.group4.req ]
  22. 47 Разбор rootPathPrefix в influxdb.conf gatling.openmodelatonceusers.allRequests.ok.count 1 1577784130 templates =

    [ "gatling.*.users.*.* measurement.simulation.measurement.request.field", "gatling.*.*.*.* measurement.simulation.request.status.field group=0", "gatling.*.*.*.*.* measurement.simulation.group1.request.status.field group=1", "gatling.*.*.*.*.*.* measurement.simulation.group1.group2.request.status.field group=2", "gatling.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.request.status.field group= "gatling.*.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.group4.request.status.field "v2.gatling.*.*.*.users.*.* .measurement.run.host.simulation.measurement.request.field", "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0", "v2.gatling.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.request.status.field group=1 "v2.gatling.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.request.status.field "v2.gatling.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.request.stat "v2.gatling.*.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.group4.req ]
  23. 48 Разбор rootPathPrefix в influxdb.conf gatling.openmodelatonceusers.allRequests.ok.count 1 1577784130 templates =

    [ "gatling.*.users.*.* measurement.simulation.measurement.request.field", "gatling.*.*.*.* measurement.simulation.request.status.field group=0", "gatling.*.*.*.*.* measurement.simulation.group1.request.status.field group=1", "gatling.*.*.*.*.*.* measurement.simulation.group1.group2.request.status.field group=2", "gatling.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.request.status.field group= "gatling.*.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.group4.request.status.field "v2.gatling.*.*.*.users.*.* .measurement.run.host.simulation.measurement.request.field", "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0", "v2.gatling.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.request.status.field group=1 "v2.gatling.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.request.status.field "v2.gatling.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.request.stat "v2.gatling.*.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.group4.req ]
  24. 49 Разбор rootPathPrefix в influxdb.conf gatling.openmodelatonceusers.allRequests.ok.count 1 1577784130 templates =

    [ "gatling.*.users.*.* measurement.simulation.measurement.request.field", "gatling.*.*.*.* measurement.simulation.request.status.field group=0", "gatling.*.*.*.*.* measurement.simulation.group1.request.status.field group=1", "gatling.*.*.*.*.*.* measurement.simulation.group1.group2.request.status.field group=2", "gatling.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.request.status.field group= "gatling.*.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.group4.request.status.field "v2.gatling.*.*.*.users.*.* .measurement.run.host.simulation.measurement.request.field", "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0", "v2.gatling.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.request.status.field group=1 "v2.gatling.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.request.status.field "v2.gatling.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.request.stat "v2.gatling.*.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.group4.req ]
  25. 50 Разбор rootPathPrefix в influxdb.conf gatling.openmodelatonceusers.allRequests.ok.count 1 1577784130 templates =

    [ "gatling.*.users.*.* measurement.simulation.measurement.request.field", "gatling.*.*.*.* measurement.simulation.request.status.field group=0", "gatling.*.*.*.*.* measurement.simulation.group1.request.status.field group=1", "gatling.*.*.*.*.*.* measurement.simulation.group1.group2.request.status.field group=2", "gatling.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.request.status.field group= "gatling.*.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.group4.request.status.field "v2.gatling.*.*.*.users.*.* .measurement.run.host.simulation.measurement.request.field", "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0", "v2.gatling.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.request.status.field group=1 "v2.gatling.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.request.status.field "v2.gatling.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.request.stat "v2.gatling.*.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.group4.req ]
  26. 51 Разбор rootPathPrefix в influxdb.conf gatling.openmodelatonceusers.allRequests.ok.count 1 1577784130 templates =

    [ "gatling.*.users.*.* measurement.simulation.measurement.request.field", "gatling.*.*.*.* measurement.simulation.request.status.field group=0", "gatling.*.*.*.*.* measurement.simulation.group1.request.status.field group=1", "gatling.*.*.*.*.*.* measurement.simulation.group1.group2.request.status.field group=2", "gatling.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.request.status.field group= "gatling.*.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.group4.request.status.field "v2.gatling.*.*.*.users.*.* .measurement.run.host.simulation.measurement.request.field", "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0", "v2.gatling.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.request.status.field group=1 "v2.gatling.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.request.status.field "v2.gatling.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.request.stat "v2.gatling.*.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.group4.req ]
  27. 55 Разбор тега status gatling.openmodelatonceusers.allRequests.ok.count 1 1577784130 "gatling.*.*.*.* measurement.simulation.request.status.field group=0",

    Измерение InfluxDB gatling simulation (тег) openmodelatonceusers request (тег) allRequest status (тег) ok
  28. 56 Разбор поля count gatling.openmodelatonceusers.allRequests.ok.count 1 1577784130 "gatling.*.*.*.* measurement.simulation.request.status.field group=0",

    Измерение InfluxDB gatling simulation (тег) openmodelatonceusers request (тег) allRequest status (тег) ok count (поле)
  29. 57 Разбор поля count (значение поля) gatling.openmodelatonceusers.allRequests.ok.count 1 1577784130 "gatling.*.*.*.*

    measurement.simulation.request.status.field group=0", Измерение InfluxDB gatling simulation (тег) openmodelatonceusers request (тег) allRequest status (тег) ok count (поле) 1
  30. 58 Разбор экстра-тега group gatling.openmodelatonceusers.allRequests.ok.count 1 1577784130 "gatling.*.*.*.* measurement.simulation.request.status.field group=0",

    Измерение InfluxDB gatling simulation (тег) openmodelatonceusers request (тег) allRequest status (тег) ok count (поле) 1 group (тег) 0
  31. 59 Разбор метки времени gatling.openmodelatonceusers.allRequests.ok.count 1 1577784130 "gatling.*.*.*.* measurement.simulation.request.status.field group=0",

    Измерение InfluxDB gatling simulation (тег) openmodelatonceusers request (тег) allRequest status (тег) ok count (поле) 1 group (тег) 0 время 1577784130
  32. 60 Разбор rootPathPrefix в influxdb.conf v2.gatling.2020-01-22_15:10.LoadAgent1.openmodelatonceusers.allRequests.ok.count 1 1577784130 templates =

    [ "gatling.*.users.*.* measurement.simulation.measurement.request.field", "gatling.*.*.*.* measurement.simulation.request.status.field group=0", "gatling.*.*.*.*.* measurement.simulation.group1.request.status.field group=1", "gatling.*.*.*.*.*.* measurement.simulation.group1.group2.request.status.field group=2", "gatling.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.request.status.field group= "gatling.*.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.group4.request.status.field "v2.gatling.*.*.*.users.*.* .measurement.run.host.simulation.measurement.request.field", "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0", "v2.gatling.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.request.status.field group=1 "v2.gatling.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.request.status.field "v2.gatling.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.request.stat "v2.gatling.*.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.group4.req ]
  33. 61 Разбор rootPathPrefix в influxdb.conf v2.gatling.2020-01-22_15:10.LoadAgent1.openmodelatonceusers.allRequests.ok.count 1 1577784130 templates =

    [ "gatling.*.users.*.* measurement.simulation.measurement.request.field", "gatling.*.*.*.* measurement.simulation.request.status.field group=0", "gatling.*.*.*.*.* measurement.simulation.group1.request.status.field group=1", "gatling.*.*.*.*.*.* measurement.simulation.group1.group2.request.status.field group=2", "gatling.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.request.status.field group= "gatling.*.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.group4.request.status.field "v2.gatling.*.*.*.users.*.* .measurement.run.host.simulation.measurement.request.field", "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0", "v2.gatling.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.request.status.field group=1 "v2.gatling.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.request.status.field "v2.gatling.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.request.stat "v2.gatling.*.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.group4.req ]
  34. 62 Разбор rootPathPrefix в influxdb.conf v2.gatling.2020-01-22_15:10.LoadAgent1.openmodelatonceusers.allRequests.ok.count 1 1577784130 templates =

    [ "gatling.*.users.*.* measurement.simulation.measurement.request.field", "gatling.*.*.*.* measurement.simulation.request.status.field group=0", "gatling.*.*.*.*.* measurement.simulation.group1.request.status.field group=1", "gatling.*.*.*.*.*.* measurement.simulation.group1.group2.request.status.field group=2", "gatling.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.request.status.field group= "gatling.*.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.group4.request.status.field "v2.gatling.*.*.*.users.*.* .measurement.run.host.simulation.measurement.request.field", "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0", "v2.gatling.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.request.status.field group=1 "v2.gatling.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.request.status.field "v2.gatling.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.request.stat "v2.gatling.*.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.group4.req ]
  35. 63 Разбор rootPathPrefix в influxdb.conf v2.gatling.2020-01-22_15:10.LoadAgent1.openmodelatonceusers.allRequests.ok.count 1 1577784130 templates =

    [ "gatling.*.users.*.* measurement.simulation.measurement.request.field", "gatling.*.*.*.* measurement.simulation.request.status.field group=0", "gatling.*.*.*.*.* measurement.simulation.group1.request.status.field group=1", "gatling.*.*.*.*.*.* measurement.simulation.group1.group2.request.status.field group=2", "gatling.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.request.status.field group= "gatling.*.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.group4.request.status.field "v2.gatling.*.*.*.users.*.* .measurement.run.host.simulation.measurement.request.field", "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0", "v2.gatling.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.request.status.field group=1 "v2.gatling.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.request.status.field "v2.gatling.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.request.stat "v2.gatling.*.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.group4.req ]
  36. 64 Разбор rootPathPrefix в influxdb.conf v2.gatling.2020-01-22_15:10.LoadAgent1.openmodelatonceusers.allRequests.ok.count 1 1577784130 templates =

    [ "gatling.*.users.*.* measurement.simulation.measurement.request.field", "gatling.*.*.*.* measurement.simulation.request.status.field group=0", "gatling.*.*.*.*.* measurement.simulation.group1.request.status.field group=1", "gatling.*.*.*.*.*.* measurement.simulation.group1.group2.request.status.field group=2", "gatling.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.request.status.field group= "gatling.*.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.group4.request.status.field "v2.gatling.*.*.*.users.*.* .measurement.run.host.simulation.measurement.request.field", "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0", "v2.gatling.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.request.status.field group=1 "v2.gatling.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.request.status.field "v2.gatling.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.request.stat "v2.gatling.*.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.group4.req ]
  37. 65 Подходит один template v2.gatling.2020-01-22_15:10.LoadAgent1.openmodelatonceusers.allRequests.ok.count 1 1577784130 templates = [

    "gatling.*.users.*.* measurement.simulation.measurement.request.field", "gatling.*.*.*.* measurement.simulation.request.status.field group=0", "gatling.*.*.*.*.* measurement.simulation.group1.request.status.field group=1", "gatling.*.*.*.*.*.* measurement.simulation.group1.group2.request.status.field group=2", "gatling.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.request.status.field group= "gatling.*.*.*.*.*.*.*.* measurement.simulation.group1.group2.group3.group4.request.status.field "v2.gatling.*.*.*.users.*.* .measurement.run.host.simulation.measurement.request.field", "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0", "v2.gatling.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.request.status.field group=1 "v2.gatling.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.request.status.field "v2.gatling.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.request.stat "v2.gatling.*.*.*.*.*.*.*.*.*.* .measurement.run.host.simulation.group1.group2.group3.group4.req ]
  38. 71 Разбор тега request v2.gatling.2020-01-22_15:10.LoadAgent1.openmodelatonceusers.allRequests.ok.count 1 1577784130 "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0",

    Измерение InfluxDB gatling run (тег) 2020-01-22_15:10 host (тег) LoadAgent1 simulation (тег) openmodelatonceusers request (тег) allRequest
  39. 72 Разбор тега status v2.gatling.2020-01-22_15:10.LoadAgent1.openmodelatonceusers.allRequests.ok.count 1 1577784130 "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0",

    Измерение InfluxDB gatling run (тег) 2020-01-22_15:10 host (тег) LoadAgent1 simulation (тег) openmodelatonceusers request (тег) allRequest status (тег) ok
  40. 73 Разбор поля count v2.gatling.2020-01-22_15:10.LoadAgent1.openmodelatonceusers.allRequests.ok.count 1 1577784130 "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0",

    Измерение InfluxDB gatling run (тег) 2020-01-22_15:10 host (тег) LoadAgent1 simulation (тег) openmodelatonceusers request (тег) allRequest status (тег) ok count (поле)
  41. 74 Разбор поля count (значение поля) v2.gatling.2020-01-22_15:10.LoadAgent1.openmodelatonceusers.allRequests.ok.count 1 1577784130 "v2.gatling.*.*.*.*.*.*

    .measurement.run.host.simulation.request.status.field group=0", Измерение InfluxDB gatling run (тег) 2020-01-22_15:10 host (тег) LoadAgent1 simulation (тег) openmodelatonceusers request (тег) allRequest status (тег) ok count (поле) 1
  42. 75 Разбор экстра-тега group v2.gatling.2020-01-22_15:10.LoadAgent1.openmodelatonceusers.allRequests.ok.count 1 1577784130 "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0",

    Измерение InfluxDB gatling run (тег) 2020-01-22_15:10 host (тег) LoadAgent1 simulation (тег) openmodelatonceusers request (тег) allRequest status (тег) ok count (поле) 1 group (тег) 0
  43. 76 Разбор метки времени v2.gatling.2020-01-22_15:10.LoadAgent1.openmodelatonceusers.allRequests.ok.count 1 1577784130 "v2.gatling.*.*.*.*.*.* .measurement.run.host.simulation.request.status.field group=0",

    Измерение InfluxDB gatling run (тег) 2020-01-22_15:10 host (тег) LoadAgent1 simulation (тег) openmodelatonceusers request (тег) allRequest status (тег) ok count (поле) 1 group (тег) 0
  44. 77 Выбор тега run (фильтр) из InfluxDB c фильтрацией по

    simulation SELECT "run" FROM ( SELECT last("mean") FROM "gatling" WHERE $timeFilter AND "run" <> '' AND "simulation" = '$simulation' GROUP BY "run")
  45. 78 Проблемы, решаемые в докладе 1 Есть фильтрация по тестам

    2 Нет фильтрации по запускам ◦ есть идентификатор запуска ◦ нет периода от старта до финала 3 Gatling HTML красивее и точнее, чем Realtime отчёт
  46. 79 Значение graphite.writePeriod в gatling.conf может быть разным graphite {

    light = false # only s host = "localhost" # The ho #rootPathPrefix = "gatling" # The co writePeriod = 1 # Write bufferSize = 81920 # Intern }
  47. 80 Значение graphite.writePeriod можно вычислить через ELAPSED SELECT last("wp90") as

    "writePeriod" FROM ( SELECT PERCENTILE("wp", 90) as "wp90" FROM ( SELECT ELAPSED("count", 1s) as "wp" FROM "gatling" WHERE "simulation" = '$simulation' and $timeFilter AND "status" = 'all' AND "request" = 'allRequests' ) GROUP BY time(10s), "run" ) GROUP BY "run"
  48. 81 Значение graphite.writePeriod можно вычислить через ELAPSED SELECT last("wp90") as

    "writePeriod" FROM ( SELECT PERCENTILE("wp", 90) as "wp90" FROM ( SELECT ELAPSED("count", 1s) as "wp" FROM "gatling" WHERE "simulation" = '$simulation' and $timeFilter AND "status" = 'all' AND "request" = 'allRequests' ) GROUP BY time(10s), "run" ) GROUP BY "run"
  49. 82 Сумма graphite.writePeriod примерно равна длительности теста SELECT SUM(ELAPSED("count", 1s))

    AS "duration" FROM "gatling" WHERE "simulation" = '$simulation' AND $timeFilter AND "status" = 'all' AND "request" = 'allRequests' GROUP BY "run"
  50. 83 Длительность теста ±10 в конце теста через cumulative_sum SELECT

    last("d") AS "Duration" FROM ( SELECT cumulative_sum(elapsed(last("count"), 1s)) AS "d" FROM "gatling" WHERE "simulation" = '$simulation' AND $timeFilter GROUP BY time(10s), "run" ) GROUP BY "run"
  51. 84 Двойная длительность теста в момент завершения теста ±10 сек

    SELECT (last("d")+10)*2 AS "DoubleDuration" FROM ( SELECT cumulative_sum(elapsed(last("count"), 1s)) AS "d" FROM "gatling" WHERE "simulation" = '$simulation' AND $timeFilter GROUP BY time(10s), "run" ) GROUP BY "run"
  52. 86 Проблемы, решаемые в докладе 1 Есть фильтрация по тестам

    2 Нет фильтрации по запускам ◦ есть идентификатор запуска ◦ есть период от старта до финала 3 Gatling HTML красивее и точнее, чем Realtime отчёт
  53. 87 Для Time в Table panel зададим стиль и представим

    Time, как ссылку https://grafana.com/docs/grafana/latest/reference/timerange/#controlling-time-range-using-url
  54. 88 Можно ссылаться на ячейки таблицы и на переменные из

    фильтра /d/gatling/gatling-report? time=${__cell}& time.window=${__cell_2}000& var-g=${__cell_3}s& var-run=${__cell_1}& var-simulation=${simulation}& var-loadstation=All& ...
  55. 93 Проблемы, решаемые в докладе 1 Есть фильтрация по тестам

    2 Есть фильтрация по запускам ◦ есть идентификатор запуска ◦ есть период от старта до финала 3 Gatling HTML красивее и точнее, чем Realtime отчёт
  56. 94 Проблемы, решаемые в докладе 1 Есть фильтрация по тестам

    2 Есть фильтрация по запускам ◦ есть идентификатор запуска ◦ есть период от старта до финала 3 Gatling HTML красивее и точнее, чем Realtime отчёт
  57. 108 Проблемы, решаемые в докладе 1 Есть фильтрация по тестам

    2 Есть фильтрация по запускам ◦ есть идентификатор запуска ◦ есть период от старта до финала 3 Gatling Realtime красив, точен и удобен в работе