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

23.12.24

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

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

Файлы

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

Наименование Скачано Купить файл
(только для физ. лиц)
КлиентHTTPЛогирование
.txt 21,07Kb
19 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Здравствуйте, меня зовут Дмитрий Башинский, и я возглавляю группу интеграции с маркетплейсами в компании 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    205599    1129    410    

1027

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

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

8400 руб.

20.08.2024    36764    211    109    

198

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

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

16000 руб.

10.11.2023    16763    73    39    

89

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    24344    65    28    

93

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

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

9500 руб.

17.05.2024    35234    127    53    

168

SALE! 30%

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

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 12600 руб.

22.11.2024    2007    1    0    

8

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

6000 руб.

07.02.2018    107665    249    100    

313
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. alex_4x 88 24.12.24 12:13 Сейчас в теме
Добрый день.
Для меня название *ClickHouse* - ничего не говорит. Вы не считаете нужным рассказать что это такое, кто автор этого решения, платное оно или бесплатное, с открытым кодом или проприетарное, какой опыт его использование есть в других компаниях, чем себя это решение зарекомендовало?
Спасибо.
ovasiliev; +1 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-драйверы, а также готовые библиотеки для интеграции со многими популярными языками программирования и библиотеками.
VladC#; sergey.skirdin; bashinsky; +3 Ответить
3. DoctorRoza 28.12.24 22:54 Сейчас в теме
(2) да, отличная штука, тоже внедрили. Полные логи тж отлично уживаются. Анализируют результат по разному,кто через Пайтон, кто через sql- запросы.
bashinsky; +1 Ответить
Оставьте свое сообщение