任务日志

Crawlab 会收集爬虫任务的运行日志,方便用户调试和监控爬虫程序。查看日志所在位置为 任务详情 > 日志 标签。

任务日志 - 图1

Crawlab 是通过 Stdout 标准输出流来捕获日志的,因此如果希望在 Crawlab 的界面中看到日志,就需要让日志内容输出到 Stdout 中。最简单的做法就是打印出来,例如 Python 的 print 和 Node.js 的 console.log

日志搜索

在 “搜索日志” 输入框中可以搜索任何相关的日志行。这里可以是正则表达式。

⚠️注意:日志搜索用的是正则匹配,因此在性能上会有所降低,如果日志量较大,需要耐心等待。

异常检测

Crawlab 内置了日志异常检测,原理是通过正则表达式来完成的。默认会用 errorexceptiontraceback 来匹配日志内容判断该日志文本是否为错误日志。

如果 Crawlab 发现有错误日志,会在任务列表和任务详情中展示出来,如下图。

任务日志 - 图2

任务日志 - 图3

在 “日志” 标签中,如果有日志日常,Crawlab 将展示一个 “错误数” 的按钮,点击它可以看到全部或一部分标红的错误日志,点击这些错误日志将会导航到该错误日志所在位置。

自动滚动

启用 “自动滚动” 按钮可以让日志翻到最底部,并在日志更新时自动翻到最底部。

日志设置

我们可以对日志的设置进行更改,包括异常的正则表达式、最大异常日志展示、日志过期时间。设置界面在 ”设置“ -> “日志“ 中,如下图。每一个用户可以有不同的日志设置。

任务日志 - 图4

下面解释一下日志设置各配置项的意义:

  • 异常正则表达式:这是判断异常日志文本的方式,如果该正则表达式能匹配上日志文本行,则该行为错误或异常日志;
  • 最大异常日志展示:在日志详情中,“错误数” 的最大展示行数,默认为 1000;
  • 日志过期时间:日志在多少时间之后被自动删除,默认不删除,但强烈建议设置一个过期时间以防止日志撑满数据库

原理

Crawlab 的日志和异常日志是分别储存在 MongoDB 数据库的 logserror_logs collection 中的。对于大数据量的日志来说,数据库很容易撑满,因此我们强烈推荐设置一个过期时间

logs 的索引有三个:

  • task_idseq 组合索引,方便分页查询(未带搜索条件),查询开销小;
  • task_idmsg 组合索引,方便搜索查询,查询开销较大;
  • expire_ts TTL 索引,方便自动删除日志。

其中, task_id 为任务 ID,seq 为日志的序号,msg 为日志内容,expire_ts 为过期时间。