健康检测
AdonisJS的健康检查模块允许你和安装的软件包报告应用程序的健康状况。
健康状况检查在执行滚动部署时通常很有用,因为你可以在向新部署的代码发送任何通信之前检查其运行状况。所有重要平台, 包括: DigitalOcean Apps, Kubernetes and Amazon ECS 已经支持平台健康检查。
健康检查是如何工作的?
健康检查的主要目标是执行操作并确保应用程序在生产环境中正常工作。它涵盖了以下操作:
- 检查数据库连接
- 确保所有环境变量都已就绪,能在应用程序上正常运行
- 数据库没有任何挂起的迁移等。
健康检查系统无法检查如果你的应用程序在某些特定流中导致错误,因为这更多是一个逻辑或运行时异常,而不是我们可以事先检测到的。
暴露健康检测点
一种常见做法是暴露HTTP端点,部署系统可以ping该端点来检查应用程序的健康状况。可以通过注册路由来暴露该端点。
import Route from '@ioc:Adonis/Core/Route'
import HealthCheck from '@ioc:Adonis/Core/HealthCheck'
Route.get('health', async ({ response }) => {
const report = await HealthCheck.getReport()
return report.healthy
? response.ok(report)
: response.badRequest(report)
})
getReport
方法返回一个 JSON 对象,其中包含所有已注册健康检查器的报告。对象的格式如下:
{
healthy: true,
report: {
env: {
displayName: 'Node env check',
health: {
healthy: true,
}
}
}
}
healthy
顶级 healthy
属性告诉所有检查是否通过。
report
report
属性包括所有已注册健康检查及其各自状态的键值对。
displayName
当你在仪表板上可视化报表并想要一个可读的名称时,displayName
子属性通常很有用。
health
health
子属性包括健康状态和错误消息(如果报告不健康)。
{
health: {
healthy: true
}
}
{
health: {
healthy: false,
message: 'One or more connections are not healthy.'
}
}
meta
运行状况检查器还可以将自定义元数据附加到各自的节点,元数据的形状可能因检查器的不同而不同。
现有运行状况检查器
以下是现有健康检查器的列表。
应用关键检查程序
检查器是隐式配置的,无法禁用。它检查 APP_KEY
环境变量是否存在,并确保最小长度为 32个字符。
你可以使用 node ace generate:key
命令生成应用程序密钥,然后将输出用作 APP_KEY
环境变量的值。
Node env 检查程序
检查 NODE_ENV
环境变量是否存在,如果尚未显式定义,则失败。您永远不应该在 未知环境 中运行你的应用程序。
Lucid 检查程序
@adonisjs/lucid
包允许选择性地为给定的或所有已注册的连接启用健康检查。然后它将尝试与数据库 建立连接 并报告其状态。
确保通过修改 config/database.ts
文件为给定连接启用健康检查。
{
pg: {
client: 'pg',
connection: {
// ... 连接的详细信息
},
healthCheck: true, // 👈 启用
}
}
顶层 lucid
节点包含所有已注册连接的聚合状态,而 meta
数组包含所有连接的单个状态。
{
lucid: {
displayName: 'Database',
health: {
healthy: true,
message: 'All connections are healthy'
},
meta: [
{
connection: 'pg',
message: 'Connection is healthy',
error: null
}
]
}
}
如果出现错误,meta[index].error
属性将包含错误堆栈。
Redis 检查程序
你还可以选择通过修改 config/redis.ts
文件为 @adonisjs/redis
模块启用健康检查。
{
local: {
host: '127.0.0.1',
port: 6379,
password: '',
healthCheck: true // 👈 启用
}
}
顶级 redis
节点包含所有已注册连接的聚合状态,而 meta
数组包含所有连接的单个状态。
{
displayName: 'Redis',
health: {
healthy: true,
message: 'All connections are healthy',
},
meta: [
{
connection: 'local',
status: 'ready',
used_memory: '1.00M',
error: null
}
]
}
如果发生错误,meta[index].error
属性将包含错误堆栈,used_memory
属性将设置为 null
。
添加自定义运行状况检查器
还可以在应用程序代码库中注册自定义健康检查器,或将其作为包提供。你可以在服务提供者的 boot
方法中注册它。
addChecker
方法接受检查器的唯一名称和执行健康检查并返回报告的回调函数。
import { ApplicationContract } from '@ioc:Adonis/Core/Application'
export default class AppProvider {
constructor(protected app: ApplicationContract) {}
public async boot() {
const HealthCheck = this.app.container.use('Adonis/Core/HealthCheck')
HealthCheck.addChecker('my-checker', async () => {
return {
displayName: 'Checker Name',
health: {
healthy: true,
message: 'Everything works fine'
},
meta: {},
}
})
}
}
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。