TopGit
Đánh giá repo GitHub

Prometheus client_js: Thư Viện Metrics Node.js

prometheus/client_js
PTopGit review image for prometheus/client_js
Review by Topgit.dev for prometheus/client_js, with GitHub repository stats and README context.
Nhận định nhanh

Prometheus client for Node.js là thư viện chính thức để đo lường một process Node.js bằng Counter, Gauge, Histogram và Summary theo định dạng exposition của Prometheus. Nó không đi kèm server, không gắn với framework nào — chỉ là một registry bạn gọi từ route handler của riêng mình. Dùng nó khi cần xây metric để Prometheus server scrape; bỏ qua nếu bạn muốn một sản phẩm APM trọn gói tự vẽ dashboard cho bạn.

Sao
★ 3.5k
Fork
⑂ 413
Ngôn ngữ
JavaScript
Giấy phép
Apache-2.0
Chủ đề
Developer Tools
Cập nhật
Aug 2026
Trang chủ
GitHub

Tìm Hiểu Về Prometheus Client Cho Node.js

Prometheus client for Node.js chính là prometheus/client_js, một thư viện JavaScript dưới tổ chức GitHub Prometheus, triển khai bốn loại metric cốt lõi — Counter, Gauge, Histogram và Summary — cùng một registry định dạng chúng thành text sẵn sàng cho scrape. Nó không tự khởi chạy HTTP server; bạn tự quyết định route `/metrics` được phục vụ ra sao. Nó cũng hiểu module `cluster` của Node.js và có thể xuất OpenMetrics lẫn định dạng cổ điển.

Tính Năng Cốt Lõi Để Giám Sát Ứng Dụng Node.js

  • Bốn loại metric của Prometheus — Counter (`inc()`), Gauge (`set()`/`inc()`/`dec()`/`setToCurrentTime()`), Histogram (`observe()` với bucket có thể cấu hình), và Summary (`observe()` với percentile có thể cấu hình cùng một sliding time window tùy chọn qua `maxAgeSeconds`/`ageBuckets`).
  • `collectDefaultMetrics()` thu thập các metric mà chính Prometheus khuyến nghị, cộng thêm các metric đặc thù Node.js — event loop lag, active handles, garbage collection, phiên bản Node.js — với các tùy chọn cấu hình như `prefix`, `gcDurationBuckets`, và `eventLoopMonitoringPrecision`.
  • Gộp metrics theo cluster qua `ClusterRegistry` và `AggregatorRegistry`, để `register.clusterMetrics()` gộp số liệu từ mọi worker thay vì một lần scrape chỉ chạm được tới một process.
  • Hỗ trợ label với ba cú pháp tương đương để gán giá trị có label, timer nhận biết label, và một hàm `zero()` để đăng ký trước các tổ hợp label cho histogram trước khi chúng được quan sát.
  • Default label theo từng registry qua `register.setDefaultLabels()`, tự động áp dụng cho mọi metric mà registry đó phát ra.
  • Định dạng exposition có thể chuyển đổi — text Prometheus cổ điển (0.0.4) hoặc OpenMetrics (1.0.0) — thiết lập theo từng registry bằng `register.setContentType()`.
  • Exemplar trên các metric Counter và Histogram, với default metrics tự động điền label exemplar `traceId`/`spanId` khi có OpenTelemetry.
  • Một client `Pushgateway` (`pushAdd`, `push`, `delete`) cho các job không thể ngồi chờ để được scrape, cùng các hàm hỗ trợ `linearBuckets()`/`exponentialBuckets()` để cấu hình histogram.
Số sao GitHub của repo này thay đổi thế nào theo thời gian. Nguồn: star-history.com.Xem lịch sử sao

Bắt Đầu Với Prometheus client_js

README không nêu rõ lệnh npm install nào trong phần Usage hay API — mọi ví dụ code đều import thư viện theo cùng một cách, `require('@prometheus-io/client')`, cho biết tên định danh package nhưng không nói rõ câu lệnh cài đặt cụ thể. Nơi README trỏ tới để có một thiết lập hoạt động là thư mục `example/`, được tham chiếu riêng cho cách dùng với cluster và server thay vì mô tả trực tiếp trong văn bản.

Đo Lường Ứng Dụng Node.js Của Bạn Bằng Metrics

