基于 egg-prometheus 开发,增加更多性能指标,为 egg 提供 Prometheus 功能支持。了解更多请看 Node.js 监控方案。
$ npm i egg-exporter --save
通过 ${app_root}/config/plugin.js
配置启动 Prometheus 插件:
exports.exporter = {
enable: true,
package: 'egg-exporter',
};
exports.exporter = {
scrapePort: 3000,
scrapePath: '/metrics',
prefix: 'egg_',
defaultLabels: { stage: 'dev' },
};
scrapePort
: 监听的用于采集 metrics 的端口scrapePath
: 监听的采集 metrics 的服务路径prefix
: 指定 metrics 名称的前缀defaultLabels
: 默认的 metrics 标签,全局生效aggregatorPort
: 配置 TCP 进程通信所使用的端口
http_request_duration_milliseconds histogram
: http 请求耗时http_request_size_bytes summary
: http 请求 body 大小http_response_size_bytes summary
: http 响应 body 大小http_request_total counter
: http 请求数http_all_errors_total counter
: http 错误数http_all_request_in_processing_total gauge
: http 处理中请求数process_resident_memory_bytes gauge
: 驻留内存大小nodejs_heap_size_total_bytes gauge
: 已申请堆内存大小nodejs_heap_size_used_bytes gauge
: 已使用堆内存大小nodejs_external_memory_bytes gauge
: V8 管理的,绑定到 Javascript 的 C++ 对象的内存使用情况nodejs_version_info
: 版本信息
当 egg-rpc-base 插件开启时,还会提供下面 metrics
rpc_consumer_response_time_ms summary
: rpc 客户端请求耗时rpc_consumer_request_rate counter
: rpc 客户端请求数rpc_consumer_fail_response_time_ms summary
: rpc 客户端失败的请求耗时rpc_consumer_request_fail_rate counter
: rpc 客户端失败的请求数rpc_consumer_request_size_bytes summary
: rpc 请求大小统计rpc_consumer_response_size_bytes summary
: rpc 响应大小统计rpc_provider_response_time_ms summary
: rpc 服务端处理时间rpc_provider_request_rate counter
: rpc 服务端收到请求数rpc_provider_fail_response_time_ms summary
: rpc 服务端失败的请求处理时间rpc_provider_request_fail_rate counter
: rpc 服务端失败的请求数
可以通过下面 API 自定义业务 metrics
const counter = new app.prometheus.Counter({
name: 'xxx_total',
help: 'custom counter',
labelNames: [ 'xxx' ],
});
const gauge = new app.prometheus.Gauge({
name: 'xxx_gauge',
help: 'custom gauge',
labelNames: [ 'xxx' ],
});
const histogram = new app.prometheus.Histogram({
name: 'xxx_histogram',
help: 'custom histogram',
labelNames: [ 'xxx' ],
});
const summary = new app.prometheus.Summary({
name: 'xxx_summary',
help: 'custom summary',
labelNames: [ 'xxx' ],
});
请告知我们可以为你做些什么,不过在此之前,请检查一下是否有已经存在的Bug或者意见。