日志

GDS 库中有三种类型的日志:调试日志、进度日志以及提示或警告日志。

调试日志提供有关系统中事件的信息。例如,当算法计算完成时,可能会记录所使用的内存量和总运行时间。当操作无法正常完成的异常事件也会被记录下来。调试日志信息对于理解系统中的事件非常有用,特别是在排查问题时。

进度日志用于跟踪预期耗时较长的操作进度。这包括图投影、算法计算和结果写入。

提示或警告日志向用户提供与查询相关的有用提示或警告。

所有日志条目都会写入为 Neo4j 数据库配置的日志文件中。有关配置 Neo4j 日志的更多信息,请参阅 Neo4j 操作手册

进度日志程序

GDS 库本身也会跟踪进度。除了查看日志文件外,这还可以通过 Cypher 检查进度。要访问当前运行任务(也称为作业)的进度信息,我们可以使用进度列表程序:gds.listProgress。GDS 库中的任务定义为正在运行的程序,例如算法或图加载程序。

进度列表程序有两种模式,具体取决于是否设置了 jobId 参数:首先,如果未设置 jobId,该程序将为每个当前正在运行的任务生成一行。这可以看作是这些任务的摘要,例如显示特定任务的整体进度。其次,如果设置了 jobId 参数,它将显示给定运行作业的详细视图。详细视图将为该作业在执行过程中执行的每个步骤或任务生成一行。它还将显示任务如何以树状结构组织,并打印每个单独任务的进度。

对于拥有管理员权限的用户,此程序将列出所有用户的运行任务。

语法

获取任务进度
CALL gds.listProgress(jobId: String, showCompleted: Boolean)
YIELD
  username,
  jobId,
  taskName,
  progress,
  progressBar,
  status,
  timeStarted,
  elapsedTime
表 1. 参数
名称 类型 默认 可选 描述

jobId

字符串

""

运行任务的 jobId。这将触发该特定任务的详细概览。

showCompleted

布尔值

false

如果为 false,则仅列出挂起和运行中的任务。如果为 true,则列出所有任务,包括已完成、失败和中止的任务。如果提供了 jobId,此参数仅影响根任务。

表 2. 结果
名称 类型 描述

username

字符串

启动运行任务的用户。

jobId

字符串

生成的运行任务标识符。

taskName

字符串

运行任务的名称,例如 Node2Vec

progress

字符串

作业的进度,以百分比值显示。

progressBar

字符串

作业的进度,以 ASCII 进度条显示。

状态 (status)

字符串

作业的当前状态,例如 RUNNINGCANCELED

timeStarted

LocalTime

任务开始时的本地挂钟时间。

elapsedTime

Duration

timeStarted 到现在持续的时间。

某些通常需要一段时间才能完成的作业(如图投影和运行算法)在其配置参数映射中接受一个可选的 jobId。这可以使跟踪它们变得更容易,因为它们随后会列在 gds.listProgress 结果中提供的 jobId 下。对于算法,请参阅 jobId 参数文档以了解更多信息。

示例

假设我们刚刚启动了 gds.node2vec.stream 程序。

CALL gds.listProgress()
YIELD
  jobId,
  taskName,
  progress
表 3. 结果
jobId taskName progress

"d21bb4ca-e1e9-4a31-a487-42ac8c9c1a0d"

"Node2Vec"

"42%"

用户日志

提示和警告也可以通过 GDS 库进行跟踪,并可通过 Cypher 查询访问。GDS 库会为每个用户跟踪其生成提示或警告的最近 100 个任务,并将它们存储在内存中。当用户调用 gds.userLog 程序时,将返回其各自生成的提示和警告列表。

语法

获取用户的提示和警告
CALL gds.userLog()
YIELD
  taskName,
  timeStarted,
  message
表 4. 结果
名称 类型 描述

taskName

字符串

生成警告或提示的任务名称,例如 WCC

timeStarted

LocalTime

任务开始时的本地挂钟时间。

message

字符串

与任务关联的提示或警告。

示例

假设我们调用了 gds.wcc.stream 程序并设置了 relationshipWeightProperty,但未指定 threshold 值。这将生成一个警告,可以通过用户日志访问,如下所示。

CALL gds.userLog()
YIELD
  taskName,
  message
表 5. 结果
taskName message

"WCC"

"除非同时设置了 threshold,否则指定 relationshipWeightProperty 不会产生任何效果"