SW/소프트웨어공학

텔레메트리 마스터하기: OpenTelemetry와 LGTM 스택의 모든 것

얇은생각 2025. 3. 27. 07:30
반응형

소프트웨어 버그가 눈에 보이지 않는 사이에 혼란을 일으키고, 작은 문제 하나가 큰 시스템을 붕괴시킬 수 있는 세상을 상상해 보세요. 하지만 디지털 세상에서는 꼭 그렇게 되지 않아도 됩니다. 오늘은 OpenTelemetry와 LGTM 스택을 활용해 소프트웨어 시스템을 모니터링하고 문제를 해결하며 성능을 최적화하는 방법을 알아보겠습니다. 이 강력한 조합은 여러분의 업무에 혁신을 가져다줄 수 있습니다. 준비되셨나요? 이제 텔레메트리 데이터를 수집하고 시각화하는 여정을 함께 시작해 봅시다.

이 블로그를 끝까지 읽으면 서버 설정부터 LGTM 스택 배포, 실시간 데이터 소스 연결까지 모든 것을 직접 해낼 수 있습니다.

 

텔레메트리 마스터하기: OpenTelemetry와 LGTM 스택의 모든 것

 

1. 텔레메트리가 중요한 이유

운전할 때 계기판이 없다면 속도나 남은 연료, 엔진 상태 등을 알 수 없겠죠? 소프트웨어도 마찬가지입니다. 텔레메트리 없이 소프트웨어를 운영하는 건 마치 눈을 가린 채 운전하는 것과 같습니다. 버그가 발생하거나 성능이 저하될 때 바로 원인을 파악하지 못하면 큰 문제가 될 수 있습니다.

텔레메트리는 메트릭, 로그, 트레이스라는 세 가지 핵심 데이터를 통해 소프트웨어를 효과적으로 모니터링할 수 있게 해줍니다. 스타트업의 간단한 앱이든 대규모 기업 소프트웨어든 텔레메트리 시스템은 사용자 불만에 즉각 대응하는 것과 미리 문제를 예방하는 것의 차이를 만듭니다.

이 가이드를 통해 여러분은 단순히 문제를 발견하는 것을 넘어 이해관계자들에게 시각화된 데이터를 통해 성과를 보여줄 수 있는 시스템을 구축할 수 있습니다.

 


 

2. OpenTelemetry와 LGTM 스택의 이해

현대 소프트웨어 관찰(Observability) 환경에서 OpenTelemetry와 LGTM 스택은 빼놓을 수 없는 키워드입니다. 그렇다면 이들이 정확히 무엇일까요?

 

OpenTelemetry란?

OpenTelemetry(OTel로 줄여 부르기도 함)는 소프트웨어의 로그, 메트릭, 트레이스와 같은 텔레메트리 데이터를 수집하는 오픈 소스 프레임워크입니다. 가장 큰 장점은 특정 벤더에 종속되지 않는다는 점으로, 어떤 프로그래밍 언어나 클라우드 서비스에서도 유연하게 사용할 수 있습니다.

 

LGTM 스택이란?

LGTM은 다음을 의미합니다:

  • L: Loki(로그 저장소)
  • G: Grafana(데이터 시각화 도구)
  • T: Tempo(트레이스 저장소)
  • M: Prometheus(메트릭 저장소)

 

이 스택은 OpenTelemetry를 통해 수집한 데이터를 각기 다른 데이터베이스에 저장하고, Grafana를 사용해 대시보드로 시각화하는 완벽한 모니터링 솔루션입니다.

 

각 구성 요소 간단 정리

  • Loki: 효율적으로 로그를 저장하고 쿼리할 수 있습니다.
  • Grafana: 대시보드와 알림을 생성할 수 있는 웹 기반 UI입니다.
  • Tempo: 분산된 트레이스를 수집하고 저장합니다.
  • Prometheus: 시간에 따라 변하는 메트릭 데이터를 다룹니다.

 


 

