Чтение журналов MarkLogic из консоли запросов с использованием XQuery - PullRequest
1 голос
/ 02 июля 2019

Я хочу читать журналы MarkLogic (например, ErrorLog.txt) из консоли запросов, используя Xquery.У меня был код ниже, но проблема в том, что вывод неправильно отформатирован.Результат, как показано ниже

xquery version "1.0-ml";
for $hid in xdmp:hosts()
let $h := xdmp:host-name($hid)
return 
xdmp:filesystem-file("file://" || $h || "/" ||xdmp:data-directory($hid) ||"/Logs/ErrorLog.txt")

Проблема в том, что результат приходит в зависимости от хоста, как сначала поступает весь журнал одного хоста, а затем начинается со времени 00:00:01 хоста 2, а затем 00:00:01 хоста 3 после запуска Xquery.

2019-07-02 00:00:35.668 Info: Merging 2 MB from /cams/q06data02/testQA2/Forests/testQA2-2.2/0002b4cd to /cams/q06data02/testQA2/Forests/testQA2-2.2/0002b4ce, timestamp=15620394303480170
    2019-07-02 00:00:36.007 Info: Merged 3 MB at 9 MB/sec to /cams/q06data02/testQA2/Forests/test2-2.2/0002b4ce
    2019-07-02 00:00:38.161 Info: Deleted 3 MB at 399 MB/sec /cams/q06data02/test2/Forests/test2-2.2/0002b4cd

Можно ли получить выходные данные с именем хоста, включенным в записи журнала, а также можно ли отсортировать выходные данные по временным шкалам, например,

host 1 : 2019-07-02 00:00:01 : Info Merging ....
host 2 : 2019-07-02 00:00:02 : Info Deleted 3 MB at 399 MB/sec ...

1 Ответ

3 голосов
/ 03 июля 2019

Файлы журнала - это текстовые файлы. Вы можете анализировать и сортировать их, как любой другой текстовый файл. Хотя они могут быть очень большими (ГБ +), поэтому простые методы могут оказаться неэффективными. Кроме того, вы должны иметь возможность разбирать текст на поля для сортировки по полю. Поскольку первые 20 байтов каждой строки являются отметкой времени, а отметка времени имеет формат ISO, который сортируется по лексическому принципу так же, как дата, вы можете разделить файл по строкам и отсортировать, используя базовое охлаждение, чтобы получить сортировку по времени для нескольких файлов. В V9 можно использовать пару xdmp: logfile-scan и xdmp: logmessage-parse для эффективного поиска по лог-файлам (как удаленным, так и локальным), а затем преобразовать результаты в текст, XML (формат атрибута или элемента) или JSON. Можно также использовать REST API для того же. см .: https://docs.marklogic.com/REST/GET/manage/v2/logs

Как только файлы журналов (в идеале выбранный набор сообщений журнала, который достаточно мал для управления) конвертируется в структурированный формат (xml, json или текстовые строки), тогда сортировка, поиск, обогащение и т. Д. Легко выполняются.

Для чего-то намного лучшего взгляните на Ops Director https://docs.marklogic.com/guide/opsdir/intro

...