Визуализация данных ElasticSearch отслеживаемых состояний устройства с принтером - PullRequest
0 голосов
/ 23 января 2019

Я слежу за некоторыми киосками, в которых есть принтер, восстановленные данные говорят мне, что у меня есть 16 возможных состояний принтера (это информация, которую WMI говорит мне), мне нужно сделать панель управления с последним состоянием (если это проблема типа "no paper", то менструация должна быть плачевной, красной или что-то в этом роде, но это что-то вроде "no error", менструация должна быть зеленой), это данные exple JSON, которые я отправляю ElasticSearch

{
  "@timestamp": "2019-01-22T17:12:18.431798-0500",
  "beat": {
    "hostname": "PC-TEST",
    "version": "1.0.0",
    "name": "PC-TEST"
  },
  "PrinterDevice": {
    "DeviceName": "Impresora-Test",
    "ErrorState": {
      "code": 2,
      "message": "No Error"
    }
  }
}

это еще один пример

{
  "@timestamp": "2019-01-22T17:15:18.431798-0500",
  "beat": {
    "hostname": "PC-TEST",
    "version": "1.0.0",
    "name": "PC-TEST"
  },
  "PrinterDevice": {
    "DeviceName": "Impresora-Test",
    "ErrorState": {
      "code": 4,
      "message": "No Paper"
    }
  }
}

спасибо за все

1 Ответ

0 голосов
/ 24 января 2019

Чтобы получить последнее состояние, вы можете выполнить простой запрос, который сортируется на основе метки времени desc, запрашивая только один документ, и вы получите последнее состояние:

{
  "size" : 1,
  "query" : {
    "bool" : {
        "must" : [
            "exists" : { "field" : "PrinterDevice.ErrorState.message" }
        ]
    }
  },
  "sort" : [
    {"@timestamp" : {"order" : "desc"}}
  ]
}

Если у вас есть несколько устройств и вы хотите выполнить один запрос, чтобы получить последнее состояние всех устройств, вы можете добавить несколько агрегатов:

{
  "size" : 0,
  "query" : {
    "bool" : {
        "must" : [
            "exists" : { "field" : "PrinterDevice.ErrorState.message" }
        ]
    }
  },
  "aggs" : {
    "state_per_device" : {
        "terms" : { 
            "field" : "PrinterDevice.DeviceName" 
        },
        "aggs" : {
            "latest_state" : {
                "top_hits": {
                    "sort": [
                        {
                            "@timestamp": {
                                "order": "desc"
                            }
                        }
                    ],
                    "_source": {
                        "includes": [ "PrinterDevice.ErrorState.message" ]
                    },
                    "size" : 1
                }
            }
        }
    }
  }
}

Это даст вам последний статус для каждого устройства изasticsearch. Что касается визуализации этих ответов, вы можете использовать canvas или любой другой инструмент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...