• 查询日志

可以通过在配置文件的 searchd 部分设置 query_log 指令来启用查询日志。

也可以通过将 syslog 设置为日志路径,将查询日志发送到系统日志(syslog)。在这种情况下,所有搜索查询将以 LOG_INFO 优先级发送到 syslog 守护进程,并且日志前缀为 [query],而不是时间戳。对于 syslog,只有 plain 日志格式受支持。

query_log 示例:

searchd {
...
    query_log = /var/log/query.log
    query_log_format = sphinxql # default
...
}

日志格式

支持两种查询日志格式:

  • sphinxql(默认):以 SQL 格式记录日志,提供了一种轻松重放已记录查询的方式。

  • plain:以简单文本格式记录全文查询。如果大多数查询主要是全文查询,或者不关心查询中的非全文组件(如按属性过滤、排序、分组等),建议使用此格式。以 plain 格式记录的查询无法重放。

您可以使用 searchd 设置 query_log_format 在这两种格式之间切换。

SQL 日志格式

SQL 日志格式是默认设置。在此模式下,Manticore 会记录所有成功和失败的 select 查询。以 SQL 或二进制 API 发送的请求会以 SQL 格式记录,但 JSON 查询则按原样记录。此类日志记录仅适用于普通日志文件,不支持将日志发送到 syslog 服务。

query_log_format 示例:

Manticore SQL 日志格式的特点(相较于 plain 格式)包括:

  • 尽可能记录完整的语句数据。

  • 错误和警告都会记录。

  • 查询日志可以被重放。

  • 记录额外的性能计数器(目前是每个代理的分布式查询时间)。

  • 每个日志条目都是有效的 Manticore SQL/JSON 语句,能够重建完整请求,除非记录的请求过大,为了性能需要缩短。

  • JSON 请求和其他消息、计数器等会作为注释记录。

sphinxql 日志条目示例:

Plain 日志格式

plain 日志格式下,Manticore 以简单文本格式记录所有成功执行的搜索查询。查询中的非全文部分不会被记录。JSON 查询则会被压缩为单行记录。

query_log_format 示例:

日志格式如下:

其中:

  • real-time 是查询从开始到结束的时间。

  • wall-time 类似于 real-time,但不包括等待代理结果和合并结果集的时间。

  • perf-stats包含 CPU/IO 统计信息(当使用 --cpustats启动 Manticore 或通过 SET GLOBAL cpustats=1启用时):

    • ios 是执行的文件 I/O 操作次数;

    • kb 是从表文件中读取的数据量(以 KB 为单位);

    • ms 是花费在 I/O 操作上的时间;

    • 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 接口中,大多数情况下,match-mode 记录为 ext2sort-mode 记录为 extrel

查询日志示例:

仅记录慢查询

默认情况下,所有查询都会被记录。如果您只希望记录执行时间超过指定限制的查询,可以使用 query_log_min_msec 指令。

单位默认为毫秒,但也可以使用时间后缀表达式。

查询日志示例:

仅记录慢查询

默认情况下,所有查询都会被记录。如果您只希望记录执行时间超过指定限制的查询,可以使用 query_log_min_msec 指令。

单位默认为毫秒,但也可以使用时间后缀表达式。

query_log_min_msec 示例:

日志文件权限模式

默认情况下,searchd 和查询日志文件的权限为 600,因此只有运行 Manticore 的用户和 root 用户可以读取日志文件。query_log_mode 选项允许设置不同的权限,这在需要其他用户读取日志文件(如非 root 用户的监控解决方案)时很有帮助。

query_log_mode 示例:

最后更新于