breaking logs

155
Breaking logs Сломай логи

Upload: ilya-sergeyev

Post on 12-Apr-2017

206 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Breaking logs

Breaking logsСломай логи

Page 2: Breaking logs

+

Я разработчик в Альфа-Лаборатории

2

Привет!

Page 3: Breaking logs

3

#microservices

Что мы делаем в лабе?

Page 4: Breaking logs

4

#research

Что мы делаем в лабе?

Page 5: Breaking logs

5

#proofOfConcept

Что мы делаем в лабе?

Page 6: Breaking logs

6

По результатам пилота:

Внедряем в prod то, что приносит value

Page 7: Breaking logs

● Архитектура приложений● Система логирования● Проблемы ● Решение● Демо● Задача анализа логов

7

Структура доклада

Page 8: Breaking logs

Middle

Front

Back

Legacy8

MicroServices

Page 9: Breaking logs

9

Page 10: Breaking logs

10

Приложение Dashboard:● Информация о клиенте● Последние транзакции

Пример

Page 11: Breaking logs

11

Возвращает информацию о клиенте

Уже есть

Page 12: Breaking logs

12

Возвращает информацию о клиенте

Список транзакций по счетам

Уже есть

Page 13: Breaking logs

13

Создаём

Переиспользуем

Page 14: Breaking logs

14

Создаём

Переиспользуем

Page 15: Breaking logs

15

Создаём

Переиспользуем

Service Discovery, Service Registration, Routing

Page 16: Breaking logs

Много проектных приложений

Много инфраструктурных приложений

Все они активно пишут логи

16

Что получается?

Page 17: Breaking logs

17

Сейчас в день ~100 гб логов

Page 18: Breaking logs

18

Сейчас в день ~100 гб логов

Может уменьшить количество логов?

Page 19: Breaking logs

19

Приложения должны логировать все вызовы

Inbound/Outbound сообщения

Page 20: Breaking logs

20

Нельзя уменьшить количество логов - требование отдела безопасности

Page 21: Breaking logs

Минимум - централизация логов21

Как выглядит простая система логирования?

Page 22: Breaking logs

22

Чтобы искать сообщения с NPE по всем логам!

Хотим поиск

Page 23: Breaking logs

tail 300 -f /var/log/syslog | grep ...

23

Есть же grep!

Хочешь поиск?

Page 24: Breaking logs

24

Хотим дашборд

Page 25: Breaking logs

Поиск и аналитика

25

Что нужно для дашборда?

Page 26: Breaking logs

Поиск и аналитика

26

Что нужно для дашборда?

Page 27: Breaking logs

Поиск и аналитика

Визуализация

27

Что нужно для дашборда?

Page 28: Breaking logs

Поиск и аналитика

Визуализация

28

Что нужно для дашборда?

Page 29: Breaking logs

Всё готово можно в продакшн?

29

Page 30: Breaking logs

30

От syslog:Sep 21 23:48:17 Ilyas-MacBook-Pro ilyasergeev[22839]: Hello, joker.

Для ElasticSearch:{

"message" => "Hello, joker.","@version" => "1","@timestamp" => "2016-09-21T23:49:16.4752","host" => "Ilyas-MacBook-Pro"}

Формат логов

Page 31: Breaking logs

31

Автоматизировать добавление индексов в ElasticSearch

Создавать индексы на каждый день

Индексы ElasticSearch

Page 32: Breaking logs

Real-Time pipeline для данных

Много плагинов

32

Logstash

Page 33: Breaking logs

33

Как теперь выглядит система логирования?

Page 34: Breaking logs

Нужно хранить логи 5 лет

34

Требования отдела безопасности

База отдела безопасности

Page 35: Breaking logs

35

В индексах ElasticSearch

Может тут хранить пять лет?

Где у нас сейчас хранятся логи

Page 36: Breaking logs

36

Открытые / Закрытые

Открытые - можно читать, писатьЗакрытые - просто хранят информацию

Индексы

Page 37: Breaking logs

37

Открытые / Закрытые

Открытые - можно читать, писатьЗакрытые - просто хранят информацию

curl -XPOST 'localhost:9200/my_index/_close'curl -XPOST 'localhost:9200/my_index/_open'

Индексы

Page 38: Breaking logs

38

Открытые индексы потребляют ресурсы кластера

Храним только открытые индексы

