PLG Stack(Promtail-Loki-Grafana) Stack
Loki는 오픈 소스, 다중 테넌트 로그 집계 시스템입니다. ELK/EFK 스택과 유사하게 Grafana 및 Promtail과 함께 사용하여 로그를 수집하고 액세스할 수 있습니다. Kibana와 Elasticsearch를 사용하여 고급 데이터 분석 및 시각화를 수행할 수 있지만 Loki 기반 로깅 스택은 가볍고 작동하기 쉬운 데 중점을 둡니다.
LogQL ~ PromQL
사용 이점
loki는 loki-stack(single mode)과 loki-distributed(microservice mode) helm chart가 있음.
loki-stack helm chart v2.10.2 설치
$ helm repo add grafana https://grafana.github.io/helm-charts
$ helm repo update
$ helm search repo -l loki-stack
NAME CHART VERSION APP VERSION DESCRIPTION
grafana/loki-stack 2.10.2 v2.9.3 Loki: like Prometheus, but for logs.
...
$ helm search repo -l loki-distributed
NAME CHART VERSION APP VERSION DESCRIPTION
grafana/loki-distributed 0.79.3 2.9.8 Helm chart for Grafana Loki in microservices mode
...
$ helm pull --version 2.10.2 grafana/loki-stack
$ helm -n plg-stack upgrade -i --create-namespace -f override-values.yaml loki-stack ./loki-stack-2.10.2.tgz
$ kubectl -n plg-stack get secret loki-stack-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
air-gap 설치시 필요한 docker image
참고: helm 명령 예
# grafana repository 추가
$ helm repo add grafana https://grafana.github.io/helm-charts
# 사설 harbor에서 grafana repository 추가 예
$ helm repo add --ca-file /path/to/ca.crt --username user1 --password xxxx my-grafana https://private-harbor/chartrepo/grafana
$ helm repo update
$ helm search repo -l loki-stack
$ helm pull --version 2.10.2 grafana/loki-stack [--untar -d ./tmp]
$ mkdir output
$ helm template loki-stack ./loki-stack-2.10.2.tgz -f ./override-values.yaml --output-dir ./output
$ helm show values grafana/loki-stack
admin계정과 초기암호로 로그인한다.
Explore > Label filters > container > kube-apiserver 선택 후 우측 상단의 "Run query" 버튼을 클릭하면 하단에 log가 출력된다.
promtail의 configuration을 변경하여 다양한 log를 수집하게 할 수 있다. https://grafana.com/docs/loki/latest/send-data/promtail/configuration 참고.
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*log
- job_name: info
static_configs:
- targets:
- localhost
labels:
job: info_logs
__path__: /appdata/applog/**/*.log
pipeline_stages:
- multiline:
firstline: ''
max_wait_time: 1s
max_lines: 500
참고)