Vòng lặp cơ bản là: tạo một metric với `name` và `help` bắt buộc, gọi `.inc()`/`.set()`/`.observe()` trên nó khi code chạy, rồi trả lời request scrape của Prometheus bằng `await registry.metrics()` từ bất kỳ HTTP handler nào bạn đang chạy sẵn — thư viện không đóng gói framework web nào, nên route đó do bạn tự nối dây. Với các giá trị chỉ đọc được tại thời điểm scrape, như mức sử dụng bộ nhớ hiện tại thay vì thứ được tích lũy liên tục, hãy truyền một hàm `collect()` thay vì cập nhật metric theo timer; README nói rõ `collect()` — có thể đồng bộ hoặc bất đồng bộ — được gọi khi registry thu thập giá trị, còn callback `setInterval` không phải chỗ để ghi những cập nhật đó. Label lấy từ mảng `labelNames` trong cấu hình metric, rồi được gán qua `.labels(...).set(...)` hoặc bằng cách truyền một object label làm tham số đầu tiên cho lệnh gọi như `.inc()`. Chạy dưới module `cluster` của Node.js làm thay đổi bức tranh: registry cục bộ của một worker chỉ phản ánh số liệu riêng của worker đó, nên bạn cần khởi tạo `ClusterRegistry` trước khi rẽ nhánh theo `cluster.isPrimary`. Bỏ qua bước này ở một worker khiến worker đó không thể trả lời khi process primary yêu cầu gộp số liệu, nên `clusterMetrics()` sẽ treo cho tới khi hết thời gian chờ. Custom metric mặc định được cộng dồn (sum) qua các worker; đặt `aggregator` trong cấu hình metric thành `'first'`, `'min'`, `'max'`, `'average'`, hoặc `'omit'` khi phép cộng dồn không phải tổ hợp phù hợp cho metric đó.

Điểm mạnh

  • Đủ bốn loại metric của Prometheus với các tùy chọn cấu hình mà đặc tả thực sự yêu cầu — summary có sliding window, bucket histogram tùy chỉnh, percentile tùy chỉnh — chứ không chỉ là một wrapper trần trụi quanh một counter.
  • Hỗ trợ cluster sẵn có: `ClusterRegistry`/`AggregatorRegistry` và `register.clusterMetrics()` giải quyết vấn đề worker chỉ thấy chính mình mà bạn không cần tự xây dựng cơ chế IPC riêng.
  • Không phụ thuộc framework nào. Nó hoạt động với bất kỳ lớp HTTP nào vì phơi bày metrics chỉ đơn giản là trả về `register.metrics()` từ route bạn chọn.
  • Hỗ trợ song song hai định dạng exposition — text Prometheus và OpenMetrics — có thể chuyển đổi theo từng registry, cộng thêm hỗ trợ exemplar gắn với trace ID và span ID của OpenTelemetry trên các default metrics.
  • Giấy phép Apache-2.0 cởi mở, được duy trì dưới tổ chức GitHub prometheus chính thức thay vì tài khoản của một maintainer đơn lẻ.
  • Client Pushgateway được đóng gói sẵn thay vì để thành dependency riêng, có tùy chọn `requireJobName: false` cho các gateway như Gravel Gateway không nhóm theo tên job.

Những Điều Cần Cân Nhắc Và Giới Hạn Đã Biết

  • Không có tích hợp framework web nào đi kèm — bạn phải tự nối route `/metrics` vào HTTP server của riêng mình; README nói rõ đây là điều bị bỏ ngoài có chủ đích.
  • Các default metric về file descriptor và bộ nhớ chỉ khả dụng trên Linux theo ghi chú của chính README, nên những con số đó sẽ không xuất hiện khi bạn chạy ứng dụng cục bộ trên macOS hoặc Windows.
  • Một lưu ý về độ chính xác được README nêu ra: khi gộp metrics theo cluster, các chỉ số event loop lag — cả giá trị trung bình lẫn các percentile — được lấy trung bình qua các worker, kém chính xác hơn phép cộng dồn dùng cho các metric khác.
  • Số liệu về byte được giải phóng qua garbage collection không được tích hợp sẵn; README trỏ tới một module riêng (SimenB/node-prometheus-gc-s) với mục đích cụ thể là giữ thư viện này không có native dependency.
  • Không có lệnh npm install nào xuất hiện trong các phần README hiện có — bạn phải tự suy ra tên định danh package từ các lệnh gọi `require('@prometheus-io/client')` trong ví dụ.
  • Việc kết hợp hai registry khác định dạng exposition — text Prometheus với OpenMetrics — có hành vi mà README gọi là chưa xác định, nên trộn chúng trên cùng một endpoint gộp là rủi ro bạn tự chịu.

Lựa Chọn Thay Thế Để Thu Thập Metrics Cho Node.js

