SlideShare a Scribd company logo
1 of 34
Download to read offline
Карта граблей на
поле сбора и
доставки логов.
Lazada-way
Юрий Бушмелев
Lazada TechHub
Lazada? Что это?
• интернет-магазин №1 в 6 странах ЮВА (Вьетнам, Таиланд,
Малайзия, Индонезия, Сингапур и Филиппины), с 2016 года
— часть Alibaba Group
• 4 дата-центра
• более 80 микро-сервисов на GO + наследие на PHP
• более 6 миллионов сообщений в минуту по системе в целом
6 миллионов сообщений, которые надо...
• отправить из приложения
• принять для доставки
• доставить для дальнейшего анализа и хранения
• анализировать
• хранить
6 миллионов сообщений?!!
— что вы туда пишете?!
— access-логи
— зачем вы это делаете?!
— для трейсинга
Поле вариантов
Как писать лог из приложения?
• в stdout/stderr
• в файл
• в syslog
• как-то иначе API
?
Как собирать логи?
• docker log driver
• читать из файла
• syslog daemon
• как-то иначе
сервер
API
?API
API
Как и куда доставлять логи?
• GELF по UDP в Graylog
• JSON в ELK через MQ
• syslog в файлы
• как-то иначе
сервер
API ?
?
Как это было
Как мы писали лог из приложения
приложение пишет в stdout/
stderr,
которые перенаправлены
шеллом в файлы,
которые пишутся в каталог,
который проброшен внутрь
контейнера с хост-системы
... на сервере, который
настроил Джек!
сервер
Файл td-agentAPIAPIAPI
Как мы собирали и доставляли логи
на хосте был запущен td-
agent, который:
• читал файлы логов
• парсил их в JSON
• слал в Kafka-topic
Kafkatd-agent
JSON
Куда мы доставляли логи
• часть логов — в Logstash +
Kibana
• часть логов — в Graylog
• часть логов — в другой
Graylog
... и все они — в один кластер
ElasticSearch
Kafka
LogstashLogstashLogstash
GraylogGraylogGraylog
ES
Вид сверху
Kafka
сервер
Файл td-agentAPIAPIAPI
JSON
LogstashLogstashLogstash
GraylogGraylogGraylog
ES
①②③
④
⑥
⑤
Грабли!
1. Необходим доступ для записи в каталог
2. Нужно много места на диске
3. Невозможна нормальная ротация (только copytruncate)
4. Разные API писали логи в разных форматах
5. td-agent работал реже, чем не работал
6. Проблемы с ElasticSearch
• устаревшая версия (1.7)
• не было выделенных мастеров
• разнородные логи с пересекающимися полями
• отсутствие статического маппинга полей
Кто виноват и что делать?
Стандарты!
• единый формат логов для всех API
• единый стандарт на способы записи, сбора и доставки логов
• единые библиотеки логгирования
• SLA на доставку логов
Заменить td-agent
• fluentd
• filebeat
• syslog-ng/rsyslog/nxlog
• написать что-то своё
Rsyslog — хороший
• много модулей почти на все случаи жизни
• человекопонятный RainerScript
• imfile + mmnormalize + omkafka позволяют сэмулировать td-
agent
• mmnormalize стоит отдельного упоминания
• мощная система шаблонов
• RELP — гарантия доставки
• очереди в памяти и на диске с тонкими настройками
• многопоточность и параллелизация
Rsyslog — плохой
• не каждой версией можно пользоваться
• плохо документирован
• RainerScript скуден по возможностям
• omkafka до v8.28 может терять сообщения
• сообщения иногда застревают в RELP
• настройки очередей крайне неочевидны
• параллелится не всё и не всегда
• иногда приходится читать исходники
Как мы стали писать и собирать логи
приложение пишет в unix
datagram socket,
который находится в каталоге,
который проброшен в
контейнер с хост-системы,
на которой запущен rsyslog
... на сервере, который
настроил Puppet!
сервер
API
API
API
rsyslog
Как мы стали доставлять логи
rsyslog на хосте:
• вычитывает сообщение из
сокета
• парсит его в JSON
• кладёт его в локальный лог
(если надо)
• отправляет далее (в релей
или в Kafka)
Kafka
сервер
Файл
JSON
rsyslog
APIAPIAPI
rsyslog
Новый вид сверху
Kafka
LogstashLogstashLogstash
GraylogGraylogGraylog
ES
сервер
Файл
JSON
rsyslogAPIAPIAPI
rsyslog rsyslog
Метрики
• собственная статистика rsyslog (impstats)
• кастомные счётчики rsyslog (dyn_stats)
• rsyslog_exporter собственной разработки
• prometheus
• grafana
• метрики Graylog
Подводные грабли
• Graylog не успевает
• 50k msg/s только с live API
• 12k msg/s в Graylog
• случается, что запись в сокет блокируется
• нужно мониторить размеры очередей (и сделать алерты по
ним)
• амплификация в 10 раз — легко
• мы растём
Файловое хранилище
• сервер с максимально набитым рейдом в каждом ДЦ
• быстрый и простой способ
• получить все логи в одном месте
• использовать утилиты командной строки (tail|grep|awk|jq)
и скрипты над файловыми логами
• организовать долгосрочное хранилище логов
Это РЕАЛЬНО работает!!!
Вид сверху с файловым хранилищем
Kafka
LogstashLogstashLogstash
GraylogGraylogGraylog
ES
сервер
Файл
JSON
rsyslogAPIAPIAPI
rsyslog rsyslog
rsyslog
Что делать - II
• выкинули Logstash и Kibana
• переехали на собственный кластер Kafka
• перенесли логи со строгими форматами в новый кластер
Graylog
Новый Graylog
• всё в Docker
• 3 сервера Kafka
• 7 серверов Graylog (v2.3)
• 24 дата-инстанса ElasticSearch (v5.5) на 12 серверах (4xHDD
RAID0 на инстанс)
• Indexing Rate до 100k msg/s
• 140Tb данных в неделю
Опять грабли!
• грядущие распродажи 11/11 и 12/12
• количество логов уже перевалило за 6 миллионов
сообщений в минуту
• Graylog + ES не могли «прожевать» больше 100k msg/s
• выход из строя одной ноды Kafka фатален
• выход из строя одного инстанса ES фатален (Disk I/O)
Новый новый Graylog
• всё в Docker
• 5 серверов Kafka
• 7 серверов Graylog (v2.3)
• hot/warm-архитектура ElasticSearch (v5.5)
• 3 выделенных мастера
• 16 hot-инстансов на 4xSSD RAID0
• 32 warm-инстанса на 4xHDD RAID0
• ротация индексов по размеру
• Indexing Rate до 160k msg/s (9m msg/min)
Планы на будущее
• работа над High Availability
• метрики Graylog
• рейт-лимиты
• SLA с разработчиками
• документация
Итого
• «стандартизируй это»
• решения на базе syslog-ов - всё еще торт
• rsyslog работает хорово
• запись в сокет блокируется
• логи могут теряться
• файловые хранилища логов — быстро, просто, удобно
• Graylog + ElasticSearch — всё сложно
• чем меньше логов — тем лучше
Спасибо за внимание!
Юрий Бушмелев
@jay7t
jay4mail@gmail.com

