2. Возможности scribe
и его применение для сбора логов
Facebook Отказоустойчиво
Отказоустойчиво
Twitter Масштабируемо
Масштабируемо
scribe
Mail.Ru Быстро
Быстро
... Open Source
Open Source
4. Возможности scribe
и его применение для сбора логов
Что такое scribe
данные
данные
scribed
TCP TCP
HDD
5. Возможности scribe
и его применение для сбора логов
Что такое много scribe
appсервер
scribe
app scribe
коллектор
scribe
датацентр scribe N x HDD
app
scribe
app scribe
scribe
7. Возможности scribe
и его применение для сбора логов
Сбор логов
Сервер 1
Лог 1
Лог N
Коллектор
Сервер N
Лог 1
Лог N
8. Возможности scribe
и его применение для сбора логов
Сбор статистики
Сервер 1
Счетчик 1 1
Агрегатор 1-1 Агрегатор 2-1
Счетчик 2
По
физическому По счетчику
Сервер N расположению
Счетчик 1
Агрегатор 1-M Агрегатор 2-K
Счетчик 2 2
9. Возможности scribe
и его применение для сбора логов
Обработка очередей заданий
Сервер 1
Воркер 1
Очередь 1
Очередь N Воркер 2
Воркер 3
Сервер N
Очередь 1
Воркер M
Очередь N
10. Возможности scribe
и его применение для сбора логов
Обработка очередей заданий 2
Сервер 1
Воркер 1
Очередь 1
Очередь N файл Воркер 2
tail -F Воркер 3
Сервер N
Очередь 1 Менеджер
Воркер M
Очередь N
12. Возможности scribe
и его применение для сбора логов
Сообщение scribe, категоризация
entry
category
category string
message string store 1
store 2
category — используется message store 3
для логического разделения
и роутинга сообщений
message — собственно store N
текст сообщения
13. Возможности scribe
и его применение для сбора логов
Логическая схема scribe
Thread Thread
StoreQueue Store
TCP Server
Thread
StoreQueue Store
14. Возможности scribe
и его применение для сбора логов
Типы хранилищ
store file std
network hdfs
bucket multi buffer null
15. Возможности scribe
и его применение для сбора логов
type = file
/var/scribe/test
type = network
10.0.0.1:1465
17. Возможности scribe
и его применение для сбора логов
Буферизация на диск
данные данные
scribed
TCP TCP
HDD
Буферизация на диск используется только в том случае,
если приемник недоступен
18. Возможности scribe
и его применение для сбора логов
Самый простой вариант
Source Collector
buffer file
network
file
19. Возможности scribe
и его применение для сбора логов
На границе сетей
Source Proxy Collector
buffer buffer file
network network
file file
21. Возможности scribe
и его применение для сбора логов
Разделение данных
Source Logs Collector
log-*
log-* file
network
stat-* Stat Collector
stat-*
network file
22. Возможности scribe
и его применение для сбора логов
Шардинг
type = bucket
N =0 bucket0
x%
x%N=1
bucket1
x%
N=
N-
1 bucket(N-1)
23. Возможности scribe
и его применение для сбора логов
Версии scribe
facebook
twitter
Балансировка через zookeeper
Сжатие LZO при записи на
HDFS
Тэйлинг файлов
24. Возможности scribe
и его применение для сбора логов
ZooKeeper Service
Leader
Server Server Server
Client Client Client Client Client
25. Возможности scribe
и его применение для сбора логов
scribe ZooKeeper
10.0.0.1:1465 /
scribe scribe
10.0.0.2:1465 10.0.0.1:1465
scribe
10.0.0.3:1465 10.0.0.2:1465
scribe 10.0.0.4:1465
10.0.0.4:1465
26. Возможности scribe
и его применение для сбора логов
Балансировка с помощью zookeeper
remote_host=zk://zk1.i:2181,zk2.i:2181,zk3.i:2181/hdfs-writer
Source
HDFS Writer 1 HDFS Writer 2 HDFS Writer N
zk_server=zk1.i:2181,zk2.i:2181,zk3.i:2181
zk_registration_prefix=/hdfs-writer
27. Возможности scribe
и его применение для сбора логов
Сжатие LZO
Высокая скорость упаковки и особенно распаковки
Возможность чтения с середины файла
scribed LZO HDFS
Уменьшение объема данных
Ускорение дисковых операций
28. Возможности scribe
и его применение для сбора логов
Запись данных из приложения
app server = 127.0.0.1:1465
scribe: scribe:
127.0.0.1:1465 collector.i
29. Возможности scribe
и его применение для сбора логов
Fallback при записи в scribe
primary: 127.0.0.1:1465
app secondary: zk://zk1.i:2181,zk2.i:2181,zk3.i:2181/fallback
scribe: scribe:
127.0.0.1:1465 collector.i
scribe:
x.x.x.x:1465
zk_server=zk1.i:2181,zk2.i:2181,zk3.i:2181
zk_registration_prefix=/fallback
31. Возможности scribe
и его применение для сбора логов
Logcp
inotify
/var/log/*.log logcpd
statistics
/var/log/httpd/*.log scribe
/var/tarantool/logs/*.log logmonitord
32. Возможности scribe
и его применение для сбора логов
Что нужно учесть
rename
httpd.log httpd.log.0
de
let
e
httpd.log
truncate
httpd.log
33. Возможности scribe
и его применение для сбора логов
Сборка
Собираем с последним thrift
Версия от twitter для джедаев — баги
Perl-клиент Scribe::Thrift::scribe
Thrift::BinaryProtocol заменяем на
Thrift::XS::BinaryProtocol
34. Возможности scribe
и его применение для сбора логов
Тюнинг параметров
На источнике: На коллекторе:
− adaptive_backoff=yes ulimit -n 65535
− check_interval=1 ulimit -u 4096
− buffer_send_rate=10 num_thrift_server_threads=8
− max_size=1000000 max_queue_size=300000000
− max_write_interval=1 max_write_interval=5
− use_conn_pool=yes
Все параметры прекрасно документированы на языке C++
и в комментариях к коммитам в git
35. Возможности scribe
и его применение для сбора логов
Что получилось
С кластера ~600 серверов
~6,5Тб логов ежесуточно
В реальном времени
На один сервер:
− 13 дисков, RAID5, в сумме 27Тб
− Бондинг 2Гб/с.
36. Спасибо!
Алексей Машанов
Программист, Мой Мир@mail.ru
a.mashanov@corp.mail.ru