Модуль логирования HTTP запросов

23.12.24

Разработка - Инструментарий разработчика

Мы разработали модуль логирования всех входящих и исходящих HTTP-запросов, что неоднократно нас выручало. Благодаря этому решению, мы можем легко доказать, что проблема не на нашей стороне, подкрепляя свои слова логами.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
КлиентHTTPЛогирование
.txt 21,07Kb
12
12 Скачать (1 SM) Купить за 1 850 руб.

Здравствуйте, меня зовут Дмитрий Башинский, и я возглавляю группу интеграции с маркетплейсами в компании SOKOLOV. Мы успешно наладили интеграцию с десятками различных маркетплейсов (Wildberries, Ozon, ЯндексМаркет, МегаМаркет, Lamoda, Купер, AliExpress, Avito, Flowwow и Kaspi в Казахстане), используя API для взаимодействия, и одна из ключевых задач — отслеживание данных, которые мы отправляем и получаем через HTTP-запросы.

 

Проблема логирования

При интеграции с несколькими маркетплейсами мы столкнулись с серьезной проблемой: необходимо было отслеживать, какие данные мы отправили и получили через HTTP-запросы. Изначально мы использовали простой регистр для хранения этих данных, но с ростом количества подключенных площадок это решение стало неэффективным:

- Проблемы с транзакциями: Если запись в регистре происходила внутри транзакции и она откатывалась, вся история логов терялась.

- Недостаток места: С увеличением объема логов регистр стал занимать слишком много места, что негативно сказывалось на бэкапах и производительности.

- Скорость чтения: Чтение информации из регистра оказалось медленным, так как данные хранились в строках неограниченной длины.

 

Поиск решения

Мы начали искать альтернативы и наткнулись на опыт коллег из "Самоката". Перенос логов в журнал регистрации (ЖР) позволил решить проблему с транзакциями и нехватки места. Но вот чтение данных из ЖР было медленным, и стало понятно, что нужно искать более производительное решение.

Выбор пал на ClickHouse. Благодаря инструменту от akpaevj, мы настроили экспорт логов из ЖР в отдельную базу данных на ClickHouse, немного доработав выгрузку. Это решение позволило нам эффективно хранить и затем анализировать логи.

 

Разработка модуля логирования

Мы разработали общий модуль `КлиентHTTPЛогирование`, который стал универсальным решением для всех наших HTTP-клиентов (HTTP-клиент, РаботаСHTTP, Новый HTTPСоединение). Этот модуль занимается логированием запросов по единому шаблону.

Пример использования исходящих запросов:

Функция Тест()
	АдресЗапроса = "https://example.ru/"
	Лог = КлиентHTTPЛогирование;	
	ЛогHTTPЗапроса = Лог.ОткрытьЛогHTTPЗапроса(КакаяНибудьСсылка);
	Лог.УстановитьURL(ЛогHTTPЗапроса, АдресЗапроса);
	Лог.УстановитьМетодHTTPЗапросаGET(ЛогHTTPЗапроса);
	Лог.НачатьЗамерВремени(ЛогHTTPЗапроса);
	Попытка
		Ответ = HTTPСоединение.Записать(HTTPЗапрос);
	Исключение // А сюда попадаем, когда например отсутствует интернет.
		ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
		Лог.ЗакрытьЛогHTTPЗапросаСОшибкой(ЛогHTTPЗапроса, ТекстОшибки);
		ВызватьИсключение ТекстОшибки;
	КонецПопытки;
	Лог.ЗакрытьЛогHTTPЗапроса(ЛогHTTPЗапроса, Ответ);
	Возврат Ответ;
КонецФункции

Пример использования входящих запросов:

Функция Тест(Запрос)	
	Лог = КлиентHTTPЛогирование;	
	ЛогЗапроса = Лог.ОткрытьЛогHTTPЗапроса(КакаяНибудьСсылка);
	Лог.УстановитьМетодHTTPЗапроса(ЛогЗапроса, Запрос.HTTPМетод);
	Лог.УстановитьЗаголовкиИсх(ЛогЗапроса, Запрос.Заголовки);
	Лог.УстановитьURLИзВхЗапроса(ЛогЗапроса, Запрос);
	Лог.УстановитьТелоЗапроса(ЛогЗапроса, Запрос.ПолучитьТелоКакСтроку());
	Ответ = Новый HTTPСервисОтвет(200);		
	Лог.ЗакрытьЛогHTTPЗапроса(ЛогЗапроса, Ответ);	
	Возврат Ответ;
КонецФункции

Лог пишется в журнал регистрации с событием "Информация", а если ответ приходит с кодом состояния больше 300 или вообще не удалось выполнить запрос, то с событием "Ошибка". Проверьте, что у Вас включены нужные события в настройке журнала.


 

Формат логов

Чтобы удобно работать с логами, мы разработали следующий шаблон для их хранения:

[ДатаВремяНачала* ПримерноеВремяЗапроса*] МетодHTTPЗапроса* URL*
ЗаголовкиЗапроса
ТелоЗапроса
КодСостония**
ЗаголовкиОтвета
ТелоОтвета

Звездочкой отмечены поля которые всегда присутствуют в логах, остальные по требованию. Код состояния в случае ошибки запроса не указывается.
Пример лога:

[11.10.2024 11:26:11 ~0.109s] GET https://example.ru/
200
{"data":["1","2","3"]}

Пример лога с ошибкой:

[11.10.2024 11:26:12 ~15.253s] GET https://example.ru/
Ошибка работы с Интернет:  Failure when receiving data from the peer

Пример логов в отчете:

 

 

Да, кстати, это скриншот отчета, который из ClickHouse достает логи и выводит их в привычном нам отчете СКД с привязкой к метаданным.

 

