[Grafana] Loki: Promtail 에이전트 구성 (k8s)

이전 포스트
https://blog.naver.com/sssang97/223518846852

Grafana Loki 스택의 일반적인 사용 구조는 다음과 같다.

Promtail을 통해서 Pod들이 찍은 로그를 가로채고, 그걸 Loki에 저장하는 것이다.
그럼 저장된 로그는 Grafana를 통해서 조회한다.

여기서 로그 수집기를 꼭 Promtail을 써야만 하는건 아니다. 저게 공식적으로도 권장되고, 쓰기도 편해서 추천할 뿐이다.
그렇게 많이 쓰는것 같진 않지만 Grafana에서 직접 래핑해서 제공하는 Grafana Alloy이니, Grafana Agent니 하는 것도 있다. 평은 그리 좋지 않은 것 같다.

외에도 Logtstash, Fluentd, FluentBit 같은 것들도 있다. 그리고 어차피 로그를 잡아서 API로 쏘기만 하면 되는거기 때문에, 그냥 각각의 Pod 내에서 직접 쏘게끔 라이브러리를 써도 된다.




Promtail 구성하기

아무튼 이번에는 promtail을 기반으로 pod들의 로그를 자동으로 수집해주는 구성을 깔아보겠다.
어렵지 않다.

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update

helm 레포 가져오고

적당히 helm config 파일을 만들어준다.

vi promtail.yaml

config:
  clients:
    - url: http://loki-gateway.loki.svc.cluster.local/loki/api/v1/push
      tenant_id: 1

여기서 url은 실제 loki의 엔드포인트여야 한다.

그리고 띄우면 된다.

helm upgrade --values promtail.yaml --install promtail grafana/promtail -n loki


그러면 daemonset의 형태로 promtail 컨트롤러가 뜬다.
이거면 된다. 따로 설정할건 더 없다.

이 상태로 아무렇게나 로그 찍는 pod를 띄워보면

promtail이 알아서 로그를 읽어다가 Loki에 뿌려준다.
원리는 그냥, 각각의 컨테이너에서 /var/log/*.log에 찍히는 로그를 가로채서 보내는 것이다.


당연히 Grafana를 통해서도 조회할 수 있을 것이다.
컨테이너 이름, 앱 이름 같은 것까지 알아서 잘 말아서 넣어준다. job은 네임스페이스/pod명이 된다.



참조
https://grafana.com/docs/loki/latest/send-data/promtail/
https://grafana.com/docs/loki/latest/send-data/promtail/configuration/
https://velog.io/@roycewon/Promtail-Loki%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-Logback-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81
https://grafana.com/docs/loki/latest/send-data/