YJWANG

[Grafana-loki] loki / promtail Architecture 본문

60.Cloud

[Grafana-loki] loki / promtail Architecture

왕영주 2021. 5. 26. 12:53

References


Loki


Intro


Grafana Loki는 다른 logging system과 다르게 log의 label만 indexing 하고 message는 indexing하지 않으므로 더 가볍게 설계됐다.
loki로 전달된 log는 index(label) 와 chunk(message)로 나뉘어 저장된다.

원본 내용에 비해 요약된 내용도 많으므로 자세한 내용을 보시고 싶다면 Reference 링크를 참고 하시기 바랍니다.

Components


Distributor

client로부터 수신되는 stream을 핸들링하는 역할을한다. Log를 기록할 때 (wirte) 가장 먼저 거치게 되는 component이며 loki 설정에 따라 해당 stream을 검증해서 ingester로 전송한다.

Ingester

log data를 long-term storage에 저장하는 역할을 한다. (DynamoDB, S3, Cassandra, Filesystem, etc.)
또한 in-memory log read 시 log를 return 해주는 역할도 수행한다.

querier

log 조회 쿼리를 LogQL Lnaguage를 이용하여 핸들링 하는 역할을 수행한다.
ingester와 storage 사이에서 로그 패치를 진행한다.

querier는 storage에서 log 조회 전 Ingester 내에 in-memory log가 즉 caching된 log가 있는지 먼저 조회해본다.
또한 data 중복을 방지하기 위해 nanosecond로 중복이 되는 data는 중복 제거한다.

Read Path


  1. Read 요청 시 querier 에서 해당 요청을 수신한다.
  2. in-memory data 검증을 위해 querieringester를 조회한다.
  3. ingester에 cache된 data가 있는 경우 이를 querier에게 넘겨주고, data가 없는 경우
  4. querier는 storage에서 data를 조회한다.
  5. querier는 data를 nanosecond로 중복이 됐는지 확인 후 중복제거 진행하여 log를 제공한다.

Write Path


  1. Distributor에서 data를 수신한다. (저의 경우는 promtail에서 log를 전송합니다.)
  2. 수신된 data는 hash 처리 됩니다.
  3. distributor는 hash된 data를 ingester에게 전달합니다.
  4. ingester는 chunk를 생성하고 저장합니다.
  5. distributor는 data 저장 완료 여부를 요청 client에게 전달합니다.

Promtail


Intro


Log agent로 log data를 loki에게 전달하는 역할을 수행합니다.
log data전달 시 아래 세 기능을 차례대로 수행합니다.

  • Target 확인 (target log ex. /var/log/syslog)
  • log stream에 label 추가
  • loki instance로 전달

promtail은 local-filesystem에 있는 log와 systemd-journal log 두 종류를 수집할 수 있습니다.

반응형