개요
정말 어려웠다. 많은 포스팅을 읽어봤지만 이해되는것 같으면서도 설정하는 부분에서 막혀서 답답해 죽는줄 알았다.
Correlation
Grafana를 통해 설정하기 전 해당 내용을 이해하는 것이 우선이라고 생각했다.
- Metric <> Trace의 관계는 Exemplars를 통하여 생성된 Metric을 기반으로 구성하게 됩니다.
- Metric <> Log는 Time을 기반으로 생성된 Metric을 기반으로 구성하게 됩니다.
- Trace <> Log는 TraceID, SpanID을 기반으로 생성된 이벤트를 기반으로 구성하게 됩니다.
각 요소별로 서로 다른 역할을 가지고 있지만 상관관계를 찾아내어 구성하면 어떤 이벤트가 발생했을때 원인을 파악하는데 큰 이점을 가지고 있습니다.
Observability는 다음과 같이 세가지 요소를 달성하여 필요한 답변을 찾아낼 수 있도록 도와주는 역할을 합니다.
Log - Grafana
먼저 Log를 통해서 Trace(Tempo)와 연결지을 수 있도록 설정합니다.
연결짓기 위해 필요한 정보인 TraceID, SpanID를 Log에서 분석합니다.
Json 형식으로 로그를 전달받게 되며, 내부에 “traceid”, “spanid”도 포함되어 있어 해당 내용을 바탕으로 추출합니다.
{
"body": "10.244.1.8 - - [29/Jan/2025 13:01:54] \"GET /dashboard?user_id=2&order_id=102 HTTP/1.1\" 200 -",
"traceid": "6e2e7ef9ed625abc2382014ef654ac80",
"spanid": "70cb220639b32a93",
"severity": "INFO",
"flags": 1,
"attributes": {
"code.filepath": "/usr/local/lib/python3.9/site-packages/werkzeug/_internal.py",
"code.function": "_log",
"code.lineno": 97,
"otelServiceName": "flask-web",
"otelSpanID": "70cb220639b32a93",
"otelTraceID": "6e2e7ef9ed625abc2382014ef654ac80",
"otelTraceSampled": true
},
"resources": {
"k8s.container.name": "flask-web",
"k8s.namespace.name": "default",
"k8s.node.name": "kind-worker",
"k8s.pod.name": "flask-web",
"service.instance.id": "default.flask-web.flask-web",
"service.name": "flask-web",
"service.version": "web",
"telemetry.auto.version": "0.50b0",
"telemetry.sdk.language": "python",
"telemetry.sdk.name": "opentelemetry",
"telemetry.sdk.version": "1.29.0"
},
"instrumentation_scope": {
"name": "werkzeug"
}
}
Grafana Data sources - Loki에서 아래와 같이 설정을 진행합니다.
이후 Example Log Message를 통해서 정상적으로 정규표현식을 통해 “trace_id”, “span_id”가 추출되었다면 성공입니다!
Loki에서 로그를 살펴보면 Tempo로 연결될 수 있도록 링크가 자동으로 생성되었습니다.
Tempo - Grafana
Tempo에서 해당 Log와 연결짓기 위해서 “TraceID”와 trace span에 속성 중 “service.name”을 사용합니다.
Tags 부분을 설정해서 service.name을 app으로 변경하여 Loki Query로 질의할 수 있도록 설정합니다.
(app으로 질의할 수 있는 이유는 Alloy Collector의 Processor 부분에서 Log의 Label에 “app”을 추가했기 때문입니다!)
이후 Query 부분에는 앞서 설정한 Tags와 trace span 속성에 담겨있는 traceId를 사용하여 검색할 수 있도록 합니다.
설정을 완료하고 확인하면 다음과 같이 나타나게 됩니다!
trace를 클릭하여 “Logs for this span” 버튼이 나타나고 클릭하게 되면 해당 로그로 이동하게 됩니다.
후기
제대로 완성되지 않았지만 50% 정도는 완성된 것 같다..
아직 Metric 쪽은 건드리지도 못하고 있어서 하루빨리 공부하고 설정을 완료해봐야겠다 !
'DevOps > Observability' 카테고리의 다른 글
MSA 모니터링을 구축해보자 ! - 구성 (0) | 2025.01.29 |
---|---|
MSA 모니터링을 구축해보자 ! - 설치 (1) | 2025.01.29 |