Я хотел написать этот пост, потому что самый распространенный вопрос, который я получаю, когда я выдаю запрос на потяну на оптимизацию: «Как, черт возьми, ты это нашел?! » Мой ответ 90% времени есть: «Я читаю журналы».
Я думаю, что журналы чтения — это потерянное искусство в наши дни. У нас так много потрясающих инструментов мониторинга, которые позволяют нам сохранять вкладки в наших приложениях, которые легко забыть о простом ресурсе, такого как журналы. Инструменты мониторинга отлично подходят для получения большой картины на ваше приложение. Однако, когда дело доходит до Nitty Gritty о том, как ваш код взаимодействует с вашими хранилищами и третьим лицами, ничто не сравнится с чтением журналов.
Оптимизация кода
В следующий раз, когда вы хотите сделать некоторые оптимизации кода, подумайте об этом. Зайдите в свою разработку или постановку постановки и установите влетку в отладку везде!
Установите это для вашей рамки.
pry(main)> Rails.logger.level = 0
Установите это для ваших драгоценных камней.
pry(main)> Search.connection.transport.logger = Logger.new(STDOUT)
Установите его для каждого из ваших связанных сопутствующих услуг.
$ redis-cli monitor > commands-redis-2018-10-01.txt
Как только ваши конфигурации журналов установлены, отпустите свое приложение. Загрузите веб-страницы, запустить фоновые работники, даже прыгайте в консоль и запустите несколько команд вручную. Когда вы закончите, посмотрите на произведенные журналы. Эти журналы собираются рассказать вам много о том, как ваш код взаимодействует со всеми вашими хранилищами и третьим лицами. Я бы поспорил, что некоторые из них не взаимодействуют, как вы ожидаете. Я не могу достаточно подчеркнуть, насколько ценно что-то простое, так как журналы чтения могут быть, когда речь идет о том, чтобы сделать оптимизацию в приложении.
Подходящие журналы в ваш рабочий процесс
Найти кусок кода, чтобы оптимизировать иногда это так же просто, как прочитать журналы. В других случаях это может быть немного более вовлечено. Вот один пример того, как моя команда использовала журналы, чтобы найти и исправить кусок кода.
Первое указание о том, что возникла проблема, была проблема с высоким уровнем движения Redis, который мы получили от нашей службы мониторинга.
Обычно, когда кусок кода недостоит в нашем применении, первое, что мы видим, является каким-то уведомлением, как оповещение с высоким уровнем движения, предупреждение о медленном запросе, оповещение о тайм-аутах и т. Д. После получения этого предупреждения, следующая вещь, которую мы сделали, было посмотрено на графики трафика Redis во время таймфрейма при возникновении предупреждения.
На этом графике мы можем видеть проблему куска кода в течение нескольких часов рано утром. Теперь, когда мы знаем то где и когда следующий шаг — выяснить, что. Это где мониторинг сервиса пригодится. Используйте свои инструменты мониторинга, чтобы выяснить, что работает в то время. Используя нашу службу мониторинга, мы смогли выяснить, что в течение этого окна мы работали много одного конкретного типа работника Resque.
После того, как мы приказали на трафик к тому, что один работник, последний кусок головоломки был выяснен, что делает этот рабочий, чтобы вызвать нагрузку. Вот где читает журналы!
Поскольку мы знали, какие рабочие ящики вызывали проблему, мы подпрыгнули на один из них и выпустили Redis-Cli.
$ redis-cli monitor
Мы позволим этому пройти 30 секунд, пока рабочие делали работу, и это фрагмент того, что мы получили.
# REDIS LOG FORMAT # timestamp [redis_db ip_address:PID] command argument 1544451182.095873 [15 1.1.1.1:15288] "exists" "worker-01-shard-1" 1544451182.095888 [15 1.1.1.6:63462] "exists" "worker-02-shard-3" 1544451182.095941 [15 1.1.1.4:55676] "exists" "worker-05-shard-3" 1544451182.095952 [15 1.1.1.8:55596] "exists" "worker-02-shard-3" 1544451182.095983 [15 1.1.1.8:55682] "exists" "worker-09-shard-2" 1544451182.096225 [0 1.1.1.11:19286] "llen" "batching:indexing-worker:medium_priority" 1544451182.096260 [15 1.1.1.4:55564] "exists" "worker-03-shard-3" 1544451182.096280 [15 1.1.1.7:18378] "exists" "worker-02-shard-3" 1544451182.096309 [15 1.1.1.4:55594] "exists" "worker-02-shard-2" 1544451182.096439 [15 1.1.1.5:14774] "exists" "worker-03-shard-2" 1544451182.096502 [15 1.1.1.7:12098] "exists" "worker-03-shard-3" 1544451182.096672 [15 1.1.1.1:32618] "exists" "worker-03-shard-3"
К нашему удивлению, мы обнаружили, что мы делаем тонну существующих запросов от конкретного набора рабочих ящиков. Затем мы проследили Exists обратно в драгоценный камень, который мы использовали, чтобы дросселировать наших работников Resque. Мы были уверены, что эти запросы были подавляющими Redis. Последнее, что осталось сделать, было подтвердить это. Мы удалили дросселированный код и наверняка, что устранило трафик Redis.
Большая фотография
Примеры кода я показываю использование Ruby, но, честно говоря, концепция журналов чтения может применяться на любом языке. В следующий раз вы обнаружите, что сталкиваются с медленным кодом или ошибкой, вы не можете найти, подумайте об чтении ваших журналов. Лучший случай, они помогают вам решить вашу проблему. В худшем случае вы получаете лучшее понимание того, как работает ваш код.
Счастливое кодирование!
Оригинал: «https://dev.to/molly/live-log-and-prosper—3j65»