LGTM은 Loki + Grafana + Tempo + Mimir를 의미합니다.
모두 Grafana Labs에서 개발한 오픈소스이며, 모니터링을 위한 어플리케이션입니다.
Grafana : 모니터링 데이터를 UI로 표시하기 위한 Visualization 어플리케이션입니다.
Loki, Tempo, Mimir 이외에도 많은 Datasource를 등록할 수 있으며, 사용자 관리, 대시보드 관리, 알람 관리 등 여러 기능이 구현되어 있습니다.
Mimir : Metric 데이터를 수집, 저장, 압축하는 TSDB입니다. prometheus에 고가용성을 추가하기 위해 개발됐으며, 데이터 장기저장, multi tenancy, object storage 등을 지원합니다.
Loki : Log 데이터를 수집, 저장, 압축하는 DB입니다. mimir와 거의 동일한 구조를 가지고 있으며, mimir와 마찬가지로 고가용성, 데이터 장기저장, multi tenantcy, object storage 등을 지원합니다.
Tempo : Trace 데이터를 수집, 저장, 압축하는 DB입니다. mimir, loki와 거의 동일한 구조이며 같은 특성을 가지고 있습니다.
LGTM을 사용하면 좋은 점
고가용성
기존에 널리 사용하던 prometheus와 같은 모니터링 어플리케이션은 고가용성을 지원하지 않았습니다. 따라서, 부하가 많이 발생하거나 시스템에 오류가 있는 경우 해당 기간 동안 데이터 수집, 저장, 조회 등이 되지 않는 문제가 있었습니다.
이러한 문제를 해결하기 위해 Thanos, Cortex가 개발되기 시작했고, Grafana labs에서 cortex 기반으로 자체 오픈소스를 develope한 것이 Mimir입니다.
Mimir의 특징은 데이터 수집, 저장, 압축, 조회하는 프로세스를 전부 분리하여 각각의 컴포넌트로 구현했다는 것입니다. 따라서 각 컴포넌트를 여러 개 띄워서 장애가 발생하더라도 커버할 수 있도록 했습니다. 또한, 어떤 프로세스에 부하가 발생하느냐에 따라 해당 프로세스와 관련된 컴포넌트를 scale in, out 할 수 있습니다.
Multi tenancy
Grafana, Mimir, Loki, Tempo 모두 multi tenancy를 지원합니다.
Grafana는 Organization이라는 개념을 기반으로 multi tenantcy를 지원한다고 생각하면 됩니다.
Mimir, Loki, Tempo는 모두 데이터를 수집, 저장, 압축, 조회하는 어플리케이션인데, 이러한 프로세스를 모두 Tenant별로 분리하여 진행합니다. Mimir, Loki, Tempo에 multi tenantcy를 적용하여 데이터를 핸들링 할 때는 Tenant ID를 header로 붙여서 해당 Tenant에게 데이터를 넣고, 조회하도록 합니다.
연계
LGTM은 모두 Grafana Labs에서 개발한 만큼 각각을 연계하는 것이 굉장히 쉽습니다.
먼저, Mimir, Loki, Tempo를 Grafana에 Datasource로 등록하면, 데이터 조회 뿐만 아니라 각각에 등록된 recording rule, alerting rule 등을 함께 불러오기 때문에 연동이 잘 된다고 볼 수 있습니다.
Mimir와 Loki의 연동에 대해서는, Loki에 등록한 Log 관련 Recording rule을 따라 Metric 데이터를 생성해서 Mimir에 보내줍니다. Loki에 Mimir의 url을 등록하면 multi tenancy까지도 함께 동작하기 때문에 어려운 설정 없이 원활하게 연계가 가능합니다.
Mimir와 Tempo의 연동은, Tempo에 저장되는 Trace 데이터를 기반으로 Trace metric을 생성하여 mimir에 전송할 수 있습니다. 위에서 설명한 Loki와 마찬가지로 Multi tenancy가 함께 동작하기 때문에 Tempo와 mimir도 어려운 설정 없이 원활하게 연계가 가능합니다.
Loki와 Tempo의 연동은 Grafana상에서 이루어집니다. Loki로부터 조회할 수 있는 log 데이터에 trace id가 포함되어 있다면, 해당 trace id를 통해 tempo로 조회할 수 있는 trace 데이터를 볼 수 있는 화면을 바로가기 링크로 생성해줍니다.
유사성
Mimir, Loki, Tempo는 아키텍쳐가 아주 유사합니다. 구성하고 있는 component도 비슷하기 때문에, 셋 중 하나만 공부하면 나머지 두 개에 대한 이해가 빨라집니다. (물론 다른 점이 분명히 존재하기 때문에 세 개를 다 쓴다면 셋 다 공부해야 하는 것은 맞습니다.)
장기 저장
Mimir, Loki, Tempo는 장기 저장을 지원합니다. object storage(s3, gcs, …)에 데이터를 장기 저장하여 일 단위, 월 단위가 아닌 연 단위로도 데이터를 조회할 수 있습니다.
데이터 조회 속도
Mimir의 경우, prometheus와 비교했을 때 데이터 조회 속도가 빠릅니다. mimir는 데이터를 조회하기 위한 컴포넌트가 따로 있고, 데이터 조회를 한 개체에 하는 것이 아니라 query scheduler, query frontend를 통해 여러 개의 query문으로 쪼개서 여러 개의 querier에 데이터 조회를 요청하기 때문에 prometheus와 비교해봤을 때 더 빠를 수 밖에 없습니다.
또한, memcache를 통해 데이터 조회 결과값을 cache하기 때문에 반복적으로 데이터를 조회하는 경우 조회 속도가 아주 빠릅니다.
'Monitoring' 카테고리의 다른 글
Prometheus에 argoCD metric 연동하기 (0) | 2023.09.04 |
---|---|
Metric Join (0) | 2023.09.04 |
Prometheus alertmanager (0) | 2023.08.31 |
Prometheus를 push 방식으로 쓰기 (0) | 2023.08.31 |
Grafana-agent for uploading PrometheusRule to mimir (0) | 2023.08.31 |