Hapi 是 Node.js 服务器框架中很受欢迎的一个,它提供了很多高级功能,比如路由管理、处理请求和响应等。虽然 Hapi 在很多方面的表现很好,但在服务器性能优化中,我们还需要一些其他的工具和技术。在这篇文章里,我们将介绍 Good 插件,它是一款监控和可视化应用程序日志的插件,可以帮助我们更好地理解 Hapi 服务器的健康状况。
Good 插件介绍
Good 是一个 Hapi 插件,用于捕获服务器的事件和日志,并将其发送到各种接收器。Good 可以将日志记录到文件、控制台或所需的第三方服务。它还提供了一个 Web 接口,可以用来查看服务器的事件和健康状况。Good 可以帮助开发者快速定位服务器性能问题,例如瓶颈、错误、响应时间等等。
以下是 Good 的主要特点:
- 支持捕获 Hapi 服务器的事件和日志,例如请求、响应、错误等;
- 支持将日志记录到文件、控制台或所需的第三方服务;
- 支持多种格式的日志记录,例如 JSON、Bunyan 等;
- 支持通过 web 界面查看服务器的状态和事件。
Good 是一个从 Hapi 7.0 版本开始提供的插件,在 Hapi 应用程序中,我们可以通过 npm 安装 Good,并配置 Good 来启用日志记录和可视化功能。
Good 插件配置及使用示例
以下是一个使用 Good 插件的示例。在这个示例中,我们将使用 Good 控制台接收器来记录 Hapi 服务器的事件和状态。
首先,我们需要通过 npm 安装 Good 插件:
npm install @hapi/good
接下来在 Hapi 应用程序中配置 Good 插件:
// javascriptcn.com 代码示例 const Hapi = require('hapi'); const Good = require('@hapi/good'); const server = Hapi.server({ port: 3000, host: 'localhost' }); async function startServer() { await server.register({ plugin: Good, options: { reporters: { console: [{ module: '@hapi/good-squeeze', name: 'Squeeze', args: [{ log: '*', response: '*', request: '*' }] }, { module: '@hapi/good-console' }, 'stdout'] } } }); await server.start(); console.log(`Server started at ${server.info.uri}`); } startServer();
在 Good 的选项中,我们通过 reporters 属性来配置接收器。这里我们配置了一个 console 接收器,它将记录服务器的事件和状态到控制台。Good 描述了这个接收器的三个组成部分:
- @hapi/good-squeeze:这个模块允许我们定义一个事件过滤器,只选择我们感兴趣的事件记录。在这个示例中,我们使用 Squeeze 模块选择了我们想要记录的日志类型:log(应用程序日志)、response(HTTP 响应)和 request(HTTP 请求)。
- @hapi/good-console:这个模块将事件转换为字符串,并将其记录到控制台。
- stdout:这个模块将事件记录到 stdout。
启动应用后,我们可以看到服务器向控制台输出了很多事件和状态信息。以下是一些示例输出:
[2021-01-01T00:00:00.000Z] INFO (21116 on MacBook-Pro.local): Server started at http://localhost:3000 [2021-01-01T00:00:01.000Z] DEBUG (21116 on MacBook-Pro.local): request: {"instance":"MacBook-Pro.local:0:0:0:0:0:0:1","method":"GET","path":"/","query":{},"headers":{"user-agent":"curl/7.54.0"},"remoteAddress":"::1","remotePort":54867} [2021-01-01T00:00:01.000Z] DEBUG (21116 on MacBook-Pro.local): response: {"instance":"MacBook-Pro.local:0:0:0:0:0:0:1","statusCode":200,"headers":{},"responseTime":8,"source":{"statusCode":200,"payload":{"message":"Hello, world!"}}}
Good 也提供了一个 Web 界面,可以帮助开发者更方便地查看服务器的状态和事件。我们可以在 Good 选项中配置 reporter 插件来使用这个功能:
// javascriptcn.com 代码示例 async function startServer() { await server.register({ plugin: Good, options: { reporters: { console: [{ module: '@hapi/good-squeeze', name: 'Squeeze', args: [{ log: '*', response: '*', request: '*', error: '*' }] }, { module: '@hapi/good-console' }, 'stdout'], http: [{ module: '@hapi/good-squeeze', name: 'Squeeze', args: [{ log: '*', response: '*', request: '*', error: '*' }] }, { module: '@hapi/good-squeeze', name: 'SafeJson' }, { module: '@hapi/good-http', args: ['http://localhost:8080', { wreck: { headers: { 'x-api-key': 12345 } }, failAction: 'ignore' }] }] } } }); await server.start(); console.log(`Server started at ${server.info.uri}`); }
这个示例中,我们配置了一个 http 接收器,它将事件和状态记录到远程服务器上。我们还使用了 @hapi/good-squeeze 和 @hapi/good-http 模块来配置 http 接收器。
在 Web 界面中,我们可以看到服务器的状态和事件的详细信息,例如服务器响应时间、请求和响应头、请求路径等等。这对快速定位服务器问题非常有帮助。
总结
Good 是一个方便的监控和可视化日志记录工具,它可以帮助我们更好地了解 Hapi 服务器的健康状况。在本文中,我们介绍了 Good 插件的主要特点和用法,并提供了一个示例配置,希望对前端开发者有所帮助。
在使用 Good 插件时,我们应该注意保护日志和事件信息的安全性。如果日志包含敏感信息,我们应该将日志记录到安全的地方,并仅在需要的时候访问。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6541d4a17d4982a6ebb73236