36

алексей машанов

Embed Size (px)

Citation preview

Page 1: алексей машанов
Page 2: алексей машанов

Возможности scribeи его применение для сбора логов

scribe

FacebookFacebook

TwitterTwitter

Mail.RuMail.Ru

. . .. . .

ОтказоустойчивоОтказоустойчиво

Open SourceOpen Source

МасштабируемоМасштабируемо

БыстроБыстро

Page 3: алексей машанов

Возможности scribeи его применение для сбора логов

Real TimeReal Time

многомного

Что такое

Сколько серверов

Page 4: алексей машанов

Возможности scribeи его применение для сбора логов

Что такое scribe

scribedTCP

данные

HDD

данные

TCP

Page 5: алексей машанов

Возможности scribeи его применение для сбора логов

коллектор

датацентр

серверЧто такое много scribe

scribe

app

scribe

app

scribe

app

scribe

app

scribe

scribe

scribe N x HDD

Page 6: алексей машанов

Возможности scribeи его применение для сбора логов

Scribe?

Зачем?

Page 7: алексей машанов

Возможности scribeи его применение для сбора логов

Сбор логов

Сервер 1

Лог N

Лог 1

Сервер N

Лог N

Лог 1

Коллектор

Page 8: алексей машанов

Возможности scribeи его применение для сбора логов

По физическому

расположениюПо счетчику

Сбор статистики

Сервер 1

Счетчик 2

Счетчик 1

Сервер N

Счетчик 2

Счетчик 1

Агрегатор 1-1

Агрегатор 1-M

Агрегатор 2-1

Агрегатор 2-K

1

2

Page 9: алексей машанов

Возможности scribeи его применение для сбора логов

Обработка очередей заданий

Воркер 1

Воркер 2

Воркер M

Воркер 3

Сервер 1

Очередь N

Очередь 1

Сервер N

Очередь N

Очередь 1

Page 10: алексей машанов

Возможности scribeи его применение для сбора логов

Обработка очередей заданий 2

Сервер 1

Очередь N

Очередь 1

Сервер N

Очередь N

Очередь 1

файл

Менеджер

Воркер 1

Воркер 2

Воркер M

Воркер 3tail -F

Page 11: алексей машанов

Возможности scribeи его применение для сбора логов

Page 12: алексей машанов

Возможности scribeи его применение для сбора логов

Сообщение scribe, категоризация

entry

category

message

string

string

category — используется для логического разделения и роутинга сообщений

message — собственно текст сообщения

message

categorystore 1

store 2

store 3

store N

Page 13: алексей машанов

Возможности scribeи его применение для сбора логов

Thread Thread

Логическая схема scribe

TCP Server

StoreQueue StoreStoreQueue Store

Thread

StoreQueue StoreStoreQueue Store

Page 14: алексей машанов

Возможности scribeи его применение для сбора логов

Типы хранилищ

store file

network

buffermultibucket

std

hdfs

null

Page 15: алексей машанов

Возможности scribeи его применение для сбора логов

/var/scribe/test

10.0.0.1:1465

type = file

type = network

Page 16: алексей машанов

Возможности scribeи его применение для сбора логов

primary

secondary

type = buffer

Page 17: алексей машанов

Возможности scribeи его применение для сбора логов

Буферизация на диск

scribedTCP

данные

HDD

данные

TCP

Буферизация на диск используется только в том случае, если приемник недоступен

Page 18: алексей машанов

Возможности scribeи его применение для сбора логов

Самый простой вариант

Source Collector

filebuffernetwork

file

Page 19: алексей машанов

Возможности scribeи его применение для сбора логов

На границе сетей

Source CollectorProxy

buffernetwork

file

buffernetwork

file

file

Page 20: алексей машанов

Возможности scribeи его применение для сбора логов

store0

storeN

type = multi

store1

Page 21: алексей машанов

Возможности scribeи его применение для сбора логов

Разделение данных

Source Logs Collector

Stat Collector

log-*

stat-*

file

file

