OpenTelemetry/번역

[Concepts] Observability Primer

justbagmeg 2024. 4. 14. 20:35
 

Observability Primer

Core observability concepts.

opentelemetry.io

What is Observability?

관찰 가능성(Obeservability)은 우리가 시스템의 내부 동작을 알지 못해도 그 시스템에 대한 질문을 통해 외부에서 시스템을 이해할 수 있게 해 준다. 더 나아가, 새롭고 예상치 못한 문제들(즉, 알려지지 않은 문제)에 대해 쉽게 해결하고,  "왜 이런 문제가 발생하는가?"라는 질문에 답할 수 있도록 도와준다.

 

시스템에 이러한 질문을 하기 위해서는, 애플리케이션이 적절하게 계측되어야 한다. 그렇기 때문에, 애플리케이션은 반드시 traces, metrics 그리고 logs와 같은 signal을 반드시 내보내야(발생시켜야) 한다. 애플리케이션은 개발자가 문제를 해결하기 위해 필요한 모든 정보를 가지고 있어서 더 이상의 추가적인 계측을 추가하지 않아도 된다면 적절하게 계측되었다고 할 수 있다.

 

OpenTelemetry는 시스템의 관측 가능성을 돕기 위해 애플리케이션 코드를 계측하는 방법이.

 

계측은 소프트웨어에 추가적인 코드나 도구를 이용해 소프트웨어의 성능, 동작, 상태 등을 모니터링하고 측정하는 과정을 말한다.

 

Reliability & Metrics

Telemetry는 시스템의 동작에 관한 데이터를 의미하며, 이 데이터는 트레이스, 매트릭, 로그의 형태로 나타날 수 있다.

Reliability는 "서비스는 유저가 기대하는대로 작동하고 있나?"라는 질문에 답을 준다. 시스템은 100% 항상 실행중일 수 있지만, 만약 유저가 검은색 바지를 쇼핑 카트에 추가하기 위해 '카트에 추가' 버튼을 눌렀을 때 시스템이 항상 검은색 바지를 추가하는 것이 아니라면, 그 시스템은 unreliable(신뢰할 수 없다) 하다고 할 수 있다. 

Metrics는 인프라나 애플리케이션에 대한 수치 데이터를 일정 기간 동안 집계한 것이다. 예를 들어, 시스템 에러 비율, CPU 사용량, 서비스에 대한 요청 비율 등이 있다. 메트릭과 OpenTelemetry가 어떻게 관련되는지에 자세한 내용은 Metrics에서 확인할 수 있다.

SLI, 또는 Service Level Indicator는 서비스의 동작의 동작을 측정하는 것을 나타낸다. 좋은 SLI 측정은 사용자 입장에서 서비스를 측정한다. 예를 들어, 웹 페이지 로드 속도가 SLI에 해당할 수 있다.

SLO, 또는 Service Level Objective는 조직이나 다른 팀에게 신뢰성을 전달하는 수단이다. 이는 하나 이상의 SLI를 비즈니스 가치에 연결함으로써 전달된다.

 

Understanding Distributed Tracing

분산 추적을 이해하기 위해 먼저 몇 가지 기본부터 살펴보자

Logs

로그는 서비스나 다른 컴포넌트가 생성하는 시간(timestamp)가 있는 메시지다. 하지만 추적(traces)와 달리  로그는 특정 사용자 요청이나 전송과 연관되어 있지 않다. 로그는 소프트웨어의 거의 모든 곳에서 찾아볼 수 있으며 과거에는 개발자와 운영자가 시스템 동작을 이해하는데 의존해왔다.

예시 로그:

I, [2021-02-23T13:26:23.505892 #22473]  INFO -- : [6459ffe1-ea53-4044-aaa3-bf902868f730] Started GET "/" for ::1 at 2021-02-23 13:26:23 -0800

불행히도, 로그는 일반적으로 호출된 위치와 같은 맥락적 정보가 부족해 코드의 실행을 추적하는데 크게 유용하지는 않다.

로그가 스팬의 일부로 포함되거나 트레이스 및 스팬관 연관될 때 훨씬 더 유용해진다. 

로그와 로그가 Otel과 어떻게 연관되는지에 대한 자세한 내용은 Logs 를 참조하자.

Spans

스팬은 작업 또는 연산의 단위를 나타낸다. 이는 요청이 만드는 특정 연산을 추적하며, 해당 연산이 실행되는 동안 무엇이 발생했는지에 대한 그림을 그린다.

스팬은 이름, 시간 관련 데이터, 구조화된 로그 메시지, 그리고 추적하는 연산에 대한 정보를 제공하는 다른 메타데이터  (Attribute)를 포함한다. 

Span attibutes

다음 테이블은 스팬 속성의 예시를 보여준다.

Key Value
http.request.method "GET"
network.protocol.version "1.1"
url.path "/webshop/articles/4"
url.query "?s=1"
server.adderss "example.com"
server.port 8080
url.scheme "https"
http.route "/webshop/articles/:article_id"
http.response.status_code 200
client.address "192.0.2.4"
client.socket.address "192.0.2.5" (the client goes through a proxy)
user_agent.original "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0)
Gecko/20100101 Firefox/72.0"

스팬과 스팬이 Otel과 어떻게 연관되어 처리되는지에 대한 자세한 내용은 Spans 를 참조하자.

Distributed Traces

분산 추적, 일반적으로 추적이라고 알려져 있는 것은, 요청(용응 프래그램 또는 사용자에 의해 만들어진)이 마이크로 서비스와 서버리스 애플리케이션과 같은 다중 서비스 아키텍처를 통해 전파될 때 거쳐간(취한) 경로를 추적한다.

추적 없이는 분산 서비스 내 성능 문제의 원인을 정확이 찾아내기 어렵다.

추적은 애플리케이션 또는 시스템의 상태를 더 잘 보여주고, 로컬에서 재현하기 어려운 동작을 디버깅할 수 있게 해준다. 비결정적(nondeterministic) 문제나 로컬에서 재현하기 너무 복잡한 문제에 있어 추적은 필수적이다.

추적은 분산 시스템 내에서 요청이 흐르는 동안 발생하는 일을 분해함으로써, 분산 시스템의 디버깅과 이해를 덜 어렵게 만든다.

추적은 하나 이상의 스팬으로 만들어진다. 첫번째 스팬은 루트 스팬을 나타낸다. 각 루트 스팬은 요청의 시작부터 끝까지를 나타낸다. 부모 스팬의 아래(underneath) 스팬은 요청 동안(또는 요청을 구성하는 단계) 발생하는 것에 대해 더 깊은 맥락을 제공한다. 

많은 관찰 가능성 백엔드는 추적을 다음과 같이 waterfall 다이어그램으로 시각화한다.

waterfall 다이어그램은 루트 스팬과 그 자식 스팬들 간의 보모-자식 관계를 보여준다. 한 스팬이 다른 스팬을 캡슐화할 때, 이는 중첩된 관계를 나타낸다. 

추적과 추적이 Otel과 어떻게 관련되는지에 대한 자세한 내용은 Traces 를 참고하자.

 

 

'OpenTelemetry > 번역' 카테고리의 다른 글

[Specs] - OTel 1.30.0 / Overview  (0) 2024.04.14
[Concepts] Instrumentation / Code-base  (0) 2024.04.14
[Demo] Architecture  (0) 2024.04.12
[OTLP Spec] 1.0.0  (1) 2024.01.03
[Specification] Common specification concepts  (1) 2023.11.23