Логгирование и мониторинг нагрузки Константин Андрюнин, Сергей Барбушин
Для  кого  этот   доклад ? для тех, кто  использует  LAMP   мы расскажем о логгировании  на  PHP для   средних  и  больших  проектов   от трёх серверов и больше для тех, кто  пишет   большие  программы   более 600 строчек кода для тех,  кому   важна  нагрузка   более 10 обращений в секунду к БД, кэшам и WS
Что вы услышите ? логгирование в  LAMP/PHP   зачем нужно в  PHP  логгирование? зачем понадобилось писать свой логгер? обзор движков логгирования для  PHP использование логгера в живых проектах   внедрение в живой код паттерны использования примеры
когда серверов много   сбор логов и как я это делаю мониторинг по логам   что должно попадать в лог   и в каком формате как расставлять логгеры анализ логов   асинхронные события как померять нагрузки инструменты
PHP :  История вопроса … но   потом он   повзрослел : - как язык добавились обработки исключений,  OOP … - появились сложные проекты facebook ,  vkontakte … - появились высокие нагрузки десятки тысяч запросов в секунду…
PHP :  Как оно сейчас? когда же случается факап… - то программист просто будет пытаться воспроизвести ошибку у него нет другого способа узнать, отчего она возникла … но   программисты остались в  прошлом : - не используют новые инструменты  PHP - продолжают дебажить пальцем по коду вставляя  die(“ya, that line!"); - забивают на обработку ошибок максимум включая опцию в  php.ini  показывать / не показывать еноты
PHP :  Что есть?
А зачем оно нужно ? потому что сейчас лог малоинформативен -  хочется:  сопутствующие переменные,  backtrace… нет динамического перенаправления вывода лога -  хочется:  записать часть лога в один файл, часть – в другой нет своих обработчиков ошибок -  хочется:  записать в  DB,  отправить по  SMS,   email…  не   хватает дополнительных фильтров ошибок -  хочется:  видеть ошибки только юзера в сессии и только с определённой страницы…
Lagger ! http://lagger-logger.org
http://lagger-logger.org
Аспекты использования  LL : обработка системных ошибок дебаг мониторинг корректной работы системы мониторинг нагрузки на систему
Обработка системных ошибок в  LL зачем? безопасность своевременное уведомление пример : переопределение стандартного обработчика конфигурация  LL исключительные ситуации ( fatal error )
Дебаг с  LL Сами инициируем события! зачем? оптимизация разработки логгирование задержек в  DB, WS мониторинг работы  AJAX что логгируем? DB, WS,  нахождение ключей в кэше профили обработки high, low, db….
Мониторинг нагрузки с  LL
Что должно попадать в лог и в каком формате? 2008.10.05 03:42:36.998   INFO   e182aaf7   IncomeHandler   user income 2008.10.05 03:42:36.998   DEBUG   e182aaf7   IncomeHandler   rote to component: [show] 2008.10.05 03:42:36.998   INFO   e182aaf7   page.show.dao   get page model 2008.10.05 03:42:36.998   DEBUG   e182aaf7   page.show.dao   ws [newTransaction] start 2008.10.05 03:42:37.334   DEBUG   e182aaf7   page.show.dao   ws [newTransaction] end 2008.10.05 03:42:37.338   INFO   e182aaf7   page.show.dao   model complete 2008.10.05 03:42:37.338   INFO   e182aaf7   page.show.renderer   start rendering 2008.10.05 03:42:37.344   INFO   e182aaf7   page.show.renderer   rendering end 2008.10.05 03:42:37.344   DEBUG   e182aaf7   IncomeHandler   component out: [show] 2008.10.05 03:42:37.344   INFO   e182aaf7   IncomeHandler   send content DATE >  LogTYPE  >  UserID  >  ComponentID  >  comment/varibles
Пример обработки лога: 2008.10.05 04:40:35  0 2 1  0  282  251  0  308  261 2008.10.05 04:40:40  1 5 1  527  1077 238  539  1142 246 2008.10.05 04:40:45  3 2 3  2023 185  765  2053 195  794 2008.10.05 04:40:50  1 3 4  377  758  1244  389  809  1288 2008.10.05 04:40:55  0 2 6  0  476  1636  0  493  1693 2008.10.05 04:41:00  1 1 2  537  115  475  544  127  497 2008.10.05 04:41:05  1 4 1  394  937  289  398  982  300 DATE  запросы по типу (за период) Обращение к  WS ( сумма по всем откликам за период ) Время генерации страницы (сумма по всем откликам за период)
 
 
Что должно попадать в лог? Имя ноды   (если их несколько) Название БД (в том числе разных схем)   Тип запроса (на запись  /  на чтение) Дополнительные переменные, для идентификации события Форк новой нити Конец отработки нити  Начало запроса к любому внешнему сервису  /  компоненту Окончание запроса Что писать в лог?
Какие ещё логи нужно собирать? Расход памяти Утилизация  CPU  по процессам Количество процессов в системе к примеру, периодический (раз в минуту) вызов ps -e -o pcpu,cpu,nice,state,cputime,args | grep php и последующая отправка результата в лог-коллектор Как это сделать?
Как собирать логи? Использовать сервер очередей! ActiveMQ SPREAD или любой другой высокопроизводительный сервер с  REST   API
Как собирать логи?
Как собирать логи?
Вопросы? наш проект вы можете найти на сайте http://lagger-logger.org [email_address]   [email_address]

Log+

  • 1.
    Логгирование и мониторингнагрузки Константин Андрюнин, Сергей Барбушин
  • 2.
    Для кого этот доклад ? для тех, кто использует LAMP   мы расскажем о логгировании на PHP для средних и больших проектов   от трёх серверов и больше для тех, кто пишет большие программы   более 600 строчек кода для тех, кому важна нагрузка   более 10 обращений в секунду к БД, кэшам и WS
  • 3.
    Что вы услышите? логгирование в LAMP/PHP   зачем нужно в PHP логгирование? зачем понадобилось писать свой логгер? обзор движков логгирования для PHP использование логгера в живых проектах   внедрение в живой код паттерны использования примеры
  • 4.
    когда серверов много  сбор логов и как я это делаю мониторинг по логам   что должно попадать в лог и в каком формате как расставлять логгеры анализ логов   асинхронные события как померять нагрузки инструменты
  • 5.
    PHP : История вопроса … но потом он повзрослел : - как язык добавились обработки исключений, OOP … - появились сложные проекты facebook , vkontakte … - появились высокие нагрузки десятки тысяч запросов в секунду…
  • 6.
    PHP : Как оно сейчас? когда же случается факап… - то программист просто будет пытаться воспроизвести ошибку у него нет другого способа узнать, отчего она возникла … но программисты остались в прошлом : - не используют новые инструменты PHP - продолжают дебажить пальцем по коду вставляя die(“ya, that line!"); - забивают на обработку ошибок максимум включая опцию в php.ini показывать / не показывать еноты
  • 7.
    PHP : Что есть?
  • 8.
    А зачем ононужно ? потому что сейчас лог малоинформативен - хочется: сопутствующие переменные, backtrace… нет динамического перенаправления вывода лога - хочется: записать часть лога в один файл, часть – в другой нет своих обработчиков ошибок - хочется: записать в DB, отправить по SMS, email… не хватает дополнительных фильтров ошибок - хочется: видеть ошибки только юзера в сессии и только с определённой страницы…
  • 9.
  • 10.
  • 11.
    Аспекты использования LL : обработка системных ошибок дебаг мониторинг корректной работы системы мониторинг нагрузки на систему
  • 12.
    Обработка системных ошибокв LL зачем? безопасность своевременное уведомление пример : переопределение стандартного обработчика конфигурация LL исключительные ситуации ( fatal error )
  • 13.
    Дебаг с LL Сами инициируем события! зачем? оптимизация разработки логгирование задержек в DB, WS мониторинг работы AJAX что логгируем? DB, WS, нахождение ключей в кэше профили обработки high, low, db….
  • 14.
  • 15.
    Что должно попадатьв лог и в каком формате? 2008.10.05 03:42:36.998 INFO e182aaf7 IncomeHandler user income 2008.10.05 03:42:36.998 DEBUG e182aaf7 IncomeHandler rote to component: [show] 2008.10.05 03:42:36.998 INFO e182aaf7 page.show.dao get page model 2008.10.05 03:42:36.998 DEBUG e182aaf7 page.show.dao ws [newTransaction] start 2008.10.05 03:42:37.334 DEBUG e182aaf7 page.show.dao ws [newTransaction] end 2008.10.05 03:42:37.338 INFO e182aaf7 page.show.dao model complete 2008.10.05 03:42:37.338 INFO e182aaf7 page.show.renderer start rendering 2008.10.05 03:42:37.344 INFO e182aaf7 page.show.renderer rendering end 2008.10.05 03:42:37.344 DEBUG e182aaf7 IncomeHandler component out: [show] 2008.10.05 03:42:37.344 INFO e182aaf7 IncomeHandler send content DATE > LogTYPE > UserID > ComponentID > comment/varibles
  • 16.
    Пример обработки лога:2008.10.05 04:40:35 0 2 1 0 282 251 0 308 261 2008.10.05 04:40:40 1 5 1 527 1077 238 539 1142 246 2008.10.05 04:40:45 3 2 3 2023 185 765 2053 195 794 2008.10.05 04:40:50 1 3 4 377 758 1244 389 809 1288 2008.10.05 04:40:55 0 2 6 0 476 1636 0 493 1693 2008.10.05 04:41:00 1 1 2 537 115 475 544 127 497 2008.10.05 04:41:05 1 4 1 394 937 289 398 982 300 DATE запросы по типу (за период) Обращение к WS ( сумма по всем откликам за период ) Время генерации страницы (сумма по всем откликам за период)
  • 17.
  • 18.
  • 19.
    Что должно попадатьв лог? Имя ноды (если их несколько) Название БД (в том числе разных схем) Тип запроса (на запись / на чтение) Дополнительные переменные, для идентификации события Форк новой нити Конец отработки нити Начало запроса к любому внешнему сервису / компоненту Окончание запроса Что писать в лог?
  • 20.
    Какие ещё логинужно собирать? Расход памяти Утилизация CPU по процессам Количество процессов в системе к примеру, периодический (раз в минуту) вызов ps -e -o pcpu,cpu,nice,state,cputime,args | grep php и последующая отправка результата в лог-коллектор Как это сделать?
  • 21.
    Как собирать логи?Использовать сервер очередей! ActiveMQ SPREAD или любой другой высокопроизводительный сервер с REST API
  • 22.
  • 23.
  • 24.
    Вопросы? наш проектвы можете найти на сайте http://lagger-logger.org [email_address] [email_address]