转载

诊断您的 IBM Bluemix buildpack 或应用程序

我们都经历过这样的事情:您的应用程序发生了崩溃,而您要做的第一件事就是检查日志。但如,如果无法检查日志该怎么办? IBM Bluemix™ 是用来在可靠的、完全免费的环境中托管您的应用程序的一款好产品,但调试已经很好地存在的应用程序或 buildpack 从一开始可能就不是一件轻松的事。

当应用程序运行在 Bluemix 中时,您可以通过 Bluemix UI 或通过 cf files 命令在容器中查看日志。但是,只要应用程序已经存在,或者在初始化期间没有打开分配的端口,那么容器就会关闭,这使得您无法查看日志。通常,在 cf logs 命令的输出中也无法查看运行时日志。

如果无法查看任何日志输出,就无法了解哪儿出了错,也就不知道该如何做。您可以从本文中了解如何查看日志。

阅读: 查看 Bluemix 应用程序的日志

阅读: 使用您自定义的 buildpack

阅读: 移动应用程序的自动崩溃报告

阅读: 当您的应用程序崩溃时,您一定想了解所有的信息

当您的运行时崩溃的时候,脚本会移动和重命名日志文件,然后将它上传到您设置的 bluemix-log-server 应用程序。

构建您的应用程序需要做的准备工作

  • 一个 Bluemix 帐户和一个 DevOps Services 帐户,两个帐户都被链接到您的 IBM ID
  • 一个有问题的应用程序
  • 自定义 Bluemix buildpack(可选)

获取 log-server 代码

https://hub.jazz.net/project/jsutton/brokenNodeApp/overview" rel="nofollow,noindex">获取一个已崩溃的示例应用程序的代码

警告

bluemix-log-server 应用程序被设计用于充当一个生产应用程序,而且没有安全性。该应用程序(以及本教程)旨在帮助您在开发期间调试您的应用程序或 buildpack。我们推荐您在使用服务器 URL 时保持其私有性,并在不使用它时立即从 Bluemix 中删除它。对于生产环境的日志服务,可以使用其他许多可用选项中的一个选项。

步骤 1. 将 bluemix-log-server 部署到您的空间

  1. 向上滚动并单击 获取 log-server 代码 按钮。在 DevOps Services 上的 jsutton|bluemix-log-server 项目的概述页面上,单击 EDIT CODE 按钮(如果尚未登录,请输入您的 DevOps Services 凭据)。单击 FORK 按钮,为您的项目起名,并采用所有默认值在您的帐户下创建一个 DevOps Services 项目。
  2. 更改 manifest.yml 文件,使 namehost 值与应用程序的名称相匹配。
  3. 单击 DEPLOY 将应用程序部署到您的个人 Bluemix 空间。

请注意,在项目代码中,除了 package.json 和 manifest.yml 之外,只有一个主文件:app.js,它包含让 log-server 应用程序正常工作所需的一切。app.js 文件使用 Express 来托管一个能接受上传内容的小的 Web 服务器,这些内容随后被存储在 public/uploads 目录中。另一个有用的特性是 express.directory 功能,它使您能够通过一个整洁的 HTML 和 JavaScript 界面浏览某个选定的目录。 express.directory 也包含基本的分类和搜索功能。

步骤 2. 为您的应用程序编写一个封装(encapsulating)脚本

此步骤有两个变体。如果在使用一个现有 buildpack 时,应用程序发生了崩溃,则采用第一个顺序。在创建自定义 buildpack 时,将会采用第二个顺序。

如果您使用了一个现有的 buildpack 并且您的应用程序出错了

在应用程序发生崩溃的时候修改您的原始出错应用程序,系统会发送一个日志,该日志中包含被发送到您在步骤 1 中部署的 bluemix-log-server 的输出:

  1. 向顶级目录中的应用程序添加一个名为 start.sh 的文件。
  2. 将以下代码添加到 start.sh:
    #!/bin/bash  <<COMMAND HERE>> &> runtime.log  FILENAME="runtime_$(date +%F-%T).log"  mv runtime.log $FILENAME  curl --form "uploadfile=@$FILENAME" <<URL OF YOUR LOG SERVER HERE>>
  3. 在第二行上,使用将会正常启动您的应用程序的命令来替换 <<COMMAND HERE>> 。该命令可能位于命令行上的 -c 选项中,在您的 manifest.yml 文件或 procfile 中,或者在您的 buildpack 支持的另一个方法中。在我的案例中,我从 manifest.yml 文件中采用了 node app.js ,并将它添加到了脚本中。
  4. 在 start.sh 的最后一行上,使用已部署好的 bluemix-log-server 实例的 URL 来替换 <<URL OF YOUR LOG SERVER HERE>>
  5. 在找到启动命令的相同文件或位置上,使用 bash start.sh 替换该命令。当您的应用程序在 Bluemix 中启动时,这会确保它将首先使用 bash 来调用 start.sh;然后 start.sh 将会启动您的应用程序。

如果创建一个自定义 buildpack 并需要调试运行时

  1. 在您的 buildpack 中,生成一个 shell 脚本,在将应用程序推送到云时,该脚本将会为您启动您的运行时。脚本中包含以下代码:
    ./runtime &> runtime.log FILENAME="runtime_$(date +%F-%T).log" mv runtime.log $FILENAME curl --form "uploadfile=@$FILENAME" <<URL OF YOUR LOG SERVER HERE>>
  2. 使用您想要运行为您的 buildpack 的一部分的可执行代码来替换 ./runtime
  3. 在最后一行上,使用已部署好的 bluemix-log-server 实例的 URL 来替换 <<URL OF YOUR LOG SERVER HERE>>

在将应用程序部署到 Bluemix 时,它将执行 start shell 脚本。在运行您的运行时的时候,会在 runtime.log 文件中存储标准输出和输入。当您的运行时发生崩溃时,该脚本将会移动和重命名日志文件,然后将它上传到您在步骤 1 中设置的 bluemix-log-server 应用程序。

步骤 3. 收集您的日志

  1. 您还可以尝试部署示例崩溃应用程序。(单击本教程顶部的按钮来获得代码。)您需要做的工作就是设置用来保存上传的日志的 URL,并为此做好准备。

    将出错的应用程序推送到 Bluemix。当运行时发生崩溃的时候,日志文件会被上传到运行在 Bluemix 中的 bluemix-log-server 应用程序。
  2. 按照您在步骤 1 中选择的路由来浏览 bluemix-log-server 应用程序。现在,您应该看到了您的日期和时间戳日志文件。单击该文件,您可以看到运行应用程序期间生产的所有输出: 诊断您的 IBM Bluemix buildpack 或应用程序

    点击查看大图

    关闭 [x]

    诊断您的 IBM Bluemix buildpack 或应用程序

结束语

只需几个步骤,就可以设置一个简单的方法,使用该方法从 Bluemix 上发生崩溃的应用程序查看日志,不必使用命令行工具到处查看。您可以将日志汇总到一个地方。您甚至可以扩展 node.js 应用程序来处理日志,从而分析输出,帮助您确定发生崩溃的原因。

BLUEMIX SERVICE USED IN THIS TUTORIAL: 针对 Node.js 运行时的 SDK 可以帮助您轻松开发、部署和扩展服务器端 JavaScript 应用程序。

正文到此结束
Loading...