28
Сбор debug-логов в «облаке» Юрий Насретдинов, Badoo

Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Embed Size (px)

Citation preview

Page 1: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Сбор debug-логов в «облаке»Юрий Насретдинов, Badoo

Page 2: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

О компании

250M пользователей

200K регистраций в сутки

3K серверов70K RPS на PHP-FPM

5M загрузок фото в день

1 Тб логов за сутки

Page 3: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Схема доклада

• «Облако» в Badoo

• Старый сборщик логов (PHP, регулярный опрос файлов)

• Новый сборщик логов (go, inotify)

• Open-source, выводы

Page 4: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

«Облако» для разработчика

class

process #1

process #2 process #3

process #4process #5

Page 5: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Архитектура «облака»

MySQL

cloudsys1

cloud1 cloud2 cloud3 cloudN

cloudsys2

proxy proxy proxy proxy

Page 6: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Пример скрипта

Page 7: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Пример скрипта: вывод на экран

[2015-10-12 09:53:57] INFO run started from /home/nasretdinov/badoo/ [2015-10-12 09:53:57] INFO Hello, world! [2015-10-12 09:53:57] INFO run script has finished successfully (0.006 sec, 0.076 user, 0.012 sys, 0.034 loading)

Page 8: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Формат строки в лог-файле

[cloudstaging1, 74024107029]: [2015-10-12 09:58:43] INFO Hello, world!

[hostname, run_id]: [YYYY-MM-DD HH:II:SS] LOG_LEVEL Message

Page 9: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Сбор логовprocess1

logs

process2

process3

process4

process5

process6

process7

process8

process9

Page 10: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Сбор логов

• Приложения могут писать отладочную информацию — «логи»

• Логи пишутся на каждой машине «облака», оттуда их нужно уметь собирать

• Писать нужно много, чтобы можно было понять причины проблем

Page 11: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Требования к системе

• Низкая latency (секунды) • Высокая пропускная способность (десятки Мб/сек)

• Возможность поиска («greppable»)

Page 12: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Старый сборщик логов: перенаправление вывода

• stdout | proxy >> run_id.out.log

• stderr | proxy >> run_id.err.log

proxy

process #1 process #2 process #3

process #1

STDIN

STDOUT

STDERR

1.out.log

/dev/null

1.err.logproxy

Page 13: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Старый сборщик логов: перенаправление вывода

• имя файла: run_id.out.log[.offset] • на каждый запуск создается 2 файла + в имени файла хранится последнее отправленное смещение

• опрашивается список файлов и всё посылается в категорию «logs» в scribe

Page 14: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Page 15: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Старый сборщик логов: достоинства

• Очень простая реализация • Вполне надежная • Позволяет легко отличать разные запуски друг от друга — идентификатор запуска находится в имени файла

Page 16: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Старый сборщик логов: недостатки

• Низкая скорость на приемнике (3 Мб/сек) • Может накопиться очень много файлов

(миллион) • Высокий CPU usage — опрос файлов ресурсоемок

• Использование inotify делает только хуже

Page 17: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Старый сборщик логов: недостатки

• Неудобный перезапуск прокси • Один «флудящий» класс вызывает «затор» всей системы и задерживается доставка всех логов

Page 18: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Новый сборщик логов: требования

• Управляемость (не создается миллион файлов)

• Желательна real-time доставка • Большой запас по пропускной способности

Page 19: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Новый сборщик логов: перенаправление вывода

• stdout >> class.out.log

• stderr >> class.err.log

proxy

process #1 process #2 process #3

process #1

STDIN

STDOUT

STDERR

test_class.out.log

/dev/null

test_class.err.log

Page 20: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Новый сборщик логов: архитектура

processor

collector

collector

collector

collector

class1.out.log

class2.err.log

someclass.out.log

Page 21: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Новый сборщик логов: троттлинг доставки

"Good" scripts’ logs

"Bad" scripts’ logs"Bad" scripts’ logs chunk

data stream

Page 22: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Page 23: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Новый сборщик логов: достоинства

• Высокая скорость доставки (100+ Мб/сек) • «Вытесняющая многозадачность» • Отказоустойчивость (запись в файлы) • Управляемость и гибкость — возможность доставить файлы самостоятельно

• Real-time доставка

Page 24: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Новый сборщик логов: недостатки

• Возросшая сложность системы • Высокий CPU usage на приемнике • Не масштабируется (приемник — только 1 сервер)

• Подходит только для debug-логов, не является заменой scribe

Page 25: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Выводы

• Начинайте с простого: старая система сделана «на коленке» и прослужила целый год

• Используйте open-source инструменты — без scribe нам было бы некуда отсылать логи

• Пишите свои системы, если нужно — новая система решает наши проблемы, ваши требования могут радикально отличаться

Page 26: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Open-source

Page 27: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

Open-source• Реализация «proxy»:

https://github.com/badoo/habr/ • Доставка логов и «облако»:

https://github.com/badoo/thunder/ • Все наши open-source проекты:

https://tech.badoo.com/open-source/

Page 28: Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»

ВопросыЮрий Насретдинов, Badoo

[email protected] http://habrahabr.ru/users/yourock/

доклад сделан по материалам статьи: http://habrahabr.ru/company/badoo/blog/265875/