П'ятниця, 18:00. Сайт на Бітріксі лежить. Менеджери не бачать замовлення, клієнти скаржаться, а DevOps дізнається про проблему в понеділок з листа. Типова ситуація: база впала через slow queries, агенти не обробили поштові події, а диск забитий кешем. Вбудований модуль Монітор продуктивності (perfmon) показує метрики тільки в адмінці — він не алертить в Telegram, не будує дашборди за довільний період і не інтегрується з черговою командою. Рішення — зовнішні системи: Zabbix або Prometheus з Grafana. Ми налаштовуємо такий моніторинг 1С-Бітрікс більше 10 років, виконали понад 50 проєктів. Один годину простою інтернет-магазину може коштувати значних втрат виручки — грамотний моніторинг окупається за лічені дні.
Що моніторимо
Метрики поділяються на три рівні: інфраструктурні, прикладні та бізнесові.
Інфраструктурні (сервер):
- CPU, RAM, disk I/O
- Вільне місце на диску (Бітрікс активно пише в
/upload/ та /bitrix/cache/)
- Стан MySQL: кількість з'єднань, slow queries, replication lag
Прикладні (Бітрікс):
- Час відповіді головної сторінки та каталогу
- Кількість помилок 500 в логах
- Розмір таблиці
b_event_log та b_cache_tag
- Статус cron-агентів (
/bitrix/modules/main/tools/cron_events.php)
- Довжина черги поштових подій (
b_event зі статусом 1)
Бізнесові (e-commerce):
- Кількість замовлень за останню годину (різке падіння = проблема)
- Помилки оплати (записи в лозі платіжних систем)
- Кількість покинутих кошиків
Ці метрики дозволяють оперативно реагувати на збої та запобігати втраті виручки. Економія від запобігання одному інциденту може бути значною.
Чому моніторинг критичний для Бітрікс-сайту?
Без моніторингу ви дізнаєтесь про проблему від клієнтів. З моніторингом — за 5 хвилин до того, як проблема вплине на користувачів. Раптовий ріст slow queries або заповнення диска кешем — типові причини падіння Бітрікса. Алерти в Telegram або Slack дозволяють DevOps-інженеру усунути причину до того, як сайт стане недоступним.
Варіант 1: Zabbix
Zabbix працює через агент на сервері. Для кастомних метрик Бітрікса створюємо скрипт, який Zabbix-агент викликає за розкладом.
Приклад скрипта для Zabbix
#!/bin/bash
# Перевірка HTTP-відповіді
curl -s -o /dev/null -w "%{http_code}" https://example.com/
Для метрик з БД — PHP-скрипт, що викликається через UserParameter у конфігурації Zabbix-агента:
UserParameter=bitrix.orders.count,php /opt/zabbix-scripts/bitrix_order_count.php
UserParameter=bitrix.cache.size,du -sm /home/bitrix/www/bitrix/cache/ | awk '{print $1}'
UserParameter=bitrix.agents.stuck,php /opt/zabbix-scripts/bitrix_stuck_agents.php
PHP-скрипт підключає ядро Бітрікса (/bitrix/modules/main/include/prolog_before.php), виконує запит і повертає число в stdout. Zabbix збирає значення, зберігає історію, будує графіки та відправляє тригери.
Тригери (приклади):
- HTTP-відповідь ≠ 200 більше 2 хвилин → CRITICAL
- Замовлень за останню годину = 0 (при звичайному навантаженні > 5) → WARNING
- Вільне місце < 10% → WARNING, < 5% → CRITICAL
- Завислі агенти (різниця
NEXT_EXEC і NOW() > 1 година) → WARNING
Варіант 2: Prometheus + Grafana
Prometheus за pull-моделлю: опитує HTTP-ендпоінт, який повертає метрики в текстовому форматі.
Створюємо ендпоінт /local/metrics/index.php, який віддає метрики у форматі Prometheus:
# HELP bitrix_orders_total Total orders count
# TYPE bitrix_orders_total counter
bitrix_orders_total 12345
# HELP bitrix_orders_last_hour Orders in last hour
# TYPE bitrix_orders_last_hour gauge
bitrix_orders_last_hour 17
# HELP bitrix_cache_size_mb Cache directory size in MB
# TYPE bitrix_cache_size_mb gauge
bitrix_cache_size_mb 2048
# HELP bitrix_agents_stuck Number of stuck agents
# TYPE bitrix_agents_stuck gauge
bitrix_agents_stuck 0
Ендпоінт обов'язково закривається від публічного доступу: або Basic Auth, або whitelist по IP в nginx, або окремий порт.
У prometheus.yml додаємо job:
- job_name: 'bitrix'
scrape_interval: 30s
static_configs:
- targets: ['example.com:9100']
Візуалізація — через Grafana. Дашборд з панелями: HTTP latency, замовлення на годину, помилки, місце на диску.
Як вибрати між Zabbix і Prometheus?
Порівняння ключових характеристик допоможе прийняти рішення.
| Параметр |
Zabbix |
Prometheus + Grafana |
| Модель збору |
Push і Pull |
Pull (може Push через Pushgateway) |
| Зберігання даних |
Своя БД |
In-memory + TSDB |
| Візуалізація |
Вбудована |
Grafana (окремо) |
| Алертинг |
Вбудовані тригери |
Alertmanager |
| Готові шаблони для Бітрікса |
Ні (створюємо самі) |
Ні (створюємо самі) |
| Інтеграція з Docker/K8s |
Середня |
Відмінна |
Zabbix — якщо вже використовується в компанії. Prometheus — якщо інфраструктура в Docker або K8s. Налаштування базового моніторингу (5-7 метрик, алерти в Telegram) займає один день за умови розгорнутої системи.
Типові метрики та їх пороги
| Метрика |
Норма |
Тривога |
Критично |
| HTTP 200 |
100% |
<99.5% за 5 хв |
<99% |
| Час відповіді |
<1 сек |
>2 сек |
>5 сек |
| Вільне місце |
>20% |
<10% |
<5% |
| Завислі агенти |
0 |
>0 за 30 хв |
>0 за 1 год |
Як ми налаштовуємо моніторинг: 3 кроки
-
Аудит і метрики — аналізуємо поточну інфраструктуру, визначаємо критичні метрики (інфраструктурні, прикладні, бізнесові). Складаємо карту моніторингу.
-
Створення скриптів та інтеграція — пишемо bash/PHP-скрипти для збору метрик, налаштовуємо конфігурацію Zabbix/Prometheus, тригери та алерти в Telegram/Slack.
- Дашборд і документація — розробляємо дашборд в Grafana (якщо обрано Prometheus), тестуємо сценарії збоїв, передаємо документацію та навчаємо чергову команду.
Наприклад, на одному з наших проєктів ми налаштували моніторинг агентів Бітрікса. Виявилося, що один агент не виконувався через помилку в коді, що призводило до затримок у обробці замовлень. Після налаштування алерту в Telegram, розробник отримав сповіщення за 5 хвилин до того, як проблема вплинула на клієнтів, і швидко виправив помилку. Час простою скоротився з 2 годин до 10 хвилин.
Що входить у налаштування
- Аудит поточного стану сайту та сервера
- Визначення переліку критичних метрик
- Створення скриптів для збору метрик (bash/PHP)
- Налаштування тригерів та алертів в Telegram/Slack
- Розробка дашборду в Grafana (якщо обрано Prometheus)
- Тестування та документація
- Навчання чергової команди
Гарантуємо, що після налаштування ви будете отримувати сповіщення про проблеми за 5-10 хвилин до їх впливу на користувачів.
Строки та вартість
Строк налаштування — від 1 до 3 днів залежно від складності інфраструктури та кількості метрик. Вартість розраховується індивідуально після аудиту. Замовте аудит сьогодні — отримайте консультацію щодо вибору системи моніторингу. Типова економія від впровадження — суттєве скорочення простоїв.
За даними офіційної документації 1С-Бітрікс, впровадження зовнішнього моніторингу скорочує час простою в середньому на 80%.
CommerceML: чому стандартний обмін — і порятунок, і пастка
Стандартний обмін через CommerceML 2.0 на типовому «Управлінні торгівлею» або «Комплексній автоматизації» заводиться за день-два. Товари, ціни, залишки, замовлення — все через XML-файли за розкладом. Для магазину на 3 000 позицій з парою оновлень на добу цього вистачає з запасом. Але як тільки каталог переростає 30 000 SKU, починаються проблеми: інтеграція 1С з Бітрікс на великих обсягах потребує нестандартних рішень.
Чому CommerceML гальмує на каталогах понад 100 000 товарів?
bitrix_1c_exchange.php генерує XML на стороні Бітрікса, 1С забирає та парсить. На великих каталогах парсер активно пише в тимчасову таблицю b_xml_tree — MySQL може стати колом. Ми бачили проект, де стандартний обмін 180 000 товарів займав 6 годин і повністю блокував сервер: ні адмінка, ні фронт не відкривалися. Рішення — інкрементальний обмін. В налаштуваннях вузла обміну на стороні 1С ставимо «Вивантажувати тільки змінені» та розбиваємо вивантаження на пакети по 500–1000 елементів. На стороні Бітрікса — кастомний обробник, який не перестворює b_xml_tree кожного разу, а працює через CIBlockXMLFile::ReadXMLToDatabase() з контролем порцій. Каталог у 200 000 SKU оновлюється за 8–12 хвилин.
Ще один підводний камінь — EXTERNAL_ID. При повторному імпорті Бітрікс зіставляє елементи інфоблоків за зовнішнім кодом. Якщо в 1С товар видалено та створено заново з новим GUID, на сайті з'являється дубль — зі старими відгуками на одній картці та нульовими на іншій. Лікується жорсткою прив'язкою за артикулом через кастомний обробник події OnBeforeIBlockElementAdd.
Як уникнути дублів при повторному імпорті?
Прив'язуємо товари не за GUID, а за артикулом. Перевірка на унікальність виконується до запису в інфоблок — дублікати виключаються навіть після перестворення номенклатури в 1С. На одному проекті з 50 000 товарів така схема запобігла появі 300 дублів на місяць і заощадила контент-менеджерам близько 20 годин ручного чищення.
Кастомні конфігурації 1С: коли CommerceML пасує
«У нас типова конфігурація» — каже кожен другий клієнт, а потім ми відкриваємо базу і бачимо 200 кастомних обробок, перейменовані реквізити та самописні документи реалізації. CommerceML працює з фіксованою структурою XML. Якщо в 1С змінили склад реквізитів номенклатури або додали нестандартний документ — обмін мовчки пропускає ці дані. Або падає з незрозумілою помилкою в журналі реєстрації 1С, а в Бітрікс нічого не пишеться.
У таких випадках робимо кастомне вивантаження. На стороні 1С пишемо обробку, яка формує JSON (парсити швидше, налагоджувати простіше) і відправляє через REST API Бітрікса. Повний контроль: які поля беремо, як трансформуємо, що робимо при конфлікті. Для важких випадків — D7 API з прямою роботою через \Bitrix\Catalog\ProductTable та \Bitrix\Sale\Order.
| Критерій |
CommerceML (стандарт) |
Кастомний REST (JSON) |
| Швидкість на 100 000+ SKU |
Низька (повний XML) |
Висока (інкрементальний JSON) |
| Гнучкість схеми |
Фіксована |
Довільна |
| Можливість розширення |
Обмежена |
Без обмежень |
| Простота налагодження |
Журнал реєстрації 1С |
Логи HTTP-запитів, Postman |
Коли потрібен кастомний REST замість CommerceML?
Кастомний REST виправданий при:
- нестандартних реквізитах номенклатури;
- множинних типах цін (роздріб, опт, дилерська, акційна, регіональна, валютна) — стандартний обмін передає лише один тип;
- мультискладі з різними залишками та необхідністю вибору складу на сайті.
Ціни, залишки та мультисклад
Стандартний обмін вміє передавати один тип ціни. В реальності їх може бути 15: кожна зі своєю групою покупців та пріоритетом. Мапінг між ціновими групами 1С та групами користувачів Бітрікса — окрема інженерна задача. Особливо коли знижки перетинаються і потрібно визначити, яка ціна перемагає.
Мультисклад додає ще один шар: товар є на складі в Москві, немає в Пітері, і «під замовлення» в Новосибірську. На сайті потрібно показати наявність по кожній точці, підключити вибір пункту самовивозу та розрахувати доставку від найближчого складу, де товар фізично є. Стандартний модуль складського обліку Бітрікс (catalog.store) справляється з відображенням, але логіку «звідки відвантажувати» пишемо окремо. Для одного виробничого холдингу ми реалізували кастомний агрегатор залишків, який за 2 секунди розраховував баланс по 8 складах — це скоротило кількість помилок відвантаження на 80%.
Замовлення та документообіг
Замовлення з сайту відлітає в 1С, формується реалізація, товар резервується. Статуси повертаються назад. Головний нюанс — часткове відвантаження: клієнт замовив 5 позицій, 3 є на складі, 2 прийдуть через тиждень. 1С формує два документи реалізації. Бітрікс з коробки не вміє розбивати одне замовлення на кілька відвантажень — доопрацьовуємо обробник OnSaleOrderSaved, який створює дочірні замовлення та синхронізує статуси по кожному.
Документи в особистому кабінеті — рахунки, акти, накладні з 1С — віддаємо через REST, PDF генерується на стороні 1С і кешується на CDN. Покупець завантажує не з 1С напряму (це вбило б сервер), а з кешу.
Рекомендація CommerceML: пакетний імпорт з контролем порцій знижує навантаження на MySQL та виключає блокування (джерело: Wikipedia).
Моніторинг: не «налаштував і забув»
Обмін може зламатися тихо: скрипт відпрацював, помилок в лозі немає, але 200 товарів не оновилися через невалідний UTF-8 в назві. Або 1С змінила формат дати в черговому оновленні — всі ціни прийшли нульовими.
Мінімальний набір, який ставимо на кожному проекті:
- Алерт в Telegram, якщо час обміну виріс у 3+ рази від середнього.
- Перевірка розбіжності залишків: скрипт порівнює
b_catalog_product.QUANTITY з тим, що віддає 1С, і сповіщає при дельті більше 5 %.
- Дашборд: остання синхронізація, кількість оброблених позицій, черга, помилки.
Для проектів з високим навантаженням додаємо асинхронні черги на Redis або RabbitMQ. Обмін не блокує веб-сервер, дані не втрачаються при короткочасному падінні 1С. На одному інтернет-магазині з оборотами 2 млн замовлень на рік ми впровадили таку схему — час відновлення після збоїв скоротився з 3 годин до 10 хвилин.
Зв'язка з Бітрікс24 для автоматизації документообігу
Якщо крім сайту є корпоративний портал на Бітрікс24 — зв'язуємо і його. Контрагенти з CRM летять в 1С, рахунки з 1С з'являються в картці угоди. Менеджер бачить дебіторку та взаєморозрахунки, не перемикаючись між вікнами. Закрили угоду — документи сформувалися самі.
Оплата надійшла в 1С → логіст отримує задачу на відвантаження в Бітрікс24. Товар відвантажений → менеджер бачить повідомлення. Автоматичні задачі за подіями з 1С — через вебхуки Бітрікс24 REST API. Така зв'язка скорочує ручне введення на 70% та виключає забуті відвантаження.
Як ми налаштовуємо інтеграцію: покроковий процес
-
Аудит конфігурації 1С. Дивимось структуру довідників, документів, реквізитів. Виявляємо кастомні доопрацювання. Оцінюємо обсяг даних (кількість SKU, замовлень, складів).
-
Проектування схеми обміну. Узгоджуємо набір даних: товари, ціни, залишки, замовлення, документи. Визначаємо інтервал синхронізації та механізм — CommerceML або кастомний REST.
-
Налаштування стандартного обміну. Налаштовуємо CommerceML, пакетний режим, прив'язку за артикулом. Перевіряємо коректність передачі даних на тестовому каталозі.
-
Розширена інтеграція. Для складних конфігурацій пишемо кастомні обробники на стороні 1С та Бітрікса. Підключаємо мультисклад, множинні ціни, часткове відвантаження.
-
Моніторинг та гарантія. Встановлюємо алерти, дашборд, документацію. Навчаємо операторів. Після запуску — гарантійна підтримка.
Типові налаштування обміну для каталогу 50 000 SKU
Пакетний режим: 500 елементів за крок. Прив'язка за артикулом. Період синхронізації: кожні 15 хвилин. Використовуємо агенти Бітрікса з тегованим кешуванням. На стороні 1С — обробка формування JSON замість XML для прискорення.
Строки та що входить в роботу
| Етап |
Опис |
Орієнтовний строк |
| Аналітика |
Аудит конфігурації 1С, структури обміну, поточних проблем |
1–2 дні |
| Проектування схеми |
Узгодження набору даних (товари, ціни, замовлення) та архітектури |
2–5 днів |
| Реалізація стандартного обміну |
Налаштування CommerceML, пакетного режиму, прив'язки за артикулом |
1–2 тижні |
| Розширена інтеграція |
Кастомний REST, мультисклад, множинні ціни, часткове відвантаження |
2–4 тижні |
| Повна кастомна зв'язка |
1С + сайт + Бітрікс24, асинхронні черги, моніторинг |
1–2 місяці |
Результат роботи включає: документовану схему обміну, налаштовані сценарії синхронізації, дашборд моніторингу, навчання операторів та гарантійну підтримку після запуску. Вартість розраховується індивідуально — вона залежить від складності конфігурації 1С, обсягу каталогу та необхідного ступеня автоматизації. Оцінимо ваш проект за 1 день — пишіть, обговоримо. Замовте інтеграцію — отримайте стабільний обмін за 1–2 тижні.
Ми провели понад 50 інтеграцій 1С для інтернет-магазинів та виробничих компаній. Середній досвід команди — 7 років, у нас є сертифіковані спеціалісти 1С-Бітрікс. Наш досвід гарантує, що обмін не зламається в перший же місяць і буде стабільно працювати роками. Наприклад, на проекті з каталогом 50 000 товарів автоматизація обміну заощадила клієнту близько 200 000 рублів на рік на операційних витратах.
Зв'яжіться з нами для безкоштовного аудиту вашої конфігурації 1С — знайдемо вузькі місця та запропонуємо оптимальне рішення.