목록DevOps/Monitoring (3)
devops

우리 팀에선 Loki-Prometheus-Grafana 스택으로 서비스 로그와 메트릭을 Grafana에 통합하여 모니터링하고 있다. 특히, Loki는 Container의 stdout, stderr 로그를 생성된 파드 기준으로 Promtail을 통해 수집하는데, debug 로그는 컨테이너 내부에서. log 파일 형태로 저장한다. 서비스 로그 레벨은 3으로 설정되어 있어, 문제가 생길 때마다 컨테이너에 있는 debug 파일을 확인하는게 아주 번거롭다. 그렇다고 로그레벨 수정을 위해 실행 중인 서비스를 재실행할 수 도 없었기에, retention을 최대한 줄이더라도 debug 로그를 수집할 필요가 있었다. 이 로그 파일을 로깅하기 위해서 고민했던 방식은 크게 3가지였다. hostpath로 노드에 컨테이너 로그..

대부분 쿠버네티스 기반 모니터링에 특화된 Prometheus Operator를 활용하여 job을 추가한다. Prometheus Operator를 사용하면 일일이 kubectl patch를 통해 configmap에서 job을 추가하지 않고도 Service monitor 혹은 Pod monitor라는 CR로 쉽게 등록이 가능하다는 장점이 있다. 그러나 문제는 Service Monitor를 apply했는데도, Target에 등록조차 안되는 상황이 올때가 있다. kubectl get servicemonitor 를 확인하면 오브젝트가 정상적으로 apply된 상태임을 알 수 있다. 에러 메시지도 확인할 수 없는 상황. 사실 프로메테우스 오퍼레이터는 초기 배포 시 namespace와 label 키 값을 설렉터로 지정..

Prometheus는 Memory와 CPU같은 하드웨어 리소스를 모니터링하는데 사용되므로 프로세스의 이벤트를 로깅하는데 한계가 있다. ELK 스택으로 개별 모니터링 파이프라인을 구축하기도 하지만, Grafana로 로깅에 최저화된 Loki를 사용하면 이미 Prometheus + Grafana로 메트릭을 수집하던 파이프라인에서 효율적인 로깅까지도 가능해진다. Loki Loki는 2018년 Grafana Lab에서 시작한 프로젝트로 수평 확장과 높은 가용성 그리고 멀티테넌시라는 특징을 가지고 있으며 낮은 비용에 운영이 간단하다. Store the logs in Loki Loki는 로그 텍스트를 인덱싱하지않고, 스트림으로 그룹화, 라벨링으로 인덱싱한다. 이를 통해서 비용 절감과 함께 로그 라인 쿼리를 짧은 시간..