3. 기본 텔레메트리 개념: 메트릭, 로그, 트레이스

본격적인 설정에 들어가기 전에 텔레메트리 데이터를 이해해 봅시다.

 

메트릭(Metrics)

메트릭은 시간에 따라 변하는 숫자 데이터를 추적하는 것입니다. 예를 들어 CPU 사용량, 메모리 소비량, 요청 지연 시간 등을 모니터링할 수 있습니다. 메트릭은 시스템의 장기적인 트렌드를 파악하고 성능 저하의 징후를 사전에 발견하는 데 유용합니다.

 

로그(Logs)

로그는 소프트웨어 또는 시스템 내에서 발생하는 이벤트를 텍스트로 기록한 것입니다. 메트릭과 달리 구조화되어 있지 않지만, 특정 오류나 동작의 원인을 파악하는 데 중요한 정보를 제공합니다.

 

트레이스(Traces)

트레이스는 하나의 요청이 여러 서비스에 걸쳐 어떻게 처리되는지를 추적하는 것입니다. 이를 통해 어디에서 병목 현상이나 오류가 발생하는지 정확히 파악할 수 있습니다.

 


 

4. 가상 서버(VPS) 설정하기

모니터링 프레임워크를 구축하려면 서버가 필요합니다. 이번 가이드에서는 Hostinger에서 제공하는 Linux 가상 서버(VPS)를 사용할 것입니다.

 

Hostinger를 선택한 이유

Hostinger는 저렴하면서도 안정적인 VPS 솔루션을 제공합니다. 이번에 사용할 KVM 2 플랜은 월 $5.99로 24개월 약정 시 67% 할인된 가격에 제공됩니다. 이 플랜은 CPU 2개와 8GB RAM을 제공해 텔레메트리 시스템을 운영하기에 충분한 성능을 갖추고 있습니다.

 

1단계: VPS 인스턴스 생성

  1. Hostinger 계정에 가입합니다.
  2. KVM 2 플랜을 선택합니다.
  3. Ubuntu와 같은 Linux 운영 체제를 선택합니다.
  4. SSH 키를 설정하거나 루트 계정 비밀번호를 설정합니다.

 

2단계: 서버에 연결

서버가 준비되면 SSH를 사용해 연결합니다:

ssh root@서버의-아이피

 

이를 통해 서버의 관리자 권한을 얻고 소프트웨어 설치 및 구성을 시작할 수 있습니다.

 


 

5. Docker로 LGTM 스택 배포하기

모든 구성 요소를 개별적으로 설치하는 대신 Docker를 사용해 전체 프로세스를 간단히 진행할 수 있습니다. Docker는 격리된 컨테이너에서 애플리케이션을 실행하도록 도와줍니다.

 

1단계: Docker 설치

Docker가 설치되어 있지 않다면 다음 명령어로 설치할 수 있습니다:

apt update
apt install docker.io

 

설치 확인:

docker --version

 

2단계: LGTM Docker 이미지 실행

Grafana Labs에서 제공하는 사전 빌드된 Docker 이미지를 사용하면 간단히 설정할 수 있습니다. 다음 명령어를 실행하세요:

docker run -d -p 3000:3000 --name=lgtm grafana/otel-lgtm

 

이 명령어는 Docker Hub에서 이미지를 가져와 필요한 서비스를 시작합니다. 완료되면 다음 주소로 Grafana에 접속할 수 있습니다:

http://서버의-아이피:3000

 

기본 로그인 정보는 다음과 같습니다:

  • 사용자명: admin
  • 비밀번호: admin

 

로그인 후 비밀번호를 즉시 변경하는 것을 권장합니다.

 


 

6. 실시간 데이터 소스 통합하기

Grafana가 제대로 작동하려면 데이터가 필요합니다. OpenTelemetry를 통해 실시간 소스를 연결해 봅시다.

 

