[Grafana Tempo] Event와 오류 처리

Span은 Trace 기록, Metric에는 실행 관련 통계 정보들을 저장한다.
그러면 오류에 대한 핸들링은 어떻게 할까?
Span에 에러 필드를 추가해서 메세지를 구겨넣을 수도 있지만, 그리 일반적인 방법은 아니다. 에러가 여러개라면 어떻게 하겠는가?

Span 아래에는 다른 자식 Span을 구겨넣을 수도 있지만, 그렇게 쪼개기는 애매할 때 집어넣는 작은 단위가 바로 Event다. Event는 Span의 하위 속성 같은 개념이라 Span에 완전히 종속된다.

집어넣는건 이런 식으로 집어넣을 수 있다. 하나의 Event에는 여러개의 key:value 쌍들이 들어갈 수 있다.

저러고 돌려보면

이런 식으로 하위 속성이 추가되는 것을 볼 수 있다.

이 Event는 사실 다른 용도보다는, 오류 단위를 Span에 기록할때 주로 사용된다.

에러 타입을 하나 정의해서 생성하고, span에 존재하는 RecordError에 넘겨봤다.


이 함수는 사실 그냥 에러의 속성값들을 Event로 우겨넣는게 다다.

근데 지금 예제로 사용한 Go는 stacktrace 관련된 기능이 부족해서 필수 사양인 stacktrace 필드가 빠졌다.
이럴땐 직접 추가해서 쓰면 된다.

이제 모범적인 오류 정보가 됐다.




필터

event에 대한 값도 TraceQL에서 필터의 조건 등으로 사용될 수 있다.
그냥 이런 식으로 필터를 걸면 되는 것이다.

그럼 해당 event 값을 가지고 있는 Span을 긁어온다.

기본적인 원리는 이 정도다.



참조
https://grafana.com/blog/2024/08/15/all-about-span-events-what-they-are-and-how-to-query-them/