26
Elasticsearch: рациональный подход к созданию собственной системы аналитики Вячеслав Никулин, ведущий серверный разработчик, Nekki

кри 2014 elastic search рациональный подход к созданию собственной системы аналитики

Embed Size (px)

DESCRIPTION

KRI

Citation preview

Page 1: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Elasticsearch: рациональный подход к созданию собственной системы аналитики

Вячеслав Никулин, ведущий серверный разработчик, Nekki

Page 2: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Нам нужна аналитика

Page 3: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Поиск готового решения

● Готово к использованию

● Технические и функциональные ограничения

● Высокая цена

Page 4: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

РСУБД

● Знакомый SQL - путь

● Сложно масштабировать и поддерживать

● А может нам не нужна РСУБД?

Page 5: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

NoSQL

● Документоориентированность, масштабируемость, отказоустойчивость

● Огромный спектр технологий Hadoop HBase Cassandra MongoDB Redis Riak Kafka Storm RabbitMQ ZeroMQ Spark etc

● Нет опыта - разработка может занять годы

Page 6: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Elasticsearch

Page 7: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Elasticsearch за 10 секунд

● Документо-ориентированное хранилище, не требующее описание схемы таблиц

● Распределенное, горизонтально-масштабируемое, отказоустойчивое● RESTful API (json поверх http)● Мощное поисковый движок● Написан на Java, расширяем● Активно развивается (> 15 релизов в этом году)● Разработан поверх Apache Lucene● Открытый исходный код (Apache License 2.0)● Много пользователей (StackOverflow, GitHub, TheGuardian, Bloomberg)

Page 8: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Чего в elasticsearch нет

● Джойны

● Транзакции

● Безопасность

Page 9: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Стек ELK

● Elasticsearch● Logstash

○ Inputs (file, syslog, tcp, rabbitmq, zeromq, redis)○ Filters (geoip, grok, ruby)○ Outputs (file, elasticsearch, mongodb, zabbix)

● Kibana● Marvel● Curator

Page 10: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Терминология

● Узел - один сервер (один инстанс elasticsearch/jvm)● Кластер - множество узлов● Документ - базовый юнит информации, который может быть

индексирован.● Индекс - коллекция документов с походими характеристиками● Тип - множество документов с одинаковым набором полей● Шард - неделимый юнит масштабирования● Реплика - копия шарда

Примерное соотвествие между понятиями РСУБД и Elasticsearch

● РСУБД ⇒ База данных/Схема⇒ Таблица ⇒ Строка ⇒ Столбец● Elasticsearch ⇒ Индекс ⇒ Тип ⇒ Документ ⇒ Поле

Page 11: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Разработка системы аналитики

Page 12: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Ключевые особенности

● Возможность играть в оффлайне

● ~1 000 000 DAU

Page 13: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Процессинг логов

● Генерация и сохранение логов в клиенте

● Отправка логов на сервер

● Фильтрация логов, добавление полей в события, сохранение лога на

диск

● Централизация логов

● Импорт логов в Elasticsearch

● Визуализация данных

Page 14: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Генерация событий в клиенте

● Эвент - это json-объект

● Проектирование перечня эвентов и их структуры

○ Список эвентов

○ Обязательные параметры эвента

○ Дополнительные параметры

Page 15: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Отправка логов на сервер● Http-запрос на веб-сервер

● Бэкенд на PHP

● Прореживание логов○ Каждый Nый

○ Плательщик

○ High level

○ Участник A/B теста

○ Некоторые события нужно принимать от всех юзеров

○ Стратегии можно комбинировать

○ Фильтрация читеров

Page 16: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Обработка логов на сервере● Фильтрация логов

● Добавление полей в событие

● Сохранение логов на диск

Page 17: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Централизация логов● Несколько серверов (ios, android etc) с установленным logstash

● Logstash отслеживает изменения в директории и отсылает новые данные

на сервер консолидации логов

● Logstash на центральном сервере принимает данные и отправляет их в

elasticsearch

Page 18: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Маппинг данных● Иногда необходим явный маппинг

○ Nested объекты

○ Timestamp в виде long

○ Специфичный настройки индексирования

● Задается шаблоном в файле или с помощью REST API

Page 19: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Разбиение по индексам● User-based индексы

● Timestamp-based индексы

○ /logs-2014-09-01/purchase, /logs-2014-09-02/fight_end

○ Удалять лучше индекс целиком

Page 20: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

О чем не стоит забывать● Mapping explosion

○ Неправильно: {"1": 1} {"2": 4} {"3": 9} {"4": 16} {"5": 25}

○ Правильно: {"key": 1, "value": 1} {"key": 2, "value": 4}

● Длинные GC паузы

● Много вложенных агрегаций

● Проблема зиллиона шардов

○ Индекс одного документа приведет к OOM

Page 21: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Визуализация данных● Kibana

● Marvel

● Своя админка

Page 22: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Продакшн

Page 23: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Наша аналитика● Сложные гд-отчеты

● Статистика крашей

● Аналитика А/B тестов

Page 24: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Цифры● Один сервер

500 ГБ SSD, 4x-ядерный E3-1270 3.50GHz, 32 GB RAM

● 50 rps индексирования, в пике было 10к

● в день 3М событий, 1ГБ в elasticsearch

● 1-2% cpu load

● всего 100M документов

● Поиск < 100 мс

Page 25: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Команда, поддержка● Сейчас занято 1.5 человека

● Запустили в продакшн за 2 месяца силами 2.5 человек

● Геймдизайнеры осваивают инструмент и сами пишут запросы

● Большие планы на будущее: больше гд-отчетов, статистика пуш

уведомлений, внедрение в другие проекты компании

Page 26: кри 2014 elastic search  рациональный подход к созданию собственной системы аналитики

Вопросы?