본문 바로가기
Dart/Dart Server

[고급] Dart 서버 성능 모니터링 및 로깅 / Dart 서버에서의 로깅 및 로그 분석 (Loggly, ElasticSearch 등)

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

 

서버 애플리케이션의 로깅은 문제를 진단하고 성능을 분석하는 데 중요한 역할을 합니다.

로그를 체계적으로 수집하고 분석할 수 있는 도구를 사용하면 서버의 상태를 쉽게 모니터링하고 문제를 빠르게 해결할 수 있습니다.

이번 블로그에서는 Dart 서버 애플리케이션에서 LogglyElasticSearch를 사용하여 로그를 수집하고 분석하는 방법을 초보자가 이해하기 쉽게 설명하겠습니다.

1. 로깅 개요

로깅은 서버 애플리케이션이 동작하면서 발생하는 사건을 기록하는 과정입니다.

이러한 로그는 문제를 추적하고, 시스템 성능을 분석하며, 보안 문제를 식별하는 데 사용됩니다. 일반적으로 로그는 다음과 같은 정보를 포함합니다.

  • 로그 레벨: 정보, 경고, 오류 등
  • 타임스탬프: 로그가 기록된 시간
  • 메시지: 로그의 내용

LogglyElasticSearch는 로그를 수집하고 분석하는 데 도움을 주는 도구입니다. Loggly는 클라우드 기반의 로그 관리 서비스이며, ElasticSearch는 강력한 검색 및 분석 엔진입니다.

이 두 도구를 함께 사용하면 로그를 효율적으로 관리하고 분석할 수 있습니다.

2. Dart 서버 애플리케이션에 로깅 설정하기

Dart에서는 logging 패키지를 사용하여 로그를 기록할 수 있습니다. 이 패키지를 사용하면 로그 레벨을 설정하고, 로그를 파일이나 콘솔에 출력할 수 있습니다.

logging 패키지 설치하기

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

dependencies:
  logging: ^1.0.2

 

2. 의존성을 설치합니다.

dart pub get

Dart 서버 애플리케이션에 로깅 설정하기

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

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

final _logger = Logger('ServerLogger');

void main() {
  // 로깅 레벨 설정
  Logger.root.level = Level.ALL; // 모든 로그 레벨을 기록합니다.
  Logger.root.onRecord.listen((record) {
    print('${record.level.name}: ${record.time}: ${record.message}');
  });

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

    httpServer.listen((HttpRequest request) {
      _logger.info('요청이 ${request.uri.path} 경로로 수신되었습니다.');
      request.response
        ..write('안녕하세요! Dart 서버입니다.')
        ..close();
    });
  }).catchError((e) {
    _logger.severe('서버 실행 오류: $e');
  });
}

설명

  • logging 패키지를 사용하여 Logger 객체를 생성합니다.
  • Logger.root.level을 Level.ALL로 설정하여 모든 로그 레벨을 기록하도록 합니다.
  • Logger.root.onRecord.listen을 사용하여 로그 레코드를 콘솔에 출력합니다.
  • 서버의 시작과 HTTP 요청을 처리할 때 로그를 기록합니다.

3. Loggly와 연동하기

Loggly는 클라우드 기반의 로그 관리 서비스로, 로그를 수집하고 분석할 수 있는 강력한 도구입니다.

Dart 애플리케이션에서 Loggly로 로그를 전송하려면 HTTP POST 요청을 사용합니다.

Loggly 설정하기

  1. Loggly 계정 생성: Loggly 웹사이트에서 계정을 생성합니다.
  2. Loggly 인덱스와 토큰 설정: Loggly 대시보드에서 인덱스와 토큰을 생성합니다.

Dart에서 Loggly로 로그 전송하기

아래는 Dart 서버 애플리케이션에서 Loggly로 로그를 전송하는 코드 예제입니다.

import 'dart:convert';
import 'dart:io';
import 'package:logging/logging.dart';

final _logger = Logger('ServerLogger');
final _logglyUrl = 'https://logs-01.loggly.com/inputs/YOUR_LOGGLY_TOKEN/tag/http/';

void main() {
  // 로깅 레벨 설정
  Logger.root.level = Level.ALL; // 모든 로그 레벨을 기록합니다.
  Logger.root.onRecord.listen((record) {
    _sendToLoggly('${record.level.name}: ${record.time}: ${record.message}');
  });

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

    httpServer.listen((HttpRequest request) {
      _logger.info('요청이 ${request.uri.path} 경로로 수신되었습니다.');
      request.response
        ..write('안녕하세요! Dart 서버입니다.')
        ..close();
    });
  }).catchError((e) {
    _logger.severe('서버 실행 오류: $e');
  });
}

