Vega-Lite + Kibana:将大小单位与 x 轴时间单位匹配,以实现事件之间的准确时间跨度

问题描述

我正在使用 Elastic/Kibana 收集数据并对其进行可视化,我有一个服务器编译代码并运行测试,每次我向 Elastic 提交一份关于作业开始时间、花费多长时间以及是否成功的记录是成功的......等

我以气泡图自然灾害图为例,目的是为每个开始的工作显示一个圆圈。但是我的气泡大小(映射到以分钟为单位的持续时间)与我的 x 轴(映射到时间戳)不匹配并设置为 timeunit 分钟..

我这样做是错误的吗?这是我第一次使用 vega-lite。我不确定我所追求的是否可行。

我当前的代码

        {
  "$schema": "https://vega.github.io/schema/vega-lite/v2.json","data": {
    "values": [
      {"timeStamp": "2021-02-24T01:01:01.4327375+00:00","timerDuration": 360,"serverName": "SERV0","taskResult": "Success"},{"timeStamp": "2021-02-24T01:11:01.4327375+00:00","timerDuration": 5,"taskResult": "Failure"},{"timeStamp": "2021-02-24T01:21:01.4327375+00:00",{"timeStamp": "2021-02-24T01:31:01.4327375+00:00",{"timeStamp": "2021-02-24T01:41:01.4327375+00:00","timerDuration": 12,{"timeStamp": "2021-02-24T01:51:01.4327375+00:00","timerDuration": 1,"serverName": "SERV1","taskResult": "User Abort"},{"timeStamp": "2021-02-24T01:6:01.4327375+00:00","timerDuration": 500,"taskResult": "Success"}
    ]
  },"transform": [
    {"calculate": "toDate('timeStamp')","as": "var_time"},{"calculate": "'timerDuration' / 60","as": "var_duration_min"}
  ],"mark": {"type": "circle","opacity": 0.5},"encoding": {
    "x": {
      "field": "var_time","type": "temporal","axis": {"grid": false,"labelAngle": 60},"timeUnit": "utcminutes","title": null
    },"y": {
      "field": "serverName","type": "ordinal","color": {
      "condition":[
          {"test": "'taskResult' == 'Success'","value": "green"},{"test": "'taskResult' == 'User Abort'","value": "white"},{"test": "'taskResult' == 'Script Error'","value": "purple"}
        ],"value": "red"
        },"size": {
      "field": "var_duration_min","type": "quantitative"
    },"tooltip": [
      {"field": "serverName","type": "nominal","title": "Server"},{"field": "taskNameShort","title": "Task"},{"field": "var_time","title": "Started At"},{"field": "var_duration_min","type": "quantitative","title": "Duration (min)"},{"field": "taskResult","title": "Result"}
    ]
  }
}

this is how it looks,the time filter thing from kibana also doesn't seem to work...

解决方法

我检查了你的 vega-lite 配置。并注意到您的计算和条件中缺少 datum。我已在下面更新了您的配置:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json","height": "container","width": "container","data": {
    "values": [
      {
        "timeStamp": "2021-02-24T01:01:01.4327375+00:00","timerDuration": 360,"serverName": "SERV0","taskResult": "Success"
      },{
        "timeStamp": "2021-02-24T01:11:01.4327375+00:00","timerDuration": 5,"taskResult": "Failure"
      },{
        "timeStamp": "2021-02-24T01:21:01.4327375+00:00",{
        "timeStamp": "2021-02-24T01:31:01.4327375+00:00",{
        "timeStamp": "2021-02-24T01:41:01.4327375+00:00","timerDuration": 12,{
        "timeStamp": "2021-02-24T01:51:01.4327375+00:00","timerDuration": 1,"serverName": "SERV1","taskResult": "User Abort"
      },{
        "timeStamp": "2021-02-24T01:6:01.4327375+00:00","timerDuration": 500,"taskResult": "Success"
      }
    ]
  },"transform": [
    {"calculate": "toDate(datum.timeStamp)","as": "var_time"},{"calculate": "datum.timerDuration / 60","as": "var_duration_min"}
  ],"mark": {"type": "circle","opacity": 0.5},"encoding": {
    "x": {
      "field": "var_time","type": "temporal","axis": {"grid": false,"labelAngle": 60},"timeUnit": "utcminutes","title": null
    },"y": {"field": "serverName","type": "ordinal","title": null},"color": {
      "condition": [
        {"test": "datum.taskResult == 'Success'","value": "green"},{"test": "datum.taskResult == 'User Abort'","value": "white"},{"test": "datum.taskResult == 'Script Error'","value": "purple"}
      ],"value": "red"
    },"size": {"field": "var_duration_min","type": "quantitative"},"tooltip": [
      {"field": "serverName","type": "nominal","title": "Server"},{"field": "taskNameShort","title": "Task"},{"field": "var_time","title": "Started At"},{
        "field": "var_duration_min","type": "quantitative","title": "Duration (min)"
      },{"field": "taskResult","title": "Result"}
    ]
  }
}