【问题标题】:how to capture dask-worker console log in a file.?如何在文件中捕获 dask-worker 控制台日志。?
【发布时间】:2018-02-01 10:35:01
【问题描述】:

定义我的任务(): 打印(“dask_worker_log_msg”) ...

客户端 = 客户端()

未来 = client.submit(my_task) 打印(“dask_client_log_msg”) ...

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

【问题讨论】:

    标签: dask dask-distributed dask-delayed


    【解决方案1】:

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

    【讨论】:

    • 谢谢!虽然我尝试了这个 api,但我得到的是 dask-worker 启动日志,而不是工作人员内部运行的任务记录的日志。如何在文件中获取正在运行的任务日志。?是我的疑问。抱歉,如果我的问题引起了任何混乱。
    • 目前没有机制可以捕获标准输出并将其通过管道传回您的客户端进程。
    • 所以 Dask 不支持自定义日志记录?作为一种解决方法,您可以将日志设置为警告或更高级别(例如logger.warning("This is an info message that was set to warning so that it can be retrieved from Dask")),以便将它们发送到 stderr 并可以从 Dask 中检索(例如,如果您从 shell 运行 dask,您可以这样做像这样dask-worker your_scheduler_addr &>> /path/to/log.log)。
    • Dask 只使用标准的 Python 日志记录模块,如您所说,它将结果通过管道传输到 stderr。我们在这里没有自己做任何特别的事情。这通常由 Yarn 或 Kubernetes 等基础设施系统处理。
    • 不幸的是,我们还没有在 Dask 之上使用任何额外的基础设施,所以我需要自己想办法获取日志。用例很简单:我的脚本中有一些日志条目——如何检索它们?我似乎缺少一些基本知识,因为据我了解,我应该使用logging.getLogger 获取记录器,执行logger.info("some info") 并在工作日志中看到这一点。这适用于警告和更高级别,但不适用于信息。我已在 dask 配置中将 info 设置为工作人员和调度程序的级别,但不知道该去哪里找。
    【解决方案2】:

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

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

    另见How to capture logs from workers from a Dask-Yarn job?

    【讨论】:

      猜你喜欢
      • 2013-02-02
      • 1970-01-01
      • 2015-10-22
      • 2019-04-19
      • 2020-08-21
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      相关资源
      最近更新 更多