Логирование

May 30, 2017

У нас часто сервисные утилиты пишут в базу свои логи примерно так, чтобы их легко через морду было посмотреть:

  Open3.popen2e(cmd + " 2>&1") { |i, oe, t|
    oe.each{ |line| add_log_line(line.strip) }
  }

Один сервис пишет довольно много логов и, что еще усугубило ситуацию, в процессе миграции одной ногой (база) он остался в хероку, а второй ногой (сам код) ушел в Селектел. И в такой раскоряке он начал вдруг работать неприятные 50 минут и больше.

После небольшого исследования нашли причину, что инсерт в базу довольно долгий, так как база далеко, и код 40 минут из 50 сидит в базе, тормозя запуск внешнего скрипта. Самой утилите уже больше 3 лет, поэтому чтобы ничего не трогать просто вынесли логирование в отдельный поток и стали отправлять логи батчами (пишу и понимаю, что хватило бы только второго шага). Всякое бывает.

UPDATE: Выкинул отдельный поток, оставил только отправку логов пакетом не чаще раза в 3 секунды. Работает также быстро. Не люблю треды, еще Кнут говаривал, что мультипоточное программирование - от лукавого.

comments powered by Disqus