1 of 17

LGTM with O11y

OpenSource 모니터링 환경 구성

2 of 17

목차

  1. Opentelemetry란?
  2. LGTM이란?
  3. Log 구성
  4. Metric 구성
  5. Trace 구성

3 of 17

OpenTelemetry란?

관찰가능성(Observability) 프레임워크

OpenTelemetry는 2019년에 CNCF(Cloud Native Computing Foundation)에서 개발한 오픈 소스 관찰 가능성(Observability) 프레임워크입니다. �OpenTelemetry는 Google의 OpenCensus와 OpenTracing 프로젝트를 통합하여 탄생했으며, 분산 시스템에서 트레이스, 메트릭, 로그 데이터를 수집하고 이를 표준화하여 다양한 백엔드로 전송할 수 있는 기능을 제공합니다.

OpenTelemetry는 표준화된 API와 SDK를 통해 분산 시스템에서 애플리케이션의 성능 데이터를 일관되게 수집하며, 다양한 언어와 클라우드 환경에서 쉽게 사용할 수 있습니다. OpenTelemetry는 현재 가장 널리 사용되는 관찰 가능성 프레임워크 중 하나로, 트레이싱, 메트릭, 로그 데이터를 하나의 통합된 시스템에서 처리할 수 있습니다.

장점

  • 통합된 관찰 가능성: 트레이스, 메트릭, 로그 데이터를 하나의 SDK로 통합하여 수집할 수 있습니다.
  • 광범위한 언어 지원: Java, Python, Go 등 다양한 언어를 지원하여 쉽게 통합할 수 있습니다.
  • 표준화된 API: CNCF의 표준 API를 통해 다양한 클라우드와 애플리케이션에서 사용할 수 있습니다.
  • 백엔드 독립적: 수집된 데이터를 다양한 백엔드(Jaeger, Prometheus, Loki 등)로 전송할 수 있습니다.
  • 마이크로서비스 모니터링에 최적화: 복잡한 분산 시스템에서의 트랜잭션을 추적하고 성능 병목을 파악할 수 있습니다.

4 of 17

OpenTelemetry 아키텍처

OpenTelemetry (약자 OTel, O11y)는 Traces, Metrics, Logs 같은 �원격 분석 데이터를 계측, 생성, 수집, 내보내는 Observability framework

�하지만 OpenTelemetry는 Traces, Metrics, Logs 데이터를 저장하거나 쿼리할 수 있는 방법을 제공하지 않고, �상용(Datadog, New Relic, 기타 등등)서비스 또는 오픈 소스 백엔드(Jaeger, Prometheus, Grafana)로 �데이터를 전송하여 데이터를 저장

5 of 17

OpenTelemetry Operator란?

