Moleculer possui um módulo de métricas integrado que coleta muitos valores de métricas internos do Moleculer e de processos. Além disso, você pode definir facilmente suas métricas personalizadas. Existem vários geradores de métricas integrados como Console
, Prometheus, Datadog, etc.
Se você deseja usar as métricas legacy (<= v0.13) use
EventLegacy
como exportador de rastreamento. Mais informações.
Habilitar métricas & definir gerador para console
// moleculer.config.js |
Opções
Nome | Tipo | Valor padrão | Descrição |
---|---|---|---|
enabled |
Boolean |
false |
Ativar recurso de rastreamento. |
reporter |
Object or Array<Object> |
null |
Configuração de gerador métrico. Mais informações |
collectProcessMetrics |
Boolean |
Colete métricas relacionadas ao processo & ao sistema operacional. Padrão: process.env.NODE_ENV !== "test" |
|
collectInterval |
Number |
5 |
Período de tempo para coleta em segundos. |
defaultBuckets |
Array<Number> |
Valores padrão para histogramas. Default: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10] |
|
defaultQuantiles |
Array<Number> |
Valores padrão para histogramas. Default: [0.5, 0.9, 0.95, 0.99, 0.999] |
|
defaultMaxAgeSeconds |
Number |
60 |
Tempo máximo para o cálculo da quantidade. |
defaultAgeBuckets |
Number |
10 |
Número de buckets para cálculo da quantidade. |
defaultAggregator |
String |
sum |
Método para agregador de valor. |
Geradores de Métricas
Moleculer possui vários geradores integrados. Todos eles têm as seguintes opções:
Nome | Tipo | Valor padrão | Descrição |
---|---|---|---|
includes |
String or Array<String> |
null |
Lista de métricas a serem exportadas. Métricas padrão |
excludes |
String or Array<String> |
null |
Lista de métricas a serem excluídas. Métricas padrão |
metricNamePrefix |
String |
null |
Prefixo a ser adicionado a nomes de métricas |
metricNameSuffix |
String |
null |
Sufixo a ser adicionado aos nomes das métricas |
metricNameFormatter |
Function |
null |
Formatador para nome da métrica |
labelNameFormatter |
Function |
null |
Formatador para nome da tag |
Exemplo de opções métricas
// moleculer.config.js |
Console
Este é um gerador para debug que exibe periodicamente as métricas no console.
// moleculer.config.js |
CSV
O gerador (CSV) salva as interações em um arquivo CSV.
// moleculer.config.js |
Event
O gerador Event envia eventos Moleculer com valores de métricas.
// moleculer.config.js |
Datadog
Gerador para Datadog envia métricas para o Servidor Datadog.
// moleculer.config.js |
Prometheus
O gerador para Prometheus publica métricas em formato Prometheus. O servidor Prometheus pode coletá-los. A porta padrão é 3030
.
// moleculer.config.js |
StatsD
O gerador StatsD envia valores de métricas para o servidor StatsD via UDP.
// moleculer.config.js |
Gerador personalizado
Um módulo de métricas personalizadas pode ser criado. Recomendamos copiar o código fonte do Console Reporter e implementar os métodos init
, stop
, metricChanged
.
Criar métricas personalizadas
const BaseReporter = require("moleculer").MetricReporters.Base; |
Usar métricas personalizadas
// moleculer.config.js |
Tipos de métricas suportados
Counter
Um contador é uma métrica acumulativa que representa um único contador aumentando sistematicamente cujo valor só pode aumentar ou ser reposto a zero. Por exemplo, você pode usar um contador para representar o número de requisições atendidas, tarefas concluídas ou erros. Pode também fornecer uma taxa de minuto.
O Contador fornece os seguintes métodos
increment(labels?: GenericObject, value?: number, timestamp?: number) |
Gauge
Gauge é uma métrica que representa um único valor numérico que pode arbitrariamente subir e cair. Gauges são usados tipicamente para valores medidos como o uso de memória atual, mas também “contagens” que podem subir e baixar, como o número de requisições simultâneas. Pode também fornecer uma taxa de minuto.
O Gauge fornece os seguintes métodos:
increment(labels?: GenericObject, value?: number, timestamp?: number) |
Histogram
Um histograma apresenta observações (geralmente coisas como durações de requisições ou tamanhos de resposta) e as agrupam em buckets configuráveis. Também fornece uma soma de todos os valores observados e calcula quantidades configuráveis ao longo de um período de tempo. Pode também fornecer uma taxa de minuto.
O Histograma fornece os seguintes métodos:
observe(value: number, labels?: GenericObject, timestamp?: number) |
Info
Uma info é uma única string ou valor de número, como argumentos de processo, nome de host ou números de versão.
O Info fornece os seguintes métodos:
set(value: any | null, labels?: GenericObject, timestamp?: number) |
Métricas internas integradas
Métricas de processo
process.arguments
(info)process.pid
(info)process.ppid
(info)process.eventloop.lag.min
(gauge)process.eventloop.lag.avg
(gauge)process.eventloop.lag.max
(gauge)process.eventloop.lag.count
(gauge)process.memory.heap.size.total
(gauge)process.memory.heap.size.used
(gauge)process.memory.rss
(gauge)process.memory.external
(gauge)process.memory.heap.space.size.total
(gauge)process.memory.heap.space.size.used
(gauge)process.memory.heap.space.size.available
(gauge)process.memory.heap.space.size.physical
(gauge)process.memory.heap.stat.heap.size.total
(gauge)process.memory.heap.stat.executable.size.total
(gauge)process.memory.heap.stat.physical.size.total
(gauge)process.memory.heap.stat.available.size.total
(gauge)process.memory.heap.stat.used.heap.size
(gauge)process.memory.heap.stat.heap.size.limit
(gauge)process.memory.heap.stat.mallocated.memory
(gauge)process.memory.heap.stat.peak.mallocated.memory
(gauge)process.memory.heap.stat.zap.garbage
(gauge)process.uptime
(gauge)process.internal.active.handles
(gauge)process.internal.active.requests
(gauge)process.versions.node
(info)process.gc.time
(gauge)process.gc.total.time
(gauge)process.gc.executed.total
(gauge)
Métricas do Sistema Operacional
os.memory.free
(gauge)os.memory.total
(gauge)os.memory.used
(gauge)os.uptime
(gauge)os.type
(info)os.release
(info)os.hostname
(info)os.arch
(info)os.platform
(info)os.user.uid
(info)os.user.gid
(info)os.user.username
(info)os.user.homedir
(info)os.network.address
(info)os.network.mac
(info)os.datetime.unix
(gauge)os.datetime.iso
(info)os.datetime.utc
(info)os.datetime.tz.offset
(gauge)os.cpu.load.1
(gauge)os.cpu.load.5
(gauge)os.cpu.load.15
(gauge)os.cpu.utilization
(gauge)os.cpu.user
(gauge)os.cpu.system
(gauge)os.cpu.total
(gauge)os.cpu.info.model
(info)os.cpu.info.speed
(gauge)os.cpu.info.times.user
(gauge)os.cpu.info.times.sys
(gauge)
Métricas Moleculer
moleculer.node.type
(info)moleculer.node.versions.moleculer
(info)moleculer.node.versions.protocol
(info)moleculer.broker.namespace
(info)moleculer.broker.started
(gauge)moleculer.broker.local.services.total
(gauge)moleculer.broker.middlewares.total
(gauge)moleculer.registry.nodes.total
(gauge)moleculer.registry.nodes.online.total
(gauge)moleculer.registry.services.total
(gauge)moleculer.registry.service.endpoints.total
(gauge)moleculer.registry.actions.total
(gauge)moleculer.registry.action.endpoints.total
(gauge)moleculer.registry.events.total
(gauge)moleculer.registry.event.endpoints.total
(gauge)moleculer.request.bulkhead.inflight
(gauge)moleculer.request.bulkhead.queue.size
(gauge)moleculer.event.bulkhead.inflight
(gauge)moleculer.event.bulkhead.queue.size
(gauge)moleculer.event.received.time
(histogram)moleculer.event.received.error.total
(counter)moleculer.event.received.active
(gauge)moleculer.request.timeout.total
(counter)moleculer.request.retry.attempts.total
(counter)moleculer.request.fallback.total
(counter)moleculer.request.total
(counter)moleculer.request.active
(gauge)moleculer.request.error.total
(counter)moleculer.request.time
(histogram)moleculer.request.levels
(counter)moleculer.event.emit.total
(counter)moleculer.event.broadcast.total
(counter)moleculer.event.broadcast-local.total
(counter)moleculer.event.received.total
(counter)moleculer.transit.publish.total
(counter)moleculer.transit.receive.total
(counter)moleculer.transit.requests.active
(gauge)moleculer.transit.streams.send.active
(gauge)moleculer.transporter.packets.sent.total
(counter)moleculer.transporter.packets.sent.bytes
(counter)moleculer.transporter.packets.received.total
(counter)moleculer.transporter.packets.received.bytes
(counter)
Personalizando
Registro de novas métricas
Você pode facilmente criar novas métricas.
Criar counter
// posts.service.js |
Criar gauge com tags
// posts.service.js |
Criar histogram com buckets & quantidades
// posts.service.js |