Оптимизация хранения логов

Мы пришли к выводу, что запись больших объемов данных в ЖР может значительно ухудшить производительность. Поэтому мы ограничили размер тела запроса и ответа до 5 Мб, но это можно изменить при необходимости.

Если в запросе возвращается файл в двоичном формате, мы кодируем его в base64, чтобы сохранить возможность восстановления при необходимости.

Лог.ТелоОтветаСохранитьВBase64(ЛогЗапроса)

Заголовки запросов и ответов по умолчанию отключены, кроме исключения по некоторым кодам состояния (301, 302, 429), но их можно включить при необходимости с помощью одной строки кода:

Лог.ФиксироватьЗаголовки(ЛогЗапроса)

Этот подход позволил нам сохранить баланс между полнотой логов и производительностью системы. Логи стали компактными, удобными для анализа и при этом не перегружают систему.

 

Преимущества решения

Теперь у нас есть полноценная система логирования для всех взаимодействий с маркетплейсами и другими сервисами. Это дало нам несколько ключевых преимуществ:

- Быстрая диагностика проблем — если что-то "не работает", мы легко можем проверить, какие запросы шли на маркетплейсы, что они вернули, и где возникла ошибка.

- Гибкость и масштабируемость — добавление новых маркетплейсов или сервисов сводится к минимальной настройке, весь процесс логирования уже отлажен.

- Удобный анализ данных — благодаря ClickHouse, мы можем быстро выгружать и анализировать логи, строить отчеты и отслеживать ключевые метрики.

Когда возникают претензии по поводу работы сервисов, мы можем быстро доказать обратное, предоставив логи, которые подтверждают корректность выполненных запросов и ответов.

 

Заключение

Разработанный нами модуль логирования HTTP-запросов стал незаменимым инструментом в нашей работе с маркетплейсами. Он позволяет не только эффективно отслеживать взаимодействия, но и значительно ускоряет процесс диагностики проблем. 

К статье прикреплён текст модуля `КлиентHTTPЛогирование`, который, хотя и не является законченным продуктом, может оказаться полезным для многих. Мы разрабатывали и тестировали его на платформе 8.3.13.1690.

Если у вас есть интерес к более подробному изучению работы с ClickHouse, я с удовольствием подготовлю отдельную статью, в которой расскажу о том, как мы реализовали выгрузку логов, какие доработки сделали в библиотеке экспорта ЖР, с какими трудностями столкнулись и какие преимущества получили от этого подхода.

Спасибо за внимание! Если у вас есть вопросы или предложения, буду рад обсудить в комментариях!

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    177091    983    403    

940

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    18329    128    63    

127

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    12729    51    33    

72

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    18618    49    19    

83

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    28786    100    48    

146

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18565    7    32    

43

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1641    2    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. alex_4x 87 24.12.24 12:13 Сейчас в теме
Добрый день.
Для меня название *ClickHouse* - ничего не говорит. Вы не считаете нужным рассказать что это такое, кто автор этого решения, платное оно или бесплатное, с открытым кодом или проприетарное, какой опыт его использование есть в других компаниях, чем себя это решение зарекомендовало?
Спасибо.
ovasiliev; +1 Ответить
2. Batman 166 24.12.24 21:42 Сейчас в теме
(1) Если чем-то поможет, материал из "Википедии" (на всякий случай, упреждая вопрос - Википе́дия — многоязычная общедоступная интернет-энциклопедия со свободным контентом, поддержку и написание которой осуществляют добровольцы — «википедисты»)

ClickHouse — колоночная аналитическая СУБД с открытым кодом, позволяющая выполнять аналитические запросы в режиме реального времени на структурированных больших данных. Изначально разрабатывалась компанией Яндекс, но впоследствии разработка полностью перешла в отдельную компанию ClickHouse Inc.

ClickHouse использует собственный диалект SQL, близкий к стандартному, но содержащий различные расширения: массивы и вложенные структуры данных, функции высшего порядка, вероятностные структуры, функции для работы с URI, возможность для работы с внешними key-value хранилищами («словарями»), специализированные агрегатные функции, функциональности для семплирования, приблизительных вычислений, возможность создания хранимых представлений с агрегацией, наполнения таблицы из потока сообщений Apache Kafka и т. д.

Однако при этом имеются и ограничения — отсутствие транзакций, отсутствие точечных UPDATE/DELETE (пакетный UPDATE/DELETE был введён в июне 2018 года), ограниченная поддержка синтаксиса JOIN, строгие типы с необходимостью явного приведения, для некоторых операций промежуточные данные должны помещаться в оперативную память, отсутствие полноценного оптимизатора запросов, точечного чтения, присутствие ограничений в реализации некоторых функций, связанных со спецификой использования ClickHouse в Яндексе, и т. д.

Система оптимизирована для хранения данных на жёстких дисках (используются преимущества линейного чтения, сжатия данных). Для обеспечения отказоустойчивости и масштабируемости ClickHouse может быть развёрнут на кластере (для координации процесса репликации используется Apache ZooKeeper). Для работы с базой данных существует консольный клиент, веб-клиент, HTTP интерфейс, ODBC и JDBC-драйверы, а также готовые библиотеки для интеграции со многими популярными языками программирования и библиотеками.
sergey.skirdin; bashinsky; +2 Ответить
3. DoctorRoza 28.12.24 22:54 Сейчас в теме
(2) да, отличная штука, тоже внедрили. Полные логи тж отлично уживаются. Анализируют результат по разному,кто через Пайтон, кто через sql- запросы.
bashinsky; +1 Ответить
Оставьте свое сообщение