Налаштування логування угод криптобота під ключ зі звітністю

Збій у торговому боті коштує найдорожче тоді, коли історію угод неможливо відновити. Ми налаштовуємо логування криптобота під ключ: схему запису, зберігання та звітність під ваші завдання. Ви отримуєте повну картину операцій і розбір будь-якого збою без втрат часу.
Часті запитання

Чому логування криптобота розсипається на першому ж збої

Бот надсилає заявку, біржа не відповідає довше заданого інтервалу, позиція залишається відкритою — а в журналі один рядок про помилку з'єднання. Далі починається реконструкція за непрямими ознаками: звірка балансів, вивантаження з особистого кабінету, зіставлення часу подій.

На таку діагностику збою йдуть години, і вона все одно не відповідає на головне питання — була угода чи лише спроба.

Причина в тому, що події пишуться не наскрізним потоком, а частинами: сигнал стратегії — в одному місці, відповідь виконання — у другому, стан позиції — у третьому. Коли один із учасників падає, сусідні записи втрачають зв'язок, і втрата угод перестає бути перевірним фактом.

Логування криптобота в такому вигляді фіксує факт падіння, але не ланцюжок рішень, який до нього призвів, тому кожен збій торгового бота доводиться пояснювати заново.

Окреме вузьке місце звітності — формат запису. Вільний текст зручний людині, але не піддається групуванню: не можна порахувати частку відхилених заявок, час від сигналу до підтвердження, частоту повторів за одним інструментом.

Поки ці величини не виводяться з журналу, суперечка про те, чи винен ринок, чи логіка бота, залишається суперечкою про смаки.

Довіра до стратегії тримається на відтворюваності: за журналом угода має збиратися від сигналу до закриття позиції — з ідентифікатором заявки, міткою часу та версією конфігурації. Нижче розбираємо, як це закривається.

Що змінюється після впровадження: розбір збою та повнота історії

До налаштування логування збій у боті виглядав так: ордер пішов на біржу, відповідь не розібралася, позиція залишилася відкритою, а в логах — один рядок без ідентифікатора.

Розбір такого випадку займав години: доводилося звіряти вивантаження з біржі, баланс гаманця та листування в месенджері, щоб відновити порядок подій.

Ми переводимо логування на подієву модель. Кожна дія — розрахунок сигналу, виставлення ордера, підтвердження, часткове виконання, скасування, перерахунок позиції — пишеться окремим записом з наскрізним ідентифікатором кореляції, міткою часу та знімком вхідних параметрів. Записи потрапляють у незмінний журнал, поверх якого будується звітність за угодами.

Повнота історії угод перестає залежати від того, чи встиг бот дописати файл до перезапуску: запис підтверджується до переходу до наступного кроку, тому пропусків в історії не залишається.

Час розбору інциденту падає з годин до хвилин — за ідентифікатором піднімається весь ланцюжок від сигналу до виконання, включно з відповідями біржі та перевищеннями часу очікування.

Відтворюваність стану дає програвання журналу в тестовому контурі: поведінка бота на історичних даних повторюється крок за кроком.

Це прибирає цілий клас відмов — втрату стану після рестарту, дублі ордерів і «завислі» позиції, які раніше знаходили тільки за розходженням балансу, — і напряму підвищує стійкість бота. Панель моніторингу в Grafana показує розходження в реальному часі, а не постфактум.

Режими запису: повний потік, вибірка подій, тільки помилки

Режим запису визначає, що взагалі вдасться відновити під час розбору інциденту. Повний потік зберігає кожну подію — заявки, відповіді біржі, зміни балансу та стану, тому обсяг сховища зростає лінійно з активністю бота.

Запис тільки помилок дає мінімальний слід: виключення видно, а ланцюжка рішень, який до нього призвів, — вже ні.

Режим Що фіксується Коли підходить Сліпі зони Обсяг сховища
Повний потік Усі події циклу та відповіді зовнішніх систем Налагодження нової стратегії, розбір складних збоїв Практично немає Зростає лінійно з кількістю заявок
Відбір подій Заявки, угоди, відмови, зміна стану бота Постійна робота в проді Проміжні кроки розрахунку Передбачуваний, задається правилами відбору
Тільки помилки Виключення та неуспішні відповіді Мінімальне спостереження за ботом Причина збою лежить поза записом Фіксований мінімум

На практиці режими не вибирають по одному: повний потік вмикають на короткому вікні навколо релізу або інциденту, відбір подій тримають постійно, а помилки пишуть з розширеним контекстом — вхідними даними та тілом відповіді.

Така комбінація дає розбір без необмеженого зростання сховища. Правила відбору подій налаштовуємо під конкретну стратегію: у журнал потрапляють угоди та відмови, а не кожен проміжний розрахунок.

Етапи впровадження: від розбору схеми до передачі регламентів

