프로덕션 환경에서 Node.js-- 오픈 소스 모니터링 도구 [번역]

당신은 Node.js 애플리케이션의 가장 중요한 기능이있을 수 있습니다에 대해 어떻게 생각하십니까? 팬시 텍스트는 소켓이 퍼지 일치 검색 또는 실시간 채팅입니까? 당신은 내가 응용 프로그램은 가장 높은 수준에 추가 할 수 있습니다 Node.js를 말해 줄 수, 가장 놀라운 가장 매력적인 기능은 어떤가요?

나는 무엇을 알고 싶어? 높은 성능과 중단없는 서비스 . 고성능 응용 프로그램은 다음과 같은 세 가지 사항을 할 필요가 :

  1. 최소한의 다운 타임;
  2. 예측 가능한 자원 사용;
  3. 유효한 확장을 부하에 따라

Part 1에서는 Node.js를가 핵심 지표를 모니터링하기 위해 , 우리는 당신이 응용 프로그램의 작동 상태를 이해하기 위해 Node.js를 모니터링해야하는 주요 지표에 대해 설명합니다. 또한 Node.js를의 잘못된 관행 당신은 스레드를 차단로서, 방지하고 메모리 누수의 원인이 일부 영리한 트릭 오랜 시간이 될 것 같은 업무 프로세스 생성과 같은 애플리케이션의 성능과 클러스터 모듈의 사용을 개선하는 데 사용할 수 있습니다해야 설명 메인 스레드에서 분리 작업을 실행하는 실행하는 별도의 스레드를 사용합니다.

이 글에서는 다섯 가지 오픈 소스 모니터링 도구 Node.js를 응용 프로그램을 사용하는 방법에 대해 설명합니다. 그들은 좋아하지 않을 수 Sematext또는 Datadog같은 완전한 기능을하지만, 그들은 오픈 소스 제품은 그 자체로 완전히 제어 할 수 있습니다.

Appmetrics

노드 애플리케이션 성능 지표가 실행 빌보드 디스플레이 데이터 Node.js를 응용 프로그램을 모니터링 할 수 있습니다. 이것은 간단한 모듈이며, Node.js를 입력 파일의 상단에있는 응용 프로그램을 초기화. 당신은 터미널에서 다음 명령을 실행하여 NPM에서 설치할 수 있습니다.

$ npm install appmetrics-dash
复制代码

Appmetrics는 매우 사용하기 쉬운 웹 대시 보드를 제공합니다. 응용 프로그램에 의해 생성 된 모든 대시 보드 HTTP 서비스를 얻기 위해, 당신이 (또는 기타 항목의 파일 이름)하기 만하면됩니다 app.js.에 다음 코드를 파일

// Before all other 'require' statements
require('appmetrics-dash').attach()
复制代码

이 요청 경로를 전달합니다 후 /appmetrics-dash유용한 지표를 많이 볼 수 있습니다.

  • CPU 프로파일 링
  • HTTP 수신 요청
  • HTTP 처리량
  • 평균 응답 시간 (5 전)
  • CPU
  • 기억
  • 힙 (힙)
  • 사이클 타임 이벤트 (이벤트 루프 타임즈)
  • 환경
  • 기타 요청
  • 아웃 바운드 HTTP 요청

이 도구뿐만 메트릭을 보여줍니다. 그것은 당신이 대시 보드에서 직접 보고서와 Node.js를 힙 스냅 샷 (힙 스냅 샷)을 생성 할 수 있습니다. 또한, 당신은 또한 불꽃 그래프, 아주 멋진 오픈 소스 도구를 사용할 수 있습니다.

익스프레스 상태 모니터

Express.js 현재 프레임 워크 Node.js.의 바람직한 현상이다 익스프레스 상태 모니터 는 Express 애플리케이션에 추가 할 수 있습니다, 아주 간단한 독립형 모듈입니다. 그것은이 개시 /statusSocket.io 및 Chart.js의 도움으로 보고서에 라우팅, 실시간 서버 메트릭을.

NPM에서 설치합니다.

$ npm install express-status-monitor
复制代码

모듈을 설치 한 후, 당신은 다른 미들웨어 또는 라우팅하기 전에 추가해야합니다.

app.use(require('express-status-monitor')())
复制代码