void _sendToLoggly(String message) {
  final request = HttpRequest(
    'POST',
    _logglyUrl,
    body: json.encode({'message': message}),
  );
  request.headers.set('Content-Type', 'application/json');
  request.send();
}

설명:

  • _sendToLoggly 함수를 정의하여 로그 메시지를 Loggly로 전송합니다.
  • HttpRequest 객체를 사용하여 Loggly의 API 엔드포인트로 HTTP POST 요청을 보냅니다.
  • 로그 메시지를 JSON 형식으로 전송합니다.

4. ElasticSearch와 Kibana 설정하기

ElasticSearch는 분산형 검색 및 분석 엔진이며, Kibana는 ElasticSearch의 데이터를 시각화하는 도구입니다. 이 둘을 함께 사용하면 로그 데이터를 효과적으로 검색하고 분석할 수 있습니다.

ElasticSearch와 Kibana 설치하기

  1. ElasticSearch 설치하기
  2. Kibana 설치하기

ElasticSearch와 Kibana 설정하기

  1. Dart 애플리케이션에서 ElasticSearch로 로그 전송하기
  2. 로그를 ElasticSearch로 전송하기 위해 http 패키지를 사용할 수 있습니다. pubspec.yaml 파일에 http 패키지를 추가합니다.
dependencies:
  http: ^0.15.0

아래는 Dart 서버 애플리케이션에서 ElasticSearch로 로그를 전송하는 예제 코드입니다.

import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:logging/logging.dart';

final _logger = Logger('ServerLogger');
final _elasticsearchUrl = 'http://localhost:9200/logs/_doc/';

void main() {
  // 로깅 레벨 설정
  Logger.root.level = Level.ALL; // 모든 로그 레벨을 기록합니다.
  Logger.root.onRecord.listen((record) {
    _sendToElasticsearch('${record.level.name}: ${record.time}: ${record.message}');
  });

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

    httpServer.listen((HttpRequest request) {
      _logger.info('요청이 ${request.uri.path} 경로로 수신되었습니다.');
      request.response
        ..write('안녕하세요! Dart 서버입니다.')
        ..close();
    });
  }).catchError((e) {
    _logger.severe('서버 실행 오류: $e');
  });
}

void _sendToElasticsearch(String message) async {
  final response = await http.post(
    Uri.parse(_elasticsearchUrl),
    headers: {'Content-Type': 'application/json'},
    body: json.encode({'message': message}),
  );

  if (response.statusCode != 201) {
    print('ElasticSearch로 로그 전송 실패: ${response.status
   }
}

 

설명

  • _sendToElasticsearch 함수를 사용하여 ElasticSearch에 로그를 전송합니다.
  • http.post 메서드를 사용하여 ElasticSearch의 REST API 엔드포인트로 HTTP POST 요청을 보냅니다.
  • 로그 메시지를 JSON 형식으로 전송합니다.

2. Kibana에서 로그 시각화하기

  • Kibana 웹 인터페이스에 접속하여 ElasticSearch의 로그 데이터를 시각화할 수 있습니다.
  • 인덱스 패턴을 설정하여 로그 데이터를 Kibana에서 검색하고 분석할 수 있습니다.
  • 대시보드를 생성하여 다양한 시각화 요소(차트, 그래프 등)를 추가합니다.

서버 애플리케이션의 로그를 효과적으로 관리하고 분석하는 것은 시스템의 안정성과 성능을 유지하는 데 매우 중요합니다. LogglyElasticSearch는 로그 수집 및 분석에 강력한 도구를 제공합니다. 이 블로그에서는 Dart 서버 애플리케이션에서 로깅을 설정하고, Loggly 및 ElasticSearch와 연동하는 방법을 초보자가 이해할 수 있도록 설명했습니다.

  • Loggly: 클라우드 기반 로그 관리 서비스
  • ElasticSearch: 강력한 검색 및 분석 엔진
  • Kibana: ElasticSearch 데이터를 시각화하는 도구

이제 Dart 서버 애플리케이션에서 로그를 체계적으로 수집하고 분석하여 시스템의 문제를 신속하게 해결할 수 있습니다!

 

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

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

 

 

 

 

728x90
반응형