99클럽 5일차 TIL: Loki
2024. 4. 8. 18:12ㆍ개발 공부
728x90
반응형
#1. 오늘의 학습 키워드
자바스프링에서 로깅을 데이터를 저장하고 조회하는 방법 - Loki
- 개발하면서 모니터링은 필요하게 된다. 모니터링 툴 없이 로그를 조회하는 방법은 코드 자체에 log 명령어를 작성해, 실행되는 서버의 터미널에서 이를 조회하는 것인데, 이는 서버 자체에 부하를 줄 뿐 더러, 휘발성이 강하고, 가독성이 부족하기 때문에 모니터링 툴의 도움을 받아 로깅을 관리할 수 있으면 좋다.
- 그라파나 같은 툴로 데이터를 시각화, 분석을 할 수 있다.
- 그리고 오늘 소개할 로키와 같은 툴로 로그 데이터를 수집하고 저장할 수 있다.
#2. 공부한 내용
- Loki
- 그라파나 상 로그 출력 및 가시화를 할 수 있게 하는 로그 데이터 수집 툴. 수집 된 데이터는 저장이 되어 휘발되지 않는다.
- 프로메테우스, 쿠버네티스 상 기본적으로 통합되어있으므로 단일 UI 내에서 로깅에 대한 측정, 추적, 그래프화 등 여러 작업을 할 수 있다.
- 다양한 클라이언트에서 호환이 되기에, 간단하다.
- Loki는 로그를 저장할 때, text로 색인을 하는 것이 아닌, 라벨로 색인이 된다.
- 이를 통해 성능이 향상되고, 쿼리 검색 시 간편하다는 이점을 챙긴다.
- Loki의 쿼리 언어 LogQL은, 라벨 등을 통해서 쌓인 로그들에 대해 편하게 검색할 수 있도록 도와준다.
- 그라파나 상 로그 출력 및 가시화를 할 수 있게 하는 로그 데이터 수집 툴. 수집 된 데이터는 저장이 되어 휘발되지 않는다.
- Promtail
- Loki에 로그를 저장하기 위해, Promtail을 사용하여 로그를 수집한다.
- Loki를 위해 특별히 만들어졌다.
- Prometheus와 동일한 서비스 검색 방식을 사용한다.
- 따라서 프로메테우스와 유사하게 로그에 대한 라벨링, 변환, 필터링 작업을 수행할 수 있다.
- Loki에 로그를 저장하기 위해, Promtail을 사용하여 로그를 수집한다.
- Loki 연결 작업
- 별도 서버에 Loki를 설치 한 후 ( 상황에 따라 로컬에다 설치하여도 무방) Grafana에서 연결
- Connections → Data Sources → Loki → 설치된 서버 Url 등록
- promtail config .yaml 파일을 배포 전 url을 정확히 입력한다.
- 설치된 서버 URL로.
- 별도 서버에 Loki를 설치 한 후 ( 상황에 따라 로컬에다 설치하여도 무방) Grafana에서 연결
- loki 서버로 로그 전송
- 서버 URL + 로그 post uri 로 로그 전송
- /loki/api/v1/push
- 서버에서 http 요청을 보낼 수 있게 도와주는 WebClient 라이브러리로 해당 url 로 API 요청하면 됨
- WebClient 에 대한 것은 추후 다루겠습니다.
- promtail config .yaml 파일에 scrape-configs 에 job을 추가할 수 있다.
- 이때 post method API request 이니, requestBody 에다 로그데이터를 전송하면 된다.
- body 에 내용은 yaml 파일 설정에 따라 다름.
- stream key 내 값은 label이 된다.
- value key 내 값은 로그 그 자체가 된다.
- body 에 내용은 yaml 파일 설정에 따라 다름.
- 서버 URL + 로그 post uri 로 로그 전송
- 참조:
#3. 오늘의 회고
- 저번에서 얘기한 것과 마찬가지로 로깅 역시 API 개발 초기에서 간과하기 쉬운 문제이다. 그러나 자신의 API가 어떤 성능을 내고 있고, 오류가 있는 지 없는 지, 에러 핸들링은 잘 하고 있는 지 판단을 하고 싶으면 로깅은 필수적이다.
- 이번 내용은 CI/CD 와도 밀접한 측면이 있는데, 사실 회사에서는 배포와 관련된 작업을 많이 하고 있진 않지만, 학교에서 배운 분산컴퓨팅 수업에서 쿠버네티스 및 Istio를 통한 배포 경험이 있기에, 기회가 있다면 개인 프로젝트에 적용을 해볼 생각이다.
- DevOps 구축
- jenkins 파이프라인 구축
- grafana 모니터링
- 등등.. 앞으로 더 할 수 있는 건 아주 많다~!
728x90
반응형
'개발 공부' 카테고리의 다른 글
99클럽 7일차 TIL: Collectors.toList() vs. toList() (0) | 2024.04.10 |
---|---|
99클럽 6일차 TIL: Unix Time (nanoseconds) (0) | 2024.04.09 |
99클럽 4일차 TIL: Collectors.toMap() (2) | 2024.04.07 |
99클럽 3일차 TIL: JPA vs. MyBatis (2) | 2024.04.06 |
99클럽 1일차 TIL: 쿼리 성능 (2) | 2024.04.04 |