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

”Серебряная пуля” для мониторинга многокомпонен...

Avatar for SECR 2018 SECR 2018
October 13, 2018

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

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

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

Avatar for SECR 2018

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 • Мощный мониторинг == инфраструктура || сильная инвазия • “Серебряная пуля” == арсенал специализированных инструментов + единый канал для алертов