Log+

1,581 views

Published on

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
1,581
On SlideShare
0
From Embeds
0
Number of Embeds
709
Actions
Shares
0
Downloads
53
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Log+

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

×