Upgrade to Pro — share decks privately, control downloads, hide ads and more …

”Серебряная пуля” для мониторинга многокомпонентных приложений построенных на JVM и других платформах

SECR 2018
October 13, 2018

”Серебряная пуля” для мониторинга многокомпонентных приложений построенных на JVM и других платформах

Владимир Красильщик
Руководитель группы разработки, Dino Systems

В докладе рассматриваются инструменты и подходы для мониторинга производительности приложений и мониторинга бизнес-транзакций в крупных многокомпонентных системах. Основные цели доклада это познакомить слушателей с многообразием вариантов решения задач мониторинга и представить текущий подход Яндекс.Маркета к решению этой задачи.

SECR 2018

October 13, 2018
Tweet

More Decks by SECR 2018

Other Decks in Programming

Transcript

  1. “Серебряная пуля” для мониторинга многокомпонентных приложений, построенных на JVM и

    других платформах Владимир Красильщик, Dino Systems SECR 2018, Москва
  2. О чем этот доклад !4 • ~104 гетерогенных микросервисов (компонентов)

    • Штатные нефункциональные и бизнес показатели
  3. О чем этот доклад !4 • ~104 гетерогенных микросервисов (компонентов)

    • Штатные нефункциональные и бизнес показатели • Деградации, поломки, (не)приятные неожиданности
  4. Для кого этот доклад !5 • Ответственные за компоненты •

    Разработчики и инженеры по качеству
  5. Для кого этот доклад !5 • Ответственные за компоненты •

    Разработчики и инженеры по качеству • Дежурные, поддержка
  6. Для кого этот доклад !5 • Ответственные за компоненты •

    Разработчики и инженеры по качеству • Дежурные, поддержка • Product owners, менеджеры
  7. Для кого этот доклад !5 • Ответственные за компоненты •

    Разработчики и инженеры по качеству • Дежурные, поддержка • Product owners, менеджеры • Аналитики
  8. План доклада !6 • Быстро разбираемся что же такое APM

    и BTM • Поиски “серебряной пули”
  9. План доклада !6 • Быстро разбираемся что же такое APM

    и BTM • Поиски “серебряной пули” • Рекомендации
  10. !12

  11. Первая кровь !13 • 2010 г., инвестиционный банкинг • 40+

    микросервисов, java • Не знаем как дела в проде
  12. Первая кровь !13 • 2010 г., инвестиционный банкинг • 40+

    микросервисов, java • Не знаем как дела в проде • Не знаем как дела в тестинге
  13. ITRS Geneos !15 • log.warn(Alert.AMBER + “Be ready to fail

    soon, dude”, e) log.error(Alert.RED + “Something very bad happened”, e) парсинг логов и поиск паттернов
  14. ITRS Geneos !15 • log.warn(Alert.AMBER + “Be ready to fail

    soon, dude”, e) log.error(Alert.RED + “Something very bad happened”, e) • Runtime.getRuntime().freeMemory()/(1024*1024), Runtime.getRuntime().totalMemory()/(1024*1024) парсинг логов и поиск паттернов
  15. ITRS Geneos !15 • log.warn(Alert.AMBER + “Be ready to fail

    soon, dude”, e) log.error(Alert.RED + “Something very bad happened”, e) • Runtime.getRuntime().freeMemory()/(1024*1024), Runtime.getRuntime().totalMemory()/(1024*1024) • Размеры очередей в Executor-ах парсинг логов и поиск паттернов
  16. ITRS Geneos !15 • log.warn(Alert.AMBER + “Be ready to fail

    soon, dude”, e) log.error(Alert.RED + “Something very bad happened”, e) • Runtime.getRuntime().freeMemory()/(1024*1024), Runtime.getRuntime().totalMemory()/(1024*1024) • Размеры очередей в Executor-ах • Счётчики открытых файловых дескрипторов парсинг логов и поиск паттернов
  17. !16

  18. !17

  19. Степени инвазии !19 0 - ничего не требуется 1 -

    установить сервер 2 - установить сервер + агент на каждый комп
  20. Степени инвазии !19 0 - ничего не требуется 1 -

    установить сервер 2 - установить сервер + агент на каждый комп 3 - установить сервер + агент на каждый микросервис
  21. Степени инвазии !19 0 - ничего не требуется 1 -

    установить сервер 2 - установить сервер + агент на каждый комп 3 - установить сервер + агент на каждый микросервис 4 - установить сервер + изменение кода микросервисов
  22. !20

  23. !24

  24. DIY = Do It Yourself !26 • Хотим единый экран

    с “лампочками” • Веб, просто разрабатывать, просто поддерживать
  25. DIY = Do It Yourself !26 • Хотим единый экран

    с “лампочками” • Веб, просто разрабатывать, просто поддерживать • Не хотим устанавливать агенты на компы
  26. DIY = Do It Yourself !26 • Хотим единый экран

    с “лампочками” • Веб, просто разрабатывать, просто поддерживать • Не хотим устанавливать агенты на компы • Не хотим инструментировать микросервисы
  27. DIY = Do It Yourself !26 • Хотим единый экран

    с “лампочками” • Веб, просто разрабатывать, просто поддерживать • Не хотим устанавливать агенты на компы • Не хотим инструментировать микросервисы • Не хотим менять код микросервисов
  28. !31

  29. !32

  30. Drozd !33 • Intellij IDEA plugin • ssh, jdk 1.6+

    • gridkit (nanocloud) • com.sun.tools.attach.*
  31. !34

  32. !35

  33. !36

  34. !37

  35. !40 • access.log - tskv формат:
 timestamp=2018-10-13T13:10:01.123 url=/someurl method=POST code=200

    resp_time=123 host=a1.b1.c1.com Нефункциональные показатели http компонентов
  36. !40 • access.log - tskv формат:
 timestamp=2018-10-13T13:10:01.123 url=/someurl method=POST code=200

    resp_time=123 host=a1.b1.c1.com • Конфигурации store: DC, host, имя файла, как разложить tskv в таблицу в ClickHouse Нефункциональные показатели http компонентов
  37. !42 • Конфигурации agg: как агрегировать данные из ClickHouse (DC,

    code, период) Нефункциональные показатели http компонентов
  38. !42 • Конфигурации agg: как агрегировать данные из ClickHouse (DC,

    code, период) • Конфигурации agg: отсечки на значения, генерятся события и отправляются в alert Нефункциональные показатели http компонентов
  39. !44 • Продажи в моменте: количество и прибыль • Средняя

    стоимость услуги в моменте Функциональные показатели http компонентов
  40. !45 CH app nginx client access.log push Kafka store gra

    phite agg gra phana alert Функциональные показатели http компонентов
  41. Трассировка !49 • trace.log - tskv формат:
 timestamp=2018-10-13T13:10:01.123 url=/someurl method=POST

    code=200 resp_time=123 host=a1.b1.c1.com req_id=12345/1/2/3 source=app target=app2
  42. Трассировка !49 • trace.log - tskv формат:
 timestamp=2018-10-13T13:10:01.123 url=/someurl method=POST

    code=200 resp_time=123 host=a1.b1.c1.com req_id=12345/1/2/3 source=app target=app2 • В ClickHouse единая таблица для всех логов!
  43. !50

  44. !51

  45. !56

  46. Примеры !57 1. Рост ошибок == релиз соседней команды 2.

    Падение продаж == отказ датацентра
  47. Примеры !57 1. Рост ошибок == релиз соседней команды 2.

    Падение продаж == отказ датацентра 3. Падение продаж == отказ push
  48. Примеры !57 1. Рост ошибок == релиз соседней команды 2.

    Падение продаж == отказ датацентра 3. Падение продаж == отказ push 4. Резкий рост продаж == релиз соседней команды с фиксом
  49. Примеры !57 1. Рост ошибок == релиз соседней команды 2.

    Падение продаж == отказ датацентра 3. Падение продаж == отказ push 4. Резкий рост продаж == релиз соседней команды с фиксом 5. Средняя цена клика перестала считаться == “пробой потолка”
  50. Итоги !58 • Есть готовые “коробки” для APM и BTM

    • DIY == log - Kafka - ClickHouse - graphite • Трассировка (общая и внутренняя): логи, сквозной req_id
  51. Итоги !58 • Есть готовые “коробки” для APM и BTM

    • DIY == log - Kafka - ClickHouse - graphite • Трассировка (общая и внутренняя): логи, сквозной req_id • Формат tskv
  52. Итоги !58 • Есть готовые “коробки” для APM и BTM

    • DIY == log - Kafka - ClickHouse - graphite • Трассировка (общая и внутренняя): логи, сквозной req_id • Формат tskv • Мощный мониторинг == инфраструктура || сильная инвазия
  53. Итоги !58 • Есть готовые “коробки” для APM и BTM

    • DIY == log - Kafka - ClickHouse - graphite • Трассировка (общая и внутренняя): логи, сквозной req_id • Формат tskv • Мощный мониторинг == инфраструктура || сильная инвазия • “Серебряная пуля” == арсенал специализированных инструментов + единый канал для алертов