簡體   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