관찰가능성의 핵심
Observability primer
핵심 관찰가능성 개념.
이 문서는 IMQA SDK의 이해를 돕기 위해 OpenTelemetry 공식문서를 번역하였습니다.
관찰가능성이란 무엇인가?
관찰가능성은 시스템의 내부 작동 방식을 알지 못한 채 시스템에 대한 질문을 할 수 있게 하여 외부에서 시스템을 이해할 수 있게 해줍니다. 더욱이, 새로운 문제, 즉 "알려지지 않은 미지수"를 쉽게 문제 해결하고 처리할 수 있게 해줍니다. 또한 "이런 일이 왜 일어나는가?"라는 질문에 답하는 데 도움이 됩니다.
시스템에 대한 이러한 질문을 하려면 애플리케이션이 적절하게 계측되어야 합니다. 즉, 애플리케이션 코드는 traces , metrics , logs 와 같은 신호를 방출해야 합니다 . 개발자가 문제를 해결하기 위해 더 많은 계측을 추가할 필요가 없을 때 애플리케이션은 적절하게 계측됩니다. 왜냐하면 개발자는 필요한 모든 정보를 가지고 있기 때문입니다.
OpenTelemetry 는 시스템을 관찰 가능하게 만드는 데 도움이 되는 애플리케이션 코드를 계측하는 메커니즘입니다.
신뢰성 및 측정 항목
원격 측정은 시스템에서 방출되는 데이터와 그 동작을 말합니다. 데이터는 Trace , 메트릭 및 로그 의 형태로 제공될 수 있습니다 .
신뢰성은 "서비스가 사용자가 기대하는 대로 작동하고 있는가?"라는 질문에 답합니다. 시스템은 항상 100% 가동될 수 있지만, 사용자가 쇼핑 카트에 검은색 신발 한 켤레를 추가하기 위해 "카트에 추가"를 클릭했을 때 시스템이 항상 검은색 신발을 추가하지 않는다면 시스템은 신뢰할 수 없을 수 있습니다 .
메트릭은 인프라 또는 애플리케이션에 대한 숫자 데이터를 일정 기간 동안 집계한 것입니다. 예를 들어 시스템 오류율, CPU 사용률, 주어진 서비스에 대한 요청율이 있습니다. 메트릭과 OpenTelemetry와의 관계에 대한 자세한 내용은 메트릭을 참조하세요 .
SLI 또는 서비스 수준 지표는 서비스 동작의 측정을 나타냅니다. 좋은 SLI는 사용자의 관점에서 서비스를 측정합니다. SLI의 예로는 웹 페이지가 로드되는 속도가 있습니다.
SLO 또는 서비스 수준 목표는 신뢰성이 조직/다른 팀에 전달되는 수단을 나타냅니다. 이는 하나 이상의 SLI를 비즈니스 가치에 첨부하여 달성됩니다.
분산 Trace 이해
분산 Trace을 사용하면 복잡한 분산 시스템을 통해 전파되는 요청을 관찰할 수 있습니다. 분산 Trace은 애플리케이션 또는 시스템 상태의 가시성을 개선하고 로컬에서 재현하기 어려운 동작을 디버깅할 수 있습니다. 일반적으로 비결정적 문제가 있거나 로컬에서 재현하기에는 너무 복잡한 분산 시스템에 필수적입니다.
분산 Trace을 이해하려면 로그, 스팬, Trace라는 각 구성 요소의 역할을 이해해야 합니다.
로그
로그 는 서비스나 다른 구성 요소에서 방출되는 타임스탬프가 찍힌 메시지입니다. Trace 과 달리 특정 사용자 요청이나 트랜잭션과 반드시 연관되는 것은 아닙니다. 소프트웨어의 거의 모든 곳에서 로그를 찾을 수 있습니다. 로그는 과거에 개발자와 운영자 모두가 시스템 동작을 이해하는 데 크게 의존했습니다.
샘플 로그:
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
로그는 일반적으로 컨텍스트 정보(예: 호출된 위치)가 부족하므로 코드 실행을 추적하기에 충분하지 않습니다.
Trace는 스팬의 일부로 포함되거나 추적 및 범위와 연관되는 경우 훨씬 더 유용해집니다.
로그에 대한 자세한 내용과 로그가 OpenTelemetry와 어떻게 관련이 있는지 알아보려면 로그를 참조하세요 .
스팬
span은 작업 또는 작업 단위를 나타냅니다. span은 요청이 수행하는 특정 작업을 추적하여 해당 작업이 실행되는 동안 발생한 일을 그림으로 표현합니다.
스팬에는 이름, 시간 관련 데이터, 구조화된 로그 메시지 및 기타 메타데이터(즉, 속성)가 포함되어 추적하는 작업에 대한 정보를 제공합니다.
스팬 속성
Span 속성은 Span에 첨부된 메타데이터입니다.
다음 표에는 span 속성의 예가 나와 있습니다.
| 키 | 값 |
|---|---|
http.request.method | "GET" |
network.protocol.version | "1.1" |
url.path | "/webshop/articles/4" |
url.query | "?s=1" |
server.address | "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"(클라이언트는 프록시를 통해 이동합니다) |
user_agent.original | "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0" |
스팬과 OpenTelemetry와의 관계에 대한 자세한 내용은 스팬을 참조하세요 .
분산된 Trace
분산 Trace 은 일반적으로 Trace 이라고도 하며 , 마이크로서비스 및 서버리스 애플리케이션과 같은 다중 서비스 아키텍처를 통해 전파되는 요청(애플리케이션 또는 최종 사용자가 만든 요청)의 경로를 기록합니다.
Trace는 하나 이상의 스팬으로 구성됩니다. 첫 번째 스팬은 루트 스팬을 나타냅니다. 각 루트 스팬은 시작부터 끝까지의 요청을 나타냅니다. 부모 아래의 스팬은 요청 중에 발생하는 일(또는 요청을 구성하는 단계)에 대한 보다 심층적인 맥락을 제공합니다.
Trace 없이 분산 시스템에서 성능 문제의 근본 원인을 찾는 것은 어려울 수 있습니다. Trace는 분산 시스템을 흐르는 요청 내에서 발생하는 일을 분석하여 디버깅과 분산 시스템 이해를 쉽게합니다.
많은 Observability 백엔드는 다음과 같은 폭포 다이어그램으로 Trace을 시각화합니다.
폭포 다이어그램은 루트 스팬과 자식 스팬 간의 부모-자식 관계를 보여줍니다. 스팬이 다른 스팬을 캡슐화하는 경우 이는 중첩 관계도 나타냅니다.
Trace에 대한 자세한 내용과 추적이 OpenTelemetry와 어떻게 관련이 있는지 알아보려면 Trace를 참조하세요 .