network

network

log-*

stat-*

Page 22: алексей машанов

Возможности scribeи его применение для сбора логов

bucket0

bucket(N-1)

type = bucket

bucket1

x % N = 0

x % N = 1

x % N = N - 1

Шардинг

Page 23: алексей машанов

Возможности scribeи его применение для сбора логов

Версии scribe

facebook

twitter

Балансировка через zookeeperСжатие LZO при записи на

HDFSТэйлинг файлов

Page 24: алексей машанов

Возможности scribeи его применение для сбора логов

ZooKeeper Service

Server Server ServerLeader

Client Client Client Client Client

Page 25: алексей машанов

Возможности scribeи его применение для сбора логов

ZooKeeper/

scribe

10.0.0.1:1465

10.0.0.2:1465

10.0.0.4:1465

scribe10.0.0.1:1465

scribe10.0.0.2:1465

scribe10.0.0.3:1465

scribe10.0.0.4:1465

Page 26: алексей машанов

Возможности scribeи его применение для сбора логов

Балансировка с помощью zookeeper

Source

HDFS Writer 1 HDFS Writer 2 HDFS Writer N

remote_host=zk://zk1.i:2181,zk2.i:2181,zk3.i:2181/hdfs-writer

zk_server=zk1.i:2181,zk2.i:2181,zk3.i:2181zk_registration_prefix=/hdfs-writer

Page 27: алексей машанов

Возможности scribeи его применение для сбора логов

Сжатие LZO

HDFSscribed LZO

Уменьшение объема данныхУскорение дисковых операций

Высокая скорость упаковки и особенно распаковкиВозможность чтения с середины файла

Page 28: алексей машанов

Возможности scribeи его применение для сбора логов

Запись данных из приложения

app

scribe:127.0.0.1:1465

scribe:collector.i

server = 127.0.0.1:1465

Page 29: алексей машанов

Возможности scribeи его применение для сбора логов

Fallback при записи в scribe

app

scribe:127.0.0.1:1465

scribe:collector.i

primary: 127.0.0.1:1465secondary: zk://zk1.i:2181,zk2.i:2181,zk3.i:2181/fallback

scribe:x.x.x.x:1465

zk_server=zk1.i:2181,zk2.i:2181,zk3.i:2181zk_registration_prefix=/fallback

Page 30: алексей машанов

Возможности scribeи его применение для сбора логов

tail -Ftail -F

Page 31: алексей машанов

Возможности scribeи его применение для сбора логов

Logcp

logcpd

scribe

logmonitord

/var/log/*.log

/var/log/httpd/*.log

/var/tarantool/logs/*.log

inotify

statistics

Page 32: алексей машанов

Возможности scribeи его применение для сбора логов

Что нужно учесть

httpd.log httpd.log.0rename

httpd.log

delete

httpd.log

truncate

Page 33: алексей машанов

Возможности scribeи его применение для сбора логов

СборкаСобираем с последним thriftВерсия от twitter для джедаев — баги

Perl-клиент Scribe::Thrift::scribeThrift::BinaryProtocol заменяем на

Thrift::XS::BinaryProtocol

Page 34: алексей машанов

Возможности scribeи его применение для сбора логов

Тюнинг параметров На источнике:

adaptive_backoff=yes check_interval=1 buffer_send_rate=10 max_size=1000000 max_write_interval=1 use_conn_pool=yes

На коллекторе:

ulimit -n 65535

ulimit -u 4096

num_thrift_server_threads=8

max_queue_size=300000000

max_write_interval=5

Все параметры прекрасно документированы на языке C++и в комментариях к коммитам в git

Page 35: алексей машанов

Возможности scribeи его применение для сбора логов

Что получилось С кластера ~600 серверов ~6,5Тб логов ежесуточно В реальном времени На один сервер:

13 дисков, RAID5, в сумме 27Тб Бондинг 2Гб/с.

Page 36: алексей машанов

Спасибо!Алексей Машанов

Программист, Мой Мир@[email protected]