Closed 1rV1N-git closed 3 years ago
При запуске, если уже данные в индексе или таблице были, то осуществляется попытка считывания последнего обработанного файла с последней обработанной позиции. Иначе файлы в каталоге сортируются по дате создания и начинается их обработка
В том то и проблема что данные в индексе есть. перезапускаешь EventLogaManager и он хочет почему то файл за 4 число
var response = await _client.SearchAsync<EventLogItem>(sd => sd .Index($"{_eventLogItemsIndex}-*") .Sort(ss => ss.Descending(c => c.Id)) .Size(1) , cancellationToken);
Индекс сортируется по убыванию Id и берётся первая запись. Предлагаю посмотреть что возвращает такой запрос
Сделал запрос. Ага. Запись от 4 числа имеет очень дольшой номер (48 876 838) "id" при том что сейчас новые логи прилетают с айдишниками около 1 695 596. Скорее всего это из за ошибки которая была здесь либо еще какой то. Он id инкрементит, а данные не отправляет, Я замечал поведедие что EventLogaManager что то делает по загрузке процесора, а данные новые не отправляет.
P. S А Id обнуляется при создании нового индекса в начале нового периода(в данном случаем месяца) ?
По поводу загрузки процессора - менеджер постоянно наблюдает создание/изменение clst файлов, файлов журналов регистрации, возможно это приводит к какой-то загрузке, но, я думаю, это в районе статистической погрешности.
Касательно id - он наращивается в рамках каждой отдельной информационной базы, т.е. сквозной инкремент, независимо от периодичности индексов
осортировал по дате записи в индексе. первая запись вот такая
"_source" : {
"id" : 44998247,
"fileName" : "20210501000000.lgp",
"endPosition" : 17704782,
"lgfEndPosition" : 153065,
"dateTime" : "2021-05-01T00:00:00Z",
По поводу проца это понятно что в обычное время он что то потребляет около 2-5% В тот момент было около 20%
Не сразу понял. Если в рамках одной базы. хм... надо подумать что могло пойти не так
Могу предположить что что-то было считано до этой записи и удалено, потому что endPosition слишком большой для данных одного события (17 с копейками мегабайт).
По поводу загрузки в 20% - надо смотреть лог с дебаг уровнем, иначе тяжело понять что там творится внутри
Там не первая запись оказывается. С датой "dateTime" : "2021-05-01T00:00:00Z" около 20 записей
По поводу загрузки в 20% - надо смотреть лог с дебаг уровнем, иначе тяжело понять что там творится внутри
Ок. Гляну в следующий раз что там пишет
Там не первая запись оказывается. С датой "dateTime" : "2021-05-01T00:00:00Z" около 20 записей
Такое может быть, детализация в журнале регистрации только до секунды
Там не первая запись оказывается. С датой "dateTime" : "2021-05-01T00:00:00Z" около 20 записей
Такое может быть, детализация в журнале регистрации только до секунды
просмотрел все записи в первую секунду, все с большим числом endPosition 177ххххх
Если это совсем новый индекс, то отсчёт однозначно должен был быть с 0. Начальный инкрементный номер устанавливается только при наличии записей в индексе. Хорошо бы посмотреть сырые данные логов, что там реально в файлах было. Некоторые типы событий ЖР пропускаются ридером, но вряд-ли их было настолько много, конечно.
Сырых данных уже нет вроде. Завра поищу. Это не новая база. Последняя запись в прошлом месяце была с айди 44998246. Я понял что айди увеличивается постоянно и не обнуляется. Мне пока не понятно что произошло 4 числа. Из за чего номерация сбилась.
Ок посмотрим что дальше будет. Большое спасибо!
Я, к сожалению, тоже не могу ответить так сразу. Нужно разбираться с исходными данными и логами самого приложения одновременно. Не за что)
Тоже нарвался на похожую проблему. Что было у меня:
2023-01-17 11:52:08.998 | Warning | OneSTools.EventLog.Exporter.Core.EventLogExporter[0]
Lgp file (C:\\Program Files\1cv8\srvinfo\reg_1541\50ca9f86-3a7e-47e7-bb8c-8fb6c2c66bd4\1Cv8Log\20220425000000.lgp) doesn't exist. The reading will be started from the first found file
2023-01-17 11:52:09.055 | Information | OneSTools.EventLog.Exporter.Core.EventLogExporter[0]
Reader started reading 20221001000000.lgp
т.е. явно берет стартовую позицию неправильно. Нашел в коде вот такой запрос https://github.com/akpaevj/OneSTools.EventLog/blob/7eee3719b4d3ff8d9806d97422ba60a7e07a8ca4/OneSTools.EventLog.Exporter.Core/ClickHouse/ClickHouseStorage.cs#L43
Предлагаю переделать его на следующий:
SELECT
FileName,
EndPosition,
LgfEndPosition,
Id
FROM {TableName}
ORDER BY
FileName DESC,
EndPosition DESC
LIMIT 1
Показываю разницу на моих данных.
Запрос, который сейчас отправляет экспортер в кликхауз:
Предлагаемый запрос:
Но я бы тоже посмотрел в сторону того, чтобы позиции хранить в каталоге экспортера рядом с настройками и логом, а не в БД. Так было бы более надежно и предсказуемо. Также можно будет в случае чего и ручками поправить. Плюс сейчас указанные запросы в Кликхауз выполняются достаточно долго (около минуты). Что тоже немаловажно
В дополнение к предыдущей записи: для того, чтобы запрос отрабатывал не минуту, а доли секунд, достаточно сделать сортировку не DateTime вместо имени файла или Id. Итоговый запрос, который у меня отрабатывает за 0.143 сек на тех же данных
SELECT
FileName,
EndPosition,
LgfEndPosition,
Id
FROM {TableName}
ORDER BY
DateTime DESC,
EndPosition DESC
LIMIT 1
А по какому критерию он ищет первый файл лога. Lgp file (C:\Program Files\1cv8\srvinfo\reg_1541\%guid%\1Cv8Log\20210504000000.lgp) doesn't exist. The reading will be started from the first found file
У меня разбивка по дням стоит. Я к это к тому через сколько можно удалять файлы логов?