Page 39: Breaking logs

39

45 дней

Период хранения логов

Page 40: Breaking logs

45 дней

5 лет

40

Page 41: Breaking logs

периодическаявыгрузка логов

41

Page 42: Breaking logs

велосипед

42

Page 43: Breaking logs

одноразовое решение

43

Page 44: Breaking logs

логи 44

Page 45: Breaking logs

логи

outputplugin дляelastic

outputplugin длябазы отдела безопасности

real-time

45

Page 46: Breaking logs

База данных недоступна

real-time

46

Page 47: Breaking logs

47

Давайте добавим ещё один слой абстракции

Решение в общем случае

Page 48: Breaking logs

?

48

Page 49: Breaking logs

Логи хранятся n дней

49

Page 50: Breaking logs

Логи хранятся n дней

Легко добавлятьпотребителей

50

Page 51: Breaking logs

Стоит ли добавлять промежуточную систему ради решения одной проблемы?

51

Page 52: Breaking logs

52

Мы рассказали о нашей системе логирования

Page 53: Breaking logs

Скрипт отдела поддержкиСкрипт

53

Page 54: Breaking logs

Скрипт отдела поддержкидля мониторинга количества заходов в приложенияиспользует API

Скрипт

54

Page 55: Breaking logs

Делает периодические запросы

55

Скрипт

Page 56: Breaking logs

Делает периодические запросы Полнотекстовый поиск и агрегации

56

Скрипт

Page 57: Breaking logs

Делает периодические запросы Полнотекстовый поиск и агрегацииЗапрос по всем индексам

57

Скрипт

Page 58: Breaking logs

Делает периодические запросы Полнотекстовый поиск и агрегацииЗапрос по всем индексамПериод - 10 секунд

58

Скрипт

Page 59: Breaking logs

app1 app2 app3 app4

59

Скрипт

Page 60: Breaking logs

Ск

ри

пт

app1 app2 app3 app4ElasticSearch не справляется снагрузкой, логи копятся в logstash

60

Page 61: Breaking logs

61

Логи очередь destination

Как вообще пишутся логи?

Page 62: Breaking logs

62

Сообщения добавляются в очередь если не могут быть доставлены в destination

Очередь

Page 63: Breaking logs

63

Сообщения добавляются в очередь если не могут быть доставлены в destination

Сообщения не теряются

Очередь

Page 64: Breaking logs

64

Сообщения добавляются в очередь если не могут быть доставлены в destination

Сообщения не теряются

Ограничение по размеру - объём свободной памяти

Очередь

Page 65: Breaking logs

65

Ещё одно сообщение и OutOfMemory

Page 66: Breaking logs

66

Фиксированный размер

Данные перезаписываются

Ring-buffer

Page 67: Breaking logs

67

Фиксированный размер

Данные перезаписываются

Ring-buffer

Page 68: Breaking logs

68

или

Page 69: Breaking logs

69

Требование отдела безопасности:Логи не должны теряться, поэтому

Page 70: Breaking logs

Ск

ри

пт

app1 app2 app3 app4ElasticSearch не справляется снагрузкойЛоги копятся в Logstash

70

Page 71: Breaking logs

Скр

ип

т

app1 app2 app3 app4Logstash падает с OutOfMemoryЛоги копятся в приложениях

71

Page 72: Breaking logs

Используем Ring-buffer

Что делать если destination недоступен?

72

Page 73: Breaking logs

Разделение потоков поставки и потребления

Логи хранятся n дней

Легко добавлятьпотребителей

73

Page 74: Breaking logs

?

74

Выбор промежуточный системы

Page 75: Breaking logs

Хотелки:Логи хранятся n дней

Легко добавлятьпотребителей

75

Page 76: Breaking logs

База данных

Хотелки:Логи хранятся n дней

Легко добавлятьпотребителей

76

Page 77: Breaking logs

Очередь

Хотелки:Логи хранятся n дней

Легко добавлятьпотребителей

77

Page 78: Breaking logs

С сохранением сообщений на диск: ActiveMQ, RabbitMQ, Kestrel, NSQ, Kafka ..

Без: NATS, ruby-nats ..

78

Какие есть варианты очередей?

Page 79: Breaking logs

Добавление потребителей не влияет на производительность

79

Почему kafka?

Page 80: Breaking logs