More Related Content

What's hot

RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsDaniel Podolsky
 
Путь мониторинга, DevOps club в Grammarly
Путь мониторинга, DevOps club в GrammarlyПуть мониторинга, DevOps club в Grammarly
Путь мониторинга, DevOps club в GrammarlyVsevolod Polyakov
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примереSergey Xek
 
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Ontico
 
NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?Daniel Podolsky
 
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Ontico
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустяYuriy Nasretdinov
 
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИСЭволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС2ГИС Технологии
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Ontico
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Golang в avito
Golang в avitoGolang в avito
Golang в avitoAvitoTech
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, BadooOntico
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013Roman Pavlushko
 
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)Ontico
 
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...Ontico
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...Ontico
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014Alex Chistyakov
 

What's hot (19)

RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwords
 
Путь мониторинга, DevOps club в Grammarly
Путь мониторинга, DevOps club в GrammarlyПуть мониторинга, DevOps club в Grammarly
Путь мониторинга, DevOps club в Grammarly
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примере
 
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
 
Ryazan
RyazanRyazan
Ryazan
 
NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?
 
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустя
 
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИСЭволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Golang в avito
Golang в avitoGolang в avito
Golang в avito
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, Badoo
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
 
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
 
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 

Similar to Карта граблей на поле сбора и доставки логов. Lazada-way.

Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и DjangoTaras Lyapun
 
