Grafana Cloud 사용기 - Loki 짱짱

Sunyeop Lee·2022년 1월 3일
0

이번에 개인적으로 로컬에 셋업해서 사용하고 있는 쿠버네티스 클러스터의 모니터링 스택을 재설치할 일이 생겼다. 기존에는 Elasticsearch + Fluent-bit + Kibana (EFK) 스택을 셋업해서 쓰고 있었는데, elasticsearch랑 kibana pod이 메모리를 많이 써서 맘에 들지 않던 중, 직장 선배를 통해 Grafana Cloud라는 서비스에 대해 알게 되었다.

무료 플랜이 있어 개인용으로 사용하기에도 좋고 운영 코스트가 줄어서 너무 맘에 들었다. 그리고 Grafana Cloud로 옮기는 김에 Loki를 사용해보았는데 promtail로 정말 간편하게 세팅되는 점과 LogQL이 강력하고 편리해서 정말 맘에 들었다.
앞으로 모니터링 스택을 선택할 일이 생기면 꼭 PLG 스택을 쓸거다.

사실 이 정도 내용만 적으려고 했는데 조금 허전해서 조그마한 팁을 적으려고 한다. Grafana Cloud의 Loki 페이지로 가면 다음 명령어를 이용해서 promtail을 설치하라는 가이드가 있는데, 이걸로 설치되는 scrape_configs로는 많이 부족하다.

curl -fsS https://raw.githubusercontent.com/grafana/loki/master/tools/promtail.sh | sh -s <Grafana User Id> <Your Grafana.com API Key> logs-prod-us-central1.grafana.net default | kubectl apply --namespace=default -f  -

kubectl apply하는 대신 cat으로 출력해서 파일로 저장한 후 열어보면 pipeline_stages: docker:로 시작하는 job이 엄청 많은데, 내 kubernetes cluster는 cri를 컨테이너 런타임으로 사용하므로 모두 cri로 바꿔야한다. 그리고 내 애플리케이션에서는 json logging을 하고 있어서 json, timestamp, labels 스테이지들까지 추가해야했다. 근데 이 job 모두에 이걸 적용하려면 엄청난 노가다가 아닐 수 없다. 사실, yaml anchor 기능을 이용하면 더 간편하게 표현할 수 있다. 위 shell script에서 <parser>로 templating 해둔 것도 사실은 아래 팁을 적용하면 더 간결할거다.

- pipeline_stages: &pipeline_stages
  - cri: {}
  - json:
    expresssions:
      funcName:
      level: levelName
      method:
      created:
  - timestamp:
    format: Unix
    source: created
  - labels:
    funcName:
    level:
    method:
- pipeline_stages: *pipeline_stages

yaml anchor 기능은 같은 내용을 반복하지 않아도 되게 해주는 갓기능으로, 위 yaml을 json으로 렌더링하면 두번째 pipeline_stages 내용이 첫번째 pipeline_stages와 같은 내용으로 채워진다. https://onlineyamltools.com/convert-yaml-to-json 에서 확인해보라.

LogQL도 엄청 좋다. Elasticsearch를 쓸 때보다 훨씬 간결하고 강력한 쿼리를 짤 수 있다. Grafana에서 elasticsearch 데이터를 시각화하려면 엄청 복잡한데 (참고) LogQL은 PromQL을 닮아서 정말 편하다 (참고). 꼭 한번 써보시길. 끝.

0개의 댓글