일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- golang
- Kubernetes
- Octavia
- terraform
- ubuntu
- awx
- Docker
- kolla-ansible
- ceph-ansible
- libvirt
- i3
- grafana-loki
- nfs-provisioner
- ceph
- cloud-init
- Linux
- archlinux
- OpenStack
- yum
- cephadm
- pacman
- kolla
- k8s
- Ansible
- KVM
- Arch
- Kubeflow
- repository
- port open
- HTML
- Today
- Total
YJWANG
[Grafana-loki] loki / promtail Architecture 본문
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
- Read 요청 시
querier
에서 해당 요청을 수신한다. - in-memory data 검증을 위해
querier
는ingester
를 조회한다. ingester
에 cache된 data가 있는 경우 이를querier
에게 넘겨주고, data가 없는 경우querier
는 storage에서 data를 조회한다.querier
는 data를 nanosecond로 중복이 됐는지 확인 후 중복제거 진행하여 log를 제공한다.
Write Path
Distributor
에서 data를 수신한다. (저의 경우는 promtail에서 log를 전송합니다.)- 수신된 data는 hash 처리 됩니다.
distributor
는 hash된 data를ingester
에게 전달합니다.ingester
는 chunk를 생성하고 저장합니다.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 두 종류를 수집할 수 있습니다.