Не превращайте ваши логи в клинопись
Не превращайте ваши логи в клинописьНе превращайте ваши логи в клинопись
Не превращайте ваши логи в клинописьAndrey Rebrov
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеit-people
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС 2ГИС Технологии
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ontico
 
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Ontico
 
Где сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearchГде сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearchИлья Середа
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Badoo Development
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Ontico
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang productionAlina Dolgikh
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012Roman Pavlushko
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Ontico
 
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программистаSlach
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.Alexander Titov
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаITCrowd Almaty
 

Similar to Карта граблей на поле сбора и доставки логов. Lazada-way. (20)

Sivko
SivkoSivko
Sivko
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и Django
 
Не превращайте ваши логи в клинопись
Не превращайте ваши логи в клинописьНе превращайте ваши логи в клинопись
Не превращайте ваши логи в клинопись
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилище
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
 
Где сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearchГде сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearch
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
 
Deep storm presentation
Deep storm presentationDeep storm presentation
Deep storm presentation
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
 
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программиста
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
 

Карта граблей на поле сбора и доставки логов. Lazada-way.

  • 1. Карта граблей на поле сбора и доставки логов. Lazada-way Юрий Бушмелев Lazada TechHub
  • 2. Lazada? Что это? • интернет-магазин №1 в 6 странах ЮВА (Вьетнам, Таиланд, Малайзия, Индонезия, Сингапур и Филиппины), с 2016 года — часть Alibaba Group • 4 дата-центра • более 80 микро-сервисов на GO + наследие на PHP • более 6 миллионов сообщений в минуту по системе в целом
  • 3. 6 миллионов сообщений, которые надо... • отправить из приложения • принять для доставки • доставить для дальнейшего анализа и хранения • анализировать • хранить
  • 4. 6 миллионов сообщений?!! — что вы туда пишете?! — access-логи — зачем вы это делаете?! — для трейсинга
  • 6. Как писать лог из приложения? • в stdout/stderr • в файл • в syslog • как-то иначе API ?
  • 7. Как собирать логи? • docker log driver • читать из файла • syslog daemon • как-то иначе сервер API ?API API
  • 8. Как и куда доставлять логи? • GELF по UDP в Graylog • JSON в ELK через MQ • syslog в файлы • как-то иначе сервер API ? ?
  • 10. Как мы писали лог из приложения приложение пишет в stdout/ stderr, которые перенаправлены шеллом в файлы, которые пишутся в каталог, который проброшен внутрь контейнера с хост-системы ... на сервере, который настроил Джек! сервер Файл td-agentAPIAPIAPI
  • 11. Как мы собирали и доставляли логи на хосте был запущен td- agent, который: • читал файлы логов • парсил их в JSON • слал в Kafka-topic Kafkatd-agent JSON
  • 12. Куда мы доставляли логи • часть логов — в Logstash + Kibana • часть логов — в Graylog • часть логов — в другой Graylog ... и все они — в один кластер ElasticSearch Kafka LogstashLogstashLogstash GraylogGraylogGraylog ES
  • 14. Грабли! 1. Необходим доступ для записи в каталог 2. Нужно много места на диске 3. Невозможна нормальная ротация (только copytruncate) 4. Разные API писали логи в разных форматах 5. td-agent работал реже, чем не работал
  • 15. 6. Проблемы с ElasticSearch • устаревшая версия (1.7) • не было выделенных мастеров • разнородные логи с пересекающимися полями • отсутствие статического маппинга полей
  • 16. Кто виноват и что делать?
  • 17. Стандарты! • единый формат логов для всех API • единый стандарт на способы записи, сбора и доставки логов • единые библиотеки логгирования • SLA на доставку логов
  • 18. Заменить td-agent • fluentd • filebeat • syslog-ng/rsyslog/nxlog • написать что-то своё
  • 19. Rsyslog — хороший • много модулей почти на все случаи жизни • человекопонятный RainerScript • imfile + mmnormalize + omkafka позволяют сэмулировать td- agent • mmnormalize стоит отдельного упоминания • мощная система шаблонов • RELP — гарантия доставки • очереди в памяти и на диске с тонкими настройками • многопоточность и параллелизация
  • 20. Rsyslog — плохой • не каждой версией можно пользоваться • плохо документирован • RainerScript скуден по возможностям • omkafka до v8.28 может терять сообщения • сообщения иногда застревают в RELP • настройки очередей крайне неочевидны • параллелится не всё и не всегда • иногда приходится читать исходники
  • 21. Как мы стали писать и собирать логи приложение пишет в unix datagram socket, который находится в каталоге, который проброшен в контейнер с хост-системы, на которой запущен rsyslog ... на сервере, который настроил Puppet! сервер API API API rsyslog
  • 22. Как мы стали доставлять логи rsyslog на хосте: • вычитывает сообщение из сокета • парсит его в JSON • кладёт его в локальный лог (если надо) • отправляет далее (в релей или в Kafka) Kafka сервер Файл JSON rsyslog APIAPIAPI rsyslog
  • 24. Метрики • собственная статистика rsyslog (impstats) • кастомные счётчики rsyslog (dyn_stats) • rsyslog_exporter собственной разработки • prometheus • grafana • метрики Graylog
  • 25. Подводные грабли • Graylog не успевает • 50k msg/s только с live API • 12k msg/s в Graylog • случается, что запись в сокет блокируется • нужно мониторить размеры очередей (и сделать алерты по ним) • амплификация в 10 раз — легко • мы растём
  • 26. Файловое хранилище • сервер с максимально набитым рейдом в каждом ДЦ • быстрый и простой способ • получить все логи в одном месте • использовать утилиты командной строки (tail|grep|awk|jq) и скрипты над файловыми логами • организовать долгосрочное хранилище логов Это РЕАЛЬНО работает!!!
  • 27. Вид сверху с файловым хранилищем Kafka LogstashLogstashLogstash GraylogGraylogGraylog ES сервер Файл JSON rsyslogAPIAPIAPI rsyslog rsyslog rsyslog
  • 28. Что делать - II • выкинули Logstash и Kibana • переехали на собственный кластер Kafka • перенесли логи со строгими форматами в новый кластер Graylog
  • 29. Новый Graylog • всё в Docker • 3 сервера Kafka • 7 серверов Graylog (v2.3) • 24 дата-инстанса ElasticSearch (v5.5) на 12 серверах (4xHDD RAID0 на инстанс) • Indexing Rate до 100k msg/s • 140Tb данных в неделю
  • 30. Опять грабли! • грядущие распродажи 11/11 и 12/12 • количество логов уже перевалило за 6 миллионов сообщений в минуту • Graylog + ES не могли «прожевать» больше 100k msg/s • выход из строя одной ноды Kafka фатален • выход из строя одного инстанса ES фатален (Disk I/O)
  • 31. Новый новый Graylog • всё в Docker • 5 серверов Kafka • 7 серверов Graylog (v2.3) • hot/warm-архитектура ElasticSearch (v5.5) • 3 выделенных мастера • 16 hot-инстансов на 4xSSD RAID0 • 32 warm-инстанса на 4xHDD RAID0 • ротация индексов по размеру • Indexing Rate до 160k msg/s (9m msg/min)
  • 32. Планы на будущее • работа над High Availability • метрики Graylog • рейт-лимиты • SLA с разработчиками • документация
  • 33. Итого • «стандартизируй это» • решения на базе syslog-ов - всё еще торт • rsyslog работает хорово • запись в сокет блокируется • логи могут теряться • файловые хранилища логов — быстро, просто, удобно • Graylog + ElasticSearch — всё сложно • чем меньше логов — тем лучше
  • 34. Спасибо за внимание! Юрий Бушмелев @jay7t jay4mail@gmail.com