如何在文件中捕获 dask-worker 控制台日志?

问题描述 投票:0回答:3

在下面,我想在一个文件中捕获“dask_client_log_msg”和其他任务日志,在一个单独的文件中捕获“dask_worker_log_msg”和其他客户端日志。显然,客户端将与工作线程完全在单独的进程中运行。所以我需要一个进程将其所有消息记录在一个单独的文件中。谢谢!

def my_task():
  print("dask_worker_log_msg")
  ...

client = Client(<scheduler_address>)

future = client.submit(my_task)
print("dask_client_log_msg")
...
dask dask-distributed dask-delayed
3个回答
3
投票

您可以使用 Client.get_worker_logs 方法从工作人员那里获取日志。 您还可以从仪表板的

info
窗格中下载日志。


3
投票

如果您尝试实现 Dask 集群并需要其运行的所有作业的日志(包括来自 print 或 logger.info 的脚本的日志),这里有一个解决方案:

  1. 在启动工作程序的 bash 脚本中添加重定向:
    dask-worker >> dask_worker.log 2>&1
  2. 在您的脚本中,将记录器设置为 dask.distributed,如下所示:
    logger = logging.getLogger("distributed.worker")
  3. .config/dask/distributed.yaml
  4. 中配置日志格式

另请参阅如何从 Dask-Yarn 作业中捕获工作人员的日志?


0
投票

结构化日志可以在这里提供帮助,文档中的示例

def myfunc(x):
    start = time()
    ...
    stop = time()
    dask.distributed.get_worker().log_event("runtimes", {"start": start, "stop": stop})

futures = client.map(myfunc, range(10))
client.get_events("runtimes")
© www.soinside.com 2019 - 2024. All rights reserved.