≫ 日志
查询日志可以通过在配置文件的searchd部分设置query_log指令来启用。
查询也可以通过设置syslog而不是文件路径发送到syslog。在这种情况下,所有搜索查询将使用LOG_INFO优先级发送到syslog守护进程,前面带有[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日志格式是默认设置。在这种模式下,Manticore记录所有成功的和不成功的select查询。以SQL或二进制API发送的请求以SQL格式记录,但JSON查询按原样记录。这种类型的记录仅适用于纯文本日志文件,并不支持syslog服务进行记录。
- Config
Config
📋
query_log_format = sphinxql # default与plain格式相比,Manticore SQL日志格式的特性包括:
- 尽可能记录完整的语句数据。
- 记录错误和警告。
- 查询日志可以重放。
- 记录额外的性能计数器(当前为每个代理分布式查询时间)。
- 每条日志条目都是一个有效的Manticore SQL/JSON语句,可以重建完整的请求,除非记录的请求太大,需要为了性能原因进行缩短。
- 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日志格式,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包括当Manticore以--cpustats(或通过SET GLOBAL cpustats=1启用)和/或--iostats(或通过SET GLOBAL iostats=1启用)启动时的CPU/IO统计信息:ios是执行的文件I/O操作数;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指定的,还是查询为空。
- "all"对应
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模式。
- "rel"对应
注意: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