Добавление потребителей не влияет на производительность

Потребитель должен реализовать Kafka Consumerили воспользоваться готовым приложением, например:

80

Почему kafka?

Page 81: Breaking logs

Publish-Subscribe

producer пишет в topicconsumer читаeт из topic

81

Верхнеуровневая архитектура

Page 82: Breaking logs

82

Нужно знать:● Адрес сервера kafka● Название Topic

Чтение из kafka

Page 83: Breaking logs

83

Особенности:● Offset - индекс с которого начать чтение● Compaction и Retention

Чтение из kafka

Page 84: Breaking logs

84

Kafka - это файл который читается в один поток?

Page 85: Breaking logs

85

Topic делится на partitions

Page 86: Breaking logs

86

Параллельное чтение логов

Page 87: Breaking logs

87

Параллельное чтение логовБалансировка сообщений в consumer group

Page 88: Breaking logs

88

Потребление логов из kafka

Page 89: Breaking logs

89

Один потребитель логовПотребитель влияет на поставщика

Решение проблем

Page 90: Breaking logs

Увеличение потока потребления за счёт добавления partitions

Увеличение входного потока - ?

90

А что с производительностью?

Page 91: Breaking logs

Дешёвая операция записи

91

Partition

Page 92: Breaking logs

92

Partition == unit of parallelism

Параллельная запись в kafka

Page 93: Breaking logs

93

Partition по ключу

Page 94: Breaking logs

94

Логи хранятся n дней

Легко интегрироваться

Производительность

Page 95: Breaking logs

95

Логи хранятся n дней

Легко интегрироваться

Производительность

А что с надёжностью?

Page 96: Breaking logs

1. Репликация2. Failure recovery

96

Надёжность

Page 97: Breaking logs

Запрос метаданных + push в leader

97

Репликация

Page 98: Breaking logs

Запрос метаданных + push в leaderIn-sync replica set (ISR)

98

Репликация

Page 99: Breaking logs

Запрос метаданных + push в leaderIn-sync replica set (ISR)Commit сообщения

99

Репликация

Page 100: Breaking logs

Quorum или all (x failures with x+1 ISR)

100

Failure Recovery

Page 101: Breaking logs

Выбор лидера с помощью Zookeeper

101

Failure Recovery

Page 102: Breaking logs

Все сломались - дожидаемся возвращения любой реплики

102

Failure Recovery

Page 103: Breaking logs

103

Логи хранятся n днейЛегко интегрироватьсяПроизводительностьРепликацияFailure recovery

Page 104: Breaking logs

104

Логи хранятся n днейЛегко интегрироватьсяПроизводительностьРепликацияFailure recovery

А как же надёжность поставки логов?

Page 105: Breaking logs

Real-Time pipeline

105

Поставка логов

Page 106: Breaking logs

Производительность

Failure Recovery

Сохранение на диск

106

Хотелки

Page 107: Breaking logs

Производительность

Failure Recovery

Сохранение на диск

Логи инфраструктуры

107

Хотелки

Page 108: Breaking logs

Rocket-Fast System for Log Processing

Базируется на syslog

108

RSyslog

Page 109: Breaking logs

Rocket-Fast System for Log Processing

Базируется на syslogМодуль omkafka - Apache Kafka producer

109

RSyslog

Page 110: Breaking logs

Rocket-Fast System for Log Processing

Базируется на syslogМодуль omkafka - Apache Kafka producerОчереди

110

RSyslog

Page 111: Breaking logs

input

input

input input parser &filter engine

action processor

action processor

action processor output

output

output

queue

queue

queue

queue

111

RSyslog

Page 112: Breaking logs

input

input

input input parser &filter engine

action processor

action processor

action processor output

output

output

queue

queue

queue

queue

112

RSyslog

Page 113: Breaking logs

RSyslog

113

Что получается?

Page 114: Breaking logs

114

Новая архитектура

Page 115: Breaking logs

115

Новая архитектура

Page 116: Breaking logs

116

Новая архитектура

Page 117: Breaking logs

117

Новая архитектура

Page 118: Breaking logs

118

Архитектура 1.0

Page 119: Breaking logs

119

Мы используем Red Hat Linux на серверах

Но мы же банк..

Page 120: Breaking logs

120

Мы используем Red Hat Linux на серверах

В стандартных репозиториях нету версии 8.7.+