1단계: 데이터 소스 설정

Grafana의 설정 > 데이터 소스로 이동해 Loki, Prometheus, Tempo를 추가합니다. 기본적으로 이 서비스들은 Docker 컨테이너 내에서 이미 실행 중입니다.

 

2단계: 샘플 애플리케이션 실행

텔레메트리 수집을 시연하기 위해 Deno로 간단한 웹 서버를 작성해 보겠습니다. Deno는 자바스크립트와 타입스크립트를 위한 최신 런타임으로, 내장된 텔레메트리 지원 기능이 있어 이상적입니다.

 

  1. 서버에 Deno 설치:
curl -fsSL https://deno.land/x/install/install.sh | sh

 

  1. 샘플 웹 서버 작성:
import { serve } from "https://deno.land/std@0.128.0/http/server.ts";

serve((req) => {
  return new Response("안녕하세요, 세상!", { status: 200 });
});

console.log("http://localhost:8000에서 서버 실행 중");

 

  1. 서버 실행:
deno run --allow-net server.ts

 


 

7. 커스텀 메트릭과 트레이스 생성하기

OpenTelemetry를 사용하면 애플리케이션 코드 내에서 커스텀 메트릭과 트레이스를 정의할 수 있습니다.

 

예제: 요청 지연 시간 메트릭

Deno 앱에서 요청 지연 시간을 추적하는 메트릭을 생성할 수 있습니다:

import { MeterProvider } from "@opentelemetry/sdk-metrics-base";

const meter = new MeterProvider().getMeter("deno-app");
const requestLatency = meter.createValueRecorder("request_latency", {
  description: "요청 지연 시간을 추적합니다."
});

 

요청 처리기 내에서 데이터를 기록합니다:

const startTime = Date.now();
// 요청 처리...
const latency = Date.now() - startTime;
requestLatency.record(latency);

 


 

8. 데이터 시각화 및 이상 탐지

애플리케이션이 실행되고 텔레메트리 데이터가 수집되면 Grafana 대시보드에서 이를 시각화할 수 있습니다.

 

1단계: 대시보드 생성

  1. Grafana에서 대시보드 > 새 대시보드로 이동합니다.
  2. 메트릭, 로그, 트레이스를 위한 패널을 추가합니다.
  3. Prometheus 쿼리를 사용해 시간 기반 데이터를 시각화합니다.

 

2단계: 알림 설정

CPU 사용량 급증이나 빈번한 오류와 같은 중요한 메트릭에 대해 알림을 설정하세요. Grafana는 이메일, Slack 등으로 알림을 보낼 수 있습니다.

 


 

9. 보안 고려 사항 및 베스트 프랙티스

텔레메트리 시스템을 배포할 때 보안은 필수입니다. 다음 팁을 참고하세요:

  • SSH 접근 보안: 비밀번호 대신 키 기반 인증을 사용하세요.
  • 방화벽 구성: 사용하지 않는 포트를 차단하고 중요한 서비스에 대한 접근을 제한하세요.
  • TLS 암호화: HTTPS를 사용해 데이터를 암호화하세요.
  • 접근 제어: 사용자 역할에 따라 Grafana 대시보드 접근을 제한하세요.

 

Hostinger의 VPS 플랜은 DDoS 보호 및 방화벽 구성을 기본 제공해 추가적인 보안 레이어를 제공합니다.

 


 

10. 결론 및 추가 참고 자료

축하합니다! 이제 OpenTelemetry와 LGTM 스택을 활용해 강력한 모니터링 프레임워크를 구축했습니다. 메트릭, 로그, 트레이스를 수집하고 시각화함으로써 소프트웨어를 능동적으로 모니터링하고 이상을 탐지하며 이해관계자들에게 신뢰를 줄 수 있습니다.

더 깊이 배우고 싶다면 다음 자료를 참고하세요:

반응형