당신이 당신의 응용 프로그램을 실행하면, 당신은 할 수 /status귀하의 Node.js를 표시 경로를 확인합니다.

프로 메테우스

당신은 원시 시대에 살고하지 않는 한, 또는 당신이 들어 있어야합니다 프로 메테우스 . 이것은 우리가 오픈 소스 모니터링 도구를 사용할 수있는 가장 유명합니다. 오픈 소스로 프로 메테우스 100 % 지역 사회 중심. 모든 구성 요소는 아파치 2 라이센스 오픈 소스 라이센스 준수하고 GitHub의에서 다운로드 할 수 있습니다. 그것은 만들어 CNCF (기본 클라우드 컴퓨팅 재단) 관리 및 졸업 프로젝트의 구성원 하나를, 그는 프로젝트의 같은 멤버가 포함 말하는 KubernetesFluentd등등.

프로 메테우스 모니터를 시작하려면, 당신은 그것을 최신 버전을 다운로드하여 설치해야합니다.

$ tar xvfz prometheus-\*.tar.gz
$ cd prometheus-\*
复制代码

그리고 실행 파일을 실행하여 시작하지만이 명령을 실행하기 전에, 당신은 만들 필요가 prometheus.yml파일을. 이 지표는 HTTP 엔드 포인트 데이터를 잡아 모니터링하는 목표에 구성하기위한 구성 파일입니다.

# prometheus.yml
scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 1s
    static_configs:
      - targets: ['127.0.0.1:3000']
        labels:
          service: 'test-prom'
          group: 'production'
复制代码

이제 프로 메테우스를 사용할 수 있습니다.

$ ./prometheus --config.file=prometheus.yml
复制代码

하지만 난 게으른 해요, 난 정말 도커를 좋아한다. 그래서 내 방법은 공식 실행하는 것입니다 프로 메테우스 도커 이미지를 , 모든 문제를 피하기 위해 다운로드합니다.

프로 메테우스와 도커

Node.js를 응용 프로그램의 루트 디렉토리로, 우선. 여기에서, 생성 prometheus-data디렉토리와 prometheus.yml그 안에 파일. 이 작업이 완료되면, 프로 메테우스 도커 컨테이너를 실행합니다.

공식 프로 메테우스 도커 미러를 확보하고 고정 표시기 실행 명령을 사용하여 이미지를 실행합니다.

$ docker run -d \
    --name prometheus \
    --network="host" \
    -v "$(pwd)/prometheus-data":/prometheus-data \
    prom/prometheus \
    --config.file=/prometheus-data/prometheus.yml
复制代码

나는 용기가 프로 메테우스 기본 로컬 호스트 주소에 액세스 할 수 있도록 용기를 실행할 = "호스트"- 네트워크 사용하기로 결정했습니다, 그렇게함으로써, 기본 HTTP 포트에 액세스 할 수 있습니다 또한 응용 프로그램을 Node.js를. 당신은 프로 메테우스와 Node.js를 컨테이너에서 실행되는 것입니다 그렇지 않으면, 당신은 둘 개 사이에 구축하는 데 필요한 네트워크를 서로 서로 만이 액세스 할 수 있습니다.

-v에 대한 옵션 prometheus-data컨테이너에서 같은 이름의 디렉토리에 호스트에서 디렉토리 매핑.

프로 메테우스 컨테이너를 실행 한 후, 코드를 추가 할 필요가 배치 된 모니터 데이터 인터페이스를 노출하는 응용 프로그램을 Node.js를. 먼저 NPM에서 Node.js를 위해 설치해야하는 프로 메테우스 클라이언트 .

$ npm install prom-client
复制代码

그리고 프로 메테우스 관련 관련 구성 코드를 추가

// after all 'require' statements
const client = require('prom-client')
const collectDefaultMetrics = client.collectDefaultMetrics
collectDefaultMetrics({ timeout: 1000 })
app.get('/metrics', (req, res) => {
  res.set('Content-Type', client.register.contentType)
  res.end(client.register.metrics())
})
复制代码

를 통해 그럼 그냥, Node.js를 응용 한 후 실행 http://localhost:9090/graph하면 프로 메테우스 차트를 볼 수 있습니다

Clinic.js

Clinic.js을 진단하는 데 도움과 Node.js를 성능 문제를 파악하는 세 가지 도구가 포함되어 있습니다. 그것은 사용하기 매우 간단합니다. 당신은 NPM에서 모듈을 설치하고 실행 할 필요가있다. 문제 해결을 용이하게하는 것은 보고서를 생성합니다.