Но мы же банк..

Page 121: Breaking logs

121

Мы используем Red Hat Linux на серверах

В стандартных репозиториях нету версии 8.7.+

Только в ней появился модуль omkafka

Но мы же банк..

Page 122: Breaking logs

122

Архитектура 1.0

Page 123: Breaking logs

123

Известный архитектурный приём

Page 124: Breaking logs

124

Архитектура 2.0

Page 125: Breaking logs

125

Архитектура 2.0

Page 126: Breaking logs

126

Архитектура 2.0

Page 127: Breaking logs

127

Архитектура 2.0

Page 128: Breaking logs

128

Логи DashboardAPI отправляются в топик api

Partition по ключу DashboardAPI

Демо

Page 129: Breaking logs

129

Логи CustomerInfo и TransactionsList отправляются в топик infoPartition по ключу названия сервиса

topic: api

topic: info

Демо

Page 130: Breaking logs

130

topic: api

topic: info

Демо

Page 131: Breaking logs

131

Демо

Page 132: Breaking logs

132

Демо

Page 133: Breaking logs

133

Запуск одной командой ./compose-logs.sh up -d

Демо

Page 134: Breaking logs

134

Мониторинг количества ошибок в секунду от приложений CustomerInfo и TransactionsList

Новая задача

Page 135: Breaking logs

1. Kafka producer и consumer

135

Как делают stream processing

Page 136: Breaking logs

1. Kafka producer и consumer2. Прикрутить полноценный stream

processing framework

136

Как делают stream processing

Page 137: Breaking logs

Apache SparkApache StormApache FlinkApache SamzaGoogle’s DataFlowAWS Lambda...

137

Stream processing инструменты

Page 138: Breaking logs

● Распределять джобы в пуле машин

138

Что нужно большим фрэймворкам

Page 139: Breaking logs

● Распределять джобы в пуле машин ● Управлять ресурсами в кластере

139

Что нужно большим фрэймворкам

Page 140: Breaking logs

● Распределять джобы в пуле машин ● Управлять ресурсами в кластере ● Паковать код и отправлять на исполняющие

машины

140

Что нужно большим фрэймворкам

Page 141: Breaking logs

Apache SparkApache StormApache Flink...Kafka Streams

141

Stream processing инструменты

Page 142: Breaking logs

Event-at-a-time processing Уже в Kafka 0.10 release

Для приложения - просто библиотекаНет дополнительной инфраструктуры

142

Kafka Streams

Page 143: Breaking logs

143

Демо

Page 144: Breaking logs

144

Приложение с Kafka Streams

Page 145: Breaking logs

time 0key1 val1 key1 val1

key2 val2

key1 val3

key2 val2

time 1

145

Таблицы и стримы

time 2

Page 146: Breaking logs

put (key1, val1)put (key2, val2)put (key1, val3)

time 0key1 val1 key1 val1

key2 val2

key1 val3

key2 val2

time 1 time 2

146

Таблицы и стримы

Page 147: Breaking logs

put (key1, val1) key1 => val1put (key2, val2) == key2 => val2put (key1, val3) key1 => val3

147

Таблицы и стримы

Page 148: Breaking logs

put (key1, val1) key1 => val1put (key2, val2) == key2 => val2put (key1, val3) key1 => val3

Таблица - это кэш актуальных значений для ключей в стриме

Стрим - changelog таблицы

148

Таблицы и стримы

Page 149: Breaking logs

149

Поток сообщений

Окно

Page 150: Breaking logs

150

Считаем количество сообщений в каждом окне

Окно

Page 151: Breaking logs

151

Для большой децентрализованной системы нужно логирование и оно должно быть централизованным.

Итого

Page 152: Breaking logs

152

Если у вас много разных потребителей, которым нужен доступ к системе логирования, то следует задуматься о промежуточной системе, где логи будут храниться некоторое время.

Итого

Page 153: Breaking logs

153

У нас получилась система позволяющая:

● легко добавлять новых потребителей

● хранящая логи в течении некоторого временного интервала● позволяющая делать real-time аналитику без

дополнительной инфраструктуры

Итого

Page 154: Breaking logs

Демо системы логирования и Kafka Streamsgithub.com/sergeevii123/joker.logs

Для связи:[email protected]

154

Итого

Page 155: Breaking logs

Вопросы