Kibana - Vega-Lite: как визуализировать многострочные данные по оси Y - данные, поступающие непосредственно из индекса Elasticsearch - чего мне не хватает в коде? - PullRequest
0 голосов
/ 23 апреля 2020

Elasticsearch / Kibana: 7.0.1

Vega-lite: 2.6.0

У меня есть индекс ES (эластичный поиск) с именем : someindex, в котором у меня есть действительные данные истории JIRA (за последний 1 год).

Вот данные CSV файла (заголовок / строка), которые Я уже глотал вышеупомянутый индекс ES, используя Logsta sh. Я вижу данные в разделе Kibana Discover в парах JSON (ключ = значение).

sprint_number,sprint,sprint_start_date,sprint_end_date,workdays_lead_time,workdays_cycle_time
0,Bot Fighters - JIRA,,,,,360,20,14
1,Avengers - JIRA,2019-03-14T16:00:00.000-07:00,2019-03-27T15:55:00.000-07:00,30,28
2,WonderWoman,2019-03-28T16:00:00.000-07:00,2019-04-10T15:55:00.000-07:00,20,15
3,Spiderman,2019-04-11T16:00:00.000-07:00,2019-04-24T15:55:00.000-07:00,24,15
4,Hulk,2019-04-25T16:00:00.000-07:00,2019-05-09T15:55:00.000-07:00,17,10
5,Sprint 2020,2019-05-10T16:00:00.000-07:00,2019-05-23T15:55:00.000-07:00,10,8
6,Sprint Team ABC,2019-05-24T16:00:00.000-07:00,2019-06-06T15:55:00.000-07:00,12,9

Данные в индексе ES имеют 2 основных столбца / поля, которые содержат данные float type (т.е. количество дней может быть 5 или 3.5 ), которые я пытаюсь показать в диаграмме типа линии, используя Vega-lite .

Поля: Я пытаюсь показать 2 строки на графике Vega-lite для следующих полей.

  1. workdays_lead_time
  2. workdays_cycle_time

В Кибане, если я go до http://my-elk-server:5601/app/kibana#/dev_tools/console?_g=() url, и если я введу следующее в разделе Console, я увижу действительный результат справа (окно вывода):

GET someindex/_search
{
  "size": 10000,
  "_source": [
              "sprint_number",
              "sprint",
              "workdays_lead_time",
              "workdays_cycle_time"
             ]  
}

Это похоже на то, что я получаю в окне вывода консоли, как вы можете видеть, hits.hits содержит / дает мне поля _source, которые Я помещаю в консоль раздел.

{
  "took" : 13,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 475,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "someindex",
        "_type" : "_doc",
        "_id" : "gAnUZnEBzzVgIgK9eKV2",
        "_score" : 1.0,
        "_source" : {
          "sprint_number" : "0",
          "sprint" : "Bot Fighters - JIRA",
          "workdays_lead_time" : "5",
          "workdays_cycle_time" : "3"
        }
      },
      {
        "_index" : "someindex",
        "_type" : "_doc",
        "_id" : "gAnUZnEBzzVgIgK9eKV2",
        "_score" : 1.0,
        "_source" : {
          "sprint_number" : "1",
          "sprint" : "Avengers - JIRA",
          "workdays_lead_time" : "4",
          "workdays_cycle_time" : "2"
        }
      },
      ...
      ......
      ...... similar data chunks lines here.
      ......
      ...
    ]
  }
}

Поскольку поле / ключ в индексе ES имеет значение workdays_lead_time и workdays_cycle_time (а не как значение в некоторых столбцах, например type_of_time), я думаю, что единственные примеры графиков, которые я могу использовать, это либо:

  1. https://vega.github.io/vega-lite/examples/repeat_layer.html (т.е. линейный график из нескольких серий с оператором повтора) - или -
  2. https://vega.github.io/vega-lite/examples/line_color_halo.html (т. Е. Многорядная линейная диаграмма с ходом Halo). https://www.youtube.com/watch?v=lQGCipY3th8

