螺旋状态
新遗物(及其他)的 OpenWhisk 微服务报告状态( HTTP) 检查
状态
问题
您拥有一个作为 OpenWhisk HTTP 动作的微服务, 甚至包括其中的一些 micro services and you want to 建立使用"新遗物"的服务正常时间监控.
万一服务中断,你需要快速了解 是否有问题
- openWhisk 运行时间, 可能无法到达或超载
- 您的后端 API 提供者之一可能无法访问
- 您自己的服务可能中断(例如由于部署变化)
终于,你知道,有 新遗迹合成器 不过你 不想在您每个微服务中重复相同的代码返回状态检查 .
解决方案
helix-status 是一个允许您将自己的动作包成一个标准化的监控响应的库
安装
$ npm install -S @adobe/helix-status
使用量
在您动作的切入点中,添加
const { helixStatus } = require('@adobe/helix-status');
到您的文件顶部并覆盖 module.exports.main 改为:
module.exports.main = helixStatus(main);
全体 GET /_status_check/healthcheck.json 向您服务的请求现在将以类似于以下的 XML 回复 :
{
"status": "OK",
"version": "1.5.4",
"response_time": 6,
"process": {}
}
您也可以通过将第二个参数传递到 wrap数字 :
module.exports.main = helixStatus(main, { example: 'http://www.example.com'})
你将看见这样的结果:
{
"status": "OK",
"version": "1.5.4",
"response_time": 249,
"process": {
"activation": "7ef3047190924313b3047190923313e9"
},
"example": 247
}
使用代表 API 端点的 URL 是一个好主意, 您的服务在正常操作中调用为检查 .
与 Probot 用法
使用时 高级程序 例如通过 OpenWhisk 上的无服务器Probot,其用法略有不同:
// import the probot status app
const { probotStatus } = require('@adobe/helix-status');
probot
.withApp(yourApp)
.withApp(probotStatus()) //add a status check app
probotStatus() 接受相同的建议 checks 对象,可以通过一系列URL检查.
用新遗物合成器
新遗迹合成器 是一种类似于平陵的服务。 它可以用来 helix-status 通过创建这样的 API 检查脚本 :
const assert = require('assert');
// replace the URL with your check URL
$http.get('https://adobeioruntime.net/api/v1/web/helix/helix-services/status@v3/_status_check/heathcheck.json',
// Callback
function (err, response, body) {
assert.equal(response.statusCode, 200, 'Expected a 200 OK response');
const health = JSON.parse(body);
assert.equal(health.status, 'OK', 'Expected an OK health check status');
for (const v in health) {
if (['status', 'process', 'version'].indexOf(v)===-1) {
$util.insights.set(v, parseInt(health[v]));
}
}
for (const h in ['x-openwhisk-activation-id', 'x-request-id', 'x-version']) {
$util.insights.set(h, response.headers[h]);
}
}
);
高级检查
默认, helix-status 将绘制 URL 地图并制作 GET 请求提供每个URL。 在某些情况下,你需要提供更多的细节来拟订请求和 helix-status 支持三种类型的高级检查:
请求选项
如果您需要像请求方法( 从 GET 改为 POST)或设置请求头(例如. Accept),而不是作为字符串提供URL,而是可以提供 根据 request/request 文档。 。 。 .
千万别忘了 uri。 。 。 .
module.exports.main = wrap(main,
{ example: {
uri: 'http://www.example.com',
method: 'POST',
headers: {
accept: 'application/json'
}
}});
自定义状态检查函数
对于更先进的使用案例,您可以提供 function 在你的支票中。 此函数将与 params 的功能.
注意检查功能应合理快地执行,但可以同化.
module.exports.main = wrap(main,
{ example: function(params) => params.foo === params.bar });
请求具有动态值的选项
以上两种技术的结合是使用带有动态值的请求选项. 如果您需要将请求对象或请求信头的属性填入其中提供的值,则可以使用此选项 params 处决.
一个典型的例子是向需要API密钥的API发出呼叫,API密钥将存储在OpenWhisk动作的默认参数中.
要做到这一点,请提供以下描述的请求选项对象: 请求选项中,但请注意 options 编辑 options.headers 对象可以是 functions. 函数的每个属性将被函数在使用动作参数调用时返回的值所取代.
module.exports.main = wrap(main,
{ example: {
uri: 'http://www.example.com',
method: 'POST',
headers: {
accept: 'application/json',
authorization: params => `Bearer ${params.EXAMPLE_API_TOKEN}`
}
}});
上面的例子说明如何提取 EXAMPLE_API_TOKEN 从动作的(默认)参数中的值并将其应用到 Authorization 头曰.
状态代码
健康检查报告遵循HTTP状态代码:
200(OK):所有健康检查都顺利进行504(盖特威超时):健康检查花费了太长的时间来执行502(Gateway 错误):健康检查从已检查的 URL 得到错误反应500(Server 错误): 通用检查函数未成功执行
发展
部署螺旋状态
部署螺旋状态要求 wsk 命令行客户端,认证为您选择的命名空间。 对于螺旋项目,我们使用 helix 名称空间.
所有承诺主机通过测试将自动部署。 所有承诺的分支 通过测试会得到的承诺 /helix-services/status@ci<num> 并贴上CI建筑编号.