【问题标题】:How to pull files from Cloud Foundry on Diego如何从 Diego 的 Cloud Foundry 中提取文件
【发布时间】:2018-07-08 01:14:55
【问题描述】:

我想检索一些应用程序的日志。 我发现命令cf file 不再可用,插件cf-download doesn't work on Diego Architecture。 有没有办法通过 CLI 其他方法从云铸造厂检索文件?

【问题讨论】:

标签: command-line-interface cloud-foundry swisscomdev


【解决方案1】:

解决方法是使用SSH without cf CLI

当您处于第 4 步时,您可以使用 WinSCP(适用于 Windows)拥有一个在文件夹中导航的图形界面。

【讨论】:

  • 您无法通过 ssh-ing 将日志下载到容器中。如果你想要日志,你应该通过 Loggregator Firehose 获得它们。如果您有访问权限,您可以尝试使用 cf-cli 的 cf firehose 插件。
  • 通过日志我的意思是来自应用程序的日志。我能够下载它们。但我会检查你的解决方案。
  • 您应该修改您的应用程序以登录到 STDOUT/STDERR。然后您的日志将显示在日志流中(即cf logs),您无需进入容器即可获取它们。如果您有一个第三方应用程序无法告诉您登录到 STDOUT,并且您必须从容器中获取日志文件,那么这就是解决方案(即 SCP/SFTP)。
【解决方案2】:

一个更简单但不模糊 / hacky 的解决方案是使用 cf ssh 通过标准输出传输。

例如,如果您想直接传输/home/vcap/logs 下的所有文件,您可以这样做...

更新:这是一个更简单、更快的版本,没有 for 循环,仅使用 tar

cf ssh <APP> -i <INSTANCE> -c 'tar cfz - logs/*.log' | tar xfz - -C .

在我的例子中,这会在 20 秒内传输 1 GB 的日志文件。

原答案:

#!/bin/sh
mkdir -p logs
for f in $( cf ssh <APP> -i <INSTANCE> -c 'ls logs/*' ); do
    cf ssh <APP> -i <INSTANCE> -c "cat $f" > $f
done

在我的设置中,传输 1.3GB 的日志文件大约需要 11 分钟。

使用gzip 压缩将其缩短到 5 分钟(替换 for 循环中的行):

    cf ssh <APP> -i <INSTANCE> -c "cat $f | gzip -c" | gunzip > $f

很确定这可以使用tar 进行优化并摆脱 for 循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多