Clinic.js를 설치하려면 다음 명령을 사용하여

$ npm install clinic
复制代码

설치 후에는 보고서의 유형을 생성 할 수 있습니다. 당신은 보고서의 세 가지 유형을 선택할 수 있습니다.

  • 의사
    1. 프로브로 수집 사출 통계
    2. 건강과 휴리스틱 평가
    3. 수리 권장 사항을 제공합니다
  • 코드 Node.js를 분석 할 수있는 새로운, 완전히 독특한 방법을 Bubbleprof-
    1. 사용 async_hooks 메트릭을 수집
    2. 트레이싱 동작 간의 지연
    3. 버블 차트 만들기
  • 화염 - 화염 그래프는 열 경로의 병목 코드를 도시
    1. CPU 통계 샘플링하여 수집
    2. 스택의 주파수 추적 위로
    3. 불꽃 그림 만들기

의는 Node.js를 의사를 실행하자 응용 프로그램이 시작을 테스트합니다.

$ clinic doctor -- node app.js
复制代码

이 프로그램은 부하 테스트를 실행하는 압력 측정 도구의 사용을 실행합니다.

$ loadtest -n 1000 -c 100 [http://localhost:3000/api](http://localhost:3000/api)
复制代码

실행이 완료되면, 서버를 중지하고 Clinic.js 의사는 당신이 볼 수있는 보고서를 엽니 다.

같은 방법을 사용하면 Bubbleprof 또는 화염을 실행하고 해당 그래픽보고 도구를 얻을 수 있습니다.

PM2

PM2 쉽게 생산에 Node.js를 응용 프로그램을 실행합니다. 그것은 쉽게 클러스터 모드에서 응용 프로그램을 실행하도록 할 수 있습니다, 프로세스 관리자입니다. 인기, 각 CPU 코어에 대한 호스트로 프로세스를 생성합니다.

먼저 설치 PM2를

$ npm install pm2 -g
复制代码

설치가 완료되면 메인 소스 파일이 app.js 경우, 그것은 터미널에서이 명령을 실행하여 PM2 데몬을 생성하는 것입니다.

$ pm2 start app.js -i 0
复制代码

-i 0인스턴스의 국기 번호. 이 숫자 0 CPU 코어를 나타내는 클러스터 모드 Node.js를 응용 프로그램이 될 것입니다. 수동으로 원하는 번호를 입력하지만, PM2 핵심 업무 프로세스의 수를 계산하도록 자동으로 간단 적절한 수를 생성 할 수 있습니다.

사용 PM2보기 Node.js를 모니터링 데이터는 또한 매우 간단합니다

$ pm2 monit
复制代码

이 명령은 터미널에서 대시 보드를 엽니 다. 여기에서, 당신은 프로세스, 로그, 루프 지연, 프로세스 메모리와 CPU를 모니터링 할 수 있습니다.

Node.js를 포장에 대한 프로그램을 모니터링하는 오픈 소스 도구를 사용하여

고객 만족을위한 성과 지표는 필수적이다. 이 기사에서는 Node.js를 응용 프로그램을 추가 할 다섯 가지 오픈 소스 모니터링 도구를 사용하는 방법을 보여 주었다. 이 시리즈의 1 부에 대한 이해에서 Node.js를 모니터링하는 주요 지표의 실제 생활에 응용 프로그램을 모니터링 할 수있는 도구를 추가 한 후 자연 학습 과정이다. 이 시리즈의 마지막 부분은 소개 프로덕션 환경의 감독하에 Sematext Node.js를의 사용을 .

샘플 코드를 확인하려면, 여기에 모두 포함되어있다 코드 예제의 repo . 당신은 또한 아래로 복제하고 열 수있는 도구를 선택할 수 있습니다.

당신이 소프트웨어 관측보다 전체 스택이 필요한 경우, 확인 Sematext을 . 우리가 추진하는 오픈 소스 제품을 하고 영향을 미친다.

원문 : Node.js Open-Source Monitoring Tools

참고 자료

HTTPS : 재현 //juejin.im/post/5cf4f8bd6fb9a07ef562210c

추천

출처blog.csdn.net/weixin_34279246/article/details/91431332