Я взял пример удара Гало (как указано выше).

PS: В моем случае я не хочу vega_datasets ( data / somedata.csv ), т. Е. Любые установленные образцы данных где-то или Я хочу определить любые жестко закодированные значения / данные в коде Vega-lite.

Идея состоит в том, чтобы просто выполнить запрос к ES index и показать линии двух вышеуказанных полей (номер цикла / дня) в сгенерированном Vega-Lite графике.

В моем случае мне пришлось изменить следующую строку кода примера с:

  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",

на

  "$schema": "https://vega.github.io/schema/vega-lite/v2.6.0.json",

Кроме того, как моя цель состоит в запросе для индекса ES someindex, я не использую следующие строки (из примера, который ищет файл .csv в некоторой папке данных):

  1. "data": {"url": "data/stocks.csv"},
  2. раздел transform (как указано в примере).

Я изменил эту строку:

"stroke": {"datum": {"repeat": "layer"}, "type": "nominal"}

на следующую (поскольку я не использую какой-либо файл .csv из каких-либо примеров данных).

"stroke": {"field": {"repeat": "layer"}, "type": "nominal"}

Для этого я создал новую визуализацию (тип) Vega и, наконец, определил следующий код для моей диаграммы, НО, это не дает мне никаких строк:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v2.6.0.json",
  "description": "Multi-series Line Chart with Halo. Use pivot and repeat-layer as a workaround to facet groups of lines and their halo strokes. See https://github.com/vega/vega-lite/issues/6192 for more discussion.",

  data: {
    url: {
      %context%: true
      %timefield%: "sprint_end_date"
      index: someindex
      body: {
        size: 10000,
        "_source": [ 
                     "sprint_number",
                     "sprint",
                     "workdays_lead_time",
                     "workdays_cycle_time"
                   ]
      }
    },
    format: { property: "hits.hits" }
  }, 

  "repeat": {
    "layer": [ "workdays_lead_time", "workdays_cycle_time" ]
    /*
    "layer": [ "_source.workdays_lead_time", "_source.workdays_cycle_time" ]
    */
  },
  "spec": {
    "layer": [{

      "mark": {"type": "line", "stroke": "white", "strokeWidth": 4},
      "encoding": {
        "x": {"field": "sprint", "type": "temporal" },

        /* Tried this too, even this doesn't show any chart.
        "x": {"field": "_source.sprint", "type": "nominal"},
        */

        /* Tried this too, even this doesn't show any chart.
        "x": {"field": "_source.sprint_number", "type": "quantitative"},
        */

        "y": { "aggregate": "max", "field": {"repeat": "layer"}, "type": "quantitative", "title": "Line-WhatIsThis"}
      }
    },{

      "mark": {"type": "line"},
      "encoding": {

        "x": {"field": "_source.sprint", "type": "temporal"},

        "y": { "aggregate": "max", "field": {"repeat": "layer"}, "type": "quantitative", "title": "Some-Lines"},

        "stroke": {"aggregate": "max", "field": {"repeat": "layer"}, "type": "nominal"}
      }

    }]
  }
}

Вопросы:

  1. Как я могу исправить этот код, чтобы показать строки. Там нет ошибок (в окне вывода).

  2. Какой график является хорошим выбором для меня. PS: Другие простые линейные диаграммы в примерах Vega-lite, принимают workdays_lead_time / workdays_cycle_time в качестве значений в столбце / поле индекса.

В моем случае эти 2 являются не значениями, а самими столбцами / полями (и содержат значение типа с плавающей запятой - число дней хранения) - очень похоже на пример Halo Stroke (см. Данные CSV здесь: https://vega.github.io/editor/# / examples / vega-lite / line_color_halo и вы увидите, что AAPL, AMZN, GOOG и т. Д. c являются столбцами / полями (а не значением поля)). В моем случае это два поля, которые я пытаюсь показать на графике Vega-lite.

...