介绍
系统监控是保障系统稳定运行的关键性任务,能及时发现系统中的异常信息,有效地降低系统故障的出现率。而基于对系统状态的监控,在系统状态异常时,能够实现自动化地报警,为运维人员提供及时有效的告警信息,快速响应异常情况,降低系统被攻击的风险。
目前,系统监控与报警器的实现方式有很多,其中包括基于开源组件的实现方式。本文将介绍利用 Fastify 和 Prometheus 来实现系统监控和报警器,以便更好地管理前端开发的系统。
Fastify
Fastify 是一款支持高性能和低开销的 Web 框架,它提供了极快的响应速度和卓越的性能。使用 Fastify 开发的应用具有令人惊叹的吞吐量和低延迟,并且在大型应用程序中表现出色。
Fastify 的优点包括:
- 极快的响应速度
- 支持插件扩展
- 支持自定义中间件
- 低开销的 HTTP 请求、响应和 WebSocket 支持
- 局部依赖注入
本文将运用 Fastify 的中间件来实现系统监控和报警器。
Prometheus
Prometheus 是一款开源的监控系统,它使用一个多维数据模型 (由指标名称和一组键/值标签的集合组合) 来存储时间序列数据。这些时间序列可以通过 HTTP API 来访问和查询。Prometheus 还提供了一整套可视化工具,用于查询和可视化监控数据,并允许用户自定义警报规则。
使用 Prometheus 的主要优势包括:
- 易于使用和配置
- 支持多项度量指标及对度量指标的展示
- 支持可配置的告警规则,并提供告警通知机制
- 提供图表和统计数据,供管理员进行数据分析
实现
在运用 Fastify 和 Prometheus 实现系统监控和报警器前,我们需要先安装 Fastify 和 Prometheus。在终端中输入以下命令即可完成安装:
npm install fastify fastify-prometheus
上述命令将会安装 Fastify 和 Prometheus。现在,我们来看一下 Fastify 和 Prometheus 的代码实现。
-- -------------------- ---- ------- ----- ------- - -------------------- ------- ---- -- ----- ----------------- - ----------------------------- -- - ---------- ------ ----------------------------------- - -------- ------ --------------------- ----- ------------------- ----- -- -- -- ---------- -- --------------- ------- ------ ---- ----------- -------- ----- --------- ------ -- - ----------------------------------- ------------------ -- -- -- -------- --------------- ------- ------ ---- ---- -------- ----- --------- ------ -- - ----- ---- - - -------- ------- ------- - ---------------- -- --
上述代码中,我们首先实例化了 Fastify,并注册了 fastifyPrometheus 中间件。我们也定义了一个 /metrics
路由来获取 Prometheus 指标。最后,我们定义了一个接口,将会在 /
路由中使用。
报警器
现在,我们已经完成功能实现,接下来我们将实现告警规则,并将它与 Prometheus 监控数据集成。我们需要先定义一个 prometheus-client
,它是一个 Prometheus 客户端。
const Prometheus = require('prom-client') const httpRequestLatency = new Prometheus.Histogram({ name: 'http_request_duration_seconds', help: 'Duration of HTTP requests in seconds', labelNames: ['path', 'status'], buckets: [0.1, 0.2, 0.3, 0.4, 0.5, 1, 2], })
上述代码创建了一个指标 http_request_duration_seconds
,用于记录 HTTP 请求的延迟时间。
接下来,我们将使用一个 getAlertingEngine
函数来获取告警引擎的实例。
-- -------------------- ---- ------- -------- ------------------- - ----- -------------- - --- --------------------------- ----- ---------------------- - - ----- ----------------------- ----- ------ ---- ----- --- ---- ---- ---------- -------- -------- -- - ----- ------------ - ------ ----------- -- ------ --- -------------------------------- ----------- -- ------- - ---- -- -------------------- - -- - ------------------- ----------- ------------- - -- ----- ------------------ ---------- ----- -------------- ------- ------ -- ------------------------------------------------- --------------------------------------- --------------- ------- --------- --------- --------- ------ -- ------------ - ----------------------------------------------- ------ -------------- -
上述代码定义了一个告警规则 http_request_latency
,它将会在 HTTP 请求延迟时间超过 0.5 秒时触发。此外,该规则还会在 HTTP 响应码为 4xx 时触发。
现在,我们已经完成了告警规则的定义。接下来,我们需要编写启动代码。
-- -------------------- ---- ------- ----- -------- ------- - --- - ----- -------------- - ------------------- -- -- ------- --- ----- -------------------- ----- -------------------- ------ ---------- -- ------ -------------------------- ------- -- - ---------------------------- ------ -- - ----- ----- - ------------------ --------------- - - -------
上述代码启动了 fastify 服务器,处理告警通知并将收取到的告警信息输出到终端中。
结论
运用 Fastify 和 Prometheus 可以轻松实现系统监控和报警器。这种方法提供了许多优点,使开发者可以快速监测应用的健康状况,同时也能够自动报警。
本文的代码示例非常简单,并且是一个开箱即用的演示。如果您有自己的项目,则可以根据自己的需要自定义监控和告警规则。
因此,我们建议您尝试使用这种方法,将其运用到自己的项目中,以保证前端应用的健康和可靠性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6715be56ad1e889fe218b541