prom-client — một client Prometheus riêng biệt cho Node.js, được cộng đồng duy trì và dùng rộng rãi, có API Counter/Gauge/Histogram/Summary tương tự.OpenTelemetry JS SDK — một API instrumentation và metrics trung lập về vendor, có thể export sang Prometheus hoặc backend khác, không gắn với một định dạng exposition duy nhất.node-statsd — một client cho metrics StatsD/UDP theo mô hình push, gửi tới một daemon riêng, khác mô hình pull-based scrape của Prometheus.Elastic APM Node.js agent — một agent APM gộp metrics cùng distributed tracing và bắt lỗi, dành cho các team đã dùng sẵn Elastic Stack.

Câu Hỏi Thường Gặp

Prometheus client_js dùng giấy phép nào?

Prometheus client for Node.js được phát hành theo giấy phép Apache-2.0, như được liệt kê trên repository GitHub của nó.

Prometheus client_js có hỗ trợ module cluster của Node.js không?

Prometheus client for Node.js có sẵn một ClusterRegistry để gộp metrics từ mọi worker vào process primary, vì registry riêng của một worker mặc định chỉ phản ánh số liệu cục bộ của nó.

Prometheus client_js có thể push metrics tới Pushgateway không?

Prometheus client for Node.js có sẵn một client Pushgateway với các phương thức pushAdd, push, và delete, cùng tùy chọn requireJobName cho các gateway như Gravel Gateway không nhóm theo tên job.

Prometheus client_js hỗ trợ những loại metric nào?

Prometheus client for Node.js hỗ trợ bốn loại metric: Counter, Gauge, Histogram, và Summary.

Prometheus client_js có hỗ trợ định dạng OpenMetrics không?

Prometheus client for Node.js có thể xuất định dạng exposition OpenMetrics 1.0.0 theo từng registry, song song với định dạng text Prometheus 0.0.4 cổ điển mà nó dùng mặc định.

Prometheus client_js có metric đặc thù theo hệ điều hành không?

Prometheus client for Node.js có metric đặc thù theo hệ điều hành: các chỉ số mặc định về file descriptor và bộ nhớ chỉ khả dụng trên Linux, theo README.

Vấn đề nó giải quyết

Một process Node.js chạy chậm hoặc lỗi khi tải cao sẽ không tự nói cho bạn biết lý do, trừ khi có thứ gì đó bên trong đang đếm số request, đo thời gian xử lý, và theo dõi bộ nhớ cùng sức khỏe event loop theo định dạng mà hệ thống giám sát của bạn scrape được. Tự tay xây lớp đo lường đó — chọn ranh giới bucket cho histogram, tự định dạng text exposition của Prometheus, đảm bảo Counter không bao giờ giảm ngược — rất dễ sai ở những chi tiết nhỏ. prometheus/client_js tồn tại để chuẩn hoá lớp đo lường đó thay vì để mỗi team tự nghĩ ra quy ước đặt tên và định dạng metric riêng.

Trường hợp sử dụng tốt nhất

  • Đo lường một HTTP API Node.js bằng Counter đếm số request và Histogram đo thời gian xử lý request, để một Prometheus server scrape theo chu kỳ.
  • Gộp metrics trên một triển khai `cluster` Node.js, nơi mỗi worker vốn chỉ tự phơi bày số liệu cục bộ của riêng nó.
  • Liên kết metrics với distributed trace bằng cách gắn exemplar vào Counter và Histogram khi OpenTelemetry đã điền sẵn trace ID và span ID.
  • Đẩy metrics từ các job batch hoặc cron chạy ngắn hạn tới Pushgateway thay vì phải duy trì một process sống lâu để Prometheus scrape.
  • Chuyển một registry từ định dạng text Prometheus cổ điển sang OpenMetrics mà không cần viết lại phần code tạo ra giá trị metric.

Ai nên dùng — và ai nên bỏ qua

Hãy thử Prometheus client for Node.js nếu bạn đã chạy Prometheus, hoặc bất kỳ hệ thống nào tương thích OpenMetrics, và muốn có các loại Counter/Gauge/Histogram/Summary thực sự cùng cơ chế gộp cluster hoạt động được, thay vì tự tay định dạng text exposition. Bỏ qua nếu bạn không muốn tự sở hữu route HTTP `/metrics` và một scrape target — một agent APM trọn gói tự đi kèm bộ thu thập và dashboard sẽ cho bạn khả năng quan sát với ít công sức thiết lập hơn, đổi lại là dữ liệu của bạn gắn chặt với vendor đó.

Repo liên quan

Nguồn & ghi công

Thông tin và ví dụ code lấy từ repository GitHub prometheus/client_js và README của nó.

Dữ liệu GitHub · đồng bộ lần cuối 12 thg 8, 2026Đánh giá bởi Henry
Về TopGit

Muốn nghe thêm một ý kiến về client_js?

Hỏi một AI đọc được trang này — một cú bấm là có ngay nhận định về client_js.

GitHub