Skip to content

opentelemetry-v8-logs ​

Приложение читает технологический журнал (ТЖ) и журнал регистрации (ЖР) 1С:Предприятия и передает их в OpenTelemetry по OTLP. Получатель - любой бэкенд с поддержкой OTLP, например стек LGTM: Loki (логи), Grafana, Tempo (трассы), Mimir или Prometheus (метрики).

Как это работает ​

каталоги ТЖ и ЖР ──► читатели ──► экспортеры ──► OpenTelemetry SDK ──► OTLP ──► LGTM
        ▲                                               │
        └──── позиции чтения (autumn-data) ◄── фиксация после успешной отправки
  1. Читатель находит файлы журнала и дочитывает каждый с сохраненной байтовой позиции. Читаются только завершенные события и записи: недописанный хвост файла будет прочитан в следующем проходе. Файлы технологического журнала всех процессов читаются по порядку часа из имени файла: при первом запуске и догоне после простоя события уходят примерно в порядке времени, иначе Loki отклонил бы записи, которые больше чем на час старше уже принятых в тот же поток логов (too_far_behind). В лог приложения попадают начало чтения файла (первые новые данные с запуска приложения), полное прочтение файла, в который больше не пишут (с числом записей за этот запуск), и усечение файла, но не каждый проход по дописываемому файлу. Файлы, прочитанные до конца в прошлые запуски, не логируются.
  2. Экспортер превращает событие в запись лога, метрики и спаны.
  3. Записи передаются пакетами, после каждого пакета буферы SDK сбрасываются.
  4. Позиции сохраняются в базу только после успешной отправки. При сбое отправки они откатываются, и данные будут прочитаны повторно (доставка «хотя бы один раз»). Логи и спаны при повторе могут продублироваться; метрики записываются только после успешного сброса.

Что поддерживается ​

ИсточникФорматы
Технологический журналтекст (8.3 и 8.2), JSON (8.3.25+, format="json"); файлы <процесс>_<PID>/ГГММДДЧЧ.log и <процесс>_<PID>_ГГММДДЧЧ.log
Журнал регистрациистарый формат: словарь 1Cv8.lgf и файлы записей *.lgp

Журнал регистрации в формате SQLite (1Cv8.lgd) пока не поддерживается: для его чтения переключите базу на старый формат журнала.

Установка и запуск ​

sh
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 - пример настройки технологического журнала с событиями для трасс.
sh
docker compose -f demo/docker-compose.yml up -d
cp demo/autumn-properties.json .   # укажите свои каталоги журналов
opentelemetry-v8-logs

Grafana: http://localhost:3000.

Производительность ​

Протокол http/protobuf SDK для OneScript сейчас кодирует данные заметно медленнее, чем http/json: на 1000 записей журнала сброс занимает около 6.5 с против 0.25 с. Рекомендуемый протокол - http/json. На этом протоколе приложение передает порядка 600 записей журнала регистрации в секунду, основное время уходит на создание записей в SDK.