≫ Логирование

Логирование запросов

Логирование запросов можно включить, установив директиву query_log в разделе searchd конфигурационного файла.

Запросы также могут быть отправлены в syslog, указав syslog вместо пути к файлу. В этом случае все поисковые запросы будут отправляться демону syslog с приоритетом LOG_INFO, с префиксом [query] вместо отметки времени. Для syslog поддерживается только формат лога plain.

‹›
  • Config
Config
📋
searchd {
...
    query_log = /var/log/query.log
    query_log_format = sphinxql # default
...
}

Формат логирования

Поддерживаются два формата логов запросов:

  • sphinxql (по умолчанию): Логи в формате SQL. Также позволяет легко воспроизводить записанные запросы.
  • plain: Логи полнотекстовых запросов в простом текстовом формате. Этот формат рекомендуется, если большинство ваших запросов в основном полнотекстовые или если вам не нужно логировать нефуллтекстовые компоненты, такие как фильтрация по атрибутам, сортировка или группировка. Запросы, записанные в формате plain, не могут быть воспроизведены. Обратите внимание, что запросы, обработанные через Buddy, в этом режиме не логируются.

Для переключения между форматами можно использовать настройку searchd query_log_format.

Формат лога SQL

Формат лога SQL является настройкой по умолчанию. В этом режиме Manticore логирует все успешные и неуспешные select-запросы. Запросы, отправленные в формате SQL или через бинарный API, логируются в формате SQL, а JSON-запросы логируются как есть. Этот тип логирования работает только с обычными файлами логов и не поддерживает сервис 'syslog' для логирования.

‹›
  • Config
Config
📋
query_log_format = sphinxql # default

Особенности формата лога SQL в Manticore по сравнению с plain форматом включают:

  • Логируется полный текст запроса, где это возможно.
  • Логируются ошибки и предупреждения.
  • Логи запросов можно воспроизводить.
  • Логируются дополнительные счетчики производительности (в данный момент, времена распределенных запросов по агентам).
  • Каждая запись лога является валидным SQL/JSON-запросом Manticore, который воспроизводит полный запрос, за исключением случаев, когда запрос слишком велик и для производительности он сокращён.
  • JSON-запросы логируются как комментарии с пропуском лишних пробелов между элементами.
  • Дополнительные сообщения, счетчики и т. п. логируются как комментарии.
‹›
  • Example
Example
📋
/* Sun Apr 28 12:38:02.808 2024 conn 2 (127.0.0.1:53228) real 0.000 wall 0.000 found 0 */ SELECT * FROM test WHERE MATCH('test') OPTION ranker=proximity;
/* Sun Apr 28 12:38:05.585 2024 conn 2 (127.0.0.1:53228) real 0.001 wall 0.001 found 0 */ SELECT * FROM test WHERE MATCH('test') GROUP BY channel_id OPTION ranker=proximity;
/* Sun Apr 28 12:40:57.366 2024 conn 4 (127.0.0.1:53256) real 0.000 wall 0.000 found 0 */  /*{ "index" : "test", "query": { "match": { "*" : "test" } }, "_source": ["f"], "limit": 30 } */

Формат лога Plain

С форматом лога plain Manticore логирует все успешно выполненные поисковые запросы в простом текстовом формате. Нефуллтекстовые части запросов не логируются. JSON-запросы записываются как однострочные записи. Запросы, обработанные через Buddy, в этом режиме не логируются.

‹›
  • Config
Config
📋
query_log_format = plain

Формат лога выглядит следующим образом:

[query-date] real-time wall-time [match-mode/filters-count/sort-mode total-matches (offset,limit) @groupby-attr] [table-name] {perf-stats} query

где:

  • real-time — время от начала до окончания запроса.
  • wall-time — аналогично real-time, но исключает время ожидания агентов и объединения результатов.
  • perf-stats включает статистику CPU/IO, если Manticore запущен с --cpustats (или включено через SET GLOBAL cpustats=1) и/или --iostats (или включено через SET GLOBAL iostats=1):
    • ios — количество операций ввода-вывода с файлами;
    • kb — количество данных в килобайтах, считанных из файлов таблиц;
    • ms — время, затраченное на операции ввода-вывода.
    • cpums — время в миллисекундах, затраченное CPU на обработку запроса.
  • match-mode может принимать одно из следующих значений:
    • "all" для режима SPH_MATCH_ALL;
    • "any" для режима SPH_MATCH_ANY;
    • "phr" для режима SPH_MATCH_PHRASE;
    • "bool" для режима SPH_MATCH_BOOLEAN;
    • "ext" для режима SPH_MATCH_EXTENDED;
    • "ext2" для режима SPH_MATCH_EXTENDED2;
    • "scan", если использовался полносканирующий режим, либо заданный через SPH_MATCH_FULLSCAN, либо если запрос был пустым.
  • sort-mode может принимать одно из следующих значений:
    • "rel" для режима SPH_SORT_RELEVANCE;
    • "attr-" для режима SPH_SORT_ATTR_DESC;
    • "attr+" для режима SPH_SORT_ATTR_ASC;
    • "tsegs" для режима SPH_SORT_TIME_SEGMENTS;
    • "ext" для режима SPH_SORT_EXTENDED.

Примечание: режимы SPH* специфичны для устаревшего интерфейса sphinx. SQL и JSON интерфейсы, в большинстве случаев, будут логировать ext2 как match-mode и ext или rel как sort-mode.

‹›
  • Example
Example
📋
[Fri Jun 29 21:17:58 2021] 0.004 sec [all/0/rel 35254 (0,20)] [lj] [ios=6 kb=111.1 ms=0.5] test
[Fri Jun 29 21:17:58 2021] 0.004 sec [all/0/rel 35254 (0,20)] [lj] [ios=6 kb=111.1 ms=0.5 cpums=0.3] test
[Sun Apr 28 15:09:38.712 2024] 0.000 sec 0.000 sec [ext2/0/ext 0 (0,20)] [test] test
[Sun Apr 28 15:09:44.974 2024] 0.000 sec 0.000 sec [ext2/0/ext 0 (0,20) @channel_id] [test] test
[Sun Apr 28 15:24:32.975 2024] 0.000 sec 0.000 sec [ext2/0/ext 0 (0,30)] [test] {     "table" : "test",     "query":     {         "match":         {             "*" : "test"         }     },     "_source": ["f"],     "limit": 30 }

Логирование только медленных запросов

По умолчанию логируются все запросы. Если вы хотите логировать только запросы с временем выполнения, превышающим заданный порог, можно использовать директиву query_log_min_msec.

Ожидаемая единица измерения — миллисекунды, но также поддерживаются выражения с суффиксами времени.

‹›
  • Config
Config
📋
searchd {
...
    query_log = /var/log/query.log
    query_log_min_msec  = 1000
    # query_log_min_msec  = 1s
...
}

Режим прав доступа к файлу лога

По умолчанию файлы логов searchd и запросов создаются с правами 600, поэтому читать файлы логов могут только пользователь, под которым работает Manticore, и root. Опция query_log_mode позволяет задать другие права доступа. Это может быть полезно, например, для предоставления другим пользователям (например, системам мониторинга, работающим не под root) доступа к файлам логов.

‹›
  • Config
Config
📋
searchd {
...
    query_log = /var/log/query.log
    query_log_mode = 666
...
}
Last modified: November 18, 2025