Я собираю журналы событий каждый раз, когда изменяется свойство какого-либо устройства. Для этого я решил использовать:Анализ журналов событий в реальном времени с помощью Elasticsearch
- Logstash - где мой агент IoT приложение отправляет журналы в формате JSON,
- Elasticsearch - для хранения данных (журналы),
- Kibana - для визуализации данных.
JSON с бревнами в настоящее время отправить через регулярные промежутки времени и его форма выглядит следующим образом:
{"deviceEventLogs":[{"date":"16:16:39 31-08-2016","locationName":"default","property":"on","device":"Lamp 1","value":"
false","roomName":"LivingRoom"}, ... ,]}
Пример записи одного события в Elasticsearch выглядит следующим образом:
{
"_index": "logstash-2016.08.25",
"_type": "on",
"_id": "AVbDYQPq54WlAl_UD_yg",
"_score": 1,
"_source": {
"@version": "1",
"@timestamp": "2016-08-25T20:25:28.750Z",
"host": "127.0.0.1",
"headers": {
"request_method": "PUT",
"request_path": "/deviceEventLogs",
"request_uri": "/deviceEventLogs",
"http_version": "HTTP/1.1",
"content_type": "application/json",
"http_user_agent": "Java/1.8.0_91",
"http_host": "127.0.0.1:31311",
"http_accept": "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2",
"http_connection": "keep-alive",
"content_length": "34861"
},
"date": "2016-08-08T14:48:11.000Z",
"device": "Lamp 1",
"property": "on",
"locationName": "default",
"roomName": "LivingRoom",
"value_boolean": true
}
}
Моя цель заключается в создании веб-сайта с какой-то приборной панелью, на которой анализируются данные в режиме резонансного времени (допустимо несколько минут):
- показывает историю потребления энергии и прогнозирование потребления в особенности
- обнаружения аномалий в потреблении энергии и другие факторы, такие как огни или нагревательного использование
- показывает Рекомендацию основано на каком-то не замысловатые статистики, т.е. «вы можете переместить данное устройство от LOCATION1 к LOCATION2, потому что это нужнее там (более интенсивно используется, чем в другом месте)»и т.д.
Хотя последний пункт довольно тривиально - я могу использовать простой запрос или агрегации в Elasticsearch, а затем сравнить это до некоторой стоимости, первые два пункта требуют углубленного анализа lik e машинное обучение или интеллектуальный анализ данных.
На данный момент система оснащена около 50 устройствами, обновляющими их состояние каждые 10 секунд в среднем. В будущем количество устройств может увеличиться до 50 000. Ассимиг 100 байт для одного журнала событий может привести примерно в 15 терабайт данных в Elasticsearch в год.
Общий вопрос: какими могут быть резонансные решения/технология/архитектура такой системы?
- Является ли это резонным началом для хранения всех моих журналов в Elasticsearch?
- Я рассматриваю библиотеку es-hadoop, чтобы использовать Elasticsearch вместе с Apache Spark, чтобы иметь возможность обрабатывать мои данные с помощью Mlib в Spark - это направление, на которое нужно идти?
- Могу ли я использовать только Elasticsearch для хранения всех моих данных в нем и просто использовать Spark и Mlib для углубленного анализа или я должен рассмотреть возможность реализации так называемой «Лямбда-архитектуры», рассматривающей Elasticsearch как уровень скорости? Я немного покрасил о различных конфигурациях, где использовался Kafka, Apache Storm, но я не уверен, что мне это нужно. Поскольку проект должен быть выполнен в течение одного месяца, и я новичок, меня беспокоит сложность и, следовательно, время, необходимое для такой реализации.
- Что делать, если загрузка данных будет в 10 раз меньше (около 1,5 терабайт в год) - будет ли ваш ответ одинаковым?
Это уже что-то, что я собрал, чтобы помочь моей команде понять, что архитектура Kafka + Spark streaming + Druid проще построить: https://github.com/ramkumarvenkat/kafka-spark-streaming-druid. Я прикрепил приложение. Извините за бесстыдную плагин! –
Спасибо вам за ваш ответ. Это мне очень помогло. Есть еще один вопрос: как насчет интеллектуального анализа данных? Is Spark подходит для этого? Я нашел R плагин для ES (https://github.com/ropensci/elastic). Является ли это возможностью для решения проблемы или есть какая-либо замена для анализа шаблонов (т. Е. Предоставления интеллектуального анализа данных)? – user3084736
Spark MLib очень популярен, хотя я его мало использовал. R - еще один популярный язык. Как правило, если вы можете получить данные в магазине (Kafka/ES), то у вас обязательно будут варианты. Еще одна вещь, которую стоит рассмотреть - это операции - как вы собираетесь поддерживать и контролировать свой кластер и т. Д. –