Логування угод у боті — це не виведення рядків у файл, а контур доказів: що бот отримав, як порахував, що відправив у мережу і що підтвердилося. Без нього спірну угоду не можна ні відновити, ні захистити. Робота йде етапами, і в кожного етапу є перевірний артефакт.

  1. Аудит бота. Розбираємо архітектуру і знаходимо точки, де народжуються події: приймання заявки, розрахунок, відправлення транзакції, підтвердження. На виході — карта потоків і перелік місць, де запис втрачається: асинхронні обробники, повтори при збоях, ручні втручання.
  2. Схема логування. Визначаємо склад події, ідентифікатори заявки, рахунку та транзакції, обов'язкові поля. Фіксуємо формат запису і правило, за яким подія вважається повною, а не частковою.
  3. Налаштування. Вбудовуємо запис у код і в середовище: буферизація, ротація, відправлення у сховище, поведінка при недоступності приймача — події дочекаються відправлення, а не зникають.
  4. Перевірка цілісності записів. Звіряємо журнал із фактичними балансами та історією мережі, перевіряємо безперервність послідовності й захист від підміни. Розходження розбираємо до причини, а не списуємо на збій.
  5. Звітність. Збираємо зрізи з тих самих записів: угоди за період, комісії, частка підтверджених операцій, інциденти. Ручна звірка в таблицях більше не потрібна.
  6. Регламенти експлуатації. Передаємо інструкції: як читати журнал, що робити при розходженні, як відновити сховище після збою і хто відповідає за реакцію.

Після передачі ваша команда працює з журналом самостійно; ми залишаємося на зв'язку, коли схема змінюється разом із доопрацюванням бота.

Схеми зберігання, правила відбору подій, документація

Впровадження логування — це не лише працюючий бот, а й набір артефактів, за якими ваша команда зможе розвивати й перевіряти систему без нас. Нижче — що саме передаємо в репозиторій і в базу знань при здачі.

  • Схема зберігання логів — де лежать гарячі та архівні записи, за якими ключами розкладені, термін зберігання за кожним класом подій, правила ротації та стиснення.
  • Правила відбору подій — які угоди, відмови та стани ордерів пишуться повністю, які зводяться в агрегати, а які йдуть лічильниками, щоб журнал не розростався.
  • Словник полів і подій — опис кожного поля, типи та допустимі значення, джерело даних; за ним пишуться вибірки й будується звітність.
  • Політики доступу — ролі та права на читання журналу, порядок видачі й відкликання ключів, що фіксується в аудиті звернень до самих логів.
  • Вивантаження та звітність — склад зведень, періодичність формування, куди доставляються файли і як перевіряється повнота вивантаження.
  • Регламент розбору розходжень — що вважається інцидентом при звірці журналу з історією угод, хто і в які строки розбирає.
  • Документація щодо бота — конфігурації, точки розширення, процедури оновлення та відкату, відновлення після збою; плюс набір записаних подій для перевірки розбору після змін.

Передаємо в тому вигляді, в якому артефактами користуються: конфігурації — поряд з кодом, схеми та регламенти — в базі знань команди. За ними новий інженер піднімає стенд і повторює розбір минулих угод без звернення до нас — це і є критерій здачі.

Розбір впровадження: як усунули розходження у звітах

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

Причина виявилася не в стратегії — частина подій губилася між відправленням заявки та підтвердженням виконання, а частково виконані та скасовані ордери потрапляли у звіт як повністю закриті.

Звірка угод велася вручну за вивантаженням з кабінету, тому розходження знаходили через кілька днів, уже не розуміючи, на якому кроці воно виникло.

Ми перевели бота на наскрізний запис кожної події заявки.

Ключ запису — ідентифікатор заявки плюс ідентифікатор виконання: повторні підтвердження та дублі при перепідключенні відсікаються за цим ключем, а переходи станів (створена, відправлена, виконана частково, виконана, скасована) зберігаються як окремі рядки журналу на дозапис.

Журнал складається в ClickHouse, поверх нього щогодинна звірка порівнює обсяг і комісії з випискою біржі, а розходження потрапляють в окремий список із контекстом угоди — повернути можна будь-яку операцію за ключем.

Метрики до і після:

  • частка угод, підтверджених звіркою: 93% → 100%;
  • розходження обсягу за добу: до 7% → нуль понад округлення;
  • час пошуку причини розходження: години ручного вивантаження → менше хвилини за журналом;
  • коректно відображені часткові та скасовані ордери: близько 60% → 100%;
  • звіт: добовий зріз сходиться з біржею без ручних правок.

Окремо закрили відкат: журнал незмінний, тому після збою запис відновлюється з останньої підтвердженої точки, а не перезбирається заново. Тепер бот звітує перед власником за тими самими цифрами, що бачить біржа, — розходження видно в момент появи, а не в кінці місяця.

Чим відрізняється логування криптобота від біржового журналу?