OpenTelemetry Operator는 �CR(Custom Resource을 이용해 아래의 리소스를 관리

  • OpenTelemetry Collector
  • auto-instrumentation

6 of 17

LGTM이란?

Grafana Labs에서 개발된 Monitoring Stack

L : Loki (로그 수집 저장소)

G : Grafana (시각화)

T : Tempo (분산 추적 저장소 , APM)

M : Mimr (시계열 메트릭 저장소)

7 of 17

LGTM을 사용하는 이유

  1. 특정 HTTP 요청 메트릭으로부터 �Trace와 Log를 같이 조회�
  2. 5xx가 발생한 Trace에 대해서 �Log를 같이 조회�
  3. Log를 조회하던 중 특정 Log와 �연관된 Trace를 같이 조회

8 of 17

Loki

로그를 저장하는 백엔드

Grafana Loki는 2018년 Grafana Labs에서 개발한 오픈 소스 분산 로그 시스템입니다. �Prometheus와 유사한 방식으로 작동하며, 로그 데이터를 인덱싱하지 않고 메타데이터만 인덱싱하는 방식으로 로그 데이터를 저장합니다. Loki는 이러한 접근 방식 덕분에 로그 저장 비용을 크게 절감할 수 있습니다. 메트릭 기반의 로그 수집으로 대규모 시스템에서 효율적으로 로그를 처리할 수 있습니다.

Loki는 Cortex의 분산 시스템 설계를 기반으로 개발되었으며, Prometheus와 유사한 구성을 제공하여 Prometheus 사용자들이 쉽게 사용할 수 있습니다. 또한, Loki는 수평 확장 및 고가용성을 지원하며, 로그 데이터를 Grafana에서 쉽게 시각화할 수 있도록 통합되어 있습니다.

장점

  • 저비용 로그 저장: 로그 데이터를 인덱싱하지 않아 저장 비용이 크게 절감됩니다.
  • Prometheus와 유사한 구성: Prometheus 스타일로 로그를 수집하고 처리하여 사용자 친화적입니다.
  • 수평 확장 및 고가용성: 대규모 로그 데이터를 처리할 수 있는 확장성을 제공하며, 고가용성을 보장합니다.
  • Grafana와 통합: Grafana와 긴밀하게 통합되어 로그 데이터를 시각화하고 분석할 수 있습니다.
  • 다양한 로그 소스 지원: Promtail, Fluentd, Fluent Bit 등을 통해 여러 소스에서 로그를 수집할 수 있습니다.

9 of 17

Tempo

추적(Trace)를 저장하는 백엔드

Grafana Tempo는 2020년에 Grafana Labs에서 개발한 오픈 소스 분산 트레이싱 시스템입니다. �Tempo는 Jaeger, Zipkin 등의 기존 트레이싱 도구와 호환되며, �트레이스 데이터를 저비용으로 장기 저장할 수 있도록 최적화되어 있으며, �특히 로그와 메트릭 시스템과의 통합에 강점을 가지고 있습니다.

Tempo는 CortexLoki에서 영감을 받아, 트레이스의 효율적 저장을 위해 �샤딩 및 복제를 활용하며, 대규모 시스템에서 확장성을 제공�또한, Grafana와의 통합을 통해 메트릭과 로그 데이터와 함께 트레이스 데이터를 분석

장점

  • 인덱스 최소화: 트레이스 데이터의 인덱스를 최소화하여 저장 비용을 절감합니다.
  • 대규모 시스템 지원: 수평 확장과 복제를 통해 대규모 시스템의 트레이스 데이터를 처리할 수 있습니다.
  • 다양한 트레이싱 도구와 호환: Jaeger, Zipkin과 호환되어 기존 트레이싱 인프라에서 쉽게 통합 가능합니다.
  • 저장 비용 절감: 메타데이터 인덱싱으로 트레이스 저장 비용이 낮습니다.
  • Grafana와 통합: 메트릭, 로그와 트레이스를 통합하여 시각화 및 분석할 수 있습니다.

10 of 17

Mimir

시계열(Time Series) 메트릭을 저장하는 백엔드

Grafana Mimir는 2022년 Grafana Labs에서 개발한 오픈 소스 소프트웨어 프로젝트로 고성능, 장기, 분산형 메트릭 저장 시스템이다.

Mimir는 Cortex의 기능과 GEM(Grafana Enterprise Metrics) 및 Grafana Cloud를 대규모로 실행하기 위해 개발한 기능을 모두 AGPLv3 라이선스에 따라 결합

장점

  • 100% Prometheus와 호환되어 기존 Prometheus 사용자가 쉽게 전환할 수 있다.
  • 분산 시스템으로 설계되어 고가용성을 지원하며, 수평 확장이 가능하다.
  • S3, GCS, Azure Blob와 같은 오브젝트 스토리지에 장기 데이터를 보관할 수 있다.
  • 샤딩 된 쿼리 엔진을 통해 쿼리를 병렬화하므로 빠른 쿼리가 가능하다.
  • Loki Distribute와 구성이 유사하여 관리 및 유지보수가 편하다.
  • AlertManager를 내장하고 있으며, Alert을 S3에 함께 적재 가능

11 of 17

Mimir 아키텍처

Mimir, Loki, Tempo의 아키텍쳐 자체는 거의 동일

  • Distribute mode로 배포했을시 동일한 컴포넌트로 배포
  • 가공하는 Data에만 차이가 있을뿐 같은 프로세스
  • 하지만 내부 configration에는 차이가 크다.

12 of 17

Mimir 아키텍처

Distributor

  • 클라이언트로부터 수신한 metrics 데이터 유효성을 검증 후 시리즈를 분할 및 복제하여 해시를 통해 Ingester에게 전달하는 역할을 담당한다.

13 of 17

Mimir 아키텍처

Ingester

  • Distributor에게 전달받은 데이터를 장기 저장소에 저장하고, 쿼리에 대한 데이터(시리즈 샘플)를 반환하는 역할을 담당한다.

14 of 17

Mimir 아키텍처

Store-gateway

  • 장기 저장소에 저장되어 있는 블록을 쿼리 하는 역할을 담당한다. 또한, 쿼리 속도를 가속화하기 위해 index, chunk, metadata 캐시를 지원한다.

15 of 17

Mimir 아키텍처

Querier

  • 요청된 데이터 중 최근 데이터는 ingester에서, 장기 데이터는 store-gateway를 통해 장기 저장소에서 찾아 Query Frontend로 전달한다.

16 of 17

Mimir 아키텍처

Query Frontend

  • 쿼리 요청이 오면 Result Cache에 캐시 된 데이터를 확인하고 없으면 Querier에 요청한다. 또한 병렬화를 위해 쿼리를 샤딩하여 메모리 내 대기열에 배치하고 요청자에게 데이터를 반환하는 역할을 담당한다.

17 of 17

Mimir 아키텍처

Compactor

  • 장기 저장소에서 저장된 블록을 읽어 성능을 높이고 사용량을 줄이기 위해 블록을 압축하고 블록의 수명주기를 관리한다.