Мне не удалось найти никакой информации о том, как было реализовано ведение журнала в хранилище BLOB-объектов в Azure. Однако вот что я смог сделать:
Я подтвердил, что отключение глобальная блокировка не подействовала. Таким образом, проблема производительности не была напрямую связана с конкуренцией блокировок.
Я также подтвердил, что если я поверну Автозапуск выключен, проблем с производительностью не возникло.
Из дальнейших перекрестных ссылок исходный код для API трассировки .NET, я пришел к выводу, что при включении хранилища BLOB-объектов для журналов внедряет в ваше приложение какой-то прослушиватель трассировки (точно так же, как вы можете добавить прослушиватель в web.config) и синхронно записывает каждый полученный оператор трассировки в хранилище больших двоичных объектов.
Таким образом, похоже, что есть несколько способов обойти это поведение:
- Don't turn on AutoFlush, but manually flush periodically. This will prevent the synchronous blob writes from interrupting every log statement.
- Write your own daemon that will periodically copy local log files to blob storage or something like this
- Don't use this blob storage feature at all but instead leverage the tracing functionality in Application Insights.
Я закончил тем, что сделал №3, потому что, как оказалось, у нас уже был настроен и включен Application Insights, мы просто не понимали, что он может обрабатывать ведение журнала трассировки и запросы. После отключения выборки для отслеживания событий мы теперь есть способ легко запрашивать любой оператор журнала удаленно и получать полный набор трассировок с учетом любых критериев (соответствие ключевого слова, все трассировки для определенного запроса, все трассировки за определенный период времени и т. д.). заметные синхронные накладные расходы на запись операторов журнала с помощью прослушивателя трассировки Application Insights, поэтому в нашем приложении не нужно ничего менять (мы можем продолжать использовать класс трассировки .NET). В качестве бонуса, поскольку трассировка Application Insights является довольно гибкой с источником трассировки, мы даже можем переключиться на другой API регистрации с более высокой производительностью (например, ETW или log4net), если это необходимо, и Application Insights по-прежнему работает.
В конечном итоге вам следует рассмотреть возможность использования Application Insights для хранения и запроса ваших трассировок. В зависимости от того, зачем вам вообще нужны журналы в хранилище BLOB-объектов, это может или не может соответствовать вашим потребностям, но у нас это сработало.
person
Auth Infant
schedule
05.12.2017