opentelemetry-v8-logs
Приложение читает технологический журнал (ТЖ) и журнал регистрации (ЖР) 1С:Предприятия и передает их в OpenTelemetry по OTLP. Получатель - любой бэкенд с поддержкой OTLP, например стек LGTM: Loki (логи), Grafana, Tempo (трассы), Mimir или Prometheus (метрики).
Как это работает
каталоги ТЖ и ЖР ──► читатели ──► экспортеры ──► OpenTelemetry SDK ──► OTLP ──► LGTM
▲ │
└──── позиции чтения (autumn-data) ◄── фиксация после успешной отправки- Читатель находит файлы журнала и дочитывает каждый с сохраненной байтовой позиции. Читаются только завершенные события и записи: недописанный хвост файла будет прочитан в следующем проходе. Файлы технологического журнала всех процессов читаются по порядку часа из имени файла: при первом запуске и догоне после простоя события уходят примерно в порядке времени, иначе Loki отклонил бы записи, которые больше чем на час старше уже принятых в тот же поток логов (
too_far_behind). В лог приложения попадают начало чтения файла (первые новые данные с запуска приложения), полное прочтение файла, в который больше не пишут (с числом записей за этот запуск), и усечение файла, но не каждый проход по дописываемому файлу. Файлы, прочитанные до конца в прошлые запуски, не логируются. - Экспортер превращает событие в запись лога, метрики и спаны.
- Записи передаются пакетами, после каждого пакета буферы SDK сбрасываются.
- Позиции сохраняются в базу только после успешной отправки. При сбое отправки они откатываются, и данные будут прочитаны повторно (доставка «хотя бы один раз»). Логи и спаны при повторе могут продублироваться; метрики записываются только после успешного сброса.
Что поддерживается
| Источник | Форматы |
|---|---|
| Технологический журнал | текст (8.3 и 8.2), JSON (8.3.25+, format="json"); файлы <процесс>_<PID>/ГГММДДЧЧ.log и <процесс>_<PID>_ГГММДДЧЧ.log |
| Журнал регистрации | старый формат: словарь 1Cv8.lgf и файлы записей *.lgp |
Журнал регистрации в формате SQLite (1Cv8.lgd) пока не поддерживается: для его чтения переключите базу на старый формат журнала.
Установка и запуск
opm install opentelemetry-v8-logs
opentelemetry-v8-logs # постоянная работа (то же, что run)
opentelemetry-v8-logs run --once # один проход, например из планировщика
opentelemetry-v8-logs --helpПриложение запускается на сервере 1С (или там, где доступны каталоги журналов) и берет настройки из autumn-properties.json текущего каталога, см. настройку. Однократный проход можно включить и переменной окружения OTEL_V8_LOGS_ONCE=true.
Демонстрация
В каталоге demo репозитория:
docker-compose.yml- стек LGTM в одном контейнере (grafana/otel-lgtm);loki-config.yaml- конфигурация Loki, в которой база (v8.infobase.name) - индексируемая метка;tempo-config.yaml- конфигурация Tempo, в которой спаны накопленных журналов находятся поиском по своему времени, см. состав телеметрии;autumn-properties.json- пример настроек приложения;logcfg.xml- пример настройки технологического журнала с событиями для трасс.
docker compose -f demo/docker-compose.yml up -d
cp demo/autumn-properties.json . # укажите свои каталоги журналов
opentelemetry-v8-logsGrafana: http://localhost:3000.
Производительность
Протокол http/protobuf SDK для OneScript сейчас кодирует данные заметно медленнее, чем http/json: на 1000 записей журнала сброс занимает около 6.5 с против 0.25 с. Рекомендуемый протокол - http/json. На этом протоколе приложение передает порядка 600 записей журнала регистрации в секунду, основное время уходит на создание записей в SDK.