Біржовий журнал угод фіксує тільки те, що дійшло до майданчика: прийняті заявки, виконання, нарахування. Він не відповідає на питання, чому рішення було прийнято — розрахунок сигналу, перевірка лімітів, відхилена заявка, розрив з'єднання залишаються за кадром. Якщо помилка в логіці стратегії, журнал майданчика покаже наслідок, але не причину.

Власна історія пишеться на стороні бота і зберігає намір до відправлення заявки: вхідні дані, версію конфігурації, причину відмови, стан портфеля на момент рішення.

Завдяки цьому звірка даних стає відтворюваною: подія бота зіставляється з виконанням за ідентифікатором заявки та міткою часу в єдиній зоні.

Варіант Коли підходить Обмеження
Журнал майданчика Потрібен лише факт виконання та рух коштів Немає причин рішень, глибина історії задана біржею
Лог бота у файлах Один процес, налагодження, короткі сесії Втрачається при перенесенні вузла, немає єдиного пошуку
Власна історія в базі Кілька стратегій, розбір інцидентів, звітність Потрібна схема подій та обслуговування сховища
Журнал майданчика плюс власна історія Звірка даних та обов'язкова звітність Потрібна нормалізація форматів і правило розв'язання розходжень

Тому ми ведемо обидва потоки і пов'язуємо їх регулярною звіркою. Розходження між власним логом і журналом майданчика — окремий клас інцидентів: без нього воно спливає тільки у звітності, коли відновити хід подій уже не можна.

Втрата записів, зростання обсягу та доступи: часті питання

Обсяг журналу — головний страх при вмиканні повного логування: пишемо кожну подію, кожну заявку та її виконання, тому за місяць набігає більше даних, ніж у всій іншій базі.

Вирішується це не «писати менше», а розділенням рівнів: гаряче вікно зі швидким доступом на останні тижні, далі — партиційований архів зі стисненням і своєю політикою зберігання.

Записи позначаються як незмінні, тому ні зростання обсягу, ні очищення не створюють прогалин в історії угод.

Доступ до записів будується за ролями: трейдери й підтримка бачать свої угоди, аналітик — вивантаження без чутливих полів, аудит — повний слід із відміткою, хто і коли читав.

Приватні ключі та доступи до бірж при цьому не залишають вашу інфраструктуру — ми працюємо з журналом, а не з гаманцем.

Історія вже з прогалинами — минуле можна відновити?

Ми не переписуємо минуле заднім числом: відзначаємо межі достовірних даних і позначаємо період як відновлений, щоб звітність не змішувала різне. Пропущені угоди добираємо з виписок біржі та подій мережі — наприклад, в Ethereum за журналом транзакцій сходиться більшість операцій.

Логування сповільнить бота або стане точкою відмови?

Запис іде асинхронно, в буфер, і не блокує торговий цикл: якщо журнал недоступний, угоди продовжують виконуватися, а події стають у чергу на досилання. Така схема прибирає клас відмов, коли падіння сховища зупиняло торгівлю.

Як перевірити, що записи не підмінюються?

Кожен запис пов'язується з попереднім, а добові зрізи фіксуються контрольною сумою — правку заднім числом видно відразу. Вивантаження для аудиту віддається разом із перевірними значеннями, тому звіт можна підтвердити, а не просто прийняти на слово.

Обговоримо задачу: зберемо схему запису угод під вашого бота

Точна оцінка виходить не з «плюс-мінус», а з розбору вашого сценарію: які події бот вважає угодою, де зберігається стан позиції, хто і навіщо читає звітність. Давайте обговоримо задачу на цьому рівні — після розмови у вас залишиться перелік робіт, а не загальні слова.

  • Перелік подій: відкриття, часткове закриття, скасування, комісія, переказ — що саме потрапляє в журнал і з якою деталізацією.
  • Джерела даних: власні логи бота, відповіді торгових майданчиків, внутрішня база — де звіряємо розходження і що вважаємо істиною.
  • Схема зберігання: структура таблиць, індекси, термін зберігання, розділення свіжих та архівних записів для швидкої вибірки.
  • Формат звітності: зріз за днями, інструментами та парами, вивантаження в таблицю або файл, хто і як проводить звірку.
  • Поведінка при збоях: повторна доставка запису без дублів, відновлення після обриву зв'язку та перезапуску бота.
  • Доступи та безпека: хто бачить журнал, які поля маскуються, де лежать ключі і як проходить їхня зміна.
  • План впровадження: етапи, точки перевірки, критерії приймання та порядок розгортання без зупинки торгівлі.

За підсумками розмови зберемо технічне завдання, в якому зафіксовано склад журналу, схему зберігання та вигляд звіту. Опишіть задачу — повернемося з оцінкою робіт і планом впровадження, а також запропонуємо перший етап, що дає робочий журнал угод і першу звірку.

Напрямки блокчейн-розробки

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142