lager_syslog 2.0.2

119 views
Skip to first unread message

dmitryttt

unread,
Oct 17, 2014, 2:43:45 AM10/17/14
to erlang-...@googlegroups.com
Добрый день.
После обнаруженной проблемы жестких тормозов из-за использования lager_file_backend

      {lager_file_backend, [        {file, "logs/error.log"}, {level, error}      ]},
      {lager_file_backend, [        {file, "logs/debug.log"}, {level, debug}      ]},
      {lager_file_backend, [        {file, "logs/console.log"}, {level, info}      ]}

решил попробовать la

        {lager_syslog_backend, ["some", local1, info]},
       
{lager_syslog_backend, ["some", local1, debug]},
       
{lager_syslog_backend, ["some", local1, error]}



Тормоза пропали. Однако вот странность. Логируется только небольшая часть сообщений (errors). Получить в логах syslog'а ВСЕ сообщения получается только прописав дополнительно для всех уровней lager_console_backend :

        {lager_console_backend, info},
        {lager_console_backend, debug},
        {lager_console_backend, error},
        {lager_syslog_backend, ["some", local1, info]},
        {lager_syslog_backend, ["some", local1, debug]},
        {lager_syslog_backend, ["some", local1, error]}
Скорость не проседает, но получать все в консоль нет необходимости. Есть ли объяснение этого странного, для меня, поведения ?

В syslog.conf добавлял
local1.info                       /var/log/erlang_info.log
local1.error                      /var/log/erlang_error.log
local1.debug                      /var/log/erlang_debug.log

используется lager tag 2.0.2 , сборка под  Erlang/OTP 17

Danil A. Zagoskin

unread,
Oct 17, 2014, 4:38:07 AM10/17/14
to erlang-...@googlegroups.com
Не знаю, как вы, а я не доверяю используемому драйверу сислога, потому что он на сях и делает какую-то черную магию для защиты от конкуррентности. Возможно, он будет хорошо работать, если бэкенд будет только один.

Странно, что не написан лагер-бэкенд с этим драйвером: https://github.com/jkvor/erlang_syslog — gen_udp гораздо понятнее, чем сторонний черный ящик.

Моя гипотеза о причине того, что пишется только error такова:
   - В этом месте: https://github.com/Vagabond/erlang-syslog/blob/master/c_src/syslog_drv.c#L96 оказваются все три драйвера одновременно, и выигрывает последний (error).
   - Вывод в консоль ненадолго блокирует gen_event лагера, что позволяет сислогу проскочить опасное место

--
Вы получили это сообщение, поскольку подписаны на группу "Erlang по-русски".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес erlang-russia...@googlegroups.com.
Чтобы отправлять сообщения в эту группу, отправьте письмо на электронный адрес erlang-...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

dmitryttt

unread,
Oct 17, 2014, 5:00:56 AM10/17/14
to erlang-...@googlegroups.com, da...@st-olen.ru
Спасибо за ответ ) постараюсь опытно подтвердить/опровергнуть гипотезу )

пятница, 17 октября 2014 г., 12:38:07 UTC+4 пользователь Danil A. Zagoskin написал:

dmitryttt

unread,
Oct 17, 2014, 3:31:30 PM10/17/14
to erlang-...@googlegroups.com
Подскажите, пожалуйста, что подразумевается под middleman ? Поиск гуглом дает и прослойку в обработке cowboy, и какой-то каркас на ruby для быстрой разработки веб-приложений...

пятница, 17 октября 2014 г., 20:51:55 UTC+4 пользователь Puerych написал:
посмотри в сторону middleman, мы значительно снизили нагрузку на логирование с помощью него, сам  lager запускает все eventы в одном потоке, из за этого проблемы


Denis Fakhrtdinov

unread,
Oct 17, 2014, 5:01:38 PM10/17/14
to erlang-...@googlegroups.com
Речь о https://github.com/klarna/lager_middleman_backend
Вкратце - обычный бэкенд лагера в определенных случаях обрабатывает входящие сообщения с O(n), где n - число сообщений в мейлбоксе. То есть чем чаще логируем, тем хуже логируем.

пятница, 17 октября 2014 г., 22:31:30 UTC+3 пользователь dmitryttt написал:

Sergey Prokhorov

unread,
Oct 17, 2014, 6:43:05 PM10/17/14
to erlang-...@googlegroups.com
Как я уже писал в twitter, по поводу тормозов file_backend - скорее всего из за того, что у вас пишется много событий с уровнем error и выше. lager делает fsync на каждое событие для error и выше https://github.com/basho/lager/blob/master/src/lager_file_backend.erl#L225-L228.
Можете попробовать выставить {sync_on, critical}. У меня так сделано:

{lager_file_backend, [{file, "/var/log/***/*****_events.log"},
                           
{level, info},
                           
{sync_on, critical}, %!!!!!!!!!!!!!!!!!!!!
                           
{size, 0}, {date, ""} % disable internal rotation

                         
]},


пятница, 17 октября 2014 г., 10:43:45 UTC+4 пользователь dmitryttt написал:
Reply all
Reply to author
Forward
Message has been deleted
Message has been deleted
0 new messages