본문 바로가기
Dart/Dart Server

[고급] Dart 서버 성능 모니터링 및 로깅 / 서버 애플리케이션의 성능 모니터링 도구 설정 (Prometheus, Grafana 등)

by Maccrey Coding 2024. 9. 17.
반응형

 

서버 애플리케이션의 성능을 모니터링하고 적절한 로깅을 설정하는 것은 안정적이고 효율적인 서비스 운영의 핵심입니다.

PrometheusGrafana는 서버 성능을 모니터링하고 시각화하는 데 널리 사용되는 도구입니다.

이번 블로그에서는 초보자가 이해할 수 있도록 Dart 서버 애플리케이션에서 Prometheus와 Grafana를 설정하는 방법을 설명하겠습니다.

1. Prometheus와 Grafana 개요

Prometheus: 오픈 소스 모니터링 및 경고 시스템입니다. 시계열 데이터를 수집하고 저장하며, 이를 쿼리하고 시각화하는 데 강력한 기능을 제공합니다.

 

Grafana: 데이터를 시각화하고 대시보드를 생성할 수 있는 오픈 소스 도구입니다. Prometheus와 같은 데이터 소스에서 데이터를 가져와 그래프와 차트로 표현할 수 있습니다.

이 두 도구를 함께 사용하면 Dart 서버 애플리케이션의 성능을 효과적으로 모니터링하고 시각화할 수 있습니다.

2. Dart 서버에 Prometheus Exporter 설정하기

Prometheus는 데이터 수집을 위해 Exporter를 사용합니다. Dart 애플리케이션에서 Prometheus Exporter를 설정하여 서버의 메트릭을 수집할 수 있습니다.

Dart Prometheus Exporter 패키지 설치하기

1. 패키지 추가: pubspec.yaml 파일에 prometheus_client 패키지를 추가합니다.

dependencies:
  prometheus_client: ^0.8.0

 

2. 패키지 설치: 의존성을 설치합니다.

dart pub get

Dart 서버 애플리케이션에 Prometheus Exporter 설정하기

아래는 Dart 서버 애플리케이션에 Prometheus Exporter를 설정하는 예제 코드입니다.

import 'dart:io';
import 'package:prometheus_client/prometheus_client.dart';

final _httpRequestsTotal = Counter(
  'http_requests_total',
  'Total number of HTTP requests received.',
);

void main() {
  // Prometheus 메트릭을 제공할 HTTP 서버를 9091 포트에서 실행합니다.
  final metricsServer = HttpServer.bind(InternetAddress.anyIPv4, 9091);
  metricsServer.then((HttpServer httpServer) {
    print('Metrics 서버가 ${httpServer.address.address}:${httpServer.port}에서 실행 중입니다.');

    httpServer.listen((HttpRequest request) {
      if (request.uri.path == '/metrics') {
        request.response
          ..write(_httpRequestsTotal.collect())
          ..close();
      } else {
        request.response
          ..statusCode = HttpStatus.notFound
          ..close();
      }
    });
  }).catchError((e) {
    print('Metrics 서버 실행 오류: $e');
  });

  // 메인 HTTP 서버를 8080 포트에서 실행합니다.
  final server = HttpServer.bind(InternetAddress.anyIPv4, 8080);
  server.then((HttpServer httpServer) {
    print('서버가 ${httpServer.address.address}:${httpServer.port}에서 실행 중입니다.');

    httpServer.listen((HttpRequest request) {
      _httpRequestsTotal.inc();
      request.response
        ..write('안녕하세요! Dart 서버입니다.')
        ..close();
    });
  }).catchError((e) {
    print('서버 실행 오류: $e');
  });
}

설명

  • prometheus_client 패키지를 사용하여 메트릭을 정의하고 수집합니다.
  • Counter를 사용하여 HTTP 요청 수를 세는 메트릭을 정의합니다.
  • 두 개의 HTTP 서버를 설정하여 하나는 메트릭을 제공하고, 다른 하나는 애플리케이션의 실제 기능을 제공합니다.

3. Prometheus 설정하기

Prometheus는 메트릭을 수집하고 저장하기 위한 설정이 필요합니다.

Prometheus 설치하기

  1. Prometheus 공식 웹사이트에서 Prometheus를 다운로드합니다.
  2. 압축을 풀고, prometheus.yml 파일을 수정하여 설정을 정의합니다.

Prometheus 설정 파일 예제 (prometheus.yml)

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'dart-server'
    static_configs:
      - targets: ['localhost:9091']

설명

  • scrape_interval: Prometheus가 메트릭을 수집하는 주기를 설정합니다.
  • scrape_configs: Prometheus가 메트릭을 수집할 대상을 정의합니다. 여기서는 Dart 서버에서 제공하는 메트릭을 9091 포트에서 수집합니다.

Prometheus 실행하기

1. 설정 파일이 있는 디렉토리에서 Prometheus를 실행합니다.

./prometheus --config.file=prometheus.yml

 

2. 웹 브라우저에서 http://localhost:9090으로 접속하여 Prometheus 웹 인터페이스에 접속합니다. targets 메뉴에서 설정한 메트릭 소스가 정상적으로 작동하는지 확인할 수 있습니다.

4. Grafana 설정하기

Grafana는 Prometheus에서 수집한 메트릭을 시각화하는 도구입니다.

Grafana 설치하기

  1. Grafana 공식 웹사이트에서 Grafana를 다운로드합니다.
  2. 다운로드한 파일을 압축 해제하고, Grafana를 실행합니다.

Grafana 설정하기

  1. 웹 브라우저에서 http://localhost:3000으로 접속하여 Grafana 웹 인터페이스에 접속합니다.
  2. 로그인 후, 데이터 소스를 추가합니다.
    • "Add your first data source"를 클릭합니다.
    • Prometheus를 선택하고, URL을 http://localhost:9090으로 설정합니다.
    • "Save & Test"를 클릭하여 연결을 확인합니다.
  3. 대시보드를 생성하여 시각화를 설정합니다.
    • "Create" 버튼을 클릭하고 "Dashboard"를 선택합니다.
    • "Add new panel"을 클릭하고, Prometheus 쿼리를 사용하여 메트릭을 시각화합니다.
    예를 들어, HTTP 요청 수를 시각화하려면 http_requests_total을 쿼리하여 차트로 표시할 수 있습니다.

 

Dart 서버 애플리케이션의 성능을 모니터링하고 로깅을 설정하는 것은 안정적이고 효율적인 서버 운영을 위해 필수적입니다. PrometheusGrafana를 사용하면 메트릭을 수집하고 시각화하여 서버의 성능을 효과적으로 모니터링할 수 있습니다.

  • Prometheus: 메트릭 수집 및 저장
  • Grafana: 메트릭 시각화 및 대시보드 생성

이제 여러분도 Dart 서버 애플리케이션에서 Prometheus와 Grafana를 설정하여 성능을 모니터링하고, 실시간으로 데이터를 시각화하여 서버의 상태를 파악해 보세요!

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

반응형