From ea81d3b10d4c0563c0ea26330c6489a0a0f4e633 Mon Sep 17 00:00:00 2001 From: npayfebot Date: Fri, 10 Oct 2025 13:37:26 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=93=A6=20bump=20changed=20packages=20?= =?UTF-8?q?version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/busy-clowns-deny.md | 7 ------- README.md | 11 ++++++++++- packages/core/CHANGELOG.md | 7 +++++++ packages/core/README.md | 26 +++++++++++++++++++++++++- packages/core/package.json | 2 +- packages/koa/CHANGELOG.md | 12 ++++++++++++ packages/koa/README.md | 9 ++++++++- packages/koa/package.json | 3 +-- packages/next/CHANGELOG.md | 12 ++++++++++++ packages/next/README.md | 8 +++++++- packages/next/package.json | 2 +- 11 files changed, 84 insertions(+), 15 deletions(-) delete mode 100644 .changeset/busy-clowns-deny.md create mode 100644 packages/core/CHANGELOG.md create mode 100644 packages/koa/CHANGELOG.md create mode 100644 packages/next/CHANGELOG.md diff --git a/.changeset/busy-clowns-deny.md b/.changeset/busy-clowns-deny.md deleted file mode 100644 index 7a8955a..0000000 --- a/.changeset/busy-clowns-deny.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@naverpay/prometheus-core": major -"@naverpay/prometheus-koa": major -"@naverpay/prometheus-next": major ---- - -prometheus exporter 패키지를 출시합니다. diff --git a/README.md b/README.md index 556a488..9fe1e73 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,11 @@ Prometheus 메트릭 수집 및 내보내기를 위한 TypeScript 라이브러 이 모노레포는 다음과 같은 패키지들로 구성되어 있습니다: ### 📦 [@naverpay/prometheus-core](./packages/core) + 핵심 Prometheus 유틸리티 및 PM2 통합 기능을 제공하는 기본 패키지입니다. **주요 기능:** + - Prometheus 히스토그램 및 게이지 메트릭 등록 - PM2 프로세스 간 메트릭 수집 및 집계 - Next.js 라우트 정규화 @@ -17,18 +19,22 @@ Prometheus 메트릭 수집 및 내보내기를 위한 TypeScript 라이브러 - 기본 Node.js 메트릭 수집 ### 📦 [@naverpay/prometheus-koa](./packages/koa) + Koa.js 프레임워크용 Prometheus 미들웨어 및 라우터를 제공합니다. **주요 기능:** + - HTTP 요청 메트릭 수집 미들웨어 - 메트릭 엔드포인트 라우터 - API 트레이싱 미들웨어 - 요청 경로 정규화 지원 ### 📦 [@naverpay/prometheus-next](./packages/next) + Next.js 애플리케이션용 통합 서버 솔루션을 제공합니다. **주요 기능:** + - 메트릭 수집이 통합된 Next.js 서버 - 자동 라우트 패턴 매칭 - PM2 클러스터 환경 지원 @@ -89,21 +95,25 @@ server.listen(3000) 각 패키지는 다음과 같은 메트릭을 수집합니다: ### HTTP 요청 메트릭 + - **메트릭명**: `http_request_duration_seconds` - **타입**: Histogram - **라벨**: `status_code`, `method`, `path` ### API 요청 메트릭 (Koa API 트레이싱) + - **메트릭명**: `http_api_request_duration_seconds` - **타입**: Histogram - **라벨**: `path`, `status`, `method` ### 서비스 상태 메트릭 + - **메트릭명**: `up` - **타입**: Gauge - **설명**: 서비스 가용성 (1 = 실행 중, 0 = 중단) ### 기본 Node.js 메트릭 + - CPU 사용률 - 메모리 사용량 - 이벤트 루프 지연 @@ -273,4 +283,3 @@ pnpm markdownlint:fix ## 라이선스 이 템플릿은 네이버 파이낸셜 유저플랫폼 산하 공통개발TF (@NaverPayDev/frontend)에 의해 관리되며, 해당 라이선스 정책을 따릅니다. - diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md new file mode 100644 index 0000000..478381c --- /dev/null +++ b/packages/core/CHANGELOG.md @@ -0,0 +1,7 @@ +# @naverpay/prometheus-core + +## 1.0.0 + +### Major Changes + +- 557e235: prometheus exporter 패키지를 출시합니다. diff --git a/packages/core/README.md b/packages/core/README.md index 1b23b01..4d5e8ff 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -11,20 +11,24 @@ npm install @naverpay/prometheus-core ## 주요 기능 ### 🎯 메트릭 관리 + - **히스토그램 등록**: HTTP 요청 지속시간 등을 측정하는 히스토그램 메트릭 생성 - **트레이싱**: 요청 시작부터 종료까지의 시간 측정 및 라벨 관리 - **게이지 메트릭**: 서비스 상태 표시를 위한 업타임 게이지 ### 🔄 PM2 클러스터 지원 + - **프로세스 간 통신**: PM2 message bus를 통한 메트릭 수집 - **메트릭 집계**: 여러 워커 프로세스의 메트릭을 자동으로 집계 - **연결 관리**: PM2 연결 생성 및 해제 ### 🛣️ Next.js 통합 + - **라우트 정규화**: Next.js 라우트 매니페스트를 활용한 동적 라우트 그룹화 - **정적 파일 처리**: Next.js 정적 파일 요청 분류 ### 🚦 유틸리티 + - **경로 필터링**: 헬스체크, 메트릭 엔드포인트 등 불필요한 요청 제외 - **상태 코드 그룹화**: HTTP 상태 코드를 메트릭 수집에 적합한 형태로 변환 @@ -33,6 +37,7 @@ npm install @naverpay/prometheus-core ### 메트릭 관리 #### `registerHistogram(type, name, labelNames, buckets?)` + 새로운 히스토그램 메트릭을 등록합니다. ```typescript @@ -47,6 +52,7 @@ registerHistogram( ``` #### `startTraceHistogram(type, labelValues)` + 히스토그램 타이머를 시작합니다. ```typescript @@ -63,6 +69,7 @@ endTraceHistogram(trace, { status_code: '200' }) ``` #### `registerGaugeUp(prefix?)` + 서비스 상태를 나타내는 up 게이지를 등록합니다. ```typescript @@ -74,6 +81,7 @@ registerGaugeUp('myservice_') // myservice_up 메트릭 생성 ### PM2 커넥터 #### `pm2Connector.connect()` + PM2 message bus에 연결합니다. ```typescript @@ -83,6 +91,7 @@ await pm2Connector.connect() ``` #### `pm2Connector.getMetrics()` + 모든 PM2 프로세스의 메트릭을 수집하고 집계합니다. ```typescript @@ -91,6 +100,7 @@ console.log(metrics) // Prometheus 형식의 메트릭 문자열 ``` #### `pm2Connector.disconnect()` + PM2 연결을 해제하고 메트릭 레지스트리를 초기화합니다. ```typescript @@ -100,6 +110,7 @@ await pm2Connector.disconnect() ### Next.js 유틸리티 #### `getNextRoutesManifest()` + Next.js 라우트 매니페스트 파일을 읽어 파싱합니다. ```typescript @@ -109,6 +120,7 @@ const { basePath, routes } = getNextRoutesManifest() ``` #### `createNextRoutesUrlGroup()` + Next.js URL을 라우트 패턴으로 정규화하는 함수를 생성합니다. ```typescript @@ -122,6 +134,7 @@ console.log(normalizeUrl('/api/data.json')) // 'STATIC' ### 유틸리티 함수 #### `isBypassPath(path)` + 경로가 메트릭 수집에서 제외되어야 하는지 확인합니다. ```typescript @@ -134,6 +147,7 @@ console.log(isBypassPath('/api/users')) // false ``` #### `getStatusCodeGroup(statusCode)` + HTTP 상태 코드를 메트릭 수집용으로 그룹화합니다. ```typescript @@ -146,6 +160,7 @@ console.log(getStatusCodeGroup(500)) // 500 ``` #### `enableCollectDefaultMetrics()` + Node.js 기본 메트릭 수집을 활성화합니다. ```typescript @@ -158,19 +173,25 @@ enableCollectDefaultMetrics() ## 상수 ### `DEFAULT_METRICS_PATH` + 기본 메트릭 엔드포인트 경로입니다. + ```typescript console.log(DEFAULT_METRICS_PATH) // '/metrics' ``` ### `BUCKETS` + 기본 히스토그램 버킷 설정입니다. + ```typescript console.log(BUCKETS) // [0.1, 0.3, 0.95, 1.2, 3, 5, 7, 9, 10, 20, 30, 40, 50, 60, 70] ``` ### `DEFAULT_METRICS_TYPE` + 기본 메트릭 타입 열거형입니다. + ```typescript console.log(DEFAULT_METRICS_TYPE.HTTP_REQUEST) // 'http_request' console.log(DEFAULT_METRICS_TYPE.HTTP_API_REQUEST) // 'http_api_request' @@ -244,6 +265,7 @@ async function handleRequest(req, res) { ## 타입 정의 ### `CommonPrometheusExporterOptions` + ```typescript interface CommonPrometheusExporterOptions { /** PM2 클러스터링 지원 활성화 여부 */ @@ -258,11 +280,13 @@ interface CommonPrometheusExporterOptions { ``` ### `PM2MessageHandler` + ```typescript type PM2MessageHandler = (data: T) => Promise | R ``` ### `PM2GetMessageOptions` + ```typescript interface PM2GetMessageOptions { /** 프로세스 필터 함수 */ @@ -282,4 +306,4 @@ interface PM2GetMessageOptions { ## 라이센스 -MIT License \ No newline at end of file +MIT License diff --git a/packages/core/package.json b/packages/core/package.json index e0f3402..de2c80d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@naverpay/prometheus-core", - "version": "0.0.0", + "version": "1.0.0", "description": "Core utilities for Prometheus monitoring and metrics collection.", "keywords": [ "prometheus", diff --git a/packages/koa/CHANGELOG.md b/packages/koa/CHANGELOG.md new file mode 100644 index 0000000..80a3611 --- /dev/null +++ b/packages/koa/CHANGELOG.md @@ -0,0 +1,12 @@ +# @naverpay/prometheus-koa + +## 1.0.0 + +### Major Changes + +- 557e235: prometheus exporter 패키지를 출시합니다. + +### Patch Changes + +- Updated dependencies [557e235] + - @naverpay/prometheus-core@1.0.0 diff --git a/packages/koa/README.md b/packages/koa/README.md index bfdc639..10a68b2 100644 --- a/packages/koa/README.md +++ b/packages/koa/README.md @@ -11,21 +11,25 @@ npm install @naverpay/prometheus-koa ## 주요 기능 ### 🎯 HTTP 메트릭 수집 + - **요청 지속시간**: 모든 HTTP 요청의 응답 시간 측정 - **자동 라벨링**: 상태 코드, HTTP 메서드, 경로 자동 수집 - **경로 정규화**: 동적 라우트를 패턴으로 그룹화 ### 🚦 스마트 필터링 + - **자동 바이패스**: 헬스체크, 메트릭 엔드포인트 등 자동 제외 - **커스텀 필터**: 사용자 정의 바이패스 로직 지원 - **Next.js 지원**: Next.js 정적 파일 및 라우트 자동 처리 ### 📊 API 트레이싱 + - **전용 API 메트릭**: API 엔드포인트 전용 세밀한 모니터링 - **커스텀 상태 처리**: 비즈니스 로직 기반 상태 분류 - **404 핸들링**: API 미매칭 요청 자동 처리 ### 🔧 유연한 설정 + - **경로 정규화**: 커스텀 경로 그룹화 함수 - **상태 코드 포맷팅**: 사용자 정의 상태 분류 - **PM2 통합**: 클러스터 환경에서 메트릭 집계 @@ -280,6 +284,7 @@ apiRouter.all('(.*)', endApiTrace) 모든 HTTP 요청의 응답 시간을 히스토그램으로 수집합니다. **라벨:** + - `status_code`: HTTP 상태 코드 (그룹화됨) - `method`: HTTP 메서드 (GET, POST, etc.) - `path`: 정규화된 요청 경로 @@ -289,6 +294,7 @@ apiRouter.all('(.*)', endApiTrace) API 트레이싱 미들웨어가 활성화된 경우 수집됩니다. **라벨:** + - `path`: 정규화된 API 경로 - `status`: 응답 상태 - `method`: HTTP 메서드 @@ -296,6 +302,7 @@ API 트레이싱 미들웨어가 활성화된 경우 수집됩니다. ### 서비스 상태 메트릭 (`up`) 서비스 가용성을 나타내는 게이지 메트릭입니다. + - `1`: 서비스 실행 중 - `0`: 서비스 중단 @@ -401,4 +408,4 @@ app.use(metricsRouter.routes()) // 마지막에 추가 ## 라이센스 -MIT License \ No newline at end of file +MIT License diff --git a/packages/koa/package.json b/packages/koa/package.json index 4fb6114..462b0ae 100644 --- a/packages/koa/package.json +++ b/packages/koa/package.json @@ -1,6 +1,6 @@ { "name": "@naverpay/prometheus-koa", - "version": "0.0.0", + "version": "1.0.0", "description": "Koa middleware for Prometheus metrics integration.", "keywords": [ "koa", @@ -53,5 +53,4 @@ "@koa/router": ">=14.0.0" }, "packageManager": "pnpm@10.6.5" - } diff --git a/packages/next/CHANGELOG.md b/packages/next/CHANGELOG.md new file mode 100644 index 0000000..805b0f7 --- /dev/null +++ b/packages/next/CHANGELOG.md @@ -0,0 +1,12 @@ +# @naverpay/prometheus-next + +## 1.0.0 + +### Major Changes + +- 557e235: prometheus exporter 패키지를 출시합니다. + +### Patch Changes + +- Updated dependencies [557e235] + - @naverpay/prometheus-core@1.0.0 diff --git a/packages/next/README.md b/packages/next/README.md index e85fca5..ad890fc 100644 --- a/packages/next/README.md +++ b/packages/next/README.md @@ -11,21 +11,25 @@ npm install @naverpay/prometheus-next ## 주요 기능 ### 🚀 통합 서버 + - **올인원**: Next.js 서버와 메트릭 수집이 하나의 서버로 통합 - **자동 설정**: 메트릭 수집을 위한 별도 설정 없이 즉시 사용 가능 - **내장 엔드포인트**: `/metrics` 엔드포인트 자동 생성 ### 🎯 Next.js 최적화 + - **라우트 정규화**: Next.js 라우트 매니페스트 기반 자동 경로 그룹화 - **정적 파일 처리**: `_next/` 및 정적 파일 요청 자동 분류 - **동적 라우트**: `[id]`, `[...slug]` 등 동적 라우트 자동 인식 ### 🔄 PM2 클러스터 지원 + - **멀티 프로세스**: PM2 클러스터 환경에서 메트릭 자동 집계 - **분산 수집**: 각 워커 프로세스의 메트릭을 통합 - **고가용성**: 프로세스 장애 시에도 다른 프로세스의 메트릭 수집 지속 ### 🚦 스마트 필터링 + - **자동 바이패스**: 웹팩 HMR, 중복 슬래시 등 자동 제외 - **커스텀 필터**: 사용자 정의 바이패스 로직 지원 - **성능 최적화**: 불필요한 요청의 메트릭 수집 방지 @@ -356,11 +360,13 @@ start().catch(console.error) 모든 HTTP 요청의 응답 시간을 히스토그램으로 수집합니다. **라벨:** + - `status_code`: HTTP 상태 코드 그룹 - `method`: HTTP 메서드 - `path`: 정규화된 요청 경로 **예시 메트릭:** + ``` http_request_duration_seconds_bucket{status_code="200",method="GET",path="/",le="0.1"} 145 http_request_duration_seconds_bucket{status_code="200",method="GET",path="/user/[id]",le="0.5"} 23 @@ -481,4 +487,4 @@ PM2 클러스터 환경에서는 자동으로 메트릭이 집계됩니다. 개 ## 라이센스 -MIT License \ No newline at end of file +MIT License diff --git a/packages/next/package.json b/packages/next/package.json index d854959..b7b873c 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "@naverpay/prometheus-next", - "version": "0.0.0", + "version": "1.0.0", "description": "Next.js integration server with Prometheus metrics collection and PM2 cluster support.", "keywords": [ "nextjs", From 6d887396cd826bcb3ff3bddc1137776bcbeb9d28 Mon Sep 17 00:00:00 2001 From: oneweek-lee Date: Fri, 10 Oct 2025 22:40:19 +0900 Subject: [PATCH 2/2] root package.json prettier fix --- package.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 4f5f2cd..9aae84e 100644 --- a/package.json +++ b/package.json @@ -16,20 +16,20 @@ "author": "@NaverPayDev/frontend", "type": "module", "scripts": { - "build": "turbo run build", - "clean": "turbo run clean && rm -rf ./node_modules && pnpm i", - "postinstall": "lefthook install", - "lint": "eslint . --cache --cache-location .cache/.eslintcache", - "lint:fix": "pnpm run lint --fix", - "markdownlint": "markdownlint '**/*.md' '#.changeset' '#**/CHANGELOG.md'", - "markdownlint:fix": "markdownlint --fix '**/*.md' '#.changeset' '#**/CHANGELOG.md'", - "prettier": "prettier --check . --cache --cache-location .cache/.prettiercache", - "prettier:fix": "prettier --write . --cache --cache-location .cache/.prettiercache", - "release": "pnpm run build && changeset publish", - "release:canary": "pnpm run build && changeset publish --no-git-tag", - "test": "turbo run test", - "typecheck": "turbo run typecheck" - }, + "build": "turbo run build", + "clean": "turbo run clean && rm -rf ./node_modules && pnpm i", + "postinstall": "lefthook install", + "lint": "eslint . --cache --cache-location .cache/.eslintcache", + "lint:fix": "pnpm run lint --fix", + "markdownlint": "markdownlint '**/*.md' '#.changeset' '#**/CHANGELOG.md'", + "markdownlint:fix": "markdownlint --fix '**/*.md' '#.changeset' '#**/CHANGELOG.md'", + "prettier": "prettier --check . --cache --cache-location .cache/.prettiercache", + "prettier:fix": "prettier --write . --cache --cache-location .cache/.prettiercache", + "release": "pnpm run build && changeset publish", + "release:canary": "pnpm run build && changeset publish --no-git-tag", + "test": "turbo run test", + "typecheck": "turbo run typecheck" + }, "lint-staged": { "**/*.{js,jsx,ts,tsx}": [ "prettier --write",