繁体   English   中英

在无状态(谷歌云引擎)docker 上保留来自 R 的永久日志的最佳方法是什么?

[英]What is the best way to keep a permanent log from R on stateless (Google Cloud Engine) docker?

我正在使用无状态 docker 映像在 Google Cloud VM 上运行各种数据处理任务。 当进程中断时——由于机器被抢占或 R 崩溃——我需要知道从哪里继续。 那么我怎样才能保留一个可以从 R 读取和写入的永久日志呢?

目前,我正在更新 Google Drive 上的文本文件,但这并不是最快或最稳定的解决方案 - 有更好的想法吗?

看起来您所指的日志不仅仅是日志记录,而是代表一种状态。 我个人会将这些日志/状态写入 Google Cloud Storage 存储桶。 这是查看设置的最简单方法。

已经有一个 R 的 GCS 库,你可以在这里找到它。 请记住为计算服务帐户授予对存储桶的正确权限,否则,您会遇到权限被拒绝的错误。

2个选项供您选择:

  • 使用日志服务器并向其报告日志消息,以便即使在服务器出现故障时也能维护它们
  • 将消息记录到超过容器生命周期的卷中(这可以通过容器的 Kubernetes 部署实现).. 不完全确定如何使用纯粹的 GCP 部署来做到这一点。 我会让你去调查那个

感谢@Nebulastic,我现在已经可以使用 GoogleCloudStorage - 似乎比 Google Drive 更快、更可靠。 如果它们对任何人都有帮助,这里是我现在使用的两个包装函数(在创建具有适当权限的服务帐户并创建存储桶之后):

log_to_gcs <- function(message, log_name = "mylog", bucket = "logs-and-states") {
  gcs_auth("~/gcs_key.json")
  objects <- gcs_list_objects(bucket = bucket)
if (log_name %in% objects$name) {
  log <- gcs_get_object(log_name, bucket = bucket)
} else {
  log <- character()  
}

log <- c(log, message)
tmp <- tempfile()
writeLines(log, tmp)
gcs_upload(tmp, name = "mylog", bucket = bucket)
file.remove(tmp)
}

read_log_gcs <- function(log_name = "mylog", bucket = "logs-and-states") {
  gcs_get_object(log_